@agent-score/commerce 2.5.0 → 2.6.0

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.
Files changed (80) hide show
  1. package/README.md +19 -17
  2. package/dist/challenge/index.d.mts +26 -2
  3. package/dist/challenge/index.d.ts +26 -2
  4. package/dist/challenge/index.js +14 -5
  5. package/dist/challenge/index.js.map +1 -1
  6. package/dist/challenge/index.mjs +14 -5
  7. package/dist/challenge/index.mjs.map +1 -1
  8. package/dist/{checkout-McfNpZJf.d.ts → checkout-C4RD7M0Z.d.ts} +46 -13
  9. package/dist/{checkout-o17dIxHi.d.mts → checkout-CzB9f_jf.d.mts} +46 -13
  10. package/dist/core.d.mts +20 -9
  11. package/dist/core.d.ts +20 -9
  12. package/dist/core.js +35 -24
  13. package/dist/core.js.map +1 -1
  14. package/dist/core.mjs +35 -24
  15. package/dist/core.mjs.map +1 -1
  16. package/dist/discovery/index.d.mts +17 -2
  17. package/dist/discovery/index.d.ts +17 -2
  18. package/dist/discovery/index.js +36 -12
  19. package/dist/discovery/index.js.map +1 -1
  20. package/dist/discovery/index.mjs +35 -12
  21. package/dist/discovery/index.mjs.map +1 -1
  22. package/dist/{gate-CWP10xPQ.d.mts → gate-D2RP6bZg.d.ts} +109 -141
  23. package/dist/{gate-CWP10xPQ.d.ts → gate-GCXy4FHI.d.mts} +109 -141
  24. package/dist/identity/express.d.mts +3 -1
  25. package/dist/identity/express.d.ts +3 -1
  26. package/dist/identity/express.js +164 -55
  27. package/dist/identity/express.js.map +1 -1
  28. package/dist/identity/express.mjs +164 -55
  29. package/dist/identity/express.mjs.map +1 -1
  30. package/dist/identity/fastify.d.mts +3 -1
  31. package/dist/identity/fastify.d.ts +3 -1
  32. package/dist/identity/fastify.js +171 -57
  33. package/dist/identity/fastify.js.map +1 -1
  34. package/dist/identity/fastify.mjs +171 -57
  35. package/dist/identity/fastify.mjs.map +1 -1
  36. package/dist/identity/hono.d.mts +3 -1
  37. package/dist/identity/hono.d.ts +3 -1
  38. package/dist/identity/hono.js +159 -59
  39. package/dist/identity/hono.js.map +1 -1
  40. package/dist/identity/hono.mjs +159 -59
  41. package/dist/identity/hono.mjs.map +1 -1
  42. package/dist/identity/nextjs.d.mts +3 -1
  43. package/dist/identity/nextjs.d.ts +3 -1
  44. package/dist/identity/nextjs.js +153 -56
  45. package/dist/identity/nextjs.js.map +1 -1
  46. package/dist/identity/nextjs.mjs +153 -56
  47. package/dist/identity/nextjs.mjs.map +1 -1
  48. package/dist/identity/policy.d.mts +21 -2
  49. package/dist/identity/policy.d.ts +21 -2
  50. package/dist/identity/policy.js +22 -1
  51. package/dist/identity/policy.js.map +1 -1
  52. package/dist/identity/policy.mjs +21 -1
  53. package/dist/identity/policy.mjs.map +1 -1
  54. package/dist/identity/web.d.mts +3 -1
  55. package/dist/identity/web.d.ts +3 -1
  56. package/dist/identity/web.js +153 -56
  57. package/dist/identity/web.js.map +1 -1
  58. package/dist/identity/web.mjs +153 -56
  59. package/dist/identity/web.mjs.map +1 -1
  60. package/dist/index.d.mts +55 -10
  61. package/dist/index.d.ts +55 -10
  62. package/dist/index.js +2211 -500
  63. package/dist/index.js.map +1 -1
  64. package/dist/index.mjs +2203 -500
  65. package/dist/index.mjs.map +1 -1
  66. package/dist/payment/index.d.mts +1 -1
  67. package/dist/payment/index.d.ts +1 -1
  68. package/dist/payment/index.js +10 -2
  69. package/dist/payment/index.js.map +1 -1
  70. package/dist/payment/index.mjs +10 -2
  71. package/dist/payment/index.mjs.map +1 -1
  72. package/dist/stripe-multichain/index.js +1614 -266
  73. package/dist/stripe-multichain/index.js.map +1 -1
  74. package/dist/stripe-multichain/index.mjs +1614 -266
  75. package/dist/stripe-multichain/index.mjs.map +1 -1
  76. package/dist/types-D1slMt0H.d.mts +137 -0
  77. package/dist/types-D1slMt0H.d.ts +137 -0
  78. package/dist/{wwwauthenticate-CVaGUMjU.d.mts → wwwauthenticate-Dgm-_af9.d.mts} +11 -1
  79. package/dist/{wwwauthenticate-CVaGUMjU.d.ts → wwwauthenticate-Dgm-_af9.d.ts} +11 -1
  80. package/package.json +23 -18
package/dist/core.js CHANGED
@@ -68,7 +68,7 @@ var IDENTITY_VERIFICATION_REQUIRED_FALLBACK_INSTRUCTIONS = JSON.stringify({
68
68
  var API_ERROR_INSTRUCTIONS = JSON.stringify({
69
69
  action: "retry_with_backoff",
70
70
  steps: [
71
- "Verification is temporarily unavailable. Retry the request after 5\u201330 seconds with exponential backoff.",
71
+ "Verification is temporarily unavailable. Retry the request after 5-30 seconds with exponential backoff.",
72
72
  "This is NOT a compliance denial \u2014 the user does not need to re-verify their identity. Send the same identity headers (X-Wallet-Address or X-Operator-Token) on retry.",
73
73
  "If the request continues to fail after 3+ retries (~60 seconds total), surface the error to the user with the merchant's support contact."
74
74
  ],
@@ -159,7 +159,7 @@ function stripTrailingSlashes(s) {
159
159
  while (end > 0 && s.charCodeAt(end - 1) === 47) end--;
160
160
  return end === s.length ? s : s.slice(0, end);
161
161
  }
162
- var CANONICAL_AGENTSCORE_API = "https://api.agentscore.sh";
162
+ var CANONICAL_AGENTSCORE_API = "https://api.agentscore.com";
163
163
  var WALLET_SIGNER_MISMATCH_INSTRUCTIONS = JSON.stringify({
164
164
  action: "resign_or_switch_to_operator_token",
165
165
  steps: [
@@ -191,7 +191,7 @@ function buildAgentMemoryHint(aipTrustedIssuers) {
191
191
  return {
192
192
  save_for_future_agentscore_gates: true,
193
193
  pattern_summary: "AgentScore is a cross-merchant identity substrate for agent commerce. Any endpoint that returns 403 missing_identity / identity_verification_required or 402 challenges referencing AgentScore uses the same identity system. One KYC works across all AgentScore merchants \u2014 no re-verification per site. Save this pattern (and the endpoints below) to persistent memory so future AgentScore encounters skip the cold-start session flow.",
194
- quickstart: "https://docs.agentscore.sh/guides/agent-identity",
194
+ quickstart: "https://docs.agentscore.com/guides/agent-identity",
195
195
  identity_check_endpoint: `${api}/v1/credentials`,
196
196
  identity_paths: {
197
197
  wallet: "If paying from a crypto wallet you have used before on any AgentScore merchant, send `X-Wallet-Address: 0x...`. Shortest path; no token lifecycle to manage.",
@@ -208,7 +208,7 @@ function buildAgentMemoryHint(aipTrustedIssuers) {
208
208
  }
209
209
  function createAgentScoreCore(options) {
210
210
  if (!options.apiKey) {
211
- throw new Error("AgentScore API key is required. Get one at https://agentscore.sh/sign-up");
211
+ throw new Error("AgentScore API key is required. Get one at https://www.agentscore.com/sign-up");
212
212
  }
213
213
  const {
214
214
  apiKey,
@@ -219,7 +219,7 @@ function createAgentScoreCore(options) {
219
219
  allowedJurisdictions,
220
220
  failOpen = false,
221
221
  cacheSeconds = 300,
222
- baseUrl: rawBaseUrl = "https://api.agentscore.sh",
222
+ baseUrl: rawBaseUrl = "https://api.agentscore.com",
223
223
  chain: gateChain,
224
224
  userAgent,
225
225
  createSessionOnMissing,
@@ -227,7 +227,7 @@ function createAgentScoreCore(options) {
227
227
  } = options;
228
228
  const baseUrl = stripTrailingSlashes(rawBaseUrl);
229
229
  const agentMemoryHint = buildAgentMemoryHint(aipTrustedIssuers);
230
- const defaultUa = `@agent-score/commerce@${"2.5.0"}`;
230
+ const defaultUa = `@agent-score/commerce@${"2.6.0"}`;
231
231
  const userAgentHeader = userAgent ? `${userAgent} (${defaultUa})` : defaultUa;
232
232
  const sdk = new import_sdk.AgentScore({ apiKey, baseUrl, userAgent: userAgentHeader });
233
233
  const sessionSdkCache = /* @__PURE__ */ new Map();
@@ -245,7 +245,6 @@ function createAgentScoreCore(options) {
245
245
  return s;
246
246
  }
247
247
  const cache = new TTLCache(cacheSeconds * 1e3);
248
- const lastSignerRaw = /* @__PURE__ */ new Map();
249
248
  async function tryMintSessionDenial(ctx) {
250
249
  if (!createSessionOnMissing) return void 0;
251
250
  try {
@@ -317,7 +316,7 @@ function createAgentScoreCore(options) {
317
316
  ...aipStep,
318
317
  "If you have a wallet AND this merchant accepts a wallet-signing rail (Tempo MPP or x402 \u2014 see openapi.json x-payment-info): send X-Wallet-Address and retry. If the wallet is already linked to an AgentScore operator (via prior SIWE claim or prior captureWallet), this passes in one round trip. If the wallet is unlinked or the account has no KYC, the 403 will include a verify_url \u2014 share it with the user to claim the wallet + complete KYC, then retry.",
319
318
  "If step 1 is denied or you already have a stored operator_token (valid + not expired): send X-Operator-Token: opc_... and retry.",
320
- "If neither applies: retry with NO identity header. Merchants that auto-create verification sessions (most AgentScore merchants do) return verify_url + session_id + poll_secret in the 403 body \u2014 share verify_url with the user, then poll poll_url every 5s with the X-Poll-Secret header until status=verified (the poll returns a one-time operator_token). If the retry returns the same bare 403, this merchant does not support self-service session bootstrapping \u2014 direct the user to https://agentscore.sh/sign-up to create an AgentScore identity and mint an operator_token from their dashboard (https://agentscore.sh/dashboard/verify). The user hands the opc_... to you, and you retry with X-Operator-Token."
319
+ "If neither applies: retry with NO identity header. Merchants that auto-create verification sessions (most AgentScore merchants do) return verify_url + session_id + poll_secret in the 403 body \u2014 share verify_url with the user, then poll poll_url every 5s with the X-Poll-Secret header until status=verified (the poll returns a one-time operator_token). If the retry returns the same bare 403, this merchant does not support self-service session bootstrapping \u2014 direct the user to https://www.agentscore.com/sign-up to create an AgentScore identity and mint an operator_token from their dashboard (https://www.agentscore.com/dashboard/verify). The user hands the opc_... to you, and you retry with X-Operator-Token."
321
320
  ],
322
321
  user_message: "Try X-Wallet-Address first if you have a wallet and the merchant accepts Tempo/x402; fall back to a stored X-Operator-Token, then to the session/verify flow described in agent_memory.bootstrap."
323
322
  });
@@ -330,21 +329,26 @@ function createAgentScoreCore(options) {
330
329
  }
331
330
  };
332
331
  }
333
- const cacheKey = identity.aipToken ? `aip:${(0, import_node_crypto.createHash)("sha256").update(identity.aipToken).digest("hex")}` : identity.operatorToken?.toLowerCase() ?? (identity.address ? normalizeAddress(identity.address) : "");
332
+ const identityKey = identity.aipToken ? `aip:${(0, import_node_crypto.createHash)("sha256").update(identity.aipToken).digest("hex")}` : identity.operatorToken?.toLowerCase() ?? (identity.address ? normalizeAddress(identity.address) : "");
333
+ const cacheKey = signer ? JSON.stringify([identityKey, signer.network, normalizeAddress(signer.address)]) : JSON.stringify([identityKey]);
334
334
  const cached = cache.get(cacheKey);
335
335
  if (cached) {
336
+ const cachedVerdict = cached.raw ? buildSignerVerdict(identity, cached.raw) : void 0;
336
337
  if (cached.allow) {
337
338
  const cachedRaw = cached.raw;
338
339
  const cachedQuota = cachedRaw?.quota;
339
340
  return {
340
341
  kind: "allow",
341
342
  data: cachedRaw,
342
- ...cachedQuota !== void 0 && { quota: cachedQuota }
343
+ ...cachedQuota !== void 0 && { quota: cachedQuota },
344
+ ...cachedVerdict !== void 0 && { signerVerdict: cachedVerdict }
343
345
  };
344
346
  }
345
347
  if (isFixableDenial(cached.reasons)) {
346
348
  const sessionReason = await tryMintSessionDenial(ctx);
347
- if (sessionReason) return { kind: "deny", reason: sessionReason };
349
+ if (sessionReason) {
350
+ return { kind: "deny", reason: sessionReason, ...cachedVerdict !== void 0 && { signerVerdict: cachedVerdict } };
351
+ }
348
352
  }
349
353
  return {
350
354
  kind: "deny",
@@ -354,7 +358,8 @@ function createAgentScoreCore(options) {
354
358
  reasons: cached.reasons,
355
359
  verify_url: cached.raw?.verify_url,
356
360
  data: cached.raw
357
- }
361
+ },
362
+ ...cachedVerdict !== void 0 && { signerVerdict: cachedVerdict }
358
363
  };
359
364
  }
360
365
  const policy = {};
@@ -375,7 +380,10 @@ function createAgentScoreCore(options) {
375
380
  // regardless of policy.require_sanctions_clear (which gates the separate NAME screen).
376
381
  ...signer && { signer: { address: signer.address, network: signer.network } }
377
382
  };
378
- const result = identity.aipToken ? await sdk.assess(null, { ...opts, aipToken: identity.aipToken }) : identity.address ? await sdk.assess(identity.address, { ...opts, operatorToken: identity.operatorToken }) : await sdk.assess(null, { ...opts, operatorToken: identity.operatorToken });
383
+ if (identity.aipToken !== void 0 && identity.aipSignature === void 0) {
384
+ throw new Error("AgentScoreCore.evaluate: aipToken requires aipSignature (RFC 9421 proof-of-possession material).");
385
+ }
386
+ const result = identity.aipToken !== void 0 && identity.aipSignature !== void 0 ? await sdk.assess(null, { ...opts, aipToken: identity.aipToken, aipSignature: identity.aipSignature }) : identity.address ? await sdk.assess(identity.address, { ...opts, operatorToken: identity.operatorToken }) : await sdk.assess(null, { ...opts, operatorToken: identity.operatorToken });
379
387
  data = result;
380
388
  } catch (err) {
381
389
  if (err instanceof import_sdk.PaymentRequiredError) {
@@ -446,20 +454,21 @@ function createAgentScoreCore(options) {
446
454
  const decisionReasons = data.decision_reasons ?? [];
447
455
  const allow = decision === "allow" || decision == null;
448
456
  cache.set(cacheKey, { allow, decision: decision ?? void 0, reasons: decisionReasons, raw: data });
449
- if (identity.address !== void 0 && identity.operatorToken === void 0 && identity.aipToken === void 0 && (data.signer_match !== void 0 || data.signer_sanctions !== void 0)) {
450
- lastSignerRaw.set(normalizeAddress(identity.address), data);
451
- }
457
+ const signerVerdict = buildSignerVerdict(identity, data);
452
458
  if (allow) {
453
459
  const quota = data.quota;
454
460
  return {
455
461
  kind: "allow",
456
462
  data,
457
- ...quota !== void 0 && { quota }
463
+ ...quota !== void 0 && { quota },
464
+ ...signerVerdict !== void 0 && { signerVerdict }
458
465
  };
459
466
  }
460
467
  if (isFixableDenial(decisionReasons)) {
461
468
  const sessionReason = await tryMintSessionDenial(ctx);
462
- if (sessionReason) return { kind: "deny", reason: sessionReason };
469
+ if (sessionReason) {
470
+ return { kind: "deny", reason: sessionReason, ...signerVerdict !== void 0 && { signerVerdict } };
471
+ }
463
472
  }
464
473
  return {
465
474
  kind: "deny",
@@ -469,7 +478,8 @@ function createAgentScoreCore(options) {
469
478
  reasons: decisionReasons,
470
479
  verify_url: data.verify_url,
471
480
  data
472
- }
481
+ },
482
+ ...signerVerdict !== void 0 && { signerVerdict }
473
483
  };
474
484
  }
475
485
  async function captureWallet(options2) {
@@ -511,20 +521,21 @@ function createAgentScoreCore(options) {
511
521
  agentInstructions: sm.agent_instructions ?? WALLET_SIGNER_MISMATCH_INSTRUCTIONS
512
522
  };
513
523
  }
514
- function getSignerVerdict(claimedAddress) {
515
- const claimedNorm = normalizeAddress(claimedAddress);
516
- const raw = lastSignerRaw.get(claimedNorm) ?? cache.get(claimedNorm)?.raw;
517
- if (!raw) return void 0;
524
+ function buildSignerVerdict(identity, raw) {
525
+ if (identity.address === void 0 || identity.operatorToken !== void 0 || identity.aipToken !== void 0) {
526
+ return void 0;
527
+ }
518
528
  const rawMatch = raw.signer_match;
519
529
  const rawSanctions = raw.signer_sanctions;
520
530
  if (!rawMatch && !rawSanctions) return void 0;
531
+ const claimedNorm = normalizeAddress(identity.address);
521
532
  const signerNorm = rawMatch?.actual_signer ?? claimedNorm;
522
533
  return {
523
534
  signer_match: rawMatch ? projectSignerMatch(rawMatch, claimedNorm, signerNorm) : null,
524
535
  signer_sanctions: rawSanctions ?? null
525
536
  };
526
537
  }
527
- return { evaluate, captureWallet, getSignerVerdict };
538
+ return { evaluate, captureWallet };
528
539
  }
529
540
  // Annotate the CommonJS export names for ESM import in node:
530
541
  0 && (module.exports = {