@astrasyncai/verification-gateway 5.18.0 → 5.19.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 (115) hide show
  1. package/CHANGELOG.md +178 -0
  2. package/README.md +168 -4
  3. package/dist/adapters/express.d.mts +9 -1
  4. package/dist/adapters/express.d.ts +9 -1
  5. package/dist/adapters/express.js +96 -37
  6. package/dist/adapters/express.js.map +1 -1
  7. package/dist/adapters/express.mjs +96 -37
  8. package/dist/adapters/express.mjs.map +1 -1
  9. package/dist/adapters/http-pdlss.d.mts +7 -1
  10. package/dist/adapters/http-pdlss.d.ts +7 -1
  11. package/dist/adapters/http-pdlss.js +18 -2
  12. package/dist/adapters/http-pdlss.js.map +1 -1
  13. package/dist/adapters/http-pdlss.mjs +16 -1
  14. package/dist/adapters/http-pdlss.mjs.map +1 -1
  15. package/dist/adapters/kit-express.d.mts +93 -1
  16. package/dist/adapters/kit-express.d.ts +93 -1
  17. package/dist/adapters/kit-express.js +181 -2
  18. package/dist/adapters/kit-express.js.map +1 -1
  19. package/dist/adapters/kit-express.mjs +180 -2
  20. package/dist/adapters/kit-express.mjs.map +1 -1
  21. package/dist/adapters/mcp.d.mts +80 -9
  22. package/dist/adapters/mcp.d.ts +80 -9
  23. package/dist/adapters/mcp.js +153 -5
  24. package/dist/adapters/mcp.js.map +1 -1
  25. package/dist/adapters/mcp.mjs +151 -5
  26. package/dist/adapters/mcp.mjs.map +1 -1
  27. package/dist/adapters/nextjs.d.mts +1 -1
  28. package/dist/adapters/nextjs.d.ts +1 -1
  29. package/dist/adapters/nextjs.js +41 -4
  30. package/dist/adapters/nextjs.js.map +1 -1
  31. package/dist/adapters/nextjs.mjs +41 -4
  32. package/dist/adapters/nextjs.mjs.map +1 -1
  33. package/dist/adapters/sdk.d.mts +44 -1
  34. package/dist/adapters/sdk.d.ts +44 -1
  35. package/dist/adapters/sdk.js +76 -2
  36. package/dist/adapters/sdk.js.map +1 -1
  37. package/dist/adapters/sdk.mjs +76 -2
  38. package/dist/adapters/sdk.mjs.map +1 -1
  39. package/dist/agent/index.js +1 -1
  40. package/dist/agent/index.js.map +1 -1
  41. package/dist/agent/index.mjs +1 -1
  42. package/dist/agent/index.mjs.map +1 -1
  43. package/dist/bin/astrasync-claude-hook.js +46 -6
  44. package/dist/bin/astrasync-codex-hook.js +46 -6
  45. package/dist/bin/astrasync-guard.js +375 -117
  46. package/dist/bin/astrasync.js +417 -117
  47. package/dist/browser/background.js +46 -6
  48. package/dist/browser/background.js.map +1 -1
  49. package/dist/browser/background.mjs +46 -6
  50. package/dist/browser/background.mjs.map +1 -1
  51. package/dist/cli/index.js +1 -1
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/cli/index.mjs +1 -1
  54. package/dist/cli/index.mjs.map +1 -1
  55. package/dist/codex/index.js +46 -6
  56. package/dist/codex/index.js.map +1 -1
  57. package/dist/codex/index.mjs +46 -6
  58. package/dist/codex/index.mjs.map +1 -1
  59. package/dist/cursor/extension.js +46 -6
  60. package/dist/cursor/extension.js.map +1 -1
  61. package/dist/cursor/extension.mjs +46 -6
  62. package/dist/cursor/extension.mjs.map +1 -1
  63. package/dist/edge-config.d.mts +1 -1
  64. package/dist/edge-config.d.ts +1 -1
  65. package/dist/edge-config.js +1 -1
  66. package/dist/edge-config.js.map +1 -1
  67. package/dist/edge-config.mjs +1 -1
  68. package/dist/edge-config.mjs.map +1 -1
  69. package/dist/edge-core/index.d.mts +1 -1
  70. package/dist/edge-core/index.d.ts +1 -1
  71. package/dist/edge-core/index.js +21 -2
  72. package/dist/edge-core/index.js.map +1 -1
  73. package/dist/edge-core/index.mjs +21 -2
  74. package/dist/edge-core/index.mjs.map +1 -1
  75. package/dist/gateway/gateway.js +46 -6
  76. package/dist/gateway/gateway.js.map +1 -1
  77. package/dist/gateway/gateway.mjs +46 -6
  78. package/dist/gateway/gateway.mjs.map +1 -1
  79. package/dist/git-trigger/git-hooks.d.mts +1 -1
  80. package/dist/git-trigger/git-hooks.d.ts +1 -1
  81. package/dist/index.d.mts +542 -30
  82. package/dist/index.d.ts +542 -30
  83. package/dist/index.js +1171 -183
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +1157 -173
  86. package/dist/index.mjs.map +1 -1
  87. package/dist/registration/index.d.mts +1 -1
  88. package/dist/registration/index.d.ts +1 -1
  89. package/dist/registration/index.js +1 -1
  90. package/dist/registration/index.js.map +1 -1
  91. package/dist/registration/index.mjs +1 -1
  92. package/dist/registration/index.mjs.map +1 -1
  93. package/dist/transport/index.js +3 -2
  94. package/dist/transport/index.js.map +1 -1
  95. package/dist/transport/index.mjs +3 -2
  96. package/dist/transport/index.mjs.map +1 -1
  97. package/dist/{types-3ObBpsnf.d.mts → types-BoGjyon0.d.mts} +81 -2
  98. package/dist/{types-Cns4l8gX.d.mts → types-DqWPkiYl.d.mts} +90 -12
  99. package/dist/{types-Cns4l8gX.d.ts → types-DqWPkiYl.d.ts} +90 -12
  100. package/dist/{types-BoxZEYPS.d.ts → types-eWyZuz-3.d.ts} +81 -2
  101. package/dist/ui/index.d.mts +1 -1
  102. package/dist/ui/index.d.ts +1 -1
  103. package/dist/verify.d.mts +23 -2
  104. package/dist/verify.d.ts +23 -2
  105. package/dist/verify.js +23 -4
  106. package/dist/verify.js.map +1 -1
  107. package/dist/verify.mjs +23 -4
  108. package/dist/verify.mjs.map +1 -1
  109. package/dist/webhooks.d.mts +16 -3
  110. package/dist/webhooks.d.ts +16 -3
  111. package/dist/webhooks.js +24 -13
  112. package/dist/webhooks.js.map +1 -1
  113. package/dist/webhooks.mjs +24 -13
  114. package/dist/webhooks.mjs.map +1 -1
  115. package/package.json +1 -1
@@ -3752,7 +3752,7 @@ function getTrustLevel(score) {
3752
3752
  }
3753
3753
 
3754
3754
  // src/version.ts
3755
- var SDK_VERSION = "5.18.0";
3755
+ var SDK_VERSION = "5.19.0";
3756
3756
 
3757
3757
  // src/http.ts
3758
3758
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -3907,7 +3907,12 @@ function getCacheKey(request, counterpartyId) {
3907
3907
  // its start_checkout quote was served the cached quote-leg grant (no
3908
3908
  // settlementOutcome) and never reached the backend. Same F-A1-07 bug class.
3909
3909
  request.commercePhase || "",
3910
- request.checkoutSessionId || ""
3910
+ request.checkoutSessionId || "",
3911
+ // 5.19.0: a route_config purpose claim is checked server-side against
3912
+ // the stored rule for this method + path, so it changes the verdict.
3913
+ request.purposeSource || "",
3914
+ request.requestMethod || "",
3915
+ request.requestPath || ""
3911
3916
  ].join("|");
3912
3917
  }
3913
3918
  function getCachedResult(request, counterpartyId) {
@@ -4081,6 +4086,11 @@ async function callVerifyAccessAPI(config, request) {
4081
4086
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4082
4087
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
4083
4088
  if (requestData.attemptId) body.attemptId = requestData.attemptId;
4089
+ if (requestData.purposeSource) body.purposeSource = requestData.purposeSource;
4090
+ if (requestData.agentArtifacts) body.agentArtifacts = requestData.agentArtifacts;
4091
+ if (requestData.metadata) body.metadata = requestData.metadata;
4092
+ if (requestData.requestMethod) body.requestMethod = requestData.requestMethod;
4093
+ if (requestData.requestPath) body.requestPath = requestData.requestPath;
4084
4094
  if (requestData.considerationSet) body.considerationSet = requestData.considerationSet;
4085
4095
  body.sdkVersion = SDK_VERSION;
4086
4096
  if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
@@ -4270,9 +4280,18 @@ async function verify(config, request, options) {
4270
4280
  if (!apiResponse.access?.allowed) {
4271
4281
  const aggregatedFailures = apiResponse.access?.failures;
4272
4282
  const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true && !aggregatedFailures?.some((f) => REJECTED_IDENTITY_DIMENSIONS.has(f.dimension));
4283
+ const denyAgent = idVerifiedFromBackend && apiResponse.agent ? {
4284
+ astraId: apiResponse.agent.astraId,
4285
+ name: apiResponse.agent.name,
4286
+ trustScore: apiResponse.agent.trustScore,
4287
+ trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4288
+ blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4289
+ status: apiResponse.agent.agentStatus
4290
+ } : void 0;
4273
4291
  const result2 = {
4274
4292
  identityVerified: idVerifiedFromBackend,
4275
4293
  policyAllowed: false,
4294
+ ...denyAgent && { agent: denyAgent },
4276
4295
  // 3.6.0: the server now emits top-level denialReasons on every deny
4277
4296
  // path — prefer it verbatim; the failure-message reconstruction remains
4278
4297
  // as the fallback for older backends.
@@ -4418,6 +4437,9 @@ var MAX_TOTAL_BYTES = 16 * 1024;
4418
4437
  // src/adapters/commerce-detect.ts
4419
4438
  var MAX_BODY_BYTES = 64 * 1024;
4420
4439
 
4440
+ // src/adapters/routes-cache.ts
4441
+ var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
4442
+
4421
4443
  // src/edge-config.ts
4422
4444
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4423
4445
  version: 1,
@@ -4659,9 +4681,6 @@ var BeaconBuffer = class {
4659
4681
  };
4660
4682
  var beaconBuffer = new BeaconBuffer();
4661
4683
 
4662
- // src/adapters/express.ts
4663
- var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
4664
-
4665
4684
  // src/adapters/nextjs.ts
4666
4685
  var DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
4667
4686
 
@@ -4747,6 +4766,25 @@ var import_jose2 = require("jose");
4747
4766
  // src/idempotency/index.ts
4748
4767
  var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4749
4768
 
4769
+ // src/ucp/approval-events.ts
4770
+ var MemorySeenEvents = class {
4771
+ constructor(max = 1e4) {
4772
+ this.max = max;
4773
+ this.ids = /* @__PURE__ */ new Set();
4774
+ }
4775
+ async has(eventId) {
4776
+ return this.ids.has(eventId);
4777
+ }
4778
+ async add(eventId) {
4779
+ if (this.ids.size >= this.max) {
4780
+ const first = this.ids.values().next().value;
4781
+ if (first !== void 0) this.ids.delete(first);
4782
+ }
4783
+ this.ids.add(eventId);
4784
+ }
4785
+ };
4786
+ var defaultSeen = new MemorySeenEvents();
4787
+
4750
4788
  // src/payments/kyapay.ts
4751
4789
  var import_jose4 = require("jose");
4752
4790
 
@@ -4786,7 +4824,9 @@ function toDecision(result) {
4786
4824
  if (result.identityVerified && result.policyAllowed) {
4787
4825
  return {
4788
4826
  recommendation: "ALLOW",
4789
- reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
4827
+ // 5.19.0: the score is on `trustScore` for the merchant; `reason` is
4828
+ // text a merchant may relay to the agent, so it never embeds the number.
4829
+ reason: "Verified",
4790
4830
  trustScore: result.agent?.trustScore,
4791
4831
  sessionId: "sessionId" in result ? result.sessionId : void 0
4792
4832
  };
@@ -3751,7 +3751,7 @@ function getTrustLevel(score) {
3751
3751
  }
3752
3752
 
3753
3753
  // src/version.ts
3754
- var SDK_VERSION = "5.18.0";
3754
+ var SDK_VERSION = "5.19.0";
3755
3755
 
3756
3756
  // src/http.ts
3757
3757
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -3906,7 +3906,12 @@ function getCacheKey(request, counterpartyId) {
3906
3906
  // its start_checkout quote was served the cached quote-leg grant (no
3907
3907
  // settlementOutcome) and never reached the backend. Same F-A1-07 bug class.
3908
3908
  request.commercePhase || "",
3909
- request.checkoutSessionId || ""
3909
+ request.checkoutSessionId || "",
3910
+ // 5.19.0: a route_config purpose claim is checked server-side against
3911
+ // the stored rule for this method + path, so it changes the verdict.
3912
+ request.purposeSource || "",
3913
+ request.requestMethod || "",
3914
+ request.requestPath || ""
3910
3915
  ].join("|");
3911
3916
  }
3912
3917
  function getCachedResult(request, counterpartyId) {
@@ -4080,6 +4085,11 @@ async function callVerifyAccessAPI(config, request) {
4080
4085
  if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
4081
4086
  if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
4082
4087
  if (requestData.attemptId) body.attemptId = requestData.attemptId;
4088
+ if (requestData.purposeSource) body.purposeSource = requestData.purposeSource;
4089
+ if (requestData.agentArtifacts) body.agentArtifacts = requestData.agentArtifacts;
4090
+ if (requestData.metadata) body.metadata = requestData.metadata;
4091
+ if (requestData.requestMethod) body.requestMethod = requestData.requestMethod;
4092
+ if (requestData.requestPath) body.requestPath = requestData.requestPath;
4083
4093
  if (requestData.considerationSet) body.considerationSet = requestData.considerationSet;
4084
4094
  body.sdkVersion = SDK_VERSION;
4085
4095
  if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
@@ -4269,9 +4279,18 @@ async function verify(config, request, options) {
4269
4279
  if (!apiResponse.access?.allowed) {
4270
4280
  const aggregatedFailures = apiResponse.access?.failures;
4271
4281
  const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true && !aggregatedFailures?.some((f) => REJECTED_IDENTITY_DIMENSIONS.has(f.dimension));
4282
+ const denyAgent = idVerifiedFromBackend && apiResponse.agent ? {
4283
+ astraId: apiResponse.agent.astraId,
4284
+ name: apiResponse.agent.name,
4285
+ trustScore: apiResponse.agent.trustScore,
4286
+ trustLevel: getTrustLevel(apiResponse.agent.trustScore),
4287
+ blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
4288
+ status: apiResponse.agent.agentStatus
4289
+ } : void 0;
4272
4290
  const result2 = {
4273
4291
  identityVerified: idVerifiedFromBackend,
4274
4292
  policyAllowed: false,
4293
+ ...denyAgent && { agent: denyAgent },
4275
4294
  // 3.6.0: the server now emits top-level denialReasons on every deny
4276
4295
  // path — prefer it verbatim; the failure-message reconstruction remains
4277
4296
  // as the fallback for older backends.
@@ -4417,6 +4436,9 @@ var MAX_TOTAL_BYTES = 16 * 1024;
4417
4436
  // src/adapters/commerce-detect.ts
4418
4437
  var MAX_BODY_BYTES = 64 * 1024;
4419
4438
 
4439
+ // src/adapters/routes-cache.ts
4440
+ var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
4441
+
4420
4442
  // src/edge-config.ts
4421
4443
  var DEFAULT_EDGE_CONFIG = Object.freeze({
4422
4444
  version: 1,
@@ -4658,9 +4680,6 @@ var BeaconBuffer = class {
4658
4680
  };
4659
4681
  var beaconBuffer = new BeaconBuffer();
4660
4682
 
4661
- // src/adapters/express.ts
4662
- var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
4663
-
4664
4683
  // src/adapters/nextjs.ts
4665
4684
  var DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
4666
4685
 
@@ -4746,6 +4765,25 @@ var import_jose2 = require("jose");
4746
4765
  // src/idempotency/index.ts
4747
4766
  var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
4748
4767
 
4768
+ // src/ucp/approval-events.ts
4769
+ var MemorySeenEvents = class {
4770
+ constructor(max = 1e4) {
4771
+ this.max = max;
4772
+ this.ids = /* @__PURE__ */ new Set();
4773
+ }
4774
+ async has(eventId) {
4775
+ return this.ids.has(eventId);
4776
+ }
4777
+ async add(eventId) {
4778
+ if (this.ids.size >= this.max) {
4779
+ const first = this.ids.values().next().value;
4780
+ if (first !== void 0) this.ids.delete(first);
4781
+ }
4782
+ this.ids.add(eventId);
4783
+ }
4784
+ };
4785
+ var defaultSeen = new MemorySeenEvents();
4786
+
4749
4787
  // src/payments/kyapay.ts
4750
4788
  var import_jose4 = require("jose");
4751
4789
 
@@ -4785,7 +4823,9 @@ function toDecision(result) {
4785
4823
  if (result.identityVerified && result.policyAllowed) {
4786
4824
  return {
4787
4825
  recommendation: "ALLOW",
4788
- reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
4826
+ // 5.19.0: the score is on `trustScore` for the merchant; `reason` is
4827
+ // text a merchant may relay to the agent, so it never embeds the number.
4828
+ reason: "Verified",
4789
4829
  trustScore: result.agent?.trustScore,
4790
4830
  sessionId: "sessionId" in result ? result.sessionId : void 0
4791
4831
  };