@astrasyncai/verification-gateway 3.4.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 (84) hide show
  1. package/README.md +102 -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 +113 -20
  7. package/dist/adapters/express.js.map +1 -1
  8. package/dist/adapters/express.mjs +113 -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-CeFvNWDD.d.mts → express-BnMO-H3y.d.mts} +1 -1
  47. package/dist/{express-RIh05wW2.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-DgVBEiwI.d.mts → index-BT_aRn-I.d.mts} +1 -1
  57. package/dist/{index-BYu1FKMy.d.ts → index-D8-dvUFA.d.ts} +1 -1
  58. package/dist/{index-Bw4FeHMY.d.mts → index-WHKq2v17.d.mts} +5 -1
  59. package/dist/{index-C-K0WCrk.d.ts → index-rftma0ln.d.ts} +5 -1
  60. package/dist/index.d.mts +55 -9
  61. package/dist/index.d.ts +55 -9
  62. package/dist/index.js +184 -34
  63. package/dist/index.js.map +1 -1
  64. package/dist/index.mjs +182 -34
  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-xciaMpsZ.d.mts → nextjs-DFKYhxe6.d.mts} +1 -1
  69. package/dist/{nextjs--xR9zbSJ.d.ts → nextjs-DPj7ZNlq.d.ts} +1 -1
  70. package/dist/{sdk-FP7xT9F8.d.ts → sdk-CAcHgB5x.d.ts} +1 -1
  71. package/dist/{sdk-CJYCLMI0.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/transport/index.js +22 -4
  75. package/dist/transport/index.js.map +1 -1
  76. package/dist/transport/index.mjs +22 -4
  77. package/dist/transport/index.mjs.map +1 -1
  78. package/dist/{types-Cj92yKeA.d.mts → types-B-ubjHER.d.mts} +1 -1
  79. package/dist/{types-DOeL-dIw.d.ts → types-Bgn5gxHQ.d.ts} +1 -1
  80. package/dist/{types-Cwrvo30g.d.mts → types-CKe8O0lR.d.mts} +65 -3
  81. package/dist/{types-Cwrvo30g.d.ts → types-CKe8O0lR.d.ts} +65 -3
  82. package/dist/ui/index.d.mts +1 -1
  83. package/dist/ui/index.d.ts +1 -1
  84. package/package.json +1 -1
@@ -3503,7 +3503,7 @@ function getTrustLevel(score) {
3503
3503
  }
3504
3504
 
3505
3505
  // src/version.ts
3506
- var SDK_VERSION = "3.3.0";
3506
+ var SDK_VERSION = "3.6.0";
3507
3507
 
3508
3508
  // src/well-known.ts
3509
3509
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -3521,10 +3521,10 @@ var DEFAULT_CONFIG = {
3521
3521
  // through (`hasMinimumAccess('guidance', 'guidance') === true`).
3522
3522
  defaultAccessLevel: "none",
3523
3523
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
3524
- // Round-18.5 F4: cacheTtl deliberately unset. When undefined, cacheResult
3525
- // applies the split default (60s autonomous / 300s step-up). When the
3526
- // caller sets cacheTtl explicitly, that value is honoured uniformly.
3527
- // Set cacheTtl: 0 to disable caching entirely.
3524
+ // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
3525
+ // default; the caller's explicit value is honoured for cacheable results.
3526
+ // Denials and step-up escalations are NEVER cached (3.6.0) regardless of
3527
+ // cacheTtl. Set cacheTtl: 0 to disable caching entirely.
3528
3528
  debug: false
3529
3529
  };
3530
3530
  var initCheckPerformed = false;
@@ -3611,10 +3611,9 @@ function getCachedResult(request, counterpartyId) {
3611
3611
  }
3612
3612
  return null;
3613
3613
  }
3614
- var DEFAULT_AUTONOMOUS_TTL_SECONDS = 60;
3615
- var DEFAULT_STEP_UP_TTL_SECONDS = 300;
3614
+ var DEFAULT_CACHE_TTL_SECONDS = 60;
3616
3615
  function cacheResult(request, result, configuredTtl, counterpartyId) {
3617
- const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : result.requiresStepUp ? DEFAULT_STEP_UP_TTL_SECONDS : DEFAULT_AUTONOMOUS_TTL_SECONDS;
3616
+ const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : DEFAULT_CACHE_TTL_SECONDS;
3618
3617
  const key = getCacheKey(request, counterpartyId);
3619
3618
  verificationCache.set(key, {
3620
3619
  result,
@@ -3756,7 +3755,7 @@ async function callVerifyAccessAPI(config, request) {
3756
3755
  };
3757
3756
  }
3758
3757
  }
3759
- async function verify(config, request) {
3758
+ async function verify(config, request, options) {
3760
3759
  const mergedConfig = { ...DEFAULT_CONFIG, ...config };
3761
3760
  const urls = mergedConfig.apiBaseUrl ? getCachedWellKnownUrls(mergedConfig.apiBaseUrl) : void 0;
3762
3761
  if (!initCheckPerformed && !mergedConfig.disableInitChecks && mergedConfig.apiBaseUrl) {
@@ -3772,7 +3771,7 @@ async function verify(config, request) {
3772
3771
  "[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."
3773
3772
  );
3774
3773
  }
3775
- if (mergedConfig.cacheTtl !== 0) {
3774
+ if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
3776
3775
  const cached = getCachedResult(request, mergedConfig.counterpartyId);
3777
3776
  if (cached) {
3778
3777
  if (mergedConfig.debug) {
@@ -3792,6 +3791,8 @@ async function verify(config, request) {
3792
3791
  console.log("[VerificationGateway] Calling verify-access API");
3793
3792
  }
3794
3793
  const apiResponse = await callVerifyAccessAPI(mergedConfig, enrichedRequest);
3794
+ const rawServerDenialReasons = apiResponse.denialReasons;
3795
+ const serverDenialReasons = Array.isArray(rawServerDenialReasons) && rawServerDenialReasons.length > 0 ? rawServerDenialReasons : void 0;
3795
3796
  if (!apiResponse.success) {
3796
3797
  return createGuidanceResponse(mergedConfig, apiResponse.error, {
3797
3798
  source: "api_error",
@@ -3813,7 +3814,10 @@ async function verify(config, request) {
3813
3814
  // ALSO short-circuit on `!identityVerified || !policyAllowed` before
3814
3815
  // the gate check — belt-and-braces.
3815
3816
  accessLevel: "none",
3816
- denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
3817
+ // 3.6.0: the server now emits top-level denialReasons on every deny
3818
+ // path — prefer it verbatim; the failure-message reconstruction remains
3819
+ // as the fallback for older backends.
3820
+ denialReasons: serverDenialReasons ?? (aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"]),
3817
3821
  failures: aggregatedFailures,
3818
3822
  requiresStepUp: apiResponse.access?.requiresStepUp,
3819
3823
  requiresApproval: apiResponse.access?.requiresApproval,
@@ -3890,9 +3894,7 @@ async function verify(config, request) {
3890
3894
  if (result.recommendation === "deny") {
3891
3895
  result.policyAllowed = false;
3892
3896
  result.accessLevel = "none";
3893
- result.denialReasons = result.recommendationReasons || [
3894
- "Access denied by AstraSync recommendation"
3895
- ];
3897
+ result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
3896
3898
  result.guidance = result.runtimeChallenge ? {
3897
3899
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
3898
3900
  registrationUrl: urls?.registrationUrl ?? "",
@@ -3904,14 +3906,18 @@ async function verify(config, request) {
3904
3906
  };
3905
3907
  } else if (result.recommendation === "step_up_required") {
3906
3908
  result.requiresStepUp = true;
3907
- result.denialReasons = result.recommendationReasons || ["Step-up verification required"];
3909
+ result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Step-up verification required"];
3908
3910
  }
3909
- if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny") {
3911
+ const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
3912
+ if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
3910
3913
  cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
3911
3914
  }
3912
3915
  return result;
3913
3916
  }
3914
3917
 
3918
+ // src/adapters/stepup-poll.ts
3919
+ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
3920
+
3915
3921
  // src/adapters/express.ts
3916
3922
  var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
3917
3923