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