@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
@@ -3994,7 +3994,7 @@ function getTrustLevel(score) {
3994
3994
  }
3995
3995
 
3996
3996
  // src/version.ts
3997
- var SDK_VERSION = "5.13.0";
3997
+ var SDK_VERSION = "5.15.0";
3998
3998
 
3999
3999
  // src/http.ts
4000
4000
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4313,6 +4313,7 @@ async function callVerifyAccessAPI(config, request) {
4313
4313
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4314
4314
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4315
4315
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4316
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4316
4317
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4317
4318
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4318
4319
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -4463,7 +4464,8 @@ async function verify(config, request, options) {
4463
4464
  "[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."
4464
4465
  );
4465
4466
  }
4466
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4467
+ const uncacheable = Boolean(request.commerceArtifacts);
4468
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
4467
4469
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4468
4470
  if (cached) {
4469
4471
  if (mergedConfig.debug) {
@@ -4544,7 +4546,10 @@ async function verify(config, request, options) {
4544
4546
  // MERCHANT caller only (bridge callers strip it before the agent plane).
4545
4547
  settlementToken: apiResponse.settlementToken,
4546
4548
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4547
- fulfilment: apiResponse.fulfilment
4549
+ fulfilment: apiResponse.fulfilment,
4550
+ mandates: apiResponse.mandates,
4551
+ kyaToken: apiResponse.kyaToken,
4552
+ aep: apiResponse.aep
4548
4553
  };
4549
4554
  return result2;
4550
4555
  }
@@ -4554,7 +4559,10 @@ async function verify(config, request, options) {
4554
4559
  trustScore: apiResponse.agent.trustScore,
4555
4560
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4556
4561
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4557
- status: apiResponse.agent.agentStatus
4562
+ status: apiResponse.agent.agentStatus,
4563
+ ...apiResponse.agent.protocolIdentities && {
4564
+ protocolIdentities: apiResponse.agent.protocolIdentities
4565
+ }
4558
4566
  } : void 0;
4559
4567
  const developer = apiResponse.developer ? {
4560
4568
  astradId: apiResponse.developer.kyaOwnerId,
@@ -4605,7 +4613,11 @@ async function verify(config, request, options) {
4605
4613
  settlementOutcome: apiResponse.settlementOutcome,
4606
4614
  settlementToken: apiResponse.settlementToken,
4607
4615
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4608
- fulfilment: apiResponse.fulfilment
4616
+ fulfilment: apiResponse.fulfilment,
4617
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
4618
+ mandates: apiResponse.mandates,
4619
+ kyaToken: apiResponse.kyaToken,
4620
+ aep: apiResponse.aep
4609
4621
  };
4610
4622
  if (result.recommendation === "deny") {
4611
4623
  result.policyAllowed = false;
@@ -4625,7 +4637,9 @@ async function verify(config, request, options) {
4625
4637
  }
4626
4638
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4627
4639
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4628
- cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4640
+ if (!uncacheable) {
4641
+ cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4642
+ }
4629
4643
  }
4630
4644
  return result;
4631
4645
  }
@@ -4636,6 +4650,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4636
4650
  // src/metadata-capture.ts
4637
4651
  var MAX_TOTAL_BYTES = 16 * 1024;
4638
4652
 
4653
+ // src/adapters/commerce-detect.ts
4654
+ var MAX_BODY_BYTES = 64 * 1024;
4655
+
4639
4656
  // src/edge-config.ts
4640
4657
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4641
4658
  version: 1,
@@ -4664,6 +4681,11 @@ async function withBudget(promise, ms) {
4664
4681
  if (timer) clearTimeout(timer);
4665
4682
  }
4666
4683
  }
4684
+ var CONTAINER_ID = (() => {
4685
+ const c = globalThis.crypto;
4686
+ if (c?.randomUUID) return c.randomUUID();
4687
+ return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
4688
+ })();
4667
4689
  var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
4668
4690
  var BeaconBuffer = class {
4669
4691
  constructor(options = {}) {
@@ -4671,6 +4693,7 @@ var BeaconBuffer = class {
4671
4693
  this.droppedSinceLast = 0;
4672
4694
  this.droppedTotal = 0;
4673
4695
  this.deliveredTotal = 0;
4696
+ this.enqueuedTotal = 0;
4674
4697
  this.backoffUntil = 0;
4675
4698
  this.collapse = /* @__PURE__ */ new Map();
4676
4699
  /** Keys the backend answered 401 for — later batches go unauthenticated. */
@@ -4683,13 +4706,16 @@ var BeaconBuffer = class {
4683
4706
  collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
4684
4707
  requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
4685
4708
  retryBackoffMs: options.retryBackoffMs ?? 1e3,
4709
+ holdRepeats: options.holdRepeats ?? false,
4710
+ containerId: options.containerId ?? CONTAINER_ID,
4686
4711
  now: options.now ?? Date.now
4687
4712
  };
4688
4713
  }
4689
4714
  /**
4690
4715
  * Queue one beacon. With a `collapseKey`, a repeat inside the window is
4691
- * merged into a held aggregate (sent when the window closes) instead of
4692
- * becoming its own item.
4716
+ * merged into this key's item while that item is still queued (not yet in
4717
+ * flight). Once it has left, the repeat becomes a new item, sendable on
4718
+ * this flush — nothing waits for a later invocation (round 27.6).
4693
4719
  */
4694
4720
  enqueue(dest, item, collapseKey) {
4695
4721
  const now = this.opts.now();
@@ -4702,12 +4728,15 @@ var BeaconBuffer = class {
4702
4728
  return;
4703
4729
  }
4704
4730
  }
4705
- const held = this.push(
4706
- dest,
4707
- { ...item, repeatCount: 1 },
4708
- entry.firstSeenAt + this.opts.collapseWindowMs
4709
- );
4710
- entry.held = held;
4731
+ if (this.opts.holdRepeats) {
4732
+ entry.held = this.push(
4733
+ dest,
4734
+ { ...item, repeatCount: 1 },
4735
+ entry.firstSeenAt + this.opts.collapseWindowMs
4736
+ );
4737
+ return;
4738
+ }
4739
+ entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
4711
4740
  return;
4712
4741
  }
4713
4742
  this.collapse.delete(collapseKey);
@@ -4743,6 +4772,7 @@ var BeaconBuffer = class {
4743
4772
  droppedSinceLast: this.droppedSinceLast,
4744
4773
  droppedTotal: this.droppedTotal,
4745
4774
  deliveredTotal: this.deliveredTotal,
4775
+ enqueuedTotal: this.enqueuedTotal,
4746
4776
  flushing: this.inFlight !== void 0
4747
4777
  };
4748
4778
  }
@@ -4757,6 +4787,7 @@ var BeaconBuffer = class {
4757
4787
  inFlight: false
4758
4788
  };
4759
4789
  this.queue.push(entry);
4790
+ this.enqueuedTotal += 1;
4760
4791
  return entry;
4761
4792
  }
4762
4793
  dropOldest() {
@@ -4802,7 +4833,11 @@ var BeaconBuffer = class {
4802
4833
  droppedSinceLast: reportedDropped,
4803
4834
  queueDepth: this.queue.length,
4804
4835
  adapter: dest.adapter ?? "edge-core",
4805
- version: SDK_VERSION
4836
+ version: SDK_VERSION,
4837
+ containerId: this.opts.containerId,
4838
+ enqueuedTotal: this.enqueuedTotal,
4839
+ deliveredTotal: this.deliveredTotal,
4840
+ droppedTotal: this.droppedTotal
4806
4841
  };
4807
4842
  const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
4808
4843
  const response = await withBudget(
@@ -4927,6 +4962,33 @@ var import_node_crypto4 = require("crypto");
4927
4962
  // src/transport/registry/visa.ts
4928
4963
  var import_jose = require("jose");
4929
4964
 
4965
+ // src/ucp/profile.ts
4966
+ var UCP_VERSION = "2026-08-25";
4967
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
4968
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
4969
+
4970
+ // src/ucp/signatures.ts
4971
+ var import_http_message_signatures3 = require("http-message-signatures");
4972
+
4973
+ // src/http-signatures/sign.ts
4974
+ var import_http_message_signatures2 = require("http-message-signatures");
4975
+
4976
+ // src/ucp/checkout-kit.ts
4977
+ var import_jose3 = require("jose");
4978
+
4979
+ // src/mandates/sd-jwt.ts
4980
+ var import_jose2 = require("jose");
4981
+
4982
+ // src/idempotency/index.ts
4983
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4984
+
4985
+ // src/payments/kyapay.ts
4986
+ var import_jose4 = require("jose");
4987
+
4988
+ // src/aep/core.ts
4989
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
4990
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
4991
+
4930
4992
  // src/gateway/modes/online.ts
4931
4993
  function toGatewayConfig(config) {
4932
4994
  return {
@@ -5638,7 +5700,7 @@ async function sendHeartbeat(enrolment, request, timeoutMs = 1500) {
5638
5700
 
5639
5701
  // src/fleet/policy-verify.ts
5640
5702
  var import_crypto = require("crypto");
5641
- var import_jose2 = require("jose");
5703
+ var import_jose5 = require("jose");
5642
5704
 
5643
5705
  // src/fleet/types.ts
5644
5706
  var FLEET_POLICY_TYP = "fleet-policy+jwt";
@@ -5687,8 +5749,8 @@ async function verifyFleetPolicy(jws, jwks, options) {
5687
5749
  let payloadBytes;
5688
5750
  let header;
5689
5751
  try {
5690
- const keySet = (0, import_jose2.createLocalJWKSet)(jwks);
5691
- const result = await (0, import_jose2.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5752
+ const keySet = (0, import_jose5.createLocalJWKSet)(jwks);
5753
+ const result = await (0, import_jose5.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5692
5754
  payloadBytes = result.payload;
5693
5755
  header = result.protectedHeader;
5694
5756
  } catch (err) {
@@ -5734,9 +5796,9 @@ async function resolveFleetJwks(pinned, chain, ownerId) {
5734
5796
  let lastSeq = 0;
5735
5797
  for (const link of chain) {
5736
5798
  try {
5737
- const { payload, protectedHeader } = await (0, import_jose2.compactVerify)(
5799
+ const { payload, protectedHeader } = await (0, import_jose5.compactVerify)(
5738
5800
  link,
5739
- (0, import_jose2.createLocalJWKSet)(trusted),
5801
+ (0, import_jose5.createLocalJWKSet)(trusted),
5740
5802
  { algorithms: ["ES256"] }
5741
5803
  );
5742
5804
  if (protectedHeader.typ !== FLEET_KEYS_TYP) continue;