@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
@@ -3713,7 +3713,7 @@ Policy saved to ${outputPath}`);
3713
3713
  };
3714
3714
 
3715
3715
  // src/version.ts
3716
- var SDK_VERSION = "5.13.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,
@@ -5287,6 +5304,11 @@ async function withBudget(promise, ms) {
5287
5304
  if (timer) clearTimeout(timer);
5288
5305
  }
5289
5306
  }
5307
+ var CONTAINER_ID = (() => {
5308
+ const c = globalThis.crypto;
5309
+ if (c?.randomUUID) return c.randomUUID();
5310
+ return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
5311
+ })();
5290
5312
  var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
5291
5313
  var BeaconBuffer = class {
5292
5314
  constructor(options = {}) {
@@ -5294,6 +5316,7 @@ var BeaconBuffer = class {
5294
5316
  this.droppedSinceLast = 0;
5295
5317
  this.droppedTotal = 0;
5296
5318
  this.deliveredTotal = 0;
5319
+ this.enqueuedTotal = 0;
5297
5320
  this.backoffUntil = 0;
5298
5321
  this.collapse = /* @__PURE__ */ new Map();
5299
5322
  /** Keys the backend answered 401 for — later batches go unauthenticated. */
@@ -5306,13 +5329,16 @@ var BeaconBuffer = class {
5306
5329
  collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
5307
5330
  requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
5308
5331
  retryBackoffMs: options.retryBackoffMs ?? 1e3,
5332
+ holdRepeats: options.holdRepeats ?? false,
5333
+ containerId: options.containerId ?? CONTAINER_ID,
5309
5334
  now: options.now ?? Date.now
5310
5335
  };
5311
5336
  }
5312
5337
  /**
5313
5338
  * Queue one beacon. With a `collapseKey`, a repeat inside the window is
5314
- * merged into a held aggregate (sent when the window closes) instead of
5315
- * becoming its own item.
5339
+ * merged into this key's item while that item is still queued (not yet in
5340
+ * flight). Once it has left, the repeat becomes a new item, sendable on
5341
+ * this flush — nothing waits for a later invocation (round 27.6).
5316
5342
  */
5317
5343
  enqueue(dest, item, collapseKey) {
5318
5344
  const now = this.opts.now();
@@ -5325,12 +5351,15 @@ var BeaconBuffer = class {
5325
5351
  return;
5326
5352
  }
5327
5353
  }
5328
- const held = this.push(
5329
- dest,
5330
- { ...item, repeatCount: 1 },
5331
- entry.firstSeenAt + this.opts.collapseWindowMs
5332
- );
5333
- entry.held = held;
5354
+ if (this.opts.holdRepeats) {
5355
+ entry.held = this.push(
5356
+ dest,
5357
+ { ...item, repeatCount: 1 },
5358
+ entry.firstSeenAt + this.opts.collapseWindowMs
5359
+ );
5360
+ return;
5361
+ }
5362
+ entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
5334
5363
  return;
5335
5364
  }
5336
5365
  this.collapse.delete(collapseKey);
@@ -5366,6 +5395,7 @@ var BeaconBuffer = class {
5366
5395
  droppedSinceLast: this.droppedSinceLast,
5367
5396
  droppedTotal: this.droppedTotal,
5368
5397
  deliveredTotal: this.deliveredTotal,
5398
+ enqueuedTotal: this.enqueuedTotal,
5369
5399
  flushing: this.inFlight !== void 0
5370
5400
  };
5371
5401
  }
@@ -5380,6 +5410,7 @@ var BeaconBuffer = class {
5380
5410
  inFlight: false
5381
5411
  };
5382
5412
  this.queue.push(entry);
5413
+ this.enqueuedTotal += 1;
5383
5414
  return entry;
5384
5415
  }
5385
5416
  dropOldest() {
@@ -5425,7 +5456,11 @@ var BeaconBuffer = class {
5425
5456
  droppedSinceLast: reportedDropped,
5426
5457
  queueDepth: this.queue.length,
5427
5458
  adapter: dest.adapter ?? "edge-core",
5428
- version: SDK_VERSION
5459
+ version: SDK_VERSION,
5460
+ containerId: this.opts.containerId,
5461
+ enqueuedTotal: this.enqueuedTotal,
5462
+ deliveredTotal: this.deliveredTotal,
5463
+ droppedTotal: this.droppedTotal
5429
5464
  };
5430
5465
  const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
5431
5466
  const response = await withBudget(
@@ -5550,6 +5585,33 @@ var import_node_crypto4 = require("crypto");
5550
5585
  // src/transport/registry/visa.ts
5551
5586
  var import_jose = require("jose");
5552
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
+
5553
5615
  // src/gateway/modes/online.ts
5554
5616
  function toGatewayConfig(config) {
5555
5617
  return {
@@ -6577,7 +6639,7 @@ function writeState(paths, state) {
6577
6639
 
6578
6640
  // src/fleet/policy-verify.ts
6579
6641
  var import_crypto = require("crypto");
6580
- var import_jose2 = require("jose");
6642
+ var import_jose5 = require("jose");
6581
6643
 
6582
6644
  // src/fleet/types.ts
6583
6645
  var FLEET_POLICY_TYP = "fleet-policy+jwt";
@@ -6626,8 +6688,8 @@ async function verifyFleetPolicy(jws, jwks, options) {
6626
6688
  let payloadBytes;
6627
6689
  let header;
6628
6690
  try {
6629
- const keySet = (0, import_jose2.createLocalJWKSet)(jwks);
6630
- 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"] });
6631
6693
  payloadBytes = result.payload;
6632
6694
  header = result.protectedHeader;
6633
6695
  } catch (err) {
@@ -6673,9 +6735,9 @@ async function resolveFleetJwks(pinned, chain, ownerId) {
6673
6735
  let lastSeq = 0;
6674
6736
  for (const link of chain) {
6675
6737
  try {
6676
- const { payload, protectedHeader } = await (0, import_jose2.compactVerify)(
6738
+ const { payload, protectedHeader } = await (0, import_jose5.compactVerify)(
6677
6739
  link,
6678
- (0, import_jose2.createLocalJWKSet)(trusted),
6740
+ (0, import_jose5.createLocalJWKSet)(trusted),
6679
6741
  { algorithms: ["ES256"] }
6680
6742
  );
6681
6743
  if (protectedHeader.typ !== FLEET_KEYS_TYP) continue;