@astrasyncai/verification-gateway 3.5.0 → 3.7.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 (89) hide show
  1. package/README.md +16 -0
  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 +96 -20
  7. package/dist/adapters/express.js.map +1 -1
  8. package/dist/adapters/express.mjs +96 -20
  9. package/dist/adapters/express.mjs.map +1 -1
  10. package/dist/adapters/mcp.d.mts +1 -1
  11. package/dist/adapters/mcp.d.ts +1 -1
  12. package/dist/adapters/mcp.js +96 -20
  13. package/dist/adapters/mcp.js.map +1 -1
  14. package/dist/adapters/mcp.mjs +96 -20
  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 +101 -20
  19. package/dist/adapters/nextjs.js.map +1 -1
  20. package/dist/adapters/nextjs.mjs +101 -20
  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 +19 -16
  25. package/dist/adapters/sdk.js.map +1 -1
  26. package/dist/adapters/sdk.mjs +19 -16
  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/bin/astrasync-claude-hook.js +4791 -0
  31. package/dist/bin/astrasync-guard.js +5990 -0
  32. package/dist/bin/astrasync.js +6840 -330
  33. package/dist/browser/background.js +22 -16
  34. package/dist/browser/background.js.map +1 -1
  35. package/dist/browser/background.mjs +22 -16
  36. package/dist/browser/background.mjs.map +1 -1
  37. package/dist/browser/browser-adapter.d.mts +2 -2
  38. package/dist/browser/browser-adapter.d.ts +2 -2
  39. package/dist/claude-code/claude-code-adapter.d.mts +96 -0
  40. package/dist/claude-code/claude-code-adapter.d.ts +96 -0
  41. package/dist/claude-code/claude-code-adapter.js +277 -0
  42. package/dist/claude-code/claude-code-adapter.js.map +1 -0
  43. package/dist/claude-code/claude-code-adapter.mjs +249 -0
  44. package/dist/claude-code/claude-code-adapter.mjs.map +1 -0
  45. package/dist/cli/index.d.mts +2 -2
  46. package/dist/cli/index.d.ts +2 -2
  47. package/dist/cursor/cursor-adapter.d.mts +2 -2
  48. package/dist/cursor/cursor-adapter.d.ts +2 -2
  49. package/dist/cursor/extension.d.mts +2 -2
  50. package/dist/cursor/extension.d.ts +2 -2
  51. package/dist/cursor/extension.js +22 -16
  52. package/dist/cursor/extension.js.map +1 -1
  53. package/dist/cursor/extension.mjs +22 -16
  54. package/dist/cursor/extension.mjs.map +1 -1
  55. package/dist/{express-BH5ADAyb.d.mts → express-BnMO-H3y.d.mts} +1 -1
  56. package/dist/{express-jUzLIoep.d.ts → express-DQhDzNAt.d.ts} +1 -1
  57. package/dist/gateway/gateway.d.mts +2 -2
  58. package/dist/gateway/gateway.d.ts +2 -2
  59. package/dist/gateway/gateway.js +22 -16
  60. package/dist/gateway/gateway.js.map +1 -1
  61. package/dist/gateway/gateway.mjs +22 -16
  62. package/dist/gateway/gateway.mjs.map +1 -1
  63. package/dist/git-trigger/git-hooks.d.mts +2 -2
  64. package/dist/git-trigger/git-hooks.d.ts +2 -2
  65. package/dist/{index-aZHAWujT.d.mts → index-BT_aRn-I.d.mts} +1 -1
  66. package/dist/{index-DlCnmpJH.d.ts → index-D8-dvUFA.d.ts} +1 -1
  67. package/dist/{index-BR2nmxBU.d.mts → index-WHKq2v17.d.mts} +1 -1
  68. package/dist/{index-DEixUCu0.d.ts → index-rftma0ln.d.ts} +1 -1
  69. package/dist/index.d.mts +55 -9
  70. package/dist/index.d.ts +55 -9
  71. package/dist/index.js +145 -30
  72. package/dist/index.js.map +1 -1
  73. package/dist/index.mjs +143 -30
  74. package/dist/index.mjs.map +1 -1
  75. package/dist/local-evaluator/evaluator.d.mts +2 -2
  76. package/dist/local-evaluator/evaluator.d.ts +2 -2
  77. package/dist/{nextjs-LTeoPqMH.d.mts → nextjs-DFKYhxe6.d.mts} +1 -1
  78. package/dist/{nextjs-DfXOd0Au.d.ts → nextjs-DPj7ZNlq.d.ts} +1 -1
  79. package/dist/{sdk-LmvyDVpL.d.ts → sdk-CAcHgB5x.d.ts} +1 -1
  80. package/dist/{sdk-DKhwVL9X.d.mts → sdk-Cy3wAmDt.d.mts} +1 -1
  81. package/dist/transport/index.d.mts +2 -2
  82. package/dist/transport/index.d.ts +2 -2
  83. package/dist/{types-C8HyQEaz.d.mts → types-B-ubjHER.d.mts} +1 -1
  84. package/dist/{types-xofemo0G.d.ts → types-Bgn5gxHQ.d.ts} +1 -1
  85. package/dist/{types-DrDIouvO.d.mts → types-CKe8O0lR.d.mts} +41 -1
  86. package/dist/{types-DrDIouvO.d.ts → types-CKe8O0lR.d.ts} +41 -1
  87. package/dist/ui/index.d.mts +1 -1
  88. package/dist/ui/index.d.ts +1 -1
  89. package/package.json +9 -2
@@ -3769,7 +3769,7 @@ function getTrustLevel(score) {
3769
3769
  }
3770
3770
 
3771
3771
  // src/version.ts
3772
- var SDK_VERSION = "3.5.0";
3772
+ var SDK_VERSION = "3.7.0";
3773
3773
 
3774
3774
  // src/well-known.ts
3775
3775
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -3787,10 +3787,10 @@ var DEFAULT_CONFIG = {
3787
3787
  // through (`hasMinimumAccess('guidance', 'guidance') === true`).
3788
3788
  defaultAccessLevel: "none",
3789
3789
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
3790
- // Round-18.5 F4: cacheTtl deliberately unset. When undefined, cacheResult
3791
- // applies the split default (60s autonomous / 300s step-up). When the
3792
- // caller sets cacheTtl explicitly, that value is honoured uniformly.
3793
- // Set cacheTtl: 0 to disable caching entirely.
3790
+ // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
3791
+ // default; the caller's explicit value is honoured for cacheable results.
3792
+ // Denials and step-up escalations are NEVER cached (3.6.0) regardless of
3793
+ // cacheTtl. Set cacheTtl: 0 to disable caching entirely.
3794
3794
  debug: false
3795
3795
  };
3796
3796
  var initCheckPerformed = false;
@@ -3877,10 +3877,9 @@ function getCachedResult(request, counterpartyId) {
3877
3877
  }
3878
3878
  return null;
3879
3879
  }
3880
- var DEFAULT_AUTONOMOUS_TTL_SECONDS = 60;
3881
- var DEFAULT_STEP_UP_TTL_SECONDS = 300;
3880
+ var DEFAULT_CACHE_TTL_SECONDS = 60;
3882
3881
  function cacheResult(request, result, configuredTtl, counterpartyId) {
3883
- const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : result.requiresStepUp ? DEFAULT_STEP_UP_TTL_SECONDS : DEFAULT_AUTONOMOUS_TTL_SECONDS;
3882
+ const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : DEFAULT_CACHE_TTL_SECONDS;
3884
3883
  const key = getCacheKey(request, counterpartyId);
3885
3884
  verificationCache.set(key, {
3886
3885
  result,
@@ -4022,7 +4021,7 @@ async function callVerifyAccessAPI(config, request) {
4022
4021
  };
4023
4022
  }
4024
4023
  }
4025
- async function verify(config, request) {
4024
+ async function verify(config, request, options) {
4026
4025
  const mergedConfig = { ...DEFAULT_CONFIG, ...config };
4027
4026
  const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
4028
4027
  if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
@@ -4038,7 +4037,7 @@ async function verify(config, request) {
4038
4037
  "[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."
4039
4038
  );
4040
4039
  }
4041
- if (mergedConfig.cacheTtl !== 0) {
4040
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4042
4041
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4043
4042
  if (cached) {
4044
4043
  if (mergedConfig.debug) {
@@ -4058,6 +4057,8 @@ async function verify(config, request) {
4058
4057
  console.log("[VerificationGateway] Calling verify-access API");
4059
4058
  }
4060
4059
  const apiResponse = await callVerifyAccessAPI(mergedConfig, enrichedRequest);
4060
+ const rawServerDenialReasons = apiResponse.denialReasons;
4061
+ const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
4061
4062
  if (!apiResponse.success) {
4062
4063
  return createGuidanceResponse(mergedConfig, apiResponse.error, {
4063
4064
  source: "api_error",
@@ -4079,7 +4080,10 @@ async function verify(config, request) {
4079
4080
  // ALSO short-circuit on `!identityVerified || !policyAllowed` before
4080
4081
  // the gate check — belt-and-braces.
4081
4082
  accessLevel: "none",
4082
- denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
4083
+ // 3.6.0: the server now emits top-level denialReasons on every deny
4084
+ // path — prefer it verbatim; the failure-message reconstruction remains
4085
+ // as the fallback for older backends.
4086
+ denialReasons: serverDenialReasons ?? (aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"]),
4083
4087
  failures: aggregatedFailures,
4084
4088
  requiresStepUp: apiResponse.access?.requiresStepUp,
4085
4089
  requiresApproval: apiResponse.access?.requiresApproval,
@@ -4156,9 +4160,7 @@ async function verify(config, request) {
4156
4160
  if (result.recommendation === "deny") {
4157
4161
  result.policyAllowed = false;
4158
4162
  result.accessLevel = "none";
4159
- result.denialReasons = result.recommendationReasons || [
4160
- "Access denied by AstraSync recommendation"
4161
- ];
4163
+ result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
4162
4164
  result.guidance = result.runtimeChallenge ? {
4163
4165
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
4164
4166
  registrationUrl: urls?.registrationUrl ?? "",
@@ -4170,14 +4172,18 @@ async function verify(config, request) {
4170
4172
  };
4171
4173
  } else if (result.recommendation === "step_up_required") {
4172
4174
  result.requiresStepUp = true;
4173
- result.denialReasons = result.recommendationReasons || ["Step-up verification required"];
4175
+ result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Step-up verification required"];
4174
4176
  }
4175
- if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny") {
4177
+ const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4178
+ if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4176
4179
  cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4177
4180
  }
4178
4181
  return result;
4179
4182
  }
4180
4183
 
4184
+ // src/adapters/stepup-poll.ts
4185
+ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4186
+
4181
4187
  // src/adapters/express.ts
4182
4188
  var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
4183
4189