@astrasyncai/verification-gateway 4.5.0 → 4.6.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 (134) hide show
  1. package/README.md +1 -1
  2. package/dist/adapter-interface/interface.d.mts +2 -2
  3. package/dist/adapter-interface/interface.d.ts +2 -2
  4. package/dist/adapters/express.d.mts +2 -2
  5. package/dist/adapters/express.d.ts +2 -2
  6. package/dist/adapters/express.js +6 -1
  7. package/dist/adapters/express.js.map +1 -1
  8. package/dist/adapters/express.mjs +6 -1
  9. package/dist/adapters/express.mjs.map +1 -1
  10. package/dist/adapters/mcp.d.mts +3 -394
  11. package/dist/adapters/mcp.d.ts +3 -394
  12. package/dist/adapters/mcp.js +6 -1
  13. package/dist/adapters/mcp.js.map +1 -1
  14. package/dist/adapters/mcp.mjs +6 -1
  15. package/dist/adapters/mcp.mjs.map +1 -1
  16. package/dist/adapters/nextjs.d.mts +2 -2
  17. package/dist/adapters/nextjs.d.ts +2 -2
  18. package/dist/adapters/nextjs.js +6 -1
  19. package/dist/adapters/nextjs.js.map +1 -1
  20. package/dist/adapters/nextjs.mjs +6 -1
  21. package/dist/adapters/nextjs.mjs.map +1 -1
  22. package/dist/adapters/sdk.d.mts +2 -2
  23. package/dist/adapters/sdk.d.ts +2 -2
  24. package/dist/adapters/sdk.js +6 -1
  25. package/dist/adapters/sdk.js.map +1 -1
  26. package/dist/adapters/sdk.mjs +6 -1
  27. package/dist/adapters/sdk.mjs.map +1 -1
  28. package/dist/agent/index.d.mts +2 -2
  29. package/dist/agent/index.d.ts +2 -2
  30. package/dist/agent/index.js +1 -1
  31. package/dist/agent/index.js.map +1 -1
  32. package/dist/agent/index.mjs +1 -1
  33. package/dist/agent/index.mjs.map +1 -1
  34. package/dist/bin/astrasync-claude-hook.js +60 -13
  35. package/dist/bin/astrasync-codex-hook.js +60 -13
  36. package/dist/bin/astrasync-guard.js +60 -13
  37. package/dist/bin/astrasync.js +68 -15
  38. package/dist/browser/background.js +60 -13
  39. package/dist/browser/background.js.map +1 -1
  40. package/dist/browser/background.mjs +60 -13
  41. package/dist/browser/background.mjs.map +1 -1
  42. package/dist/browser/browser-adapter.d.mts +2 -2
  43. package/dist/browser/browser-adapter.d.ts +2 -2
  44. package/dist/claude-code/claude-code-adapter.d.mts +2 -2
  45. package/dist/claude-code/claude-code-adapter.d.ts +2 -2
  46. package/dist/cli/index.d.mts +2 -2
  47. package/dist/cli/index.d.ts +2 -2
  48. package/dist/cli/index.js +33 -6
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/cli/index.mjs +33 -6
  51. package/dist/cli/index.mjs.map +1 -1
  52. package/dist/codex/index.d.mts +2 -2
  53. package/dist/codex/index.d.ts +2 -2
  54. package/dist/codex/index.js +60 -13
  55. package/dist/codex/index.js.map +1 -1
  56. package/dist/codex/index.mjs +60 -13
  57. package/dist/codex/index.mjs.map +1 -1
  58. package/dist/cursor/cursor-adapter.d.mts +2 -2
  59. package/dist/cursor/cursor-adapter.d.ts +2 -2
  60. package/dist/cursor/extension.d.mts +2 -2
  61. package/dist/cursor/extension.d.ts +2 -2
  62. package/dist/cursor/extension.js +60 -13
  63. package/dist/cursor/extension.js.map +1 -1
  64. package/dist/cursor/extension.mjs +60 -13
  65. package/dist/cursor/extension.mjs.map +1 -1
  66. package/dist/edge-config.d.mts +1 -1
  67. package/dist/edge-config.d.ts +1 -1
  68. package/dist/edge-config.js +1 -1
  69. package/dist/edge-config.js.map +1 -1
  70. package/dist/edge-config.mjs +1 -1
  71. package/dist/edge-config.mjs.map +1 -1
  72. package/dist/edge-core/index.d.mts +1 -1
  73. package/dist/edge-core/index.d.ts +1 -1
  74. package/dist/edge-core/index.js +6 -1
  75. package/dist/edge-core/index.js.map +1 -1
  76. package/dist/edge-core/index.mjs +6 -1
  77. package/dist/edge-core/index.mjs.map +1 -1
  78. package/dist/{express-DaqL11tx.d.ts → express-D-8Ks2Uo.d.ts} +1 -1
  79. package/dist/{express-CR6F3njD.d.mts → express-DBtPKXOL.d.mts} +1 -1
  80. package/dist/gateway/gateway.d.mts +2 -2
  81. package/dist/gateway/gateway.d.ts +2 -2
  82. package/dist/gateway/gateway.js +60 -13
  83. package/dist/gateway/gateway.js.map +1 -1
  84. package/dist/gateway/gateway.mjs +60 -13
  85. package/dist/gateway/gateway.mjs.map +1 -1
  86. package/dist/git-trigger/git-hooks.d.mts +2 -2
  87. package/dist/git-trigger/git-hooks.d.ts +2 -2
  88. package/dist/{index-BfIxCYIZ.d.ts → index-BND3kQev.d.ts} +1 -2
  89. package/dist/{index-CwAh7Tln.d.mts → index-CUfmJ1Dq.d.mts} +1 -2
  90. package/dist/{index-B5Ts1WtM.d.ts → index-DlZORQsb.d.ts} +1 -1
  91. package/dist/{index-Cub7lK-T.d.mts → index-kGCGWd5x.d.mts} +1 -1
  92. package/dist/index.d.mts +10 -10
  93. package/dist/index.d.ts +10 -10
  94. package/dist/index.js +17 -1
  95. package/dist/index.js.map +1 -1
  96. package/dist/index.mjs +12 -1
  97. package/dist/index.mjs.map +1 -1
  98. package/dist/local-evaluator/evaluator.d.mts +2 -2
  99. package/dist/local-evaluator/evaluator.d.ts +2 -2
  100. package/dist/local-evaluator/evaluator.js +22 -7
  101. package/dist/local-evaluator/evaluator.js.map +1 -1
  102. package/dist/local-evaluator/evaluator.mjs +22 -7
  103. package/dist/local-evaluator/evaluator.mjs.map +1 -1
  104. package/dist/mcp-DToTlwIn.d.ts +396 -0
  105. package/dist/mcp-ZRN4kY3b.d.mts +396 -0
  106. package/dist/{nextjs-DlX6xwbU.d.mts → nextjs-C0KASOy_.d.mts} +1 -1
  107. package/dist/{nextjs-DL6uE1ye.d.ts → nextjs-lwNvWYWT.d.ts} +1 -1
  108. package/dist/registration/index.d.mts +5 -1
  109. package/dist/registration/index.d.ts +5 -1
  110. package/dist/registration/index.js +2 -1
  111. package/dist/registration/index.js.map +1 -1
  112. package/dist/registration/index.mjs +2 -1
  113. package/dist/registration/index.mjs.map +1 -1
  114. package/dist/{sdk-C6SASmsh.d.ts → sdk-B4aodEwj.d.ts} +1 -1
  115. package/dist/{sdk-Bbh9B_dw.d.mts → sdk-B9dSwum7.d.mts} +1 -1
  116. package/dist/transport/index.d.mts +2 -2
  117. package/dist/transport/index.d.ts +2 -2
  118. package/dist/transport/index.js +1 -1
  119. package/dist/transport/index.js.map +1 -1
  120. package/dist/transport/index.mjs +1 -1
  121. package/dist/transport/index.mjs.map +1 -1
  122. package/dist/{types-DwSfO7Sb.d.ts → types-CGPU7HLi.d.ts} +8 -0
  123. package/dist/{types-nIh3HtuA.d.ts → types-CfSJLS4i.d.mts} +14 -1
  124. package/dist/{types-C0zfSXMB.d.mts → types-Cx9hTpKI.d.mts} +8 -0
  125. package/dist/{types-C7Rb-w0d.d.mts → types-DhhJxKIC.d.ts} +14 -1
  126. package/dist/ui/index.d.mts +1 -1
  127. package/dist/ui/index.d.ts +1 -1
  128. package/dist/verify.d.mts +1 -1
  129. package/dist/verify.d.ts +1 -1
  130. package/dist/verify.js +6 -1
  131. package/dist/verify.js.map +1 -1
  132. package/dist/verify.mjs +6 -1
  133. package/dist/verify.mjs.map +1 -1
  134. package/package.json +1 -1
@@ -231,9 +231,9 @@ var LocalEvaluator = class {
231
231
  if (scopeBlock) {
232
232
  return { recommendation: "DENY", reason: scopeBlock };
233
233
  }
234
- const limitViolation = this.checkLimits(context);
235
- if (limitViolation) {
236
- return { recommendation: "DENY", reason: limitViolation };
234
+ const limitDecision = this.checkLimits(context);
235
+ if (limitDecision) {
236
+ return limitDecision;
237
237
  }
238
238
  if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
239
239
  if (!this.policy.selfInstantiation.allowed) {
@@ -298,9 +298,21 @@ var LocalEvaluator = class {
298
298
  checkLimits(context) {
299
299
  const limits = this.policy.limits;
300
300
  if (!limits) return null;
301
- if (limits.maxTransactionAmount !== void 0 && context.transactionValue !== void 0) {
302
- if (context.transactionValue > limits.maxTransactionAmount) {
303
- return `Transaction value ${context.transactionValue} exceeds limit ${limits.maxTransactionAmount}`;
301
+ const value = context.transactionValue;
302
+ if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
303
+ const autonomousThreshold = limits.autonomousThreshold ?? 0;
304
+ const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
305
+ if (value > autonomousThreshold) {
306
+ if (value >= hardLimit) {
307
+ return {
308
+ recommendation: "DENY",
309
+ reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
310
+ };
311
+ }
312
+ return {
313
+ recommendation: "MANUAL_REVIEW",
314
+ reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
315
+ };
304
316
  }
305
317
  }
306
318
  if (limits.maxRequestsPerHour !== void 0) {
@@ -313,7 +325,10 @@ var LocalEvaluator = class {
313
325
  } else {
314
326
  entry.count++;
315
327
  if (entry.count > limits.maxRequestsPerHour) {
316
- return `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`;
328
+ return {
329
+ recommendation: "DENY",
330
+ reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
331
+ };
317
332
  }
318
333
  }
319
334
  }
@@ -3522,10 +3537,16 @@ function validatePurpose(purpose, path) {
3522
3537
  errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
3523
3538
  }
3524
3539
  if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
3525
- errors.push({ path: `${path}.blockedPatterns`, message: "blockedPatterns must be an array of strings" });
3540
+ errors.push({
3541
+ path: `${path}.blockedPatterns`,
3542
+ message: "blockedPatterns must be an array of strings"
3543
+ });
3526
3544
  }
3527
3545
  if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
3528
- errors.push({ path: `${path}.requiresApproval`, message: "requiresApproval must be a boolean" });
3546
+ errors.push({
3547
+ path: `${path}.requiresApproval`,
3548
+ message: "requiresApproval must be a boolean"
3549
+ });
3529
3550
  }
3530
3551
  return errors;
3531
3552
  }
@@ -3548,11 +3569,29 @@ function validateLimits(limits, path) {
3548
3569
  return [{ path, message: "limits must be an object" }];
3549
3570
  }
3550
3571
  const l = limits;
3572
+ if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
3573
+ errors.push({
3574
+ path: `${path}.autonomousThreshold`,
3575
+ message: "autonomousThreshold must be a number"
3576
+ });
3577
+ }
3551
3578
  if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
3552
- errors.push({ path: `${path}.maxTransactionAmount`, message: "maxTransactionAmount must be a number" });
3579
+ errors.push({
3580
+ path: `${path}.maxTransactionAmount`,
3581
+ message: "maxTransactionAmount must be a number"
3582
+ });
3583
+ }
3584
+ if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
3585
+ errors.push({
3586
+ path: `${path}.autonomousThreshold`,
3587
+ message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
3588
+ });
3553
3589
  }
3554
3590
  if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
3555
- errors.push({ path: `${path}.maxRequestsPerHour`, message: "maxRequestsPerHour must be a number" });
3591
+ errors.push({
3592
+ path: `${path}.maxRequestsPerHour`,
3593
+ message: "maxRequestsPerHour must be a number"
3594
+ });
3556
3595
  }
3557
3596
  if (l.currency !== void 0 && typeof l.currency !== "string") {
3558
3597
  errors.push({ path: `${path}.currency`, message: "currency must be a string" });
@@ -3567,7 +3606,10 @@ function validateRiskThresholds(thresholds, path) {
3567
3606
  const t = thresholds;
3568
3607
  for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
3569
3608
  if (!t[range] || typeof t[range] !== "object") {
3570
- errors.push({ path: `${path}.${range}`, message: `${range} is required and must be an object with min and max` });
3609
+ errors.push({
3610
+ path: `${path}.${range}`,
3611
+ message: `${range} is required and must be an object with min and max`
3612
+ });
3571
3613
  continue;
3572
3614
  }
3573
3615
  const r = t[range];
@@ -3672,7 +3714,7 @@ function getTrustLevel(score) {
3672
3714
  }
3673
3715
 
3674
3716
  // src/version.ts
3675
- var SDK_VERSION = "4.5.0";
3717
+ var SDK_VERSION = "4.6.0";
3676
3718
 
3677
3719
  // src/http.ts
3678
3720
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -3896,6 +3938,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
3896
3938
  // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
3897
3939
  // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
3898
3940
  ...isMisconfig && { misconfigured: true },
3941
+ // 4.6.0: a transient api_error is retryable — mark it so consumers surface
3942
+ // "temporarily unavailable, retry" (recommendation 'error') instead of
3943
+ // coercing the absent recommendation to a policy 'deny'. Misconfig is
3944
+ // deterministic and intentionally NOT marked retryable.
3945
+ ...isApiError && { retryable: true },
3899
3946
  correlationId: options.correlationId,
3900
3947
  attemptId: options.attemptId,
3901
3948
  verifiedAt: /* @__PURE__ */ new Date()