@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
@@ -495,9 +495,9 @@ var LocalEvaluator = class {
495
495
  if (scopeBlock) {
496
496
  return { recommendation: "DENY", reason: scopeBlock };
497
497
  }
498
- const limitViolation = this.checkLimits(context);
499
- if (limitViolation) {
500
- return { recommendation: "DENY", reason: limitViolation };
498
+ const limitDecision = this.checkLimits(context);
499
+ if (limitDecision) {
500
+ return limitDecision;
501
501
  }
502
502
  if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
503
503
  if (!this.policy.selfInstantiation.allowed) {
@@ -562,9 +562,21 @@ var LocalEvaluator = class {
562
562
  checkLimits(context) {
563
563
  const limits = this.policy.limits;
564
564
  if (!limits) return null;
565
- if (limits.maxTransactionAmount !== void 0 && context.transactionValue !== void 0) {
566
- if (context.transactionValue > limits.maxTransactionAmount) {
567
- return `Transaction value ${context.transactionValue} exceeds limit ${limits.maxTransactionAmount}`;
565
+ const value = context.transactionValue;
566
+ if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
567
+ const autonomousThreshold = limits.autonomousThreshold ?? 0;
568
+ const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
569
+ if (value > autonomousThreshold) {
570
+ if (value >= hardLimit) {
571
+ return {
572
+ recommendation: "DENY",
573
+ reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
574
+ };
575
+ }
576
+ return {
577
+ recommendation: "MANUAL_REVIEW",
578
+ reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
579
+ };
568
580
  }
569
581
  }
570
582
  if (limits.maxRequestsPerHour !== void 0) {
@@ -577,7 +589,10 @@ var LocalEvaluator = class {
577
589
  } else {
578
590
  entry.count++;
579
591
  if (entry.count > limits.maxRequestsPerHour) {
580
- return `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`;
592
+ return {
593
+ recommendation: "DENY",
594
+ reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
595
+ };
581
596
  }
582
597
  }
583
598
  }
@@ -3786,10 +3801,16 @@ function validatePurpose(purpose, path) {
3786
3801
  errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
3787
3802
  }
3788
3803
  if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
3789
- errors.push({ path: `${path}.blockedPatterns`, message: "blockedPatterns must be an array of strings" });
3804
+ errors.push({
3805
+ path: `${path}.blockedPatterns`,
3806
+ message: "blockedPatterns must be an array of strings"
3807
+ });
3790
3808
  }
3791
3809
  if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
3792
- errors.push({ path: `${path}.requiresApproval`, message: "requiresApproval must be a boolean" });
3810
+ errors.push({
3811
+ path: `${path}.requiresApproval`,
3812
+ message: "requiresApproval must be a boolean"
3813
+ });
3793
3814
  }
3794
3815
  return errors;
3795
3816
  }
@@ -3812,11 +3833,29 @@ function validateLimits(limits, path) {
3812
3833
  return [{ path, message: "limits must be an object" }];
3813
3834
  }
3814
3835
  const l = limits;
3836
+ if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
3837
+ errors.push({
3838
+ path: `${path}.autonomousThreshold`,
3839
+ message: "autonomousThreshold must be a number"
3840
+ });
3841
+ }
3815
3842
  if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
3816
- errors.push({ path: `${path}.maxTransactionAmount`, message: "maxTransactionAmount must be a number" });
3843
+ errors.push({
3844
+ path: `${path}.maxTransactionAmount`,
3845
+ message: "maxTransactionAmount must be a number"
3846
+ });
3847
+ }
3848
+ if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
3849
+ errors.push({
3850
+ path: `${path}.autonomousThreshold`,
3851
+ message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
3852
+ });
3817
3853
  }
3818
3854
  if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
3819
- errors.push({ path: `${path}.maxRequestsPerHour`, message: "maxRequestsPerHour must be a number" });
3855
+ errors.push({
3856
+ path: `${path}.maxRequestsPerHour`,
3857
+ message: "maxRequestsPerHour must be a number"
3858
+ });
3820
3859
  }
3821
3860
  if (l.currency !== void 0 && typeof l.currency !== "string") {
3822
3861
  errors.push({ path: `${path}.currency`, message: "currency must be a string" });
@@ -3831,7 +3870,10 @@ function validateRiskThresholds(thresholds, path) {
3831
3870
  const t = thresholds;
3832
3871
  for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
3833
3872
  if (!t[range] || typeof t[range] !== "object") {
3834
- errors.push({ path: `${path}.${range}`, message: `${range} is required and must be an object with min and max` });
3873
+ errors.push({
3874
+ path: `${path}.${range}`,
3875
+ message: `${range} is required and must be an object with min and max`
3876
+ });
3835
3877
  continue;
3836
3878
  }
3837
3879
  const r = t[range];
@@ -3936,7 +3978,7 @@ function getTrustLevel(score) {
3936
3978
  }
3937
3979
 
3938
3980
  // src/version.ts
3939
- var SDK_VERSION = "4.5.0";
3981
+ var SDK_VERSION = "4.6.0";
3940
3982
 
3941
3983
  // src/http.ts
3942
3984
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4160,6 +4202,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
4160
4202
  // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
4161
4203
  // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
4162
4204
  ...isMisconfig && { misconfigured: true },
4205
+ // 4.6.0: a transient api_error is retryable — mark it so consumers surface
4206
+ // "temporarily unavailable, retry" (recommendation 'error') instead of
4207
+ // coercing the absent recommendation to a policy 'deny'. Misconfig is
4208
+ // deterministic and intentionally NOT marked retryable.
4209
+ ...isApiError && { retryable: true },
4163
4210
  correlationId: options.correlationId,
4164
4211
  attemptId: options.attemptId,
4165
4212
  verifiedAt: /* @__PURE__ */ new Date()