@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
@@ -3722,7 +3722,7 @@ function getTrustLevel(score) {
3722
3722
  }
3723
3723
 
3724
3724
  // src/version.ts
3725
- var SDK_VERSION = "5.13.0";
3725
+ var SDK_VERSION = "5.15.0";
3726
3726
 
3727
3727
  // src/http.ts
3728
3728
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4041,6 +4041,7 @@ async function callVerifyAccessAPI(config, request) {
4041
4041
  if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
4042
4042
  if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
4043
4043
  if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
4044
+ if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
4044
4045
  if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
4045
4046
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4046
4047
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
@@ -4191,7 +4192,8 @@ async function verify(config, request, options) {
4191
4192
  "[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."
4192
4193
  );
4193
4194
  }
4194
- if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4195
+ const uncacheable = Boolean(request.commerceArtifacts);
4196
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
4195
4197
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4196
4198
  if (cached) {
4197
4199
  if (mergedConfig.debug) {
@@ -4272,7 +4274,10 @@ async function verify(config, request, options) {
4272
4274
  // MERCHANT caller only (bridge callers strip it before the agent plane).
4273
4275
  settlementToken: apiResponse.settlementToken,
4274
4276
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4275
- fulfilment: apiResponse.fulfilment
4277
+ fulfilment: apiResponse.fulfilment,
4278
+ mandates: apiResponse.mandates,
4279
+ kyaToken: apiResponse.kyaToken,
4280
+ aep: apiResponse.aep
4276
4281
  };
4277
4282
  return result2;
4278
4283
  }
@@ -4282,7 +4287,10 @@ async function verify(config, request, options) {
4282
4287
  trustScore: apiResponse.agent.trustScore,
4283
4288
  trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4284
4289
  blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4285
- status: apiResponse.agent.agentStatus
4290
+ status: apiResponse.agent.agentStatus,
4291
+ ...apiResponse.agent.protocolIdentities && {
4292
+ protocolIdentities: apiResponse.agent.protocolIdentities
4293
+ }
4286
4294
  } : void 0;
4287
4295
  const developer = apiResponse.developer ? {
4288
4296
  astradId: apiResponse.developer.kyaOwnerId,
@@ -4333,7 +4341,11 @@ async function verify(config, request, options) {
4333
4341
  settlementOutcome: apiResponse.settlementOutcome,
4334
4342
  settlementToken: apiResponse.settlementToken,
4335
4343
  // 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
4336
- fulfilment: apiResponse.fulfilment
4344
+ fulfilment: apiResponse.fulfilment,
4345
+ // 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
4346
+ mandates: apiResponse.mandates,
4347
+ kyaToken: apiResponse.kyaToken,
4348
+ aep: apiResponse.aep
4337
4349
  };
4338
4350
  if (result.recommendation === "deny") {
4339
4351
  result.policyAllowed = false;
@@ -4353,7 +4365,9 @@ async function verify(config, request, options) {
4353
4365
  }
4354
4366
  const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4355
4367
  if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4356
- cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4368
+ if (!uncacheable) {
4369
+ cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4370
+ }
4357
4371
  }
4358
4372
  return result;
4359
4373
  }
@@ -4364,6 +4378,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4364
4378
  // src/metadata-capture.ts
4365
4379
  var MAX_TOTAL_BYTES = 16 * 1024;
4366
4380
 
4381
+ // src/adapters/commerce-detect.ts
4382
+ var MAX_BODY_BYTES = 64 * 1024;
4383
+
4367
4384
  // src/edge-config.ts
4368
4385
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4369
4386
  version: 1,
@@ -4392,6 +4409,11 @@ async function withBudget(promise, ms) {
4392
4409
  if (timer) clearTimeout(timer);
4393
4410
  }
4394
4411
  }
4412
+ var CONTAINER_ID = (() => {
4413
+ const c = globalThis.crypto;
4414
+ if (c?.randomUUID) return c.randomUUID();
4415
+ return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
4416
+ })();
4395
4417
  var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
4396
4418
  var BeaconBuffer = class {
4397
4419
  constructor(options = {}) {
@@ -4399,6 +4421,7 @@ var BeaconBuffer = class {
4399
4421
  this.droppedSinceLast = 0;
4400
4422
  this.droppedTotal = 0;
4401
4423
  this.deliveredTotal = 0;
4424
+ this.enqueuedTotal = 0;
4402
4425
  this.backoffUntil = 0;
4403
4426
  this.collapse = /* @__PURE__ */ new Map();
4404
4427
  /** Keys the backend answered 401 for — later batches go unauthenticated. */
@@ -4411,13 +4434,16 @@ var BeaconBuffer = class {
4411
4434
  collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
4412
4435
  requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
4413
4436
  retryBackoffMs: options.retryBackoffMs ?? 1e3,
4437
+ holdRepeats: options.holdRepeats ?? false,
4438
+ containerId: options.containerId ?? CONTAINER_ID,
4414
4439
  now: options.now ?? Date.now
4415
4440
  };
4416
4441
  }
4417
4442
  /**
4418
4443
  * Queue one beacon. With a `collapseKey`, a repeat inside the window is
4419
- * merged into a held aggregate (sent when the window closes) instead of
4420
- * becoming its own item.
4444
+ * merged into this key's item while that item is still queued (not yet in
4445
+ * flight). Once it has left, the repeat becomes a new item, sendable on
4446
+ * this flush — nothing waits for a later invocation (round 27.6).
4421
4447
  */
4422
4448
  enqueue(dest, item, collapseKey) {
4423
4449
  const now = this.opts.now();
@@ -4430,12 +4456,15 @@ var BeaconBuffer = class {
4430
4456
  return;
4431
4457
  }
4432
4458
  }
4433
- const held = this.push(
4434
- dest,
4435
- { ...item, repeatCount: 1 },
4436
- entry.firstSeenAt + this.opts.collapseWindowMs
4437
- );
4438
- entry.held = held;
4459
+ if (this.opts.holdRepeats) {
4460
+ entry.held = this.push(
4461
+ dest,
4462
+ { ...item, repeatCount: 1 },
4463
+ entry.firstSeenAt + this.opts.collapseWindowMs
4464
+ );
4465
+ return;
4466
+ }
4467
+ entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
4439
4468
  return;
4440
4469
  }
4441
4470
  this.collapse.delete(collapseKey);
@@ -4471,6 +4500,7 @@ var BeaconBuffer = class {
4471
4500
  droppedSinceLast: this.droppedSinceLast,
4472
4501
  droppedTotal: this.droppedTotal,
4473
4502
  deliveredTotal: this.deliveredTotal,
4503
+ enqueuedTotal: this.enqueuedTotal,
4474
4504
  flushing: this.inFlight !== void 0
4475
4505
  };
4476
4506
  }
@@ -4485,6 +4515,7 @@ var BeaconBuffer = class {
4485
4515
  inFlight: false
4486
4516
  };
4487
4517
  this.queue.push(entry);
4518
+ this.enqueuedTotal += 1;
4488
4519
  return entry;
4489
4520
  }
4490
4521
  dropOldest() {
@@ -4530,7 +4561,11 @@ var BeaconBuffer = class {
4530
4561
  droppedSinceLast: reportedDropped,
4531
4562
  queueDepth: this.queue.length,
4532
4563
  adapter: dest.adapter ?? "edge-core",
4533
- version: SDK_VERSION
4564
+ version: SDK_VERSION,
4565
+ containerId: this.opts.containerId,
4566
+ enqueuedTotal: this.enqueuedTotal,
4567
+ deliveredTotal: this.deliveredTotal,
4568
+ droppedTotal: this.droppedTotal
4534
4569
  };
4535
4570
  const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
4536
4571
  const response = await withBudget(
@@ -4658,6 +4693,43 @@ import { createHash as createHash3, webcrypto } from "crypto";
4658
4693
  // src/transport/registry/visa.ts
4659
4694
  import { createRemoteJWKSet } from "jose";
4660
4695
 
4696
+ // src/ucp/profile.ts
4697
+ var UCP_VERSION = "2026-08-25";
4698
+ var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
4699
+ var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
4700
+
4701
+ // src/ucp/signatures.ts
4702
+ import { httpbis as httpbis3, createSigner as createSigner2 } from "http-message-signatures";
4703
+
4704
+ // src/http-signatures/sign.ts
4705
+ import { httpbis as httpbis2, createSigner } from "http-message-signatures";
4706
+
4707
+ // src/ucp/checkout-kit.ts
4708
+ import { CompactSign as CompactSign2 } from "jose";
4709
+
4710
+ // src/mandates/sd-jwt.ts
4711
+ import {
4712
+ CompactSign,
4713
+ compactVerify,
4714
+ importJWK,
4715
+ decodeProtectedHeader
4716
+ } from "jose";
4717
+
4718
+ // src/idempotency/index.ts
4719
+ var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4720
+
4721
+ // src/payments/kyapay.ts
4722
+ import {
4723
+ createLocalJWKSet,
4724
+ createRemoteJWKSet as createRemoteJWKSet2,
4725
+ decodeProtectedHeader as decodeProtectedHeader2,
4726
+ jwtVerify
4727
+ } from "jose";
4728
+
4729
+ // src/aep/core.ts
4730
+ var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
4731
+ var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
4732
+
4661
4733
  // src/gateway/modes/online.ts
4662
4734
  function toGatewayConfig(config) {
4663
4735
  return {