@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
@@ -514,9 +514,9 @@ var LocalEvaluator = class {
514
514
  if (scopeBlock) {
515
515
  return { recommendation: "DENY", reason: scopeBlock };
516
516
  }
517
- const limitViolation = this.checkLimits(context);
518
- if (limitViolation) {
519
- return { recommendation: "DENY", reason: limitViolation };
517
+ const limitDecision = this.checkLimits(context);
518
+ if (limitDecision) {
519
+ return limitDecision;
520
520
  }
521
521
  if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
522
522
  if (!this.policy.selfInstantiation.allowed) {
@@ -581,9 +581,21 @@ var LocalEvaluator = class {
581
581
  checkLimits(context) {
582
582
  const limits = this.policy.limits;
583
583
  if (!limits) return null;
584
- if (limits.maxTransactionAmount !== void 0 && context.transactionValue !== void 0) {
585
- if (context.transactionValue > limits.maxTransactionAmount) {
586
- return `Transaction value ${context.transactionValue} exceeds limit ${limits.maxTransactionAmount}`;
584
+ const value = context.transactionValue;
585
+ if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
586
+ const autonomousThreshold = limits.autonomousThreshold ?? 0;
587
+ const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
588
+ if (value > autonomousThreshold) {
589
+ if (value >= hardLimit) {
590
+ return {
591
+ recommendation: "DENY",
592
+ reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
593
+ };
594
+ }
595
+ return {
596
+ recommendation: "MANUAL_REVIEW",
597
+ reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
598
+ };
587
599
  }
588
600
  }
589
601
  if (limits.maxRequestsPerHour !== void 0) {
@@ -596,7 +608,10 @@ var LocalEvaluator = class {
596
608
  } else {
597
609
  entry.count++;
598
610
  if (entry.count > limits.maxRequestsPerHour) {
599
- return `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`;
611
+ return {
612
+ recommendation: "DENY",
613
+ reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
614
+ };
600
615
  }
601
616
  }
602
617
  }
@@ -3805,10 +3820,16 @@ function validatePurpose(purpose, path) {
3805
3820
  errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
3806
3821
  }
3807
3822
  if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
3808
- errors.push({ path: `${path}.blockedPatterns`, message: "blockedPatterns must be an array of strings" });
3823
+ errors.push({
3824
+ path: `${path}.blockedPatterns`,
3825
+ message: "blockedPatterns must be an array of strings"
3826
+ });
3809
3827
  }
3810
3828
  if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
3811
- errors.push({ path: `${path}.requiresApproval`, message: "requiresApproval must be a boolean" });
3829
+ errors.push({
3830
+ path: `${path}.requiresApproval`,
3831
+ message: "requiresApproval must be a boolean"
3832
+ });
3812
3833
  }
3813
3834
  return errors;
3814
3835
  }
@@ -3831,11 +3852,29 @@ function validateLimits(limits, path) {
3831
3852
  return [{ path, message: "limits must be an object" }];
3832
3853
  }
3833
3854
  const l = limits;
3855
+ if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
3856
+ errors.push({
3857
+ path: `${path}.autonomousThreshold`,
3858
+ message: "autonomousThreshold must be a number"
3859
+ });
3860
+ }
3834
3861
  if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
3835
- errors.push({ path: `${path}.maxTransactionAmount`, message: "maxTransactionAmount must be a number" });
3862
+ errors.push({
3863
+ path: `${path}.maxTransactionAmount`,
3864
+ message: "maxTransactionAmount must be a number"
3865
+ });
3866
+ }
3867
+ if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
3868
+ errors.push({
3869
+ path: `${path}.autonomousThreshold`,
3870
+ message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
3871
+ });
3836
3872
  }
3837
3873
  if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
3838
- errors.push({ path: `${path}.maxRequestsPerHour`, message: "maxRequestsPerHour must be a number" });
3874
+ errors.push({
3875
+ path: `${path}.maxRequestsPerHour`,
3876
+ message: "maxRequestsPerHour must be a number"
3877
+ });
3839
3878
  }
3840
3879
  if (l.currency !== void 0 && typeof l.currency !== "string") {
3841
3880
  errors.push({ path: `${path}.currency`, message: "currency must be a string" });
@@ -3850,7 +3889,10 @@ function validateRiskThresholds(thresholds, path) {
3850
3889
  const t = thresholds;
3851
3890
  for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
3852
3891
  if (!t[range] || typeof t[range] !== "object") {
3853
- errors.push({ path: `${path}.${range}`, message: `${range} is required and must be an object with min and max` });
3892
+ errors.push({
3893
+ path: `${path}.${range}`,
3894
+ message: `${range} is required and must be an object with min and max`
3895
+ });
3854
3896
  continue;
3855
3897
  }
3856
3898
  const r = t[range];
@@ -3955,7 +3997,7 @@ function getTrustLevel(score) {
3955
3997
  }
3956
3998
 
3957
3999
  // src/version.ts
3958
- var SDK_VERSION = "4.5.0";
4000
+ var SDK_VERSION = "4.6.0";
3959
4001
 
3960
4002
  // src/http.ts
3961
4003
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4179,6 +4221,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
4179
4221
  // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
4180
4222
  // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
4181
4223
  ...isMisconfig && { misconfigured: true },
4224
+ // 4.6.0: a transient api_error is retryable — mark it so consumers surface
4225
+ // "temporarily unavailable, retry" (recommendation 'error') instead of
4226
+ // coercing the absent recommendation to a policy 'deny'. Misconfig is
4227
+ // deterministic and intentionally NOT marked retryable.
4228
+ ...isApiError && { retryable: true },
4182
4229
  correlationId: options.correlationId,
4183
4230
  attemptId: options.attemptId,
4184
4231
  verifiedAt: /* @__PURE__ */ new Date()