@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
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var SDK_VERSION = "4.5.1";
2
+ var SDK_VERSION = "5.0.0";
3
3
 
4
4
  // src/http.ts
5
5
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -77,7 +77,7 @@ async function awaitStepUpApproval(config, approval) {
77
77
  return "timeout";
78
78
  }
79
79
 
80
- // src/access-levels.ts
80
+ // src/trust-levels.ts
81
81
  function getTrustLevel(score) {
82
82
  if (score >= 80) return "PLATINUM";
83
83
  if (score >= 60) return "GOLD";
@@ -147,11 +147,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
147
147
  // src/verify.ts
148
148
  var DEFAULT_CONFIG = {
149
149
  apiBaseUrl: "https://astrasync.ai/api",
150
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
151
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
152
- // a route gated at `'guidance'` to silently let unverified traffic
153
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
154
- defaultAccessLevel: "none",
155
150
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
156
151
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
157
152
  // default; the caller's explicit value is honoured for cacheable results.
@@ -346,13 +341,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
346
341
  // policy is not evaluated (we never reached the gate).
347
342
  identityVerified: false,
348
343
  policyAllowed: false,
349
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
350
- // Adapters additionally short-circuit on `!identityVerified ||
351
- // !policyAllowed` before the gate check, but the access level still has
352
- // to be honest at the data layer so downstream consumers (SDK adapters
353
- // in other languages, custom integrations) inherit the correct
354
- // semantics.
355
- accessLevel: "none",
356
344
  guidance,
357
345
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
358
346
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -375,6 +363,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
375
363
  // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
376
364
  // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
377
365
  ...isMisconfig && { misconfigured: true },
366
+ // 4.6.0: a transient api_error is retryable — mark it so consumers surface
367
+ // "temporarily unavailable, retry" (recommendation 'error') instead of
368
+ // coercing the absent recommendation to a policy 'deny'. Misconfig is
369
+ // deterministic and intentionally NOT marked retryable.
370
+ ...isApiError && { retryable: true },
378
371
  correlationId: options.correlationId,
379
372
  attemptId: options.attemptId,
380
373
  verifiedAt: /* @__PURE__ */ new Date()
@@ -441,7 +434,6 @@ async function callVerifyAccessAPI(config, request) {
441
434
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
442
435
  access: {
443
436
  allowed: false,
444
- accessLevel: "none",
445
437
  reason: "endpoint_deactivated",
446
438
  failures: [
447
439
  {
@@ -504,7 +496,7 @@ async function verify(config, request, options) {
504
496
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
505
497
  deprecationWarningShown = true;
506
498
  console.warn(
507
- "[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."
499
+ "[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."
508
500
  );
509
501
  }
510
502
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -550,14 +542,6 @@ async function verify(config, request, options) {
550
542
  const result2 = {
551
543
  identityVerified: idVerifiedFromBackend,
552
544
  policyAllowed: false,
553
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
554
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
555
- // colocated `guidance: {...}` help-payload object below and let
556
- // denied requests pass any route gated at `'guidance'` because
557
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
558
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
559
- // the gate check — belt-and-braces.
560
- accessLevel: "none",
561
545
  // 3.6.0: the server now emits top-level denialReasons on every deny
562
546
  // path — prefer it verbatim; the failure-message reconstruction remains
563
547
  // as the fallback for older backends.
@@ -606,7 +590,6 @@ async function verify(config, request, options) {
606
590
  trustScore: apiResponse.organization.trustScore
607
591
  } : void 0;
608
592
  const verificationContext = apiResponse.verificationContext;
609
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
610
593
  const result = {
611
594
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
612
595
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -618,7 +601,6 @@ async function verify(config, request, options) {
618
601
  // this load-bearing must never be defaulted on.
619
602
  identityVerified: apiResponse.verificationContext?.idVerified === true,
620
603
  policyAllowed: true,
621
- accessLevel,
622
604
  agent,
623
605
  developer,
624
606
  organization,
@@ -645,7 +627,6 @@ async function verify(config, request, options) {
645
627
  };
646
628
  if (result.recommendation === "deny") {
647
629
  result.policyAllowed = false;
648
- result.accessLevel = "none";
649
630
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
650
631
  result.guidance = result.runtimeChallenge ? {
651
632
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -1585,7 +1566,6 @@ function defaultOnDenied(result, _req, res) {
1585
1566
  error: {
1586
1567
  code: !result.identityVerified ? "UNAUTHORIZED" : "INSUFFICIENT_ACCESS",
1587
1568
  message: result.denialReasons?.[0] || "Access denied",
1588
- accessLevel: result.accessLevel,
1589
1569
  guidance: result.guidance,
1590
1570
  // Round-10: aggregated per-dimension detail + correlation handle.
1591
1571
  failures: result.failures,
@@ -1701,11 +1681,11 @@ function createMiddleware(options) {
1701
1681
  }
1702
1682
  const wellKnownUrls = config.apiBaseUrl ? await getWellKnownUrls(config.apiBaseUrl).catch(() => void 0) : void 0;
1703
1683
  const credentials = customExtractCredentials ? customExtractCredentials(req) : defaultExtractCredentials(req);
1704
- const shouldEnforce = routeConfig.minAccessLevel !== "none";
1705
- if (routeConfig.minAccessLevel === "none" && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
1684
+ const shouldEnforce = !routeConfig.observe;
1685
+ if (routeConfig.observe && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
1706
1686
  if (config.setPassThroughHeader) {
1707
1687
  res.setHeader("X-Astra-Gateway-Mode", "unenforced");
1708
- res.setHeader("X-Astra-Gateway-Reason", "route-none");
1688
+ res.setHeader("X-Astra-Gateway-Reason", "route-observe");
1709
1689
  }
1710
1690
  beaconPassThrough?.(req);
1711
1691
  return next();
@@ -1742,7 +1722,6 @@ function createMiddleware(options) {
1742
1722
  const result2 = {
1743
1723
  identityVerified: false,
1744
1724
  policyAllowed: false,
1745
- accessLevel: "none",
1746
1725
  denialReasons: preCheckFailures.map((f) => f.message),
1747
1726
  guidance: {
1748
1727
  message: "Request exceeds counterparty-defined PDLSS limits.",
@@ -1905,7 +1884,6 @@ function createMiddleware(options) {
1905
1884
  const result = {
1906
1885
  identityVerified: false,
1907
1886
  policyAllowed: false,
1908
- accessLevel: "none",
1909
1887
  denialReasons: [`Verification middleware internal error: ${errorClass}`],
1910
1888
  failures: [
1911
1889
  {