@astrasyncai/verification-gateway 5.14.0 → 5.15.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 (98) hide show
  1. package/README.md +27 -17
  2. package/dist/adapters/express.d.mts +1 -1
  3. package/dist/adapters/express.d.ts +1 -1
  4. package/dist/adapters/express.js +477 -240
  5. package/dist/adapters/express.js.map +1 -1
  6. package/dist/adapters/express.mjs +477 -240
  7. package/dist/adapters/express.mjs.map +1 -1
  8. package/dist/adapters/mcp.d.mts +1 -1
  9. package/dist/adapters/mcp.d.ts +1 -1
  10. package/dist/adapters/mcp.js +20 -6
  11. package/dist/adapters/mcp.js.map +1 -1
  12. package/dist/adapters/mcp.mjs +20 -6
  13. package/dist/adapters/mcp.mjs.map +1 -1
  14. package/dist/adapters/nextjs.d.mts +1 -1
  15. package/dist/adapters/nextjs.d.ts +1 -1
  16. package/dist/adapters/nextjs.js +460 -239
  17. package/dist/adapters/nextjs.js.map +1 -1
  18. package/dist/adapters/nextjs.mjs +460 -239
  19. package/dist/adapters/nextjs.mjs.map +1 -1
  20. package/dist/adapters/sdk.d.mts +18 -10
  21. package/dist/adapters/sdk.d.ts +18 -10
  22. package/dist/adapters/sdk.js +80 -23
  23. package/dist/adapters/sdk.js.map +1 -1
  24. package/dist/adapters/sdk.mjs +80 -23
  25. package/dist/adapters/sdk.mjs.map +1 -1
  26. package/dist/agent/index.js +1 -1
  27. package/dist/agent/index.js.map +1 -1
  28. package/dist/agent/index.mjs +1 -1
  29. package/dist/agent/index.mjs.map +1 -1
  30. package/dist/bin/astrasync-claude-hook.js +55 -11
  31. package/dist/bin/astrasync-codex-hook.js +55 -11
  32. package/dist/bin/astrasync-guard.js +55 -11
  33. package/dist/bin/astrasync.js +288 -33
  34. package/dist/browser/background.js +50 -6
  35. package/dist/browser/background.js.map +1 -1
  36. package/dist/browser/background.mjs +60 -6
  37. package/dist/browser/background.mjs.map +1 -1
  38. package/dist/cli/index.js +1 -1
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/index.mjs +1 -1
  41. package/dist/cli/index.mjs.map +1 -1
  42. package/dist/codex/index.js +55 -11
  43. package/dist/codex/index.js.map +1 -1
  44. package/dist/codex/index.mjs +65 -11
  45. package/dist/codex/index.mjs.map +1 -1
  46. package/dist/cursor/extension.js +55 -11
  47. package/dist/cursor/extension.js.map +1 -1
  48. package/dist/cursor/extension.mjs +65 -11
  49. package/dist/cursor/extension.mjs.map +1 -1
  50. package/dist/edge-config.d.mts +31 -2
  51. package/dist/edge-config.d.ts +31 -2
  52. package/dist/edge-config.js +35 -5
  53. package/dist/edge-config.js.map +1 -1
  54. package/dist/edge-config.mjs +32 -4
  55. package/dist/edge-config.mjs.map +1 -1
  56. package/dist/edge-core/index.d.mts +11 -2
  57. package/dist/edge-core/index.d.ts +11 -2
  58. package/dist/edge-core/index.js +93 -10
  59. package/dist/edge-core/index.js.map +1 -1
  60. package/dist/edge-core/index.mjs +91 -10
  61. package/dist/edge-core/index.mjs.map +1 -1
  62. package/dist/gateway/gateway.js +50 -6
  63. package/dist/gateway/gateway.js.map +1 -1
  64. package/dist/gateway/gateway.mjs +60 -6
  65. package/dist/gateway/gateway.mjs.map +1 -1
  66. package/dist/git-trigger/git-hooks.d.mts +1 -1
  67. package/dist/git-trigger/git-hooks.d.ts +1 -1
  68. package/dist/index.d.mts +1314 -34
  69. package/dist/index.d.ts +1314 -34
  70. package/dist/index.js +5116 -2612
  71. package/dist/index.js.map +1 -1
  72. package/dist/index.mjs +5063 -2614
  73. package/dist/index.mjs.map +1 -1
  74. package/dist/registration/index.d.mts +28 -2
  75. package/dist/registration/index.d.ts +28 -2
  76. package/dist/registration/index.js +18 -3
  77. package/dist/registration/index.js.map +1 -1
  78. package/dist/registration/index.mjs +15 -2
  79. package/dist/registration/index.mjs.map +1 -1
  80. package/dist/transport/index.d.mts +7 -5
  81. package/dist/transport/index.d.ts +7 -5
  82. package/dist/transport/index.js +61 -5
  83. package/dist/transport/index.js.map +1 -1
  84. package/dist/transport/index.mjs +67 -11
  85. package/dist/transport/index.mjs.map +1 -1
  86. package/dist/{types-C_b4QTyO.d.ts → types-DtJjlW4O.d.ts} +104 -10
  87. package/dist/{types-BCkwBA84.d.mts → types-Dxf9DBpr.d.mts} +106 -12
  88. package/dist/{types-BCkwBA84.d.ts → types-Dxf9DBpr.d.ts} +106 -12
  89. package/dist/{types-DlshIIR-.d.mts → types-Eg6VoBNH.d.mts} +104 -10
  90. package/dist/ui/index.d.mts +1 -1
  91. package/dist/ui/index.d.ts +1 -1
  92. package/dist/verify.d.mts +1 -1
  93. package/dist/verify.d.ts +1 -1
  94. package/dist/verify.js +20 -6
  95. package/dist/verify.js.map +1 -1
  96. package/dist/verify.mjs +20 -6
  97. package/dist/verify.mjs.map +1 -1
  98. package/package.json +1 -1
@@ -3752,7 +3752,7 @@ function getTrustLevel(score) {
3752
3752
  }
3753
3753
 
3754
3754
  // src/version.ts
3755
- var SDK_VERSION = "5.14.0";
3755
+ var SDK_VERSION = "5.15.0";
3756
3756
 
3757
3757
  // src/http.ts
3758
3758
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4071,6 +4071,7 @@ async function callVerifyAccessAPI(config, request) {
4071
4071
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4072
4072
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4073
4073
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4074
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4074
4075
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4075
4076
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4076
4077
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -4221,7 +4222,8 @@ async function verify(config, request, options) {
4221
4222
  "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
4222
4223
  );
4223
4224
  }
4224
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4225
+ const uncacheable = Boolean(request.commerceArtifacts);
4226
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
4225
4227
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4226
4228
  if (cached) {
4227
4229
  if (mergedConfig.debug) {
@@ -4302,7 +4304,10 @@ async function verify(config, request, options) {
4302
4304
  // MERCHANT caller only (bridge callers strip it before the agent plane).
4303
4305
  settlementToken: apiResponse.settlementToken,
4304
4306
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4305
- fulfilment: apiResponse.fulfilment
4307
+ fulfilment: apiResponse.fulfilment,
4308
+ mandates: apiResponse.mandates,
4309
+ kyaToken: apiResponse.kyaToken,
4310
+ aep: apiResponse.aep
4306
4311
  };
4307
4312
  return result2;
4308
4313
  }
@@ -4312,7 +4317,10 @@ async function verify(config, request, options) {
4312
4317
  trustScore: apiResponse.agent.trustScore,
4313
4318
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4314
4319
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4315
- status: apiResponse.agent.agentStatus
4320
+ status: apiResponse.agent.agentStatus,
4321
+ ...apiResponse.agent.protocolIdentities && {
4322
+ protocolIdentities: apiResponse.agent.protocolIdentities
4323
+ }
4316
4324
  } : void 0;
4317
4325
  const developer = apiResponse.developer ? {
4318
4326
  astradId: apiResponse.developer.kyaOwnerId,
@@ -4363,7 +4371,11 @@ async function verify(config, request, options) {
4363
4371
  settlementOutcome: apiResponse.settlementOutcome,
4364
4372
  settlementToken: apiResponse.settlementToken,
4365
4373
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4366
- fulfilment: apiResponse.fulfilment
4374
+ fulfilment: apiResponse.fulfilment,
4375
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
4376
+ mandates: apiResponse.mandates,
4377
+ kyaToken: apiResponse.kyaToken,
4378
+ aep: apiResponse.aep
4367
4379
  };
4368
4380
  if (result.recommendation === "deny") {
4369
4381
  result.policyAllowed = false;
@@ -4383,7 +4395,9 @@ async function verify(config, request, options) {
4383
4395
  }
4384
4396
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4385
4397
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4386
- cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4398
+ if (!uncacheable) {
4399
+ cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4400
+ }
4387
4401
  }
4388
4402
  return result;
4389
4403
  }
@@ -4394,6 +4408,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4394
4408
  // src/metadata-capture.ts
4395
4409
  var MAX_TOTAL_BYTES = 16 * 1024;
4396
4410
 
4411
+ // src/adapters/commerce-detect.ts
4412
+ var MAX_BODY_BYTES = 64 * 1024;
4413
+
4397
4414
  // src/edge-config.ts
4398
4415
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4399
4416
  version: 1,
@@ -4703,6 +4720,33 @@ var import_node_crypto4 = require("crypto");
4703
4720
  // src/transport/registry/visa.ts
4704
4721
  var import_jose = require("jose");
4705
4722
 
4723
+ // src/ucp/profile.ts
4724
+ var UCP_VERSION = "2026-08-25";
4725
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
4726
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
4727
+
4728
+ // src/ucp/signatures.ts
4729
+ var import_http_message_signatures3 = require("http-message-signatures");
4730
+
4731
+ // src/http-signatures/sign.ts
4732
+ var import_http_message_signatures2 = require("http-message-signatures");
4733
+
4734
+ // src/ucp/checkout-kit.ts
4735
+ var import_jose3 = require("jose");
4736
+
4737
+ // src/mandates/sd-jwt.ts
4738
+ var import_jose2 = require("jose");
4739
+
4740
+ // src/idempotency/index.ts
4741
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4742
+
4743
+ // src/payments/kyapay.ts
4744
+ var import_jose4 = require("jose");
4745
+
4746
+ // src/aep/core.ts
4747
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
4748
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
4749
+
4706
4750
  // src/gateway/modes/online.ts
4707
4751
  function toGatewayConfig(config) {
4708
4752
  return {
@@ -5693,7 +5737,7 @@ async function sendHeartbeat(enrolment, request, timeoutMs = 1500) {
5693
5737
 
5694
5738
  // src/fleet/policy-verify.ts
5695
5739
  var import_crypto = require("crypto");
5696
- var import_jose2 = require("jose");
5740
+ var import_jose5 = require("jose");
5697
5741
 
5698
5742
  // src/fleet/types.ts
5699
5743
  var FLEET_POLICY_TYP = "fleet-policy+jwt";
@@ -5742,8 +5786,8 @@ async function verifyFleetPolicy(jws, jwks, options) {
5742
5786
  let payloadBytes;
5743
5787
  let header;
5744
5788
  try {
5745
- const keySet = (0, import_jose2.createLocalJWKSet)(jwks);
5746
- const result = await (0, import_jose2.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5789
+ const keySet = (0, import_jose5.createLocalJWKSet)(jwks);
5790
+ const result = await (0, import_jose5.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5747
5791
  payloadBytes = result.payload;
5748
5792
  header = result.protectedHeader;
5749
5793
  } catch (err) {
@@ -5789,9 +5833,9 @@ async function resolveFleetJwks(pinned, chain, ownerId) {
5789
5833
  let lastSeq = 0;
5790
5834
  for (const link of chain) {
5791
5835
  try {
5792
- const { payload, protectedHeader } = await (0, import_jose2.compactVerify)(
5836
+ const { payload, protectedHeader } = await (0, import_jose5.compactVerify)(
5793
5837
  link,
5794
- (0, import_jose2.createLocalJWKSet)(trusted),
5838
+ (0, import_jose5.createLocalJWKSet)(trusted),
5795
5839
  { algorithms: ["ES256"] }
5796
5840
  );
5797
5841
  if (protectedHeader.typ !== FLEET_KEYS_TYP) continue;
@@ -3751,7 +3751,7 @@ function getTrustLevel(score) {
3751
3751
  }
3752
3752
 
3753
3753
  // src/version.ts
3754
- var SDK_VERSION = "5.14.0";
3754
+ var SDK_VERSION = "5.15.0";
3755
3755
 
3756
3756
  // src/http.ts
3757
3757
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4070,6 +4070,7 @@ async function callVerifyAccessAPI(config, request) {
4070
4070
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4071
4071
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4072
4072
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4073
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4073
4074
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4074
4075
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4075
4076
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -4220,7 +4221,8 @@ async function verify(config, request, options) {
4220
4221
  "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
4221
4222
  );
4222
4223
  }
4223
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4224
+ const uncacheable = Boolean(request.commerceArtifacts);
4225
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
4224
4226
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4225
4227
  if (cached) {
4226
4228
  if (mergedConfig.debug) {
@@ -4301,7 +4303,10 @@ async function verify(config, request, options) {
4301
4303
  // MERCHANT caller only (bridge callers strip it before the agent plane).
4302
4304
  settlementToken: apiResponse.settlementToken,
4303
4305
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4304
- fulfilment: apiResponse.fulfilment
4306
+ fulfilment: apiResponse.fulfilment,
4307
+ mandates: apiResponse.mandates,
4308
+ kyaToken: apiResponse.kyaToken,
4309
+ aep: apiResponse.aep
4305
4310
  };
4306
4311
  return result2;
4307
4312
  }
@@ -4311,7 +4316,10 @@ async function verify(config, request, options) {
4311
4316
  trustScore: apiResponse.agent.trustScore,
4312
4317
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4313
4318
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4314
- status: apiResponse.agent.agentStatus
4319
+ status: apiResponse.agent.agentStatus,
4320
+ ...apiResponse.agent.protocolIdentities && {
4321
+ protocolIdentities: apiResponse.agent.protocolIdentities
4322
+ }
4315
4323
  } : void 0;
4316
4324
  const developer = apiResponse.developer ? {
4317
4325
  astradId: apiResponse.developer.kyaOwnerId,
@@ -4362,7 +4370,11 @@ async function verify(config, request, options) {
4362
4370
  settlementOutcome: apiResponse.settlementOutcome,
4363
4371
  settlementToken: apiResponse.settlementToken,
4364
4372
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4365
- fulfilment: apiResponse.fulfilment
4373
+ fulfilment: apiResponse.fulfilment,
4374
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
4375
+ mandates: apiResponse.mandates,
4376
+ kyaToken: apiResponse.kyaToken,
4377
+ aep: apiResponse.aep
4366
4378
  };
4367
4379
  if (result.recommendation === "deny") {
4368
4380
  result.policyAllowed = false;
@@ -4382,7 +4394,9 @@ async function verify(config, request, options) {
4382
4394
  }
4383
4395
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4384
4396
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4385
- cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4397
+ if (!uncacheable) {
4398
+ cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4399
+ }
4386
4400
  }
4387
4401
  return result;
4388
4402
  }
@@ -4393,6 +4407,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4393
4407
  // src/metadata-capture.ts
4394
4408
  var MAX_TOTAL_BYTES = 16 * 1024;
4395
4409
 
4410
+ // src/adapters/commerce-detect.ts
4411
+ var MAX_BODY_BYTES = 64 * 1024;
4412
+
4396
4413
  // src/edge-config.ts
4397
4414
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4398
4415
  version: 1,
@@ -4702,6 +4719,33 @@ var import_node_crypto4 = require("crypto");
4702
4719
  // src/transport/registry/visa.ts
4703
4720
  var import_jose = require("jose");
4704
4721
 
4722
+ // src/ucp/profile.ts
4723
+ var UCP_VERSION = "2026-08-25";
4724
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
4725
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
4726
+
4727
+ // src/ucp/signatures.ts
4728
+ var import_http_message_signatures3 = require("http-message-signatures");
4729
+
4730
+ // src/http-signatures/sign.ts
4731
+ var import_http_message_signatures2 = require("http-message-signatures");
4732
+
4733
+ // src/ucp/checkout-kit.ts
4734
+ var import_jose3 = require("jose");
4735
+
4736
+ // src/mandates/sd-jwt.ts
4737
+ var import_jose2 = require("jose");
4738
+
4739
+ // src/idempotency/index.ts
4740
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4741
+
4742
+ // src/payments/kyapay.ts
4743
+ var import_jose4 = require("jose");
4744
+
4745
+ // src/aep/core.ts
4746
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
4747
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
4748
+
4705
4749
  // src/gateway/modes/online.ts
4706
4750
  function toGatewayConfig(config) {
4707
4751
  return {
@@ -5439,7 +5483,7 @@ async function sendHeartbeat(enrolment, request, timeoutMs = 1500) {
5439
5483
 
5440
5484
  // src/fleet/policy-verify.ts
5441
5485
  var import_crypto = require("crypto");
5442
- var import_jose2 = require("jose");
5486
+ var import_jose5 = require("jose");
5443
5487
 
5444
5488
  // src/fleet/types.ts
5445
5489
  var FLEET_POLICY_TYP = "fleet-policy+jwt";
@@ -5488,8 +5532,8 @@ async function verifyFleetPolicy(jws, jwks, options) {
5488
5532
  let payloadBytes;
5489
5533
  let header;
5490
5534
  try {
5491
- const keySet = (0, import_jose2.createLocalJWKSet)(jwks);
5492
- const result = await (0, import_jose2.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5535
+ const keySet = (0, import_jose5.createLocalJWKSet)(jwks);
5536
+ const result = await (0, import_jose5.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5493
5537
  payloadBytes = result.payload;
5494
5538
  header = result.protectedHeader;
5495
5539
  } catch (err) {
@@ -5535,9 +5579,9 @@ async function resolveFleetJwks(pinned, chain, ownerId) {
5535
5579
  let lastSeq = 0;
5536
5580
  for (const link of chain) {
5537
5581
  try {
5538
- const { payload, protectedHeader } = await (0, import_jose2.compactVerify)(
5582
+ const { payload, protectedHeader } = await (0, import_jose5.compactVerify)(
5539
5583
  link,
5540
- (0, import_jose2.createLocalJWKSet)(trusted),
5584
+ (0, import_jose5.createLocalJWKSet)(trusted),
5541
5585
  { algorithms: ["ES256"] }
5542
5586
  );
5543
5587
  if (protectedHeader.typ !== FLEET_KEYS_TYP) continue;
@@ -3713,7 +3713,7 @@ Policy saved to ${outputPath}`);
3713
3713
  };
3714
3714
 
3715
3715
  // src/version.ts
3716
- var SDK_VERSION = "5.14.0";
3716
+ var SDK_VERSION = "5.15.0";
3717
3717
 
3718
3718
  // src/http.ts
3719
3719
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4936,6 +4936,7 @@ async function callVerifyAccessAPI(config, request2) {
4936
4936
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4937
4937
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4938
4938
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4939
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4939
4940
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4940
4941
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4941
4942
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -5086,7 +5087,8 @@ async function verify(config, request2, options) {
5086
5087
  "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
5087
5088
  );
5088
5089
  }
5089
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
5090
+ const uncacheable = Boolean(request2.commerceArtifacts);
5091
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
5090
5092
  const cached = getCachedResult(request2, mergedConfig.counterpartyId);
5091
5093
  if (cached) {
5092
5094
  if (mergedConfig.debug) {
@@ -5167,7 +5169,10 @@ async function verify(config, request2, options) {
5167
5169
  // MERCHANT caller only (bridge callers strip it before the agent plane).
5168
5170
  settlementToken: apiResponse.settlementToken,
5169
5171
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
5170
- fulfilment: apiResponse.fulfilment
5172
+ fulfilment: apiResponse.fulfilment,
5173
+ mandates: apiResponse.mandates,
5174
+ kyaToken: apiResponse.kyaToken,
5175
+ aep: apiResponse.aep
5171
5176
  };
5172
5177
  return result2;
5173
5178
  }
@@ -5177,7 +5182,10 @@ async function verify(config, request2, options) {
5177
5182
  trustScore: apiResponse.agent.trustScore,
5178
5183
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
5179
5184
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
5180
- status: apiResponse.agent.agentStatus
5185
+ status: apiResponse.agent.agentStatus,
5186
+ ...apiResponse.agent.protocolIdentities && {
5187
+ protocolIdentities: apiResponse.agent.protocolIdentities
5188
+ }
5181
5189
  } : void 0;
5182
5190
  const developer = apiResponse.developer ? {
5183
5191
  astradId: apiResponse.developer.kyaOwnerId,
@@ -5228,7 +5236,11 @@ async function verify(config, request2, options) {
5228
5236
  settlementOutcome: apiResponse.settlementOutcome,
5229
5237
  settlementToken: apiResponse.settlementToken,
5230
5238
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
5231
- fulfilment: apiResponse.fulfilment
5239
+ fulfilment: apiResponse.fulfilment,
5240
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
5241
+ mandates: apiResponse.mandates,
5242
+ kyaToken: apiResponse.kyaToken,
5243
+ aep: apiResponse.aep
5232
5244
  };
5233
5245
  if (result.recommendation === "deny") {
5234
5246
  result.policyAllowed = false;
@@ -5248,7 +5260,9 @@ async function verify(config, request2, options) {
5248
5260
  }
5249
5261
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
5250
5262
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
5251
- cacheResult(request2, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
5263
+ if (!uncacheable) {
5264
+ cacheResult(request2, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
5265
+ }
5252
5266
  }
5253
5267
  return result;
5254
5268
  }
@@ -5259,6 +5273,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
5259
5273
  // src/metadata-capture.ts
5260
5274
  var MAX_TOTAL_BYTES = 16 * 1024;
5261
5275
 
5276
+ // src/adapters/commerce-detect.ts
5277
+ var MAX_BODY_BYTES = 64 * 1024;
5278
+
5262
5279
  // src/edge-config.ts
5263
5280
  var DEFAULT_EDGE_CONFIG = Object.freeze({
5264
5281
  version: 1,
@@ -5568,6 +5585,33 @@ var import_node_crypto4 = require("crypto");
5568
5585
  // src/transport/registry/visa.ts
5569
5586
  var import_jose = require("jose");
5570
5587
 
5588
+ // src/ucp/profile.ts
5589
+ var UCP_VERSION = "2026-08-25";
5590
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
5591
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
5592
+
5593
+ // src/ucp/signatures.ts
5594
+ var import_http_message_signatures3 = require("http-message-signatures");
5595
+
5596
+ // src/http-signatures/sign.ts
5597
+ var import_http_message_signatures2 = require("http-message-signatures");
5598
+
5599
+ // src/ucp/checkout-kit.ts
5600
+ var import_jose3 = require("jose");
5601
+
5602
+ // src/mandates/sd-jwt.ts
5603
+ var import_jose2 = require("jose");
5604
+
5605
+ // src/idempotency/index.ts
5606
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
5607
+
5608
+ // src/payments/kyapay.ts
5609
+ var import_jose4 = require("jose");
5610
+
5611
+ // src/aep/core.ts
5612
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
5613
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
5614
+
5571
5615
  // src/gateway/modes/online.ts
5572
5616
  function toGatewayConfig(config) {
5573
5617
  return {
@@ -6595,7 +6639,7 @@ function writeState(paths, state) {
6595
6639
 
6596
6640
  // src/fleet/policy-verify.ts
6597
6641
  var import_crypto = require("crypto");
6598
- var import_jose2 = require("jose");
6642
+ var import_jose5 = require("jose");
6599
6643
 
6600
6644
  // src/fleet/types.ts
6601
6645
  var FLEET_POLICY_TYP = "fleet-policy+jwt";
@@ -6644,8 +6688,8 @@ async function verifyFleetPolicy(jws, jwks, options) {
6644
6688
  let payloadBytes;
6645
6689
  let header;
6646
6690
  try {
6647
- const keySet = (0, import_jose2.createLocalJWKSet)(jwks);
6648
- const result = await (0, import_jose2.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
6691
+ const keySet = (0, import_jose5.createLocalJWKSet)(jwks);
6692
+ const result = await (0, import_jose5.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
6649
6693
  payloadBytes = result.payload;
6650
6694
  header = result.protectedHeader;
6651
6695
  } catch (err) {
@@ -6691,9 +6735,9 @@ async function resolveFleetJwks(pinned, chain, ownerId) {
6691
6735
  let lastSeq = 0;
6692
6736
  for (const link of chain) {
6693
6737
  try {
6694
- const { payload, protectedHeader } = await (0, import_jose2.compactVerify)(
6738
+ const { payload, protectedHeader } = await (0, import_jose5.compactVerify)(
6695
6739
  link,
6696
- (0, import_jose2.createLocalJWKSet)(trusted),
6740
+ (0, import_jose5.createLocalJWKSet)(trusted),
6697
6741
  { algorithms: ["ES256"] }
6698
6742
  );
6699
6743
  if (protectedHeader.typ !== FLEET_KEYS_TYP) continue;