@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
@@ -3748,7 +3748,7 @@ function getTrustLevel(score) {
3748
3748
  }
3749
3749
 
3750
3750
  // src/version.ts
3751
- var SDK_VERSION = "5.13.0";
3751
+ var SDK_VERSION = "5.15.0";
3752
3752
 
3753
3753
  // src/http.ts
3754
3754
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4067,6 +4067,7 @@ async function callVerifyAccessAPI(config, request) {
4067
4067
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4068
4068
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4069
4069
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4070
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4070
4071
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4071
4072
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4072
4073
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -4217,7 +4218,8 @@ async function verify(config, request, options) {
4217
4218
  "[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."
4218
4219
  );
4219
4220
  }
4220
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4221
+ const uncacheable = Boolean(request.commerceArtifacts);
4222
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
4221
4223
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4222
4224
  if (cached) {
4223
4225
  if (mergedConfig.debug) {
@@ -4298,7 +4300,10 @@ async function verify(config, request, options) {
4298
4300
  // MERCHANT caller only (bridge callers strip it before the agent plane).
4299
4301
  settlementToken: apiResponse.settlementToken,
4300
4302
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4301
- fulfilment: apiResponse.fulfilment
4303
+ fulfilment: apiResponse.fulfilment,
4304
+ mandates: apiResponse.mandates,
4305
+ kyaToken: apiResponse.kyaToken,
4306
+ aep: apiResponse.aep
4302
4307
  };
4303
4308
  return result2;
4304
4309
  }
@@ -4308,7 +4313,10 @@ async function verify(config, request, options) {
4308
4313
  trustScore: apiResponse.agent.trustScore,
4309
4314
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4310
4315
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4311
- status: apiResponse.agent.agentStatus
4316
+ status: apiResponse.agent.agentStatus,
4317
+ ...apiResponse.agent.protocolIdentities && {
4318
+ protocolIdentities: apiResponse.agent.protocolIdentities
4319
+ }
4312
4320
  } : void 0;
4313
4321
  const developer = apiResponse.developer ? {
4314
4322
  astradId: apiResponse.developer.kyaOwnerId,
@@ -4359,7 +4367,11 @@ async function verify(config, request, options) {
4359
4367
  settlementOutcome: apiResponse.settlementOutcome,
4360
4368
  settlementToken: apiResponse.settlementToken,
4361
4369
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4362
- fulfilment: apiResponse.fulfilment
4370
+ fulfilment: apiResponse.fulfilment,
4371
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
4372
+ mandates: apiResponse.mandates,
4373
+ kyaToken: apiResponse.kyaToken,
4374
+ aep: apiResponse.aep
4363
4375
  };
4364
4376
  if (result.recommendation === "deny") {
4365
4377
  result.policyAllowed = false;
@@ -4379,7 +4391,9 @@ async function verify(config, request, options) {
4379
4391
  }
4380
4392
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4381
4393
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4382
- cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4394
+ if (!uncacheable) {
4395
+ cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4396
+ }
4383
4397
  }
4384
4398
  return result;
4385
4399
  }
@@ -4390,6 +4404,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4390
4404
  // src/metadata-capture.ts
4391
4405
  var MAX_TOTAL_BYTES = 16 * 1024;
4392
4406
 
4407
+ // src/adapters/commerce-detect.ts
4408
+ var MAX_BODY_BYTES = 64 * 1024;
4409
+
4393
4410
  // src/edge-config.ts
4394
4411
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4395
4412
  version: 1,
@@ -4418,6 +4435,11 @@ async function withBudget(promise, ms) {
4418
4435
  if (timer) clearTimeout(timer);
4419
4436
  }
4420
4437
  }
4438
+ var CONTAINER_ID = (() => {
4439
+ const c = globalThis.crypto;
4440
+ if (c?.randomUUID) return c.randomUUID();
4441
+ return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
4442
+ })();
4421
4443
  var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
4422
4444
  var BeaconBuffer = class {
4423
4445
  constructor(options = {}) {
@@ -4425,6 +4447,7 @@ var BeaconBuffer = class {
4425
4447
  this.droppedSinceLast = 0;
4426
4448
  this.droppedTotal = 0;
4427
4449
  this.deliveredTotal = 0;
4450
+ this.enqueuedTotal = 0;
4428
4451
  this.backoffUntil = 0;
4429
4452
  this.collapse = /* @__PURE__ */ new Map();
4430
4453
  /** Keys the backend answered 401 for — later batches go unauthenticated. */
@@ -4437,13 +4460,16 @@ var BeaconBuffer = class {
4437
4460
  collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
4438
4461
  requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
4439
4462
  retryBackoffMs: options.retryBackoffMs ?? 1e3,
4463
+ holdRepeats: options.holdRepeats ?? false,
4464
+ containerId: options.containerId ?? CONTAINER_ID,
4440
4465
  now: options.now ?? Date.now
4441
4466
  };
4442
4467
  }
4443
4468
  /**
4444
4469
  * Queue one beacon. With a `collapseKey`, a repeat inside the window is
4445
- * merged into a held aggregate (sent when the window closes) instead of
4446
- * becoming its own item.
4470
+ * merged into this key's item while that item is still queued (not yet in
4471
+ * flight). Once it has left, the repeat becomes a new item, sendable on
4472
+ * this flush — nothing waits for a later invocation (round 27.6).
4447
4473
  */
4448
4474
  enqueue(dest, item, collapseKey) {
4449
4475
  const now = this.opts.now();
@@ -4456,12 +4482,15 @@ var BeaconBuffer = class {
4456
4482
  return;
4457
4483
  }
4458
4484
  }
4459
- const held = this.push(
4460
- dest,
4461
- { ...item, repeatCount: 1 },
4462
- entry.firstSeenAt + this.opts.collapseWindowMs
4463
- );
4464
- entry.held = held;
4485
+ if (this.opts.holdRepeats) {
4486
+ entry.held = this.push(
4487
+ dest,
4488
+ { ...item, repeatCount: 1 },
4489
+ entry.firstSeenAt + this.opts.collapseWindowMs
4490
+ );
4491
+ return;
4492
+ }
4493
+ entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
4465
4494
  return;
4466
4495
  }
4467
4496
  this.collapse.delete(collapseKey);
@@ -4497,6 +4526,7 @@ var BeaconBuffer = class {
4497
4526
  droppedSinceLast: this.droppedSinceLast,
4498
4527
  droppedTotal: this.droppedTotal,
4499
4528
  deliveredTotal: this.deliveredTotal,
4529
+ enqueuedTotal: this.enqueuedTotal,
4500
4530
  flushing: this.inFlight !== void 0
4501
4531
  };
4502
4532
  }
@@ -4511,6 +4541,7 @@ var BeaconBuffer = class {
4511
4541
  inFlight: false
4512
4542
  };
4513
4543
  this.queue.push(entry);
4544
+ this.enqueuedTotal += 1;
4514
4545
  return entry;
4515
4546
  }
4516
4547
  dropOldest() {
@@ -4556,7 +4587,11 @@ var BeaconBuffer = class {
4556
4587
  droppedSinceLast: reportedDropped,
4557
4588
  queueDepth: this.queue.length,
4558
4589
  adapter: dest.adapter ?? "edge-core",
4559
- version: SDK_VERSION
4590
+ version: SDK_VERSION,
4591
+ containerId: this.opts.containerId,
4592
+ enqueuedTotal: this.enqueuedTotal,
4593
+ deliveredTotal: this.deliveredTotal,
4594
+ droppedTotal: this.droppedTotal
4560
4595
  };
4561
4596
  const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
4562
4597
  const response = await withBudget(
@@ -4681,6 +4716,33 @@ var import_node_crypto4 = require("crypto");
4681
4716
  // src/transport/registry/visa.ts
4682
4717
  var import_jose = require("jose");
4683
4718
 
4719
+ // src/ucp/profile.ts
4720
+ var UCP_VERSION = "2026-08-25";
4721
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
4722
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
4723
+
4724
+ // src/ucp/signatures.ts
4725
+ var import_http_message_signatures3 = require("http-message-signatures");
4726
+
4727
+ // src/http-signatures/sign.ts
4728
+ var import_http_message_signatures2 = require("http-message-signatures");
4729
+
4730
+ // src/ucp/checkout-kit.ts
4731
+ var import_jose3 = require("jose");
4732
+
4733
+ // src/mandates/sd-jwt.ts
4734
+ var import_jose2 = require("jose");
4735
+
4736
+ // src/idempotency/index.ts
4737
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4738
+
4739
+ // src/payments/kyapay.ts
4740
+ var import_jose4 = require("jose");
4741
+
4742
+ // src/aep/core.ts
4743
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
4744
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
4745
+
4684
4746
  // src/gateway/modes/online.ts
4685
4747
  function toGatewayConfig(config) {
4686
4748
  return {