@astrasyncai/verification-gateway 4.5.1 → 5.0.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 (140) 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 +11 -33
  7. package/dist/adapters/express.js.map +1 -1
  8. package/dist/adapters/express.mjs +11 -33
  9. package/dist/adapters/express.mjs.map +1 -1
  10. package/dist/adapters/mcp.d.mts +2 -2
  11. package/dist/adapters/mcp.d.ts +2 -2
  12. package/dist/adapters/mcp.js +28 -65
  13. package/dist/adapters/mcp.js.map +1 -1
  14. package/dist/adapters/mcp.mjs +27 -64
  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 +9 -30
  19. package/dist/adapters/nextjs.js.map +1 -1
  20. package/dist/adapters/nextjs.mjs +9 -30
  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 +8 -124
  25. package/dist/adapters/sdk.js.map +1 -1
  26. package/dist/adapters/sdk.mjs +8 -122
  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 +63 -41
  35. package/dist/bin/astrasync-codex-hook.js +63 -41
  36. package/dist/bin/astrasync-guard.js +63 -41
  37. package/dist/bin/astrasync.js +75 -48
  38. package/dist/browser/background.js +63 -41
  39. package/dist/browser/background.js.map +1 -1
  40. package/dist/browser/background.mjs +63 -41
  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 +63 -41
  55. package/dist/codex/index.js.map +1 -1
  56. package/dist/codex/index.mjs +63 -41
  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 +63 -41
  63. package/dist/cursor/extension.js.map +1 -1
  64. package/dist/cursor/extension.mjs +63 -41
  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 -3
  73. package/dist/edge-core/index.d.ts +1 -3
  74. package/dist/edge-core/index.js +11 -33
  75. package/dist/edge-core/index.js.map +1 -1
  76. package/dist/edge-core/index.mjs +11 -33
  77. package/dist/edge-core/index.mjs.map +1 -1
  78. package/dist/{express-DaqL11tx.d.ts → express-B5lWuemA.d.ts} +1 -1
  79. package/dist/{express-CR6F3njD.d.mts → express-Dm-snUuY.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 +63 -41
  83. package/dist/gateway/gateway.js.map +1 -1
  84. package/dist/gateway/gateway.mjs +63 -41
  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-Cub7lK-T.d.mts → index-B5k_vUmK.d.mts} +1 -1
  89. package/dist/{index-BfIxCYIZ.d.ts → index-BOzM6xUq.d.mts} +1 -2
  90. package/dist/{index-CwAh7Tln.d.mts → index-dRfxUdFA.d.ts} +1 -2
  91. package/dist/{index-B5Ts1WtM.d.ts → index-y8xToocF.d.ts} +1 -1
  92. package/dist/index.d.mts +10 -10
  93. package/dist/index.d.ts +10 -10
  94. package/dist/index.js +30 -217
  95. package/dist/index.js.map +1 -1
  96. package/dist/index.mjs +30 -210
  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-BgBJu4Jl.d.mts → mcp-DgsyQiQq.d.mts} +53 -52
  105. package/dist/{mcp--DgKOwfu.d.ts → mcp-OosmAcKf.d.ts} +53 -52
  106. package/dist/{nextjs-DlX6xwbU.d.mts → nextjs-B1sBdEav.d.mts} +1 -1
  107. package/dist/{nextjs-DL6uE1ye.d.ts → nextjs-DoRmhV_Z.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 +1 -1
  111. package/dist/registration/index.js.map +1 -1
  112. package/dist/registration/index.mjs +1 -1
  113. package/dist/registration/index.mjs.map +1 -1
  114. package/dist/sdk-B83N3xKc.d.mts +142 -0
  115. package/dist/sdk-H_9BTNBS.d.ts +142 -0
  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-BK2POWNc.d.ts} +23 -50
  123. package/dist/{types-C0zfSXMB.d.mts → types-CJjZvPr9.d.mts} +23 -50
  124. package/dist/{types-C7Rb-w0d.d.mts → types-CXf3q4kZ.d.ts} +14 -3
  125. package/dist/{types-nIh3HtuA.d.ts → types-DQmop7ZW.d.mts} +14 -3
  126. package/dist/ui/index.d.mts +2 -17
  127. package/dist/ui/index.d.ts +2 -17
  128. package/dist/ui/index.js +1 -43
  129. package/dist/ui/index.js.map +1 -1
  130. package/dist/ui/index.mjs +1 -42
  131. package/dist/ui/index.mjs.map +1 -1
  132. package/dist/verify.d.mts +3 -4
  133. package/dist/verify.d.ts +3 -4
  134. package/dist/verify.js +8 -28
  135. package/dist/verify.js.map +1 -1
  136. package/dist/verify.mjs +8 -28
  137. package/dist/verify.mjs.map +1 -1
  138. package/package.json +1 -1
  139. package/dist/sdk-Bbh9B_dw.d.mts +0 -215
  140. package/dist/sdk-C6SASmsh.d.ts +0 -215
package/README.md CHANGED
@@ -152,7 +152,7 @@ try {
152
152
  categories: ['accounting'],
153
153
  allowedActions: ['accounting.read', 'accounting.write'],
154
154
  },
155
- limits: { stepUpThreshold: 1_000, approvalThreshold: 10_000, currency: 'USD' },
155
+ limits: { autonomousThreshold: 1_000, approvalThreshold: 10_000, currency: 'USD' },
156
156
  scope: { resources: ['xero.invoices', 'quickbooks.bills'] },
157
157
  selfInstantiation: { allowed: false },
158
158
  },
@@ -1,6 +1,6 @@
1
1
  import { AstraSyncGateway } from '../gateway/gateway.mjs';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-C7Rb-w0d.mjs';
3
- import '../types-C0zfSXMB.mjs';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-DQmop7ZW.mjs';
3
+ import '../types-CJjZvPr9.mjs';
4
4
  import '../metadata-capture.mjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { AstraSyncGateway } from '../gateway/gateway.js';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-nIh3HtuA.js';
3
- import '../types-DwSfO7Sb.js';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-CXf3q4kZ.js';
3
+ import '../types-BK2POWNc.js';
4
4
  import '../metadata-capture.js';
5
5
 
6
6
  /**
@@ -1,4 +1,4 @@
1
1
  import 'express';
2
- import '../types-C0zfSXMB.mjs';
3
- export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-CR6F3njD.mjs';
2
+ import '../types-CJjZvPr9.mjs';
3
+ export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-Dm-snUuY.mjs';
4
4
  import '../metadata-capture.mjs';
@@ -1,4 +1,4 @@
1
1
  import 'express';
2
- import '../types-DwSfO7Sb.js';
3
- export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-DaqL11tx.js';
2
+ import '../types-BK2POWNc.js';
3
+ export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-B5lWuemA.js';
4
4
  import '../metadata-capture.js';
@@ -26,7 +26,7 @@ __export(express_exports, {
26
26
  module.exports = __toCommonJS(express_exports);
27
27
 
28
28
  // src/version.ts
29
- var SDK_VERSION = "4.5.1";
29
+ var SDK_VERSION = "5.0.0";
30
30
 
31
31
  // src/http.ts
32
32
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -104,7 +104,7 @@ async function awaitStepUpApproval(config, approval) {
104
104
  return "timeout";
105
105
  }
106
106
 
107
- // src/access-levels.ts
107
+ // src/trust-levels.ts
108
108
  function getTrustLevel(score) {
109
109
  if (score >= 80) return "PLATINUM";
110
110
  if (score >= 60) return "GOLD";
@@ -174,11 +174,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
174
174
  // src/verify.ts
175
175
  var DEFAULT_CONFIG = {
176
176
  apiBaseUrl: "https://astrasync.ai/api",
177
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
178
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
179
- // a route gated at `'guidance'` to silently let unverified traffic
180
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
181
- defaultAccessLevel: "none",
182
177
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
183
178
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
184
179
  // default; the caller's explicit value is honoured for cacheable results.
@@ -373,13 +368,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
373
368
  // policy is not evaluated (we never reached the gate).
374
369
  identityVerified: false,
375
370
  policyAllowed: false,
376
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
377
- // Adapters additionally short-circuit on `!identityVerified ||
378
- // !policyAllowed` before the gate check, but the access level still has
379
- // to be honest at the data layer so downstream consumers (SDK adapters
380
- // in other languages, custom integrations) inherit the correct
381
- // semantics.
382
- accessLevel: "none",
383
371
  guidance,
384
372
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
385
373
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -402,6 +390,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
402
390
  // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
403
391
  // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
404
392
  ...isMisconfig && { misconfigured: true },
393
+ // 4.6.0: a transient api_error is retryable — mark it so consumers surface
394
+ // "temporarily unavailable, retry" (recommendation 'error') instead of
395
+ // coercing the absent recommendation to a policy 'deny'. Misconfig is
396
+ // deterministic and intentionally NOT marked retryable.
397
+ ...isApiError && { retryable: true },
405
398
  correlationId: options.correlationId,
406
399
  attemptId: options.attemptId,
407
400
  verifiedAt: /* @__PURE__ */ new Date()
@@ -468,7 +461,6 @@ async function callVerifyAccessAPI(config, request) {
468
461
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
469
462
  access: {
470
463
  allowed: false,
471
- accessLevel: "none",
472
464
  reason: "endpoint_deactivated",
473
465
  failures: [
474
466
  {
@@ -531,7 +523,7 @@ async function verify(config, request, options) {
531
523
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
532
524
  deprecationWarningShown = true;
533
525
  console.warn(
534
- "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access-level decisions (the SDK reads access.accessLevel from the verify-access response). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
526
+ "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
535
527
  );
536
528
  }
537
529
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -577,14 +569,6 @@ async function verify(config, request, options) {
577
569
  const result2 = {
578
570
  identityVerified: idVerifiedFromBackend,
579
571
  policyAllowed: false,
580
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
581
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
582
- // colocated `guidance: {...}` help-payload object below and let
583
- // denied requests pass any route gated at `'guidance'` because
584
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
585
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
586
- // the gate check — belt-and-braces.
587
- accessLevel: "none",
588
572
  // 3.6.0: the server now emits top-level denialReasons on every deny
589
573
  // path — prefer it verbatim; the failure-message reconstruction remains
590
574
  // as the fallback for older backends.
@@ -633,7 +617,6 @@ async function verify(config, request, options) {
633
617
  trustScore: apiResponse.organization.trustScore
634
618
  } : void 0;
635
619
  const verificationContext = apiResponse.verificationContext;
636
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
637
620
  const result = {
638
621
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
639
622
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -645,7 +628,6 @@ async function verify(config, request, options) {
645
628
  // this load-bearing must never be defaulted on.
646
629
  identityVerified: apiResponse.verificationContext?.idVerified === true,
647
630
  policyAllowed: true,
648
- accessLevel,
649
631
  agent,
650
632
  developer,
651
633
  organization,
@@ -672,7 +654,6 @@ async function verify(config, request, options) {
672
654
  };
673
655
  if (result.recommendation === "deny") {
674
656
  result.policyAllowed = false;
675
- result.accessLevel = "none";
676
657
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
677
658
  result.guidance = result.runtimeChallenge ? {
678
659
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -1612,7 +1593,6 @@ function defaultOnDenied(result, _req, res) {
1612
1593
  error: {
1613
1594
  code: !result.identityVerified ? "UNAUTHORIZED" : "INSUFFICIENT_ACCESS",
1614
1595
  message: result.denialReasons?.[0] || "Access denied",
1615
- accessLevel: result.accessLevel,
1616
1596
  guidance: result.guidance,
1617
1597
  // Round-10: aggregated per-dimension detail + correlation handle.
1618
1598
  failures: result.failures,
@@ -1728,11 +1708,11 @@ function createMiddleware(options) {
1728
1708
  }
1729
1709
  const wellKnownUrls = config.apiBaseUrl ? await getWellKnownUrls(config.apiBaseUrl).catch(() => void 0) : void 0;
1730
1710
  const credentials = customExtractCredentials ? customExtractCredentials(req) : defaultExtractCredentials(req);
1731
- const shouldEnforce = routeConfig.minAccessLevel !== "none";
1732
- if (routeConfig.minAccessLevel === "none" && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
1711
+ const shouldEnforce = !routeConfig.observe;
1712
+ if (routeConfig.observe && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
1733
1713
  if (config.setPassThroughHeader) {
1734
1714
  res.setHeader("X-Astra-Gateway-Mode", "unenforced");
1735
- res.setHeader("X-Astra-Gateway-Reason", "route-none");
1715
+ res.setHeader("X-Astra-Gateway-Reason", "route-observe");
1736
1716
  }
1737
1717
  beaconPassThrough?.(req);
1738
1718
  return next();
@@ -1769,7 +1749,6 @@ function createMiddleware(options) {
1769
1749
  const result2 = {
1770
1750
  identityVerified: false,
1771
1751
  policyAllowed: false,
1772
- accessLevel: "none",
1773
1752
  denialReasons: preCheckFailures.map((f) => f.message),
1774
1753
  guidance: {
1775
1754
  message: "Request exceeds counterparty-defined PDLSS limits.",
@@ -1932,7 +1911,6 @@ function createMiddleware(options) {
1932
1911
  const result = {
1933
1912
  identityVerified: false,
1934
1913
  policyAllowed: false,
1935
- accessLevel: "none",
1936
1914
  denialReasons: [`Verification middleware internal error: ${errorClass}`],
1937
1915
  failures: [
1938
1916
  {