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