Sign In

@rubric-protocol/sdk

Package Overview
Dependencies
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rubric-protocol/sdk - npm Package Compare versions

Comparing version
1.3.1
to
1.4.0
+53
dist/attest-before-spend.d.ts
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

@@ -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"}
"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"}
{
"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"

}
}
}