@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
@@ -3746,7 +3746,7 @@ function getTrustLevel(score) {
3746
3746
  }
3747
3747
 
3748
3748
  // src/version.ts
3749
- var SDK_VERSION = "3.5.0";
3749
+ var SDK_VERSION = "3.6.0";
3750
3750
 
3751
3751
  // src/well-known.ts
3752
3752
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -3764,10 +3764,10 @@ var DEFAULT_CONFIG = {
3764
3764
  // through (`hasMinimumAccess('guidance', 'guidance') === true`).
3765
3765
  defaultAccessLevel: "none",
3766
3766
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
3767
- // Round-18.5 F4: cacheTtl deliberately unset. When undefined, cacheResult
3768
- // applies the split default (60s autonomous / 300s step-up). When the
3769
- // caller sets cacheTtl explicitly, that value is honoured uniformly.
3770
- // Set cacheTtl: 0 to disable caching entirely.
3767
+ // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
3768
+ // default; the caller's explicit value is honoured for cacheable results.
3769
+ // Denials and step-up escalations are NEVER cached (3.6.0) regardless of
3770
+ // cacheTtl. Set cacheTtl: 0 to disable caching entirely.
3771
3771
  debug: false
3772
3772
  };
3773
3773
  var initCheckPerformed = false;
@@ -3854,10 +3854,9 @@ function getCachedResult(request, counterpartyId) {
3854
3854
  }
3855
3855
  return null;
3856
3856
  }
3857
- var DEFAULT_AUTONOMOUS_TTL_SECONDS = 60;
3858
- var DEFAULT_STEP_UP_TTL_SECONDS = 300;
3857
+ var DEFAULT_CACHE_TTL_SECONDS = 60;
3859
3858
  function cacheResult(request, result, configuredTtl, counterpartyId) {
3860
- const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : result.requiresStepUp ? DEFAULT_STEP_UP_TTL_SECONDS : DEFAULT_AUTONOMOUS_TTL_SECONDS;
3859
+ const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : DEFAULT_CACHE_TTL_SECONDS;
3861
3860
  const key = getCacheKey(request, counterpartyId);
3862
3861
  verificationCache.set(key, {
3863
3862
  result,
@@ -3999,7 +3998,7 @@ async function callVerifyAccessAPI(config, request) {
3999
3998
  };
4000
3999
  }
4001
4000
  }
4002
- async function verify(config, request) {
4001
+ async function verify(config, request, options) {
4003
4002
  const mergedConfig = { ...DEFAULT_CONFIG, ...config };
4004
4003
  const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
4005
4004
  if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
@@ -4015,7 +4014,7 @@ async function verify(config, request) {
4015
4014
  "[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."
4016
4015
  );
4017
4016
  }
4018
- if (mergedConfig.cacheTtl !== 0) {
4017
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
4019
4018
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
4020
4019
  if (cached) {
4021
4020
  if (mergedConfig.debug) {
@@ -4035,6 +4034,8 @@ async function verify(config, request) {
4035
4034
  console.log("[VerificationGateway] Calling verify-access API");
4036
4035
  }
4037
4036
  const apiResponse = await callVerifyAccessAPI(mergedConfig, enrichedRequest);
4037
+ const rawServerDenialReasons = apiResponse.denialReasons;
4038
+ const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
4038
4039
  if (!apiResponse.success) {
4039
4040
  return createGuidanceResponse(mergedConfig, apiResponse.error, {
4040
4041
  source: "api_error",
@@ -4056,7 +4057,10 @@ async function verify(config, request) {
4056
4057
  // ALSO short-circuit on `!identityVerified || !policyAllowed` before
4057
4058
  // the gate check — belt-and-braces.
4058
4059
  accessLevel: "none",
4059
- denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
4060
+ // 3.6.0: the server now emits top-level denialReasons on every deny
4061
+ // path — prefer it verbatim; the failure-message reconstruction remains
4062
+ // as the fallback for older backends.
4063
+ denialReasons: serverDenialReasons ?? (aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"]),
4060
4064
  failures: aggregatedFailures,
4061
4065
  requiresStepUp: apiResponse.access?.requiresStepUp,
4062
4066
  requiresApproval: apiResponse.access?.requiresApproval,
@@ -4133,9 +4137,7 @@ async function verify(config, request) {
4133
4137
  if (result.recommendation === "deny") {
4134
4138
  result.policyAllowed = false;
4135
4139
  result.accessLevel = "none";
4136
- result.denialReasons = result.recommendationReasons || [
4137
- "Access denied by AstraSync recommendation"
4138
- ];
4140
+ result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
4139
4141
  result.guidance = result.runtimeChallenge ? {
4140
4142
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
4141
4143
  registrationUrl: urls?.registrationUrl ?? "",
@@ -4147,14 +4149,18 @@ async function verify(config, request) {
4147
4149
  };
4148
4150
  } else if (result.recommendation === "step_up_required") {
4149
4151
  result.requiresStepUp = true;
4150
- result.denialReasons = result.recommendationReasons || ["Step-up verification required"];
4152
+ result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Step-up verification required"];
4151
4153
  }
4152
- if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny") {
4154
+ const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
4155
+ if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
4153
4156
  cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
4154
4157
  }
4155
4158
  return result;
4156
4159
  }
4157
4160
 
4161
+ // src/adapters/stepup-poll.ts
4162
+ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
4163
+
4158
4164
  // src/adapters/express.ts
4159
4165
  var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
4160
4166