@codespar/sdk 0.16.9 → 0.16.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  /**
2
- * The signed mandate fields. The two V3-only fields (`principal_kyc_ref`,
3
- * `agent_kid`) are absent on V2 mandates and required on V3.
2
+ * The signed mandate fields. `principal_kyc_ref` and `agent_kid` are absent on
3
+ * V2 and required from V3 on; `issued_at` is required on V4 and absent before.
4
4
  */
5
5
  export interface MandateFields {
6
6
  format_version: number;
@@ -18,10 +18,12 @@ export interface MandateFields {
18
18
  parent_id?: string | null;
19
19
  denomination?: string | null;
20
20
  secret_version: number;
21
- /** V3-only. Reference to the proofed CPF/CNPJ (Celcoin KYC) the agent acts for. */
21
+ /** V3+. Reference to the proofed CPF/CNPJ (Celcoin KYC) the agent acts for. */
22
22
  principal_kyc_ref?: string | null;
23
- /** V3-only. The agent key id (`<agent_did>#<n>`) that signed this mandate. */
23
+ /** V3+. The agent key id (`<agent_did>#<n>`) that signed this mandate. */
24
24
  agent_kid?: string | null;
25
+ /** V4-only. Issuance time, UNIX seconds. Signed, so it cannot be moved. */
26
+ issued_at?: number;
25
27
  }
26
28
  /** A decoded presentation token: the signed fields plus the signature envelope. */
27
29
  export interface DecodedMandateToken {
@@ -53,13 +55,13 @@ export declare function decodeMandateToken(token: string): MandateDecodeResult;
53
55
  /**
54
56
  * Reconstruct the canonical signing string the Ed25519 signatures cover.
55
57
  *
56
- * Field order (V3 = 14 fields, 13 `:` separators): V2's 12 fields then the two
57
- * V3-only fields (principal_kyc_ref, agent_kid). Absent optionals render empty
58
- * so the separator count is invariant. `purposes` is comma-joined after a
59
- * lexicographic sort with escaping (`\` → `\\` first, then `,` → `\,`). Colons
60
- * inside `agent_kid` (from `did:web`) are emitted verbatim — the string is a
61
- * one-way serialization, never re-split. The V3 tail is appended only for
62
- * `format_version >= 3`, so a V2 mandate reconstructs to its 12-field form.
58
+ * Field order: V2 = 12 fields; V3 = V2 + principal_kyc_ref + agent_kid (14);
59
+ * V4 = V3 with issued_at inserted before agent_kid (15), so agent_kid stays the
60
+ * last field. Absent optionals render empty so the separator count is
61
+ * invariant. `purposes` is comma-joined after a lexicographic sort with
62
+ * escaping (`\` → `\\` first, then `,` → `\,`). Colons inside `agent_kid` (from
63
+ * `did:web`) are emitted verbatim — the string is a one-way serialization,
64
+ * never re-split.
63
65
  */
64
66
  export declare function reconstructSigningString(f: Record<string, unknown>): string;
65
67
  /**
@@ -69,7 +71,10 @@ export declare function reconstructSigningString(f: Record<string, unknown>): st
69
71
  export declare function verifyEd25519(signingString: string, signatureB64url: string, pub: Buffer): boolean;
70
72
  /** Strip the `#<fragment>` from an agent key id to recover the bare agent DID. */
71
73
  export declare function agentDidFromKid(kid: string): string;
72
- /** Per-signature outcome. `skipped` = present but no key supplied to check it. */
74
+ /**
75
+ * Per-signature outcome. `skipped` = carried but no key supplied to check it;
76
+ * `absent` = the token does not carry it. Neither is a pass.
77
+ */
73
78
  export type SignatureStatus = "verified" | "failed" | "skipped" | "absent";
74
79
  export interface SignatureCheck {
75
80
  present: boolean;
@@ -77,35 +82,69 @@ export interface SignatureCheck {
77
82
  /** The key id associated with the signature (agent kid; issuer has none). */
78
83
  kid?: string;
79
84
  }
85
+ /**
86
+ * Why a token is not verified. Stable machine codes, in this order:
87
+ * - `kid_mismatch`: the envelope `kid` differs from the signed `agent_kid`;
88
+ * - `kid_not_in_document`: the agent DID document has no Ed25519 key under
89
+ * the kid the token names (no other key is tried);
90
+ * - `agent_sig_absent` / `issuer_sig_absent`: the token does not carry it;
91
+ * - `agent_sig_unchecked` / `issuer_sig_unchecked`: carried, no key given;
92
+ * - `agent_sig_invalid` / `issuer_sig_invalid`: checked and did not verify;
93
+ * - `expired`: the clock is past `expires_at`.
94
+ */
95
+ export type MandateVerificationFailure = "kid_mismatch" | "kid_not_in_document" | "agent_sig_absent" | "agent_sig_unchecked" | "agent_sig_invalid" | "issuer_sig_absent" | "issuer_sig_unchecked" | "issuer_sig_invalid" | "expired";
80
96
  export interface VerifyMandateOptions {
81
- /** Raw 32-byte Ed25519 agent public key — hex string or bytes. */
97
+ /**
98
+ * Raw 32-byte Ed25519 agent public key — hex string or bytes. Passing a raw
99
+ * key asserts it is the key published under the token's `agent_kid`; to have
100
+ * the verifier pick it, pass `agentDidDocument` instead.
101
+ */
82
102
  agentPublicKey?: string | Uint8Array;
103
+ /**
104
+ * The agent's did:web document (parsed JSON). Only the `verificationMethod`
105
+ * whose `id` equals the token's signed `agent_kid` is used: a retired key
106
+ * listed beside it does not verify a token that names another kid.
107
+ * Mutually exclusive with `agentPublicKey`.
108
+ */
109
+ agentDidDocument?: unknown;
83
110
  /** Raw 32-byte Ed25519 issuer (platform) public key — hex string or bytes. */
84
111
  issuerPublicKey?: string | Uint8Array;
112
+ /** The clock for the expiry check, in UNIX seconds. Default: now. */
113
+ now?: number;
85
114
  }
86
115
  export interface MandateVerification {
87
- /** True iff at least one carried signature verified and none failed. */
116
+ /**
117
+ * True iff BOTH Ed25519 signatures are carried and verify, under the key the
118
+ * token names, and the token is not expired. Nothing unchecked counts.
119
+ */
88
120
  verified: boolean;
121
+ /** Why `verified` is false; empty exactly when it is true. */
122
+ failures: MandateVerificationFailure[];
123
+ /** The clock was past `expires_at`. */
124
+ expired: boolean;
89
125
  mandate: MandateFields;
90
126
  /** The bare agent DID (kid without its `#fragment`), when present. */
91
127
  agentDid?: string;
92
- /** The agent key id from the envelope, when present. */
128
+ /** The agent key id the token names: the signed `agent_kid` (V3+), else the envelope `kid`. */
93
129
  kid?: string;
130
+ /** V4: the signed issuance time, UNIX seconds. */
131
+ issuedAt?: number;
94
132
  agent: SignatureCheck;
95
133
  issuer: SignatureCheck;
96
134
  }
97
135
  /**
98
- * Offline-verify a V3 mandate presentation token against supplied public keys.
136
+ * Offline-verify a V3 or V4 mandate presentation token against supplied keys.
99
137
  *
100
- * Pure and network-free: you pass the agent and/or issuer public keys (from
101
- * their did:web documents) and it checks the signatures the token carries. A
102
- * signature with a supplied key that validates is `verified`; a supplied key
103
- * that fails is `failed`; a carried signature with no supplied key is `skipped`;
104
- * a signature the token doesn't carry is `absent`. `verified` is true iff at
105
- * least one signature verified and none failed.
138
+ * Pure and network-free: you pass the issuer public key and the agent's public
139
+ * key (or its DID document) and it checks both signatures. `verified` is true
140
+ * only when both signatures are carried and verify, the agent signature under
141
+ * the key the token names, and the token has not expired. A V2 token carries
142
+ * no Ed25519 signature and is never verified here (its only proof is the org
143
+ * HMAC, which needs the org secret).
106
144
  *
107
- * Throws only on a token that cannot be decoded (so a caller can distinguish a
108
- * malformed token from a well-formed but unverified one).
145
+ * Throws on a token that cannot be decoded (so a caller can distinguish a
146
+ * malformed token from a well-formed but unverified one), and when both
147
+ * `agentPublicKey` and `agentDidDocument` are given.
109
148
  */
110
149
  export declare function verifyMandateToken(token: string, opts?: VerifyMandateOptions): MandateVerification;
111
150
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mandate/index.ts"],"names":[],"mappings":"AAwBA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,YAAY,CAAC;IAChD,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,CAAC;IACvB;wEACoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,iBAAiB,GAAG,4BAA4B,CAAA;CAAE,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAmCrE;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA0B3E;AAiBD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,GACV,OAAO,CAWT;AAcD,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACrC,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,oBAAyB,GAC9B,mBAAmB,CA2BrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mandate/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `@codespar/sdk/mandate` — offline V3 mandate verification.
2
+ * `@codespar/sdk/mandate` — offline V3/V4 mandate verification.
3
3
  *
4
4
  * A third party holding only a presentation token and a raw Ed25519 public key
5
5
  * (from the agent's did:web document) can reconstruct the exact signing string
@@ -15,9 +15,9 @@
15
15
  * if (!res.verified) throw new Error("mandate signature invalid");
16
16
  * ```
17
17
  *
18
- * The byte format is frozen by the shared `canonical.v3.fixture.json` (the same
19
- * freeze the enterprise codec and the CLI pin), so all three impls stay in lock
20
- * step. `node:crypto` is a Node builtin, not an npm dependency — the SDK's
18
+ * The byte format is frozen by the shared `canonical.v3.fixture.json` and
19
+ * `canonical.v4.fixture.json` (the same freezes the enterprise codec and the CLI
20
+ * pin), so all three impls stay in lock step. `node:crypto` is a Node builtin, not an npm dependency — the SDK's
21
21
  * zero-runtime-dependency guarantee is intact.
22
22
  */
23
23
  import { createPublicKey, verify as nodeVerify } from "node:crypto";
@@ -40,7 +40,10 @@ export function decodeMandateToken(token) {
40
40
  }
41
41
  const r = raw;
42
42
  const version = r["format_version"];
43
- if (typeof version !== "number" || !Number.isInteger(version) || version < 2) {
43
+ // Only the formats whose signing string this module knows. A later format
44
+ // reconstructed with an older tail would fail as "tampered", which is the
45
+ // wrong answer: it is unreadable here, not forged.
46
+ if (typeof version !== "number" || !SUPPORTED_FORMATS.includes(version)) {
44
47
  return { ok: false, error: "mandate_format_unsupported" };
45
48
  }
46
49
  if (!isValidMandateFields(r)) {
@@ -59,6 +62,7 @@ export function decodeMandateToken(token) {
59
62
  decoded.kid = kid;
60
63
  return { ok: true, token: decoded };
61
64
  }
65
+ const SUPPORTED_FORMATS = [2, 3, 4];
62
66
  function isValidMandateFields(r) {
63
67
  if (typeof r["format_version"] !== "number")
64
68
  return false;
@@ -78,24 +82,28 @@ function isValidMandateFields(r) {
78
82
  return false;
79
83
  if (typeof r["secret_version"] !== "number")
80
84
  return false;
81
- if (r["format_version"] === 3) {
85
+ if (r["format_version"] === 3 || r["format_version"] === 4) {
82
86
  if (typeof r["principal_kyc_ref"] !== "string")
83
87
  return false;
84
88
  if (typeof r["agent_kid"] !== "string")
85
89
  return false;
86
90
  }
91
+ if (r["format_version"] === 4) {
92
+ if (typeof r["issued_at"] !== "number" || !Number.isInteger(r["issued_at"]))
93
+ return false;
94
+ }
87
95
  return true;
88
96
  }
89
97
  /**
90
98
  * Reconstruct the canonical signing string the Ed25519 signatures cover.
91
99
  *
92
- * Field order (V3 = 14 fields, 13 `:` separators): V2's 12 fields then the two
93
- * V3-only fields (principal_kyc_ref, agent_kid). Absent optionals render empty
94
- * so the separator count is invariant. `purposes` is comma-joined after a
95
- * lexicographic sort with escaping (`\` → `\\` first, then `,` → `\,`). Colons
96
- * inside `agent_kid` (from `did:web`) are emitted verbatim — the string is a
97
- * one-way serialization, never re-split. The V3 tail is appended only for
98
- * `format_version >= 3`, so a V2 mandate reconstructs to its 12-field form.
100
+ * Field order: V2 = 12 fields; V3 = V2 + principal_kyc_ref + agent_kid (14);
101
+ * V4 = V3 with issued_at inserted before agent_kid (15), so agent_kid stays the
102
+ * last field. Absent optionals render empty so the separator count is
103
+ * invariant. `purposes` is comma-joined after a lexicographic sort with
104
+ * escaping (`\` → `\\` first, then `,` → `\,`). Colons inside `agent_kid` (from
105
+ * `did:web`) are emitted verbatim — the string is a one-way serialization,
106
+ * never re-split.
99
107
  */
100
108
  export function reconstructSigningString(f) {
101
109
  const esc = (s) => s.replace(/\\/g, "\\\\").replace(/,/g, "\\,");
@@ -119,9 +127,12 @@ export function reconstructSigningString(f) {
119
127
  f["denomination"] ?? "",
120
128
  String(f["secret_version"]),
121
129
  ];
122
- if (version >= 3) {
123
- parts.push(f["principal_kyc_ref"] ?? "", f["agent_kid"] ?? "");
124
- }
130
+ if (version >= 3)
131
+ parts.push(f["principal_kyc_ref"] ?? "");
132
+ if (version >= 4)
133
+ parts.push(f["issued_at"] == null ? "" : String(f["issued_at"]));
134
+ if (version >= 3)
135
+ parts.push(f["agent_kid"] ?? "");
125
136
  return parts.join(":");
126
137
  }
127
138
  // A raw Ed25519 public key becomes an SPKI KeyObject by prefixing the fixed
@@ -168,19 +179,23 @@ export function agentDidFromKid(kid) {
168
179
  return hash === -1 ? kid : kid.slice(0, hash);
169
180
  }
170
181
  /**
171
- * Offline-verify a V3 mandate presentation token against supplied public keys.
182
+ * Offline-verify a V3 or V4 mandate presentation token against supplied keys.
172
183
  *
173
- * Pure and network-free: you pass the agent and/or issuer public keys (from
174
- * their did:web documents) and it checks the signatures the token carries. A
175
- * signature with a supplied key that validates is `verified`; a supplied key
176
- * that fails is `failed`; a carried signature with no supplied key is `skipped`;
177
- * a signature the token doesn't carry is `absent`. `verified` is true iff at
178
- * least one signature verified and none failed.
184
+ * Pure and network-free: you pass the issuer public key and the agent's public
185
+ * key (or its DID document) and it checks both signatures. `verified` is true
186
+ * only when both signatures are carried and verify, the agent signature under
187
+ * the key the token names, and the token has not expired. A V2 token carries
188
+ * no Ed25519 signature and is never verified here (its only proof is the org
189
+ * HMAC, which needs the org secret).
179
190
  *
180
- * Throws only on a token that cannot be decoded (so a caller can distinguish a
181
- * malformed token from a well-formed but unverified one).
191
+ * Throws on a token that cannot be decoded (so a caller can distinguish a
192
+ * malformed token from a well-formed but unverified one), and when both
193
+ * `agentPublicKey` and `agentDidDocument` are given.
182
194
  */
183
195
  export function verifyMandateToken(token, opts = {}) {
196
+ if (opts.agentPublicKey !== undefined && opts.agentDidDocument !== undefined) {
197
+ throw new TypeError("pass agentPublicKey or agentDidDocument, not both");
198
+ }
184
199
  const decoded = decodeMandateToken(token);
185
200
  if (!decoded.ok) {
186
201
  throw new Error(`cannot decode mandate token: ${decoded.error}`);
@@ -188,14 +203,48 @@ export function verifyMandateToken(token, opts = {}) {
188
203
  const t = decoded.token;
189
204
  const m = t.mandate;
190
205
  const signingString = reconstructSigningString(m);
191
- const kid = t.kid ?? m.agent_kid ?? undefined;
206
+ const failures = [];
207
+ // The signed agent_kid names the key; the envelope kid is an unsigned copy
208
+ // and may not rename it.
209
+ const signedKid = typeof m.agent_kid === "string" ? m.agent_kid : undefined;
210
+ const kid = signedKid ?? t.kid;
211
+ const kidMismatch = signedKid !== undefined && t.kid !== undefined && t.kid !== signedKid;
192
212
  const agentDid = kid ? agentDidFromKid(kid) : undefined;
193
- const agent = checkSignature(signingString, t.agent_sig, toPubkey(opts.agentPublicKey), kid);
213
+ let agentKey;
214
+ let kidMissing = false;
215
+ if (opts.agentDidDocument !== undefined) {
216
+ agentKey = kid ? keyForKid(opts.agentDidDocument, kid) : null;
217
+ kidMissing = agentKey === null;
218
+ }
219
+ else {
220
+ agentKey = toPubkey(opts.agentPublicKey);
221
+ }
222
+ let agent;
223
+ if (kidMismatch) {
224
+ failures.push("kid_mismatch");
225
+ agent = { present: Boolean(t.agent_sig), status: "failed", ...(kid ? { kid } : {}) };
226
+ }
227
+ else if (kidMissing && t.agent_sig) {
228
+ failures.push("kid_not_in_document");
229
+ agent = { present: true, status: "failed", ...(kid ? { kid } : {}) };
230
+ }
231
+ else {
232
+ agent = checkSignature(signingString, t.agent_sig, agentKey, kid);
233
+ if (agent.status !== "verified")
234
+ failures.push(failureFor("agent", agent.status));
235
+ }
194
236
  const issuer = checkSignature(signingString, t.issuer_sig, toPubkey(opts.issuerPublicKey), undefined);
195
- const anyVerified = agent.status === "verified" || issuer.status === "verified";
196
- const anyFailed = agent.status === "failed" || issuer.status === "failed";
237
+ if (issuer.status !== "verified")
238
+ failures.push(failureFor("issuer", issuer.status));
239
+ const now = opts.now ?? Date.now() / 1000;
240
+ // The API refuses a mandate only once the clock is past expires_at.
241
+ const expired = now > m.expires_at;
242
+ if (expired)
243
+ failures.push("expired");
197
244
  const result = {
198
- verified: anyVerified && !anyFailed,
245
+ verified: failures.length === 0,
246
+ failures,
247
+ expired,
199
248
  mandate: m,
200
249
  agent,
201
250
  issuer,
@@ -204,8 +253,33 @@ export function verifyMandateToken(token, opts = {}) {
204
253
  result.agentDid = agentDid;
205
254
  if (kid)
206
255
  result.kid = kid;
256
+ if (typeof m.issued_at === "number")
257
+ result.issuedAt = m.issued_at;
207
258
  return result;
208
259
  }
260
+ function failureFor(who, status) {
261
+ const suffix = status === "absent" ? "absent" : status === "skipped" ? "unchecked" : "invalid";
262
+ return `${who}_sig_${suffix}`;
263
+ }
264
+ /** The raw Ed25519 key a DID document publishes under exactly `kid`, or null. */
265
+ function keyForKid(doc, kid) {
266
+ if (!doc || typeof doc !== "object")
267
+ return null;
268
+ const methods = doc.verificationMethod;
269
+ if (!Array.isArray(methods))
270
+ return null;
271
+ for (const vm of methods) {
272
+ if (!vm || vm["id"] !== kid)
273
+ continue;
274
+ const jwk = vm["publicKeyJwk"];
275
+ if (!jwk || jwk["kty"] !== "OKP" || jwk["crv"] !== "Ed25519" || typeof jwk["x"] !== "string") {
276
+ return null;
277
+ }
278
+ const pub = Buffer.from(jwk["x"], "base64url");
279
+ return pub.length === 32 ? pub : null;
280
+ }
281
+ return null;
282
+ }
209
283
  function checkSignature(signingString, sig, pub, kid) {
210
284
  if (!sig)
211
285
  return { present: false, status: "absent", ...(kid ? { kid } : {}) };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mandate/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mandate/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codespar/sdk",
3
- "version": "0.16.9",
3
+ "version": "0.16.11",
4
4
  "description": "Commerce SDK for AI agents \u2014 sessions, managed auth, Complete Loop orchestration for Latin American APIs",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",