@astrasyncai/verification-gateway 5.13.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 +504 -249
  5. package/dist/adapters/express.js.map +1 -1
  6. package/dist/adapters/express.mjs +504 -249
  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 +487 -248
  17. package/dist/adapters/nextjs.js.map +1 -1
  18. package/dist/adapters/nextjs.mjs +487 -248
  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 +82 -20
  31. package/dist/bin/astrasync-codex-hook.js +82 -20
  32. package/dist/bin/astrasync-guard.js +82 -20
  33. package/dist/bin/astrasync.js +316 -43
  34. package/dist/browser/background.js +77 -15
  35. package/dist/browser/background.js.map +1 -1
  36. package/dist/browser/background.mjs +87 -15
  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 +82 -20
  43. package/dist/codex/index.js.map +1 -1
  44. package/dist/codex/index.mjs +92 -20
  45. package/dist/codex/index.mjs.map +1 -1
  46. package/dist/cursor/extension.js +82 -20
  47. package/dist/cursor/extension.js.map +1 -1
  48. package/dist/cursor/extension.mjs +92 -20
  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 +43 -6
  57. package/dist/edge-core/index.d.ts +43 -6
  58. package/dist/edge-core/index.js +120 -19
  59. package/dist/edge-core/index.js.map +1 -1
  60. package/dist/edge-core/index.mjs +118 -19
  61. package/dist/edge-core/index.mjs.map +1 -1
  62. package/dist/gateway/gateway.js +77 -15
  63. package/dist/gateway/gateway.js.map +1 -1
  64. package/dist/gateway/gateway.mjs +87 -15
  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 +5143 -2621
  71. package/dist/index.js.map +1 -1
  72. package/dist/index.mjs +5090 -2623
  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
@@ -3988,7 +3988,7 @@ function getTrustLevel(score) {
3988
3988
  }
3989
3989
 
3990
3990
  // src/version.ts
3991
- var SDK_VERSION = "5.13.0";
3991
+ var SDK_VERSION = "5.15.0";
3992
3992
 
3993
3993
  // src/http.ts
3994
3994
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4307,6 +4307,7 @@ async function callVerifyAccessAPI(config, request) {
4307
4307
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4308
4308
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4309
4309
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4310
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4310
4311
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4311
4312
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4312
4313
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -4457,7 +4458,8 @@ async function verify(config, request, options) {
4457
4458
  "[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."
4458
4459
  );
4459
4460
  }
4460
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4461
+ const uncacheable = Boolean(request.commerceArtifacts);
4462
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
4461
4463
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4462
4464
  if (cached) {
4463
4465
  if (mergedConfig.debug) {
@@ -4538,7 +4540,10 @@ async function verify(config, request, options) {
4538
4540
  // MERCHANT caller only (bridge callers strip it before the agent plane).
4539
4541
  settlementToken: apiResponse.settlementToken,
4540
4542
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4541
- fulfilment: apiResponse.fulfilment
4543
+ fulfilment: apiResponse.fulfilment,
4544
+ mandates: apiResponse.mandates,
4545
+ kyaToken: apiResponse.kyaToken,
4546
+ aep: apiResponse.aep
4542
4547
  };
4543
4548
  return result2;
4544
4549
  }
@@ -4548,7 +4553,10 @@ async function verify(config, request, options) {
4548
4553
  trustScore: apiResponse.agent.trustScore,
4549
4554
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4550
4555
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4551
- status: apiResponse.agent.agentStatus
4556
+ status: apiResponse.agent.agentStatus,
4557
+ ...apiResponse.agent.protocolIdentities && {
4558
+ protocolIdentities: apiResponse.agent.protocolIdentities
4559
+ }
4552
4560
  } : void 0;
4553
4561
  const developer = apiResponse.developer ? {
4554
4562
  astradId: apiResponse.developer.kyaOwnerId,
@@ -4599,7 +4607,11 @@ async function verify(config, request, options) {
4599
4607
  settlementOutcome: apiResponse.settlementOutcome,
4600
4608
  settlementToken: apiResponse.settlementToken,
4601
4609
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4602
- fulfilment: apiResponse.fulfilment
4610
+ fulfilment: apiResponse.fulfilment,
4611
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
4612
+ mandates: apiResponse.mandates,
4613
+ kyaToken: apiResponse.kyaToken,
4614
+ aep: apiResponse.aep
4603
4615
  };
4604
4616
  if (result.recommendation === "deny") {
4605
4617
  result.policyAllowed = false;
@@ -4619,7 +4631,9 @@ async function verify(config, request, options) {
4619
4631
  }
4620
4632
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4621
4633
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4622
- cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4634
+ if (!uncacheable) {
4635
+ cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4636
+ }
4623
4637
  }
4624
4638
  return result;
4625
4639
  }
@@ -4630,6 +4644,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4630
4644
  // src/metadata-capture.ts
4631
4645
  var MAX_TOTAL_BYTES = 16 * 1024;
4632
4646
 
4647
+ // src/adapters/commerce-detect.ts
4648
+ var MAX_BODY_BYTES = 64 * 1024;
4649
+
4633
4650
  // src/edge-config.ts
4634
4651
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4635
4652
  version: 1,
@@ -4658,6 +4675,11 @@ async function withBudget(promise, ms) {
4658
4675
  if (timer) clearTimeout(timer);
4659
4676
  }
4660
4677
  }
4678
+ var CONTAINER_ID = (() => {
4679
+ const c = globalThis.crypto;
4680
+ if (c?.randomUUID) return c.randomUUID();
4681
+ return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
4682
+ })();
4661
4683
  var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
4662
4684
  var BeaconBuffer = class {
4663
4685
  constructor(options = {}) {
@@ -4665,6 +4687,7 @@ var BeaconBuffer = class {
4665
4687
  this.droppedSinceLast = 0;
4666
4688
  this.droppedTotal = 0;
4667
4689
  this.deliveredTotal = 0;
4690
+ this.enqueuedTotal = 0;
4668
4691
  this.backoffUntil = 0;
4669
4692
  this.collapse = /* @__PURE__ */ new Map();
4670
4693
  /** Keys the backend answered 401 for — later batches go unauthenticated. */
@@ -4677,13 +4700,16 @@ var BeaconBuffer = class {
4677
4700
  collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
4678
4701
  requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
4679
4702
  retryBackoffMs: options.retryBackoffMs ?? 1e3,
4703
+ holdRepeats: options.holdRepeats ?? false,
4704
+ containerId: options.containerId ?? CONTAINER_ID,
4680
4705
  now: options.now ?? Date.now
4681
4706
  };
4682
4707
  }
4683
4708
  /**
4684
4709
  * Queue one beacon. With a `collapseKey`, a repeat inside the window is
4685
- * merged into a held aggregate (sent when the window closes) instead of
4686
- * becoming its own item.
4710
+ * merged into this key's item while that item is still queued (not yet in
4711
+ * flight). Once it has left, the repeat becomes a new item, sendable on
4712
+ * this flush — nothing waits for a later invocation (round 27.6).
4687
4713
  */
4688
4714
  enqueue(dest, item, collapseKey) {
4689
4715
  const now = this.opts.now();
@@ -4696,12 +4722,15 @@ var BeaconBuffer = class {
4696
4722
  return;
4697
4723
  }
4698
4724
  }
4699
- const held = this.push(
4700
- dest,
4701
- { ...item, repeatCount: 1 },
4702
- entry.firstSeenAt + this.opts.collapseWindowMs
4703
- );
4704
- entry.held = held;
4725
+ if (this.opts.holdRepeats) {
4726
+ entry.held = this.push(
4727
+ dest,
4728
+ { ...item, repeatCount: 1 },
4729
+ entry.firstSeenAt + this.opts.collapseWindowMs
4730
+ );
4731
+ return;
4732
+ }
4733
+ entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
4705
4734
  return;
4706
4735
  }
4707
4736
  this.collapse.delete(collapseKey);
@@ -4737,6 +4766,7 @@ var BeaconBuffer = class {
4737
4766
  droppedSinceLast: this.droppedSinceLast,
4738
4767
  droppedTotal: this.droppedTotal,
4739
4768
  deliveredTotal: this.deliveredTotal,
4769
+ enqueuedTotal: this.enqueuedTotal,
4740
4770
  flushing: this.inFlight !== void 0
4741
4771
  };
4742
4772
  }
@@ -4751,6 +4781,7 @@ var BeaconBuffer = class {
4751
4781
  inFlight: false
4752
4782
  };
4753
4783
  this.queue.push(entry);
4784
+ this.enqueuedTotal += 1;
4754
4785
  return entry;
4755
4786
  }
4756
4787
  dropOldest() {
@@ -4796,7 +4827,11 @@ var BeaconBuffer = class {
4796
4827
  droppedSinceLast: reportedDropped,
4797
4828
  queueDepth: this.queue.length,
4798
4829
  adapter: dest.adapter ?? "edge-core",
4799
- version: SDK_VERSION
4830
+ version: SDK_VERSION,
4831
+ containerId: this.opts.containerId,
4832
+ enqueuedTotal: this.enqueuedTotal,
4833
+ deliveredTotal: this.deliveredTotal,
4834
+ droppedTotal: this.droppedTotal
4800
4835
  };
4801
4836
  const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
4802
4837
  const response = await withBudget(
@@ -4921,6 +4956,33 @@ var import_node_crypto4 = require("crypto");
4921
4956
  // src/transport/registry/visa.ts
4922
4957
  var import_jose = require("jose");
4923
4958
 
4959
+ // src/ucp/profile.ts
4960
+ var UCP_VERSION = "2026-08-25";
4961
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
4962
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
4963
+
4964
+ // src/ucp/signatures.ts
4965
+ var import_http_message_signatures3 = require("http-message-signatures");
4966
+
4967
+ // src/http-signatures/sign.ts
4968
+ var import_http_message_signatures2 = require("http-message-signatures");
4969
+
4970
+ // src/ucp/checkout-kit.ts
4971
+ var import_jose3 = require("jose");
4972
+
4973
+ // src/mandates/sd-jwt.ts
4974
+ var import_jose2 = require("jose");
4975
+
4976
+ // src/idempotency/index.ts
4977
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4978
+
4979
+ // src/payments/kyapay.ts
4980
+ var import_jose4 = require("jose");
4981
+
4982
+ // src/aep/core.ts
4983
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
4984
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
4985
+
4924
4986
  // src/gateway/modes/online.ts
4925
4987
  function toGatewayConfig(config) {
4926
4988
  return {