@astrasyncai/verification-gateway 2.4.8 → 2.4.10

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/dist/adapter-interface/interface.d.mts +2 -2
  2. package/dist/adapter-interface/interface.d.ts +2 -2
  3. package/dist/adapters/express.d.mts +2 -2
  4. package/dist/adapters/express.d.ts +2 -2
  5. package/dist/adapters/express.js +81 -31
  6. package/dist/adapters/express.js.map +1 -1
  7. package/dist/adapters/express.mjs +81 -31
  8. package/dist/adapters/express.mjs.map +1 -1
  9. package/dist/adapters/mcp.d.mts +1 -1
  10. package/dist/adapters/mcp.d.ts +1 -1
  11. package/dist/adapters/mcp.js +64 -26
  12. package/dist/adapters/mcp.js.map +1 -1
  13. package/dist/adapters/mcp.mjs +64 -26
  14. package/dist/adapters/mcp.mjs.map +1 -1
  15. package/dist/adapters/nextjs.d.mts +2 -2
  16. package/dist/adapters/nextjs.d.ts +2 -2
  17. package/dist/adapters/nextjs.js +89 -32
  18. package/dist/adapters/nextjs.js.map +1 -1
  19. package/dist/adapters/nextjs.mjs +89 -32
  20. package/dist/adapters/nextjs.mjs.map +1 -1
  21. package/dist/adapters/sdk.d.mts +2 -2
  22. package/dist/adapters/sdk.d.ts +2 -2
  23. package/dist/adapters/sdk.js +65 -25
  24. package/dist/adapters/sdk.js.map +1 -1
  25. package/dist/adapters/sdk.mjs +65 -25
  26. package/dist/adapters/sdk.mjs.map +1 -1
  27. package/dist/agent/index.d.mts +2 -2
  28. package/dist/agent/index.d.ts +2 -2
  29. package/dist/browser/background.js +60 -25
  30. package/dist/browser/background.js.map +1 -1
  31. package/dist/browser/background.mjs +60 -25
  32. package/dist/browser/background.mjs.map +1 -1
  33. package/dist/browser/browser-adapter.d.mts +2 -2
  34. package/dist/browser/browser-adapter.d.ts +2 -2
  35. package/dist/cli/index.d.mts +2 -2
  36. package/dist/cli/index.d.ts +2 -2
  37. package/dist/cursor/cursor-adapter.d.mts +2 -2
  38. package/dist/cursor/cursor-adapter.d.ts +2 -2
  39. package/dist/cursor/extension.d.mts +2 -2
  40. package/dist/cursor/extension.d.ts +2 -2
  41. package/dist/cursor/extension.js +60 -25
  42. package/dist/cursor/extension.js.map +1 -1
  43. package/dist/cursor/extension.mjs +60 -25
  44. package/dist/cursor/extension.mjs.map +1 -1
  45. package/dist/{express-DvVjR2H4.d.mts → express-4WStX3PV.d.mts} +1 -1
  46. package/dist/{express-714gJbaW.d.ts → express-C1ePFB7n.d.ts} +1 -1
  47. package/dist/gateway/gateway.d.mts +2 -2
  48. package/dist/gateway/gateway.d.ts +2 -2
  49. package/dist/gateway/gateway.js +60 -25
  50. package/dist/gateway/gateway.js.map +1 -1
  51. package/dist/gateway/gateway.mjs +60 -25
  52. package/dist/gateway/gateway.mjs.map +1 -1
  53. package/dist/git-trigger/git-hooks.d.mts +2 -2
  54. package/dist/git-trigger/git-hooks.d.ts +2 -2
  55. package/dist/{index-DYFS9QVb.d.mts → index-ChPX4WHl.d.mts} +1 -1
  56. package/dist/{index-DO0oG8ED.d.ts → index-Cjm-zBeZ.d.ts} +1 -1
  57. package/dist/{index-2WAlxs2G.d.ts → index-CzJMCgEy.d.ts} +1 -1
  58. package/dist/{index-P9t7M_dJ.d.mts → index-D8IEntil.d.mts} +1 -1
  59. package/dist/index.d.mts +22 -11
  60. package/dist/index.d.ts +22 -11
  61. package/dist/index.js +133 -42
  62. package/dist/index.js.map +1 -1
  63. package/dist/index.mjs +132 -42
  64. package/dist/index.mjs.map +1 -1
  65. package/dist/local-evaluator/evaluator.d.mts +2 -2
  66. package/dist/local-evaluator/evaluator.d.ts +2 -2
  67. package/dist/{nextjs-CZ-MwSOT.d.ts → nextjs-BIORS__0.d.ts} +1 -1
  68. package/dist/{nextjs-BCoH7EqF.d.mts → nextjs-CjzHdaXA.d.mts} +1 -1
  69. package/dist/registration/index.d.mts +76 -1
  70. package/dist/registration/index.d.ts +76 -1
  71. package/dist/registration/index.js +27 -2
  72. package/dist/registration/index.js.map +1 -1
  73. package/dist/registration/index.mjs +25 -1
  74. package/dist/registration/index.mjs.map +1 -1
  75. package/dist/{sdk-wwhFDXWX.d.mts → sdk-Chhz-FcT.d.mts} +9 -4
  76. package/dist/{sdk-kiA49vqJ.d.ts → sdk-CqTEQAc6.d.ts} +9 -4
  77. package/dist/transport/index.d.mts +2 -2
  78. package/dist/transport/index.d.ts +2 -2
  79. package/dist/{types-DOAb89cm.d.mts → types-DNK2BgIf.d.mts} +1 -1
  80. package/dist/{types-aucqzfUa.d.ts → types-DoWIuzfj.d.ts} +1 -1
  81. package/dist/{types-BwDmjIdr.d.mts → types-L15pYd2c.d.mts} +21 -4
  82. package/dist/{types-BwDmjIdr.d.ts → types-L15pYd2c.d.ts} +21 -4
  83. package/dist/ui/index.d.mts +1 -1
  84. package/dist/ui/index.d.ts +1 -1
  85. package/dist/ui/index.js +1 -1
  86. package/dist/ui/index.js.map +1 -1
  87. package/dist/ui/index.mjs +1 -1
  88. package/dist/ui/index.mjs.map +1 -1
  89. package/package.json +1 -1
@@ -3293,7 +3293,7 @@ function getTrustLevel(score) {
3293
3293
  }
3294
3294
 
3295
3295
  // src/version.ts
3296
- var SDK_VERSION = "2.4.7";
3296
+ var SDK_VERSION = "2.4.10";
3297
3297
 
3298
3298
  // src/verify.ts
3299
3299
  var DEFAULT_CONFIG = {
@@ -3304,8 +3304,10 @@ var DEFAULT_CONFIG = {
3304
3304
  // through (`hasMinimumAccess('guidance', 'guidance') === true`).
3305
3305
  defaultAccessLevel: "none",
3306
3306
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
3307
- cacheTtl: 300,
3308
- // 5 minutes
3307
+ // Round-18.5 F4: cacheTtl deliberately unset. When undefined, cacheResult
3308
+ // applies the split default (60s autonomous / 300s step-up). When the
3309
+ // caller sets cacheTtl explicitly, that value is honoured uniformly.
3310
+ // Set cacheTtl: 0 to disable caching entirely.
3309
3311
  debug: false
3310
3312
  };
3311
3313
  var initCheckPerformed = false;
@@ -3332,11 +3334,28 @@ async function performInitCheck(apiBaseUrl, debug) {
3332
3334
  }
3333
3335
  }
3334
3336
  var verificationCache = /* @__PURE__ */ new Map();
3335
- function getCacheKey(credentials) {
3336
- return `${credentials.astraId || ""}-${credentials.apiKey || ""}-${credentials.jwt || ""}`;
3337
- }
3338
- function getCachedResult(credentials) {
3339
- const key = getCacheKey(credentials);
3337
+ function getCacheKey(request) {
3338
+ const c = request.credentials;
3339
+ return [
3340
+ c.astraId || "",
3341
+ c.apiKey || "",
3342
+ c.jwt || "",
3343
+ request.purpose || "",
3344
+ request.action || "",
3345
+ request.resourceType || "",
3346
+ request.resource || "",
3347
+ request.jurisdiction || "",
3348
+ request.transactionValue ?? "",
3349
+ request.currency || "",
3350
+ request.counterpartyUrl || "",
3351
+ request.counterpartyType || "",
3352
+ request.isSubAgentRequest ? "1" : "0",
3353
+ request.parentAgentId || "",
3354
+ request.subAgentDepth ?? ""
3355
+ ].join("|");
3356
+ }
3357
+ function getCachedResult(request) {
3358
+ const key = getCacheKey(request);
3340
3359
  const cached = verificationCache.get(key);
3341
3360
  if (cached && cached.expiresAt > Date.now()) {
3342
3361
  return cached.result;
@@ -3346,8 +3365,11 @@ function getCachedResult(credentials) {
3346
3365
  }
3347
3366
  return null;
3348
3367
  }
3349
- function cacheResult(credentials, result, ttlSeconds) {
3350
- const key = getCacheKey(credentials);
3368
+ var DEFAULT_AUTONOMOUS_TTL_SECONDS = 60;
3369
+ var DEFAULT_STEP_UP_TTL_SECONDS = 300;
3370
+ function cacheResult(request, result, configuredTtl) {
3371
+ const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : result.requiresStepUp ? DEFAULT_STEP_UP_TTL_SECONDS : DEFAULT_AUTONOMOUS_TTL_SECONDS;
3372
+ const key = getCacheKey(request);
3351
3373
  verificationCache.set(key, {
3352
3374
  result,
3353
3375
  expiresAt: Date.now() + ttlSeconds * 1e3
@@ -3376,12 +3398,17 @@ function createGuidanceResponse(config, reason, options = {}) {
3376
3398
  ]
3377
3399
  };
3378
3400
  return {
3379
- verified: false,
3401
+ // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
3402
+ // API-error fallback. Identity is not verified (no agent resolved);
3403
+ // policy is not evaluated (we never reached the gate).
3404
+ identityVerified: false,
3405
+ policyAllowed: false,
3380
3406
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
3381
- // Adapters additionally short-circuit on `verified === false` before
3382
- // the gate check, but the access level still has to be honest at the
3383
- // data layer so downstream consumers (SDK adapters in other languages,
3384
- // custom integrations) inherit the correct semantics.
3407
+ // Adapters additionally short-circuit on `!identityVerified ||
3408
+ // !policyAllowed` before the gate check, but the access level still has
3409
+ // to be honest at the data layer so downstream consumers (SDK adapters
3410
+ // in other languages, custom integrations) inherit the correct
3411
+ // semantics.
3385
3412
  accessLevel: "none",
3386
3413
  guidance,
3387
3414
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
@@ -3497,8 +3524,8 @@ async function verify(config, request) {
3497
3524
  "[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."
3498
3525
  );
3499
3526
  }
3500
- if (mergedConfig.cacheTtl && mergedConfig.cacheTtl > 0) {
3501
- const cached = getCachedResult(request.credentials);
3527
+ if (mergedConfig.cacheTtl !== 0) {
3528
+ const cached = getCachedResult(request);
3502
3529
  if (cached) {
3503
3530
  if (mergedConfig.debug) {
3504
3531
  console.log("[VerificationGateway] Returning cached result");
@@ -3525,15 +3552,17 @@ async function verify(config, request) {
3525
3552
  }
3526
3553
  if (!apiResponse.access?.allowed) {
3527
3554
  const aggregatedFailures = apiResponse.access?.failures;
3555
+ const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true;
3528
3556
  const result2 = {
3529
- verified: false,
3557
+ identityVerified: idVerifiedFromBackend,
3558
+ policyAllowed: false,
3530
3559
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
3531
3560
  // Pre-rename this hardcoded `'guidance'`, which conflated with the
3532
3561
  // colocated `guidance: {...}` help-payload object below and let
3533
3562
  // denied requests pass any route gated at `'guidance'` because
3534
3563
  // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
3535
- // ALSO short-circuit on `verified === false` before the gate check —
3536
- // belt-and-braces.
3564
+ // ALSO short-circuit on `!identityVerified || !policyAllowed` before
3565
+ // the gate check — belt-and-braces.
3537
3566
  accessLevel: "none",
3538
3567
  denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
3539
3568
  failures: aggregatedFailures,
@@ -3577,7 +3606,13 @@ async function verify(config, request) {
3577
3606
  const verificationContext = apiResponse.verificationContext;
3578
3607
  const accessLevel = apiResponse.access?.accessLevel ?? "standard";
3579
3608
  const result = {
3580
- verified: true,
3609
+ // Round-18 G4: backend allowed access. Identity is verified (we resolved
3610
+ // the caller to an agent) and policy passed all gates. Read idVerified
3611
+ // from verificationContext for symmetry with the deny branch; default true
3612
+ // on success path since `access.allowed === true` implies identity was
3613
+ // resolvable (anonymous-allow paths flow through createGuidanceResponse).
3614
+ identityVerified: apiResponse.verificationContext?.idVerified !== false,
3615
+ policyAllowed: true,
3581
3616
  accessLevel,
3582
3617
  agent,
3583
3618
  developer,
@@ -3600,7 +3635,7 @@ async function verify(config, request) {
3600
3635
  warningHeader: apiResponse.warningHeader
3601
3636
  };
3602
3637
  if (result.recommendation === "deny") {
3603
- result.verified = false;
3638
+ result.policyAllowed = false;
3604
3639
  result.accessLevel = "none";
3605
3640
  result.denialReasons = result.recommendationReasons || [
3606
3641
  "Access denied by AstraSync recommendation"
@@ -3619,8 +3654,8 @@ async function verify(config, request) {
3619
3654
  }
3620
3655
  result.denialReasons = result.recommendationReasons || ["Step-up verification required"];
3621
3656
  }
3622
- if (mergedConfig.cacheTtl && mergedConfig.cacheTtl > 0 && result.recommendation !== "deny") {
3623
- cacheResult(request.credentials, result, mergedConfig.cacheTtl);
3657
+ if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny") {
3658
+ cacheResult(request, result, mergedConfig.cacheTtl);
3624
3659
  }
3625
3660
  return result;
3626
3661
  }
@@ -3695,7 +3730,7 @@ function toVerificationRequest(context, astraId) {
3695
3730
  };
3696
3731
  }
3697
3732
  function toDecision(result) {
3698
- if (result.verified) {
3733
+ if (result.identityVerified && result.policyAllowed) {
3699
3734
  return {
3700
3735
  recommendation: "ALLOW",
3701
3736
  reason: `Verified with access level: ${result.accessLevel}`,