@rubric-protocol/sdk
Advanced tools
| export interface SpendMeta { | ||
| intent?: string; | ||
| payee?: string; | ||
| amount?: string; | ||
| currency?: string; | ||
| toolName?: string; | ||
| } | ||
| export interface SpendAttestationContext { | ||
| decisionAttestationId: string; | ||
| paramsHash: string; | ||
| } | ||
| export interface AttestBeforeSpendOptions { | ||
| apiKey: string; | ||
| baseUrl?: string; | ||
| agentId: string; | ||
| mandateRef?: string; | ||
| rail?: string; | ||
| mode?: 'enforce' | 'log'; | ||
| attestReceipt?: boolean; | ||
| } | ||
| export interface AttestedSpendResult<T> { | ||
| result: T; | ||
| /** Canonical decision record. RETAIN THIS — the server stores only a | ||
| * commitment hash. Without this record the anchor is unverifiable. */ | ||
| decisionRecord: Record<string, unknown>; | ||
| decisionCanonical: string; | ||
| /** Commitment material — required to verify the anchor offline. */ | ||
| decisionPayloadKey?: string; | ||
| decisionCommitment?: string; | ||
| receiptRecord?: Record<string, unknown>; | ||
| receiptCanonical?: string; | ||
| decisionAttestationId: string; | ||
| receiptAttestationId?: string; | ||
| attestationError?: string; | ||
| } | ||
| export interface AttestAck { | ||
| id: string; | ||
| payloadKey?: string; | ||
| payloadCommitment?: string; | ||
| } | ||
| /** | ||
| * Recompute the server's salted commitment from the retained record. | ||
| * salt = sha256(payloadKey + ':rubric-commit-v1') | ||
| * commitment = sha256(salt + canonicalize(record)) | ||
| * Requires the payloadKey returned at attest time. Disclosing the derived | ||
| * salt opens the commitment without revealing the decryption key. | ||
| */ | ||
| export declare function verifySpendCommitment(record: unknown, payloadKey: string, expectedCommitment: string): boolean; | ||
| export declare class AttestationGateError extends Error { | ||
| constructor(msg: string); | ||
| } | ||
| export declare function attestBeforeSpend<TParams, TResult>(paymentFn: (params: TParams, ctx: SpendAttestationContext) => Promise<TResult>, opts: AttestBeforeSpendOptions): (params: TParams, meta?: SpendMeta) => Promise<AttestedSpendResult<TResult>>; | ||
| //# sourceMappingURL=attest-before-spend.d.ts.map |
| {"version":3,"file":"attest-before-spend.d.ts","sourceRoot":"","sources":["../attest-before-spend.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC;IACV;2EACuE;IACvE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAIT;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,GAAG,EAAE,MAAM;CAIxB;AAsDD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAChD,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,OAAO,CAAC,EAC9E,IAAI,EAAE,wBAAwB,GAC7B,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAiF9E"} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.AttestationGateError = void 0; | ||
| exports.verifySpendCommitment = verifySpendCommitment; | ||
| exports.attestBeforeSpend = attestBeforeSpend; | ||
| /** | ||
| * attestBeforeSpend - Agent Payment Attestation middleware (rubric/apa-v1) | ||
| * Wraps a payment tool call: attest decision record (A2) -> execute payment | ||
| * with attestation ID in context -> attest settlement receipt (A3). | ||
| */ | ||
| const crypto_1 = require("crypto"); | ||
| const canonical_1 = require("./canonical"); | ||
| /** Drop undefined-valued keys so records are RFC 8785-safe by construction. */ | ||
| function pruneUndefined(o) { | ||
| const out = {}; | ||
| for (const [k, v] of Object.entries(o)) | ||
| if (v !== undefined) | ||
| out[k] = v; | ||
| return out; | ||
| } | ||
| /** | ||
| * Recompute the server's salted commitment from the retained record. | ||
| * salt = sha256(payloadKey + ':rubric-commit-v1') | ||
| * commitment = sha256(salt + canonicalize(record)) | ||
| * Requires the payloadKey returned at attest time. Disclosing the derived | ||
| * salt opens the commitment without revealing the decryption key. | ||
| */ | ||
| function verifySpendCommitment(record, payloadKey, expectedCommitment) { | ||
| const salt = (0, crypto_1.createHash)('sha256').update(payloadKey + ':rubric-commit-v1').digest('hex'); | ||
| const computed = (0, crypto_1.createHash)('sha256').update(salt + (0, canonical_1.canonicalize)(record)).digest('hex'); | ||
| return computed === expectedCommitment; | ||
| } | ||
| class AttestationGateError extends Error { | ||
| constructor(msg) { | ||
| super(msg); | ||
| this.name = 'AttestationGateError'; | ||
| } | ||
| } | ||
| exports.AttestationGateError = AttestationGateError; | ||
| function sha3(input) { | ||
| return (0, crypto_1.createHash)('sha3-256').update(input).digest('hex'); | ||
| } | ||
| async function postAttestation(opts, decision, leafType, record) { | ||
| const base = (opts.baseUrl ?? 'https://rubric-protocol.com/verify').replace(/\/+$/, ''); | ||
| const res = await fetch(base + '/v1/tiered-attest', { | ||
| method: 'POST', | ||
| headers: { 'x-api-key': opts.apiKey, 'Content-Type': 'application/json' }, | ||
| body: JSON.stringify({ | ||
| agentId: opts.agentId, | ||
| sourceId: opts.mandateRef ?? opts.agentId, | ||
| decision, | ||
| data: record, | ||
| output: (0, canonical_1.canonicalize)(record), | ||
| leafType, | ||
| metadata: scalars(record), | ||
| }), | ||
| signal: AbortSignal.timeout(15000), | ||
| }); | ||
| const text = await res.text(); | ||
| if (!res.ok) { | ||
| throw new AttestationGateError('tiered-attest ' + res.status + ': ' + text.slice(0, 200)); | ||
| } | ||
| let body = {}; | ||
| try { | ||
| body = JSON.parse(text); | ||
| } | ||
| catch { | ||
| throw new AttestationGateError('unparseable attest response'); | ||
| } | ||
| const id = body.attestationId ?? body.id ?? body.data?.attestationId; | ||
| if (!id) | ||
| throw new AttestationGateError('no server attestation ID in response'); | ||
| return { | ||
| id: String(id), | ||
| payloadKey: body.payloadKey ?? body.data?.payloadKey, | ||
| payloadCommitment: body.payloadCommitment ?? body.data?.payloadCommitment, | ||
| }; | ||
| } | ||
| function scalars(rec) { | ||
| const out = {}; | ||
| for (const [k, v] of Object.entries(rec)) { | ||
| if (v !== undefined && v !== null) | ||
| out[k] = String(v); | ||
| } | ||
| return out; | ||
| } | ||
| function attestBeforeSpend(paymentFn, opts) { | ||
| const mode = opts.mode ?? 'enforce'; | ||
| return async (params, meta = {}) => { | ||
| const paramsHash = sha3((0, canonical_1.canonicalize)(params)); | ||
| const record = { | ||
| schema: 'rubric/apa-v1', | ||
| agentId: opts.agentId, | ||
| mandateRef: opts.mandateRef, | ||
| intent: meta.intent ?? 'unspecified', | ||
| rail: opts.rail ?? 'unspecified', | ||
| payee: meta.payee, | ||
| amount: meta.amount, | ||
| currency: meta.currency, | ||
| toolName: meta.toolName, | ||
| paramsHash, | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
| let decisionAttestationId = ''; | ||
| let attestationError; | ||
| let decisionPayloadKey; | ||
| let decisionCommitment; | ||
| try { | ||
| const prunedRecord = pruneUndefined(record); | ||
| const ack = await postAttestation(opts, meta.intent ?? 'agent_spend', 'AGENT_SPEND_DECISION', prunedRecord); | ||
| decisionAttestationId = ack.id; | ||
| decisionPayloadKey = ack.payloadKey; | ||
| decisionCommitment = ack.payloadCommitment; | ||
| } | ||
| catch (err) { | ||
| const msg = err instanceof Error ? err.message : String(err); | ||
| if (mode === 'enforce') { | ||
| throw new AttestationGateError(`spend blocked, decision attestation failed: ${msg}`); | ||
| } | ||
| attestationError = msg; | ||
| decisionAttestationId = 'unattested:' + paramsHash.slice(0, 16); | ||
| } | ||
| const ctx = { decisionAttestationId, paramsHash }; | ||
| let result; | ||
| let status = 'failed'; | ||
| try { | ||
| result = await paymentFn(params, ctx); | ||
| status = 'settled'; | ||
| } | ||
| catch (err) { | ||
| if (opts.attestReceipt && !decisionAttestationId.startsWith('unattested:')) { | ||
| await attestReceiptSafe(opts, decisionAttestationId, 'failed', undefined); | ||
| } | ||
| throw err; | ||
| } | ||
| let receiptAttestationId; | ||
| let lastReceipt; | ||
| if (opts.attestReceipt && !decisionAttestationId.startsWith('unattested:')) { | ||
| const r = result; | ||
| const txRef = r?.txHash ?? r?.transactionHash ?? r?.txRef; | ||
| const rr = await attestReceiptSafe(opts, decisionAttestationId, status, txRef); | ||
| receiptAttestationId = rr?.id; | ||
| lastReceipt = rr?.record; | ||
| } | ||
| return { | ||
| result, | ||
| decisionRecord: pruneUndefined(record), | ||
| decisionCanonical: (0, canonical_1.canonicalize)(pruneUndefined(record)), | ||
| decisionPayloadKey, | ||
| decisionCommitment, | ||
| receiptRecord: lastReceipt, | ||
| receiptCanonical: lastReceipt ? (0, canonical_1.canonicalize)(lastReceipt) : undefined, | ||
| decisionAttestationId, | ||
| receiptAttestationId, | ||
| attestationError, | ||
| }; | ||
| }; | ||
| } | ||
| async function attestReceiptSafe(opts, decisionAttestationId, status, txRef) { | ||
| const receipt = { | ||
| schema: 'rubric/apa-receipt-v1', | ||
| decisionAttestationId, | ||
| txRef, | ||
| status, | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
| try { | ||
| const ack2 = await postAttestation(opts, 'agent_spend_receipt', 'AGENT_SPEND_RECEIPT', pruneUndefined(receipt)); | ||
| return { id: ack2.id, record: pruneUndefined(receipt) }; | ||
| } | ||
| catch { | ||
| return undefined; | ||
| } | ||
| } | ||
| //# sourceMappingURL=attest-before-spend.js.map |
| {"version":3,"file":"attest-before-spend.js","sourceRoot":"","sources":["../attest-before-spend.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Deterministic JSON canonicalization per RFC 8785 (JSON Canonicalization Scheme), | ||
| * with the clarifications mandated by Rubric Verify Spec v1.0.0-rc1 §6.1. | ||
| * | ||
| * Ported from @rubric/verify v1.0.0-rc.1 src/canonical.ts (Phase 1 of the | ||
| * Federation v1 Refactor). Dependency-free. | ||
| * | ||
| * RFC 8785 / Rubric Verify Spec §6.1 rules: | ||
| * 1. Object keys MUST be sorted lexicographically (UTF-16 code unit order). | ||
| * 2. There MUST be no whitespace between tokens. | ||
| * 3. Numbers MUST be serialized using the shortest representation that | ||
| * round-trips through IEEE 754 double-precision parsing. | ||
| * 4. Strings MUST be UTF-8 encoded. | ||
| * 5. Boolean values MUST be `true` or `false` (lowercase). | ||
| * 6. The null value MUST be `null` (lowercase). | ||
| * 7. Arrays MUST preserve their input order. | ||
| * 8. The output MUST be UTF-8 encoded; the canonical message bytes are the | ||
| * UTF-8 encoding of the canonicalized string. | ||
| */ | ||
| export declare class CanonicalInputError extends Error { | ||
| constructor(message: string); | ||
| } | ||
| /** | ||
| * Canonicalize a JSON-compatible value to its RFC 8785 form (UTF-8 string). | ||
| */ | ||
| export declare function canonicalize(value: unknown): string; | ||
| /** | ||
| * UTF-8-encode the canonicalization of `value`. | ||
| * | ||
| * Equivalent to `new TextEncoder().encode(canonicalize(value))`. | ||
| */ | ||
| export declare function canonicalizeBytes(value: unknown): Uint8Array; | ||
| /** | ||
| * SHA-256 hex digest of the canonicalization of `value`. | ||
| * | ||
| * Bare lowercase hex, no algorithm prefix, no `0x` prefix. Matches the | ||
| * `payload_hash` format mandated by Rubric Verify Spec §6.3. | ||
| */ | ||
| export declare function canonicalSha256Hex(value: unknown): string; | ||
| //# sourceMappingURL=canonical.d.ts.map |
| {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGzD"} |
| "use strict"; | ||
| /** | ||
| * Deterministic JSON canonicalization per RFC 8785 (JSON Canonicalization Scheme), | ||
| * with the clarifications mandated by Rubric Verify Spec v1.0.0-rc1 §6.1. | ||
| * | ||
| * Ported from @rubric/verify v1.0.0-rc.1 src/canonical.ts (Phase 1 of the | ||
| * Federation v1 Refactor). Dependency-free. | ||
| * | ||
| * RFC 8785 / Rubric Verify Spec §6.1 rules: | ||
| * 1. Object keys MUST be sorted lexicographically (UTF-16 code unit order). | ||
| * 2. There MUST be no whitespace between tokens. | ||
| * 3. Numbers MUST be serialized using the shortest representation that | ||
| * round-trips through IEEE 754 double-precision parsing. | ||
| * 4. Strings MUST be UTF-8 encoded. | ||
| * 5. Boolean values MUST be `true` or `false` (lowercase). | ||
| * 6. The null value MUST be `null` (lowercase). | ||
| * 7. Arrays MUST preserve their input order. | ||
| * 8. The output MUST be UTF-8 encoded; the canonical message bytes are the | ||
| * UTF-8 encoding of the canonicalized string. | ||
| */ | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.CanonicalInputError = void 0; | ||
| exports.canonicalize = canonicalize; | ||
| exports.canonicalizeBytes = canonicalizeBytes; | ||
| exports.canonicalSha256Hex = canonicalSha256Hex; | ||
| const crypto_1 = require("crypto"); | ||
| class CanonicalInputError extends Error { | ||
| constructor(message) { | ||
| super(message); | ||
| this.name = 'CanonicalInputError'; | ||
| } | ||
| } | ||
| exports.CanonicalInputError = CanonicalInputError; | ||
| /** | ||
| * Canonicalize a JSON-compatible value to its RFC 8785 form (UTF-8 string). | ||
| */ | ||
| function canonicalize(value) { | ||
| return serialize(value); | ||
| } | ||
| /** | ||
| * UTF-8-encode the canonicalization of `value`. | ||
| * | ||
| * Equivalent to `new TextEncoder().encode(canonicalize(value))`. | ||
| */ | ||
| function canonicalizeBytes(value) { | ||
| return new TextEncoder().encode(canonicalize(value)); | ||
| } | ||
| /** | ||
| * SHA-256 hex digest of the canonicalization of `value`. | ||
| * | ||
| * Bare lowercase hex, no algorithm prefix, no `0x` prefix. Matches the | ||
| * `payload_hash` format mandated by Rubric Verify Spec §6.3. | ||
| */ | ||
| function canonicalSha256Hex(value) { | ||
| const bytes = canonicalizeBytes(value); | ||
| return (0, crypto_1.createHash)('sha256').update(bytes).digest('hex'); | ||
| } | ||
| function serialize(value) { | ||
| if (value === null) | ||
| return 'null'; | ||
| if (value === undefined) { | ||
| throw new CanonicalInputError('cannot canonicalize undefined; use null instead'); | ||
| } | ||
| switch (typeof value) { | ||
| case 'boolean': | ||
| return value ? 'true' : 'false'; | ||
| case 'number': | ||
| return serializeNumber(value); | ||
| case 'string': | ||
| return serializeString(value); | ||
| case 'object': | ||
| if (Array.isArray(value)) | ||
| return serializeArray(value); | ||
| return serializeObject(value); | ||
| case 'bigint': | ||
| throw new CanonicalInputError('bigint is not representable in canonical JSON'); | ||
| case 'function': | ||
| case 'symbol': | ||
| throw new CanonicalInputError(`unsupported value type: ${typeof value}`); | ||
| default: | ||
| throw new CanonicalInputError(`unknown value type: ${typeof value}`); | ||
| } | ||
| } | ||
| function serializeArray(arr) { | ||
| const parts = []; | ||
| for (const item of arr) { | ||
| parts.push(serialize(item)); | ||
| } | ||
| return '[' + parts.join(',') + ']'; | ||
| } | ||
| function serializeObject(obj) { | ||
| // RFC 8785 §3.2.3: keys sorted by UTF-16 code unit order. | ||
| // Default JS String comparison is UTF-16 code-unit ordering on BMP chars | ||
| // and surrogate pairs alike. | ||
| const keys = Object.keys(obj).sort(); | ||
| const parts = []; | ||
| for (const key of keys) { | ||
| const v = obj[key]; | ||
| if (v === undefined) | ||
| continue; // RFC 8785: undefined-valued properties are omitted. | ||
| parts.push(serializeString(key) + ':' + serialize(v)); | ||
| } | ||
| return '{' + parts.join(',') + '}'; | ||
| } | ||
| /** | ||
| * Serialize a string per RFC 8785 §3.2.2.2 / RFC 8259 §7. | ||
| * | ||
| * Required escapes: " \ U+0000..U+001F. | ||
| * Non-required characters (printable ASCII, non-ASCII Unicode) are emitted as-is. | ||
| */ | ||
| function serializeString(s) { | ||
| let out = '"'; | ||
| for (let i = 0; i < s.length; i++) { | ||
| const c = s.charCodeAt(i); | ||
| if (c < 0x20) { | ||
| switch (c) { | ||
| case 0x08: | ||
| out += '\\b'; | ||
| break; | ||
| case 0x09: | ||
| out += '\\t'; | ||
| break; | ||
| case 0x0a: | ||
| out += '\\n'; | ||
| break; | ||
| case 0x0c: | ||
| out += '\\f'; | ||
| break; | ||
| case 0x0d: | ||
| out += '\\r'; | ||
| break; | ||
| default: | ||
| out += '\\u' + c.toString(16).padStart(4, '0'); | ||
| } | ||
| } | ||
| else if (c === 0x22) { | ||
| out += '\\"'; | ||
| } | ||
| else if (c === 0x5c) { | ||
| out += '\\\\'; | ||
| } | ||
| else { | ||
| out += s[i]; | ||
| } | ||
| } | ||
| out += '"'; | ||
| return out; | ||
| } | ||
| /** | ||
| * Serialize a number per RFC 8785 §3.2.2.3 — shortest round-tripping form. | ||
| * NaN and ±Infinity are not representable in JSON; we throw. | ||
| */ | ||
| function serializeNumber(n) { | ||
| if (!Number.isFinite(n)) { | ||
| throw new CanonicalInputError(`non-finite number is not representable in JSON: ${n}`); | ||
| } | ||
| if (Object.is(n, -0)) | ||
| return '0'; | ||
| return String(n); | ||
| } | ||
| //# sourceMappingURL=canonical.js.map |
| {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../canonical.ts"],"names":[],"mappings":"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"} |
+2
-0
@@ -15,2 +15,4 @@ export { RubricClient, createRubricClient } from './rubric-client'; | ||
| export type { RubricOpenAIConfig } from './plugins/openai-plugin'; | ||
| export { attestBeforeSpend, verifySpendCommitment, AttestationGateError } from './attest-before-spend'; | ||
| export type { SpendMeta, SpendAttestationContext, AttestBeforeSpendOptions, AttestedSpendResult } from './attest-before-spend'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACtG,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7H,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACtG,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7H,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACvG,YAAY,EAAE,SAAS,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"} |
+5
-1
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.RubricOpenAIClient = exports.withRubric = exports.RubricLangChainHandler = exports.BackgroundQueue = exports.loadKeyPair = exports.saveKeyPair = exports.loadOrCreateKeyPair = exports.verifySignedPayload = exports.signPayload = exports.generateKeyPair = exports.resetUpgradeManager = exports.getUpgradeManager = exports.ProofUpgradeManager = exports.STAGE_METADATA = exports.LiveProof = exports.createRubricClient = exports.RubricClient = void 0; | ||
| exports.AttestationGateError = exports.verifySpendCommitment = exports.attestBeforeSpend = exports.RubricOpenAIClient = exports.withRubric = exports.RubricLangChainHandler = exports.BackgroundQueue = exports.loadKeyPair = exports.saveKeyPair = exports.loadOrCreateKeyPair = exports.verifySignedPayload = exports.signPayload = exports.generateKeyPair = exports.resetUpgradeManager = exports.getUpgradeManager = exports.ProofUpgradeManager = exports.STAGE_METADATA = exports.LiveProof = exports.createRubricClient = exports.RubricClient = void 0; | ||
| var rubric_client_1 = require("./rubric-client"); | ||
@@ -28,2 +28,6 @@ Object.defineProperty(exports, "RubricClient", { enumerable: true, get: function () { return rubric_client_1.RubricClient; } }); | ||
| Object.defineProperty(exports, "RubricOpenAIClient", { enumerable: true, get: function () { return openai_plugin_1.RubricOpenAIClient; } }); | ||
| var attest_before_spend_1 = require("./attest-before-spend"); | ||
| Object.defineProperty(exports, "attestBeforeSpend", { enumerable: true, get: function () { return attest_before_spend_1.attestBeforeSpend; } }); | ||
| Object.defineProperty(exports, "verifySpendCommitment", { enumerable: true, get: function () { return attest_before_spend_1.verifySpendCommitment; } }); | ||
| Object.defineProperty(exports, "AttestationGateError", { enumerable: true, get: function () { return attest_before_spend_1.AttestationGateError; } }); | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,iDAAmE;AAA1D,6GAAA,YAAY,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAEzC,6CAA0D;AAAjD,wGAAA,SAAS,OAAA;AAAE,6GAAA,cAAc,OAAA;AAElC,iEAAsG;AAA7F,4HAAA,mBAAmB,OAAA;AAAE,0HAAA,iBAAiB,OAAA;AAAE,4HAAA,mBAAmB,OAAA;AAEpE,qCAA6H;AAApH,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAEzG,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAExB,iDAA6D;AAApD,mHAAA,sBAAsB,OAAA;AAE/B,yDAAyE;AAAhE,2GAAA,UAAU,OAAA;AAAE,mHAAA,kBAAkB,OAAA"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,iDAAmE;AAA1D,6GAAA,YAAY,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAEzC,6CAA0D;AAAjD,wGAAA,SAAS,OAAA;AAAE,6GAAA,cAAc,OAAA;AAElC,iEAAsG;AAA7F,4HAAA,mBAAmB,OAAA;AAAE,0HAAA,iBAAiB,OAAA;AAAE,4HAAA,mBAAmB,OAAA;AAEpE,qCAA6H;AAApH,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAEzG,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAExB,iDAA6D;AAApD,mHAAA,sBAAsB,OAAA;AAE/B,yDAAyE;AAAhE,2GAAA,UAAU,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAEvC,6DAAuG;AAA9F,wHAAA,iBAAiB,OAAA;AAAE,4HAAA,qBAAqB,OAAA;AAAE,2HAAA,oBAAoB,OAAA"} |
+3
-2
| { | ||
| "name": "@rubric-protocol/sdk", | ||
| "version": "1.3.1", | ||
| "version": "1.4.0", | ||
| "description": "Rubric Protocol SDK - post-quantum AI attestation for EU AI Act compliance. Patent Pending.", | ||
@@ -65,2 +65,3 @@ "main": "dist/index.js", | ||
| "@langchain/core": "^0.2.0", | ||
| "@types/node": "^20.19.43", | ||
| "openai": "^4.0.0", | ||
@@ -72,2 +73,2 @@ "typescript": "^5.0.0" | ||
| } | ||
| } | ||
| } |
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
168360
19.89%50
19.05%1981
27.81%4
33.33%10
11.11%