@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
@@ -3029,7 +3029,7 @@ function getTrustLevel(score) {
3029
3029
  }
3030
3030
 
3031
3031
  // src/version.ts
3032
- var SDK_VERSION = "2.4.7";
3032
+ var SDK_VERSION = "2.4.10";
3033
3033
 
3034
3034
  // src/verify.ts
3035
3035
  var DEFAULT_CONFIG = {
@@ -3040,8 +3040,10 @@ var DEFAULT_CONFIG = {
3040
3040
  // through (`hasMinimumAccess('guidance', 'guidance') === true`).
3041
3041
  defaultAccessLevel: "none",
3042
3042
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
3043
- cacheTtl: 300,
3044
- // 5 minutes
3043
+ // Round-18.5 F4: cacheTtl deliberately unset. When undefined, cacheResult
3044
+ // applies the split default (60s autonomous / 300s step-up). When the
3045
+ // caller sets cacheTtl explicitly, that value is honoured uniformly.
3046
+ // Set cacheTtl: 0 to disable caching entirely.
3045
3047
  debug: false
3046
3048
  };
3047
3049
  var initCheckPerformed = false;
@@ -3068,11 +3070,28 @@ async function performInitCheck(apiBaseUrl, debug) {
3068
3070
  }
3069
3071
  }
3070
3072
  var verificationCache = /* @__PURE__ */ new Map();
3071
- function getCacheKey(credentials) {
3072
- return `${credentials.astraId || ""}-${credentials.apiKey || ""}-${credentials.jwt || ""}`;
3073
- }
3074
- function getCachedResult(credentials) {
3075
- const key = getCacheKey(credentials);
3073
+ function getCacheKey(request) {
3074
+ const c = request.credentials;
3075
+ return [
3076
+ c.astraId || "",
3077
+ c.apiKey || "",
3078
+ c.jwt || "",
3079
+ request.purpose || "",
3080
+ request.action || "",
3081
+ request.resourceType || "",
3082
+ request.resource || "",
3083
+ request.jurisdiction || "",
3084
+ request.transactionValue ?? "",
3085
+ request.currency || "",
3086
+ request.counterpartyUrl || "",
3087
+ request.counterpartyType || "",
3088
+ request.isSubAgentRequest ? "1" : "0",
3089
+ request.parentAgentId || "",
3090
+ request.subAgentDepth ?? ""
3091
+ ].join("|");
3092
+ }
3093
+ function getCachedResult(request) {
3094
+ const key = getCacheKey(request);
3076
3095
  const cached = verificationCache.get(key);
3077
3096
  if (cached && cached.expiresAt > Date.now()) {
3078
3097
  return cached.result;
@@ -3082,8 +3101,11 @@ function getCachedResult(credentials) {
3082
3101
  }
3083
3102
  return null;
3084
3103
  }
3085
- function cacheResult(credentials, result, ttlSeconds) {
3086
- const key = getCacheKey(credentials);
3104
+ var DEFAULT_AUTONOMOUS_TTL_SECONDS = 60;
3105
+ var DEFAULT_STEP_UP_TTL_SECONDS = 300;
3106
+ function cacheResult(request, result, configuredTtl) {
3107
+ const ttlSeconds = configuredTtl && configuredTtl > 0 ? configuredTtl : result.requiresStepUp ? DEFAULT_STEP_UP_TTL_SECONDS : DEFAULT_AUTONOMOUS_TTL_SECONDS;
3108
+ const key = getCacheKey(request);
3087
3109
  verificationCache.set(key, {
3088
3110
  result,
3089
3111
  expiresAt: Date.now() + ttlSeconds * 1e3
@@ -3112,12 +3134,17 @@ function createGuidanceResponse(config, reason, options = {}) {
3112
3134
  ]
3113
3135
  };
3114
3136
  return {
3115
- verified: false,
3137
+ // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
3138
+ // API-error fallback. Identity is not verified (no agent resolved);
3139
+ // policy is not evaluated (we never reached the gate).
3140
+ identityVerified: false,
3141
+ policyAllowed: false,
3116
3142
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
3117
- // Adapters additionally short-circuit on `verified === false` before
3118
- // the gate check, but the access level still has to be honest at the
3119
- // data layer so downstream consumers (SDK adapters in other languages,
3120
- // custom integrations) inherit the correct semantics.
3143
+ // Adapters additionally short-circuit on `!identityVerified ||
3144
+ // !policyAllowed` before the gate check, but the access level still has
3145
+ // to be honest at the data layer so downstream consumers (SDK adapters
3146
+ // in other languages, custom integrations) inherit the correct
3147
+ // semantics.
3121
3148
  accessLevel: "none",
3122
3149
  guidance,
3123
3150
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
@@ -3233,8 +3260,8 @@ async function verify(config, request) {
3233
3260
  "[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."
3234
3261
  );
3235
3262
  }
3236
- if (mergedConfig.cacheTtl && mergedConfig.cacheTtl > 0) {
3237
- const cached = getCachedResult(request.credentials);
3263
+ if (mergedConfig.cacheTtl !== 0) {
3264
+ const cached = getCachedResult(request);
3238
3265
  if (cached) {
3239
3266
  if (mergedConfig.debug) {
3240
3267
  console.log("[VerificationGateway] Returning cached result");
@@ -3261,15 +3288,17 @@ async function verify(config, request) {
3261
3288
  }
3262
3289
  if (!apiResponse.access?.allowed) {
3263
3290
  const aggregatedFailures = apiResponse.access?.failures;
3291
+ const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true;
3264
3292
  const result2 = {
3265
- verified: false,
3293
+ identityVerified: idVerifiedFromBackend,
3294
+ policyAllowed: false,
3266
3295
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
3267
3296
  // Pre-rename this hardcoded `'guidance'`, which conflated with the
3268
3297
  // colocated `guidance: {...}` help-payload object below and let
3269
3298
  // denied requests pass any route gated at `'guidance'` because
3270
3299
  // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
3271
- // ALSO short-circuit on `verified === false` before the gate check —
3272
- // belt-and-braces.
3300
+ // ALSO short-circuit on `!identityVerified || !policyAllowed` before
3301
+ // the gate check — belt-and-braces.
3273
3302
  accessLevel: "none",
3274
3303
  denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
3275
3304
  failures: aggregatedFailures,
@@ -3313,7 +3342,13 @@ async function verify(config, request) {
3313
3342
  const verificationContext = apiResponse.verificationContext;
3314
3343
  const accessLevel = apiResponse.access?.accessLevel ?? "standard";
3315
3344
  const result = {
3316
- verified: true,
3345
+ // Round-18 G4: backend allowed access. Identity is verified (we resolved
3346
+ // the caller to an agent) and policy passed all gates. Read idVerified
3347
+ // from verificationContext for symmetry with the deny branch; default true
3348
+ // on success path since `access.allowed === true` implies identity was
3349
+ // resolvable (anonymous-allow paths flow through createGuidanceResponse).
3350
+ identityVerified: apiResponse.verificationContext?.idVerified !== false,
3351
+ policyAllowed: true,
3317
3352
  accessLevel,
3318
3353
  agent,
3319
3354
  developer,
@@ -3336,7 +3371,7 @@ async function verify(config, request) {
3336
3371
  warningHeader: apiResponse.warningHeader
3337
3372
  };
3338
3373
  if (result.recommendation === "deny") {
3339
- result.verified = false;
3374
+ result.policyAllowed = false;
3340
3375
  result.accessLevel = "none";
3341
3376
  result.denialReasons = result.recommendationReasons || [
3342
3377
  "Access denied by AstraSync recommendation"
@@ -3355,8 +3390,8 @@ async function verify(config, request) {
3355
3390
  }
3356
3391
  result.denialReasons = result.recommendationReasons || ["Step-up verification required"];
3357
3392
  }
3358
- if (mergedConfig.cacheTtl && mergedConfig.cacheTtl > 0 && result.recommendation !== "deny") {
3359
- cacheResult(request.credentials, result, mergedConfig.cacheTtl);
3393
+ if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny") {
3394
+ cacheResult(request, result, mergedConfig.cacheTtl);
3360
3395
  }
3361
3396
  return result;
3362
3397
  }
@@ -3431,7 +3466,7 @@ function toVerificationRequest(context, astraId) {
3431
3466
  };
3432
3467
  }
3433
3468
  function toDecision(result) {
3434
- if (result.verified) {
3469
+ if (result.identityVerified && result.policyAllowed) {
3435
3470
  return {
3436
3471
  recommendation: "ALLOW",
3437
3472
  reason: `Verified with access level: ${result.accessLevel}`,