@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
@@ -4036,7 +4036,7 @@ function getTrustLevel(score) {
4036
4036
  }
4037
4037
 
4038
4038
  // src/version.ts
4039
- var SDK_VERSION = "5.13.0";
4039
+ var SDK_VERSION = "5.15.0";
4040
4040
 
4041
4041
  // src/http.ts
4042
4042
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4355,6 +4355,7 @@ async function callVerifyAccessAPI(config, request) {
4355
4355
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4356
4356
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4357
4357
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4358
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4358
4359
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4359
4360
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4360
4361
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -4505,7 +4506,8 @@ async function verify(config, request, options) {
4505
4506
  "[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."
4506
4507
  );
4507
4508
  }
4508
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4509
+ const uncacheable = Boolean(request.commerceArtifacts);
4510
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
4509
4511
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4510
4512
  if (cached) {
4511
4513
  if (mergedConfig.debug) {
@@ -4586,7 +4588,10 @@ async function verify(config, request, options) {
4586
4588
  // MERCHANT caller only (bridge callers strip it before the agent plane).
4587
4589
  settlementToken: apiResponse.settlementToken,
4588
4590
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4589
- fulfilment: apiResponse.fulfilment
4591
+ fulfilment: apiResponse.fulfilment,
4592
+ mandates: apiResponse.mandates,
4593
+ kyaToken: apiResponse.kyaToken,
4594
+ aep: apiResponse.aep
4590
4595
  };
4591
4596
  return result2;
4592
4597
  }
@@ -4596,7 +4601,10 @@ async function verify(config, request, options) {
4596
4601
  trustScore: apiResponse.agent.trustScore,
4597
4602
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4598
4603
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4599
- status: apiResponse.agent.agentStatus
4604
+ status: apiResponse.agent.agentStatus,
4605
+ ...apiResponse.agent.protocolIdentities && {
4606
+ protocolIdentities: apiResponse.agent.protocolIdentities
4607
+ }
4600
4608
  } : void 0;
4601
4609
  const developer = apiResponse.developer ? {
4602
4610
  astradId: apiResponse.developer.kyaOwnerId,
@@ -4647,7 +4655,11 @@ async function verify(config, request, options) {
4647
4655
  settlementOutcome: apiResponse.settlementOutcome,
4648
4656
  settlementToken: apiResponse.settlementToken,
4649
4657
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4650
- fulfilment: apiResponse.fulfilment
4658
+ fulfilment: apiResponse.fulfilment,
4659
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
4660
+ mandates: apiResponse.mandates,
4661
+ kyaToken: apiResponse.kyaToken,
4662
+ aep: apiResponse.aep
4651
4663
  };
4652
4664
  if (result.recommendation === "deny") {
4653
4665
  result.policyAllowed = false;
@@ -4667,7 +4679,9 @@ async function verify(config, request, options) {
4667
4679
  }
4668
4680
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4669
4681
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4670
- cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4682
+ if (!uncacheable) {
4683
+ cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4684
+ }
4671
4685
  }
4672
4686
  return result;
4673
4687
  }
@@ -4678,6 +4692,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4678
4692
  // src/metadata-capture.ts
4679
4693
  var MAX_TOTAL_BYTES = 16 * 1024;
4680
4694
 
4695
+ // src/adapters/commerce-detect.ts
4696
+ var MAX_BODY_BYTES = 64 * 1024;
4697
+
4681
4698
  // src/edge-config.ts
4682
4699
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4683
4700
  version: 1,
@@ -4706,6 +4723,11 @@ async function withBudget(promise, ms) {
4706
4723
  if (timer) clearTimeout(timer);
4707
4724
  }
4708
4725
  }
4726
+ var CONTAINER_ID = (() => {
4727
+ const c = globalThis.crypto;
4728
+ if (c?.randomUUID) return c.randomUUID();
4729
+ return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
4730
+ })();
4709
4731
  var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
4710
4732
  var BeaconBuffer = class {
4711
4733
  constructor(options = {}) {
@@ -4713,6 +4735,7 @@ var BeaconBuffer = class {
4713
4735
  this.droppedSinceLast = 0;
4714
4736
  this.droppedTotal = 0;
4715
4737
  this.deliveredTotal = 0;
4738
+ this.enqueuedTotal = 0;
4716
4739
  this.backoffUntil = 0;
4717
4740
  this.collapse = /* @__PURE__ */ new Map();
4718
4741
  /** Keys the backend answered 401 for — later batches go unauthenticated. */
@@ -4725,13 +4748,16 @@ var BeaconBuffer = class {
4725
4748
  collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
4726
4749
  requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
4727
4750
  retryBackoffMs: options.retryBackoffMs ?? 1e3,
4751
+ holdRepeats: options.holdRepeats ?? false,
4752
+ containerId: options.containerId ?? CONTAINER_ID,
4728
4753
  now: options.now ?? Date.now
4729
4754
  };
4730
4755
  }
4731
4756
  /**
4732
4757
  * Queue one beacon. With a `collapseKey`, a repeat inside the window is
4733
- * merged into a held aggregate (sent when the window closes) instead of
4734
- * becoming its own item.
4758
+ * merged into this key's item while that item is still queued (not yet in
4759
+ * flight). Once it has left, the repeat becomes a new item, sendable on
4760
+ * this flush — nothing waits for a later invocation (round 27.6).
4735
4761
  */
4736
4762
  enqueue(dest, item, collapseKey) {
4737
4763
  const now = this.opts.now();
@@ -4744,12 +4770,15 @@ var BeaconBuffer = class {
4744
4770
  return;
4745
4771
  }
4746
4772
  }
4747
- const held = this.push(
4748
- dest,
4749
- { ...item, repeatCount: 1 },
4750
- entry.firstSeenAt + this.opts.collapseWindowMs
4751
- );
4752
- entry.held = held;
4773
+ if (this.opts.holdRepeats) {
4774
+ entry.held = this.push(
4775
+ dest,
4776
+ { ...item, repeatCount: 1 },
4777
+ entry.firstSeenAt + this.opts.collapseWindowMs
4778
+ );
4779
+ return;
4780
+ }
4781
+ entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
4753
4782
  return;
4754
4783
  }
4755
4784
  this.collapse.delete(collapseKey);
@@ -4785,6 +4814,7 @@ var BeaconBuffer = class {
4785
4814
  droppedSinceLast: this.droppedSinceLast,
4786
4815
  droppedTotal: this.droppedTotal,
4787
4816
  deliveredTotal: this.deliveredTotal,
4817
+ enqueuedTotal: this.enqueuedTotal,
4788
4818
  flushing: this.inFlight !== void 0
4789
4819
  };
4790
4820
  }
@@ -4799,6 +4829,7 @@ var BeaconBuffer = class {
4799
4829
  inFlight: false
4800
4830
  };
4801
4831
  this.queue.push(entry);
4832
+ this.enqueuedTotal += 1;
4802
4833
  return entry;
4803
4834
  }
4804
4835
  dropOldest() {
@@ -4844,7 +4875,11 @@ var BeaconBuffer = class {
4844
4875
  droppedSinceLast: reportedDropped,
4845
4876
  queueDepth: this.queue.length,
4846
4877
  adapter: dest.adapter ?? "edge-core",
4847
- version: SDK_VERSION
4878
+ version: SDK_VERSION,
4879
+ containerId: this.opts.containerId,
4880
+ enqueuedTotal: this.enqueuedTotal,
4881
+ deliveredTotal: this.deliveredTotal,
4882
+ droppedTotal: this.droppedTotal
4848
4883
  };
4849
4884
  const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
4850
4885
  const response = await withBudget(
@@ -4969,6 +5004,33 @@ var import_node_crypto4 = require("crypto");
4969
5004
  // src/transport/registry/visa.ts
4970
5005
  var import_jose = require("jose");
4971
5006
 
5007
+ // src/ucp/profile.ts
5008
+ var UCP_VERSION = "2026-08-25";
5009
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
5010
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
5011
+
5012
+ // src/ucp/signatures.ts
5013
+ var import_http_message_signatures3 = require("http-message-signatures");
5014
+
5015
+ // src/http-signatures/sign.ts
5016
+ var import_http_message_signatures2 = require("http-message-signatures");
5017
+
5018
+ // src/ucp/checkout-kit.ts
5019
+ var import_jose3 = require("jose");
5020
+
5021
+ // src/mandates/sd-jwt.ts
5022
+ var import_jose2 = require("jose");
5023
+
5024
+ // src/idempotency/index.ts
5025
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
5026
+
5027
+ // src/payments/kyapay.ts
5028
+ var import_jose4 = require("jose");
5029
+
5030
+ // src/aep/core.ts
5031
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
5032
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
5033
+
4972
5034
  // src/gateway/modes/online.ts
4973
5035
  function toGatewayConfig(config) {
4974
5036
  return {
@@ -5706,7 +5768,7 @@ async function sendHeartbeat(enrolment, request, timeoutMs = 1500) {
5706
5768
 
5707
5769
  // src/fleet/policy-verify.ts
5708
5770
  var import_crypto = require("crypto");
5709
- var import_jose2 = require("jose");
5771
+ var import_jose5 = require("jose");
5710
5772
 
5711
5773
  // src/fleet/types.ts
5712
5774
  var FLEET_POLICY_TYP = "fleet-policy+jwt";
@@ -5755,8 +5817,8 @@ async function verifyFleetPolicy(jws, jwks, options) {
5755
5817
  let payloadBytes;
5756
5818
  let header;
5757
5819
  try {
5758
- const keySet = (0, import_jose2.createLocalJWKSet)(jwks);
5759
- const result = await (0, import_jose2.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5820
+ const keySet = (0, import_jose5.createLocalJWKSet)(jwks);
5821
+ const result = await (0, import_jose5.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
5760
5822
  payloadBytes = result.payload;
5761
5823
  header = result.protectedHeader;
5762
5824
  } catch (err) {
@@ -5802,9 +5864,9 @@ async function resolveFleetJwks(pinned, chain, ownerId) {
5802
5864
  let lastSeq = 0;
5803
5865
  for (const link of chain) {
5804
5866
  try {
5805
- const { payload, protectedHeader } = await (0, import_jose2.compactVerify)(
5867
+ const { payload, protectedHeader } = await (0, import_jose5.compactVerify)(
5806
5868
  link,
5807
- (0, import_jose2.createLocalJWKSet)(trusted),
5869
+ (0, import_jose5.createLocalJWKSet)(trusted),
5808
5870
  { algorithms: ["ES256"] }
5809
5871
  );
5810
5872
  if (protectedHeader.typ !== FLEET_KEYS_TYP) continue;