@astrasyncai/verification-gateway 2.4.7 → 2.4.9

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 (90) 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 +29 -15
  6. package/dist/adapters/express.js.map +1 -1
  7. package/dist/adapters/express.mjs +29 -15
  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 +30 -14
  12. package/dist/adapters/mcp.js.map +1 -1
  13. package/dist/adapters/mcp.mjs +30 -14
  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 +37 -16
  18. package/dist/adapters/nextjs.js.map +1 -1
  19. package/dist/adapters/nextjs.mjs +37 -16
  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 +31 -13
  24. package/dist/adapters/sdk.js.map +1 -1
  25. package/dist/adapters/sdk.mjs +31 -13
  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/bin/astrasync.js +6 -1
  30. package/dist/browser/background.js +25 -12
  31. package/dist/browser/background.js.map +1 -1
  32. package/dist/browser/background.mjs +25 -12
  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 +25 -12
  43. package/dist/cursor/extension.js.map +1 -1
  44. package/dist/cursor/extension.mjs +25 -12
  45. package/dist/cursor/extension.mjs.map +1 -1
  46. package/dist/{express-D5hAJ2Gv.d.mts → express-4WStX3PV.d.mts} +1 -1
  47. package/dist/{express-XCkk7BsJ.d.ts → express-C1ePFB7n.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 +25 -12
  51. package/dist/gateway/gateway.js.map +1 -1
  52. package/dist/gateway/gateway.mjs +25 -12
  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-u08qcXq9.d.mts → index-ChPX4WHl.d.mts} +1 -1
  57. package/dist/{index-CH4TfcbL.d.ts → index-Cjm-zBeZ.d.ts} +1 -1
  58. package/dist/{index-WL4d9e9_.d.ts → index-CzJMCgEy.d.ts} +2 -2
  59. package/dist/{index-ZkHvXsMo.d.mts → index-D8IEntil.d.mts} +2 -2
  60. package/dist/index.d.mts +22 -11
  61. package/dist/index.d.ts +22 -11
  62. package/dist/index.js +86 -26
  63. package/dist/index.js.map +1 -1
  64. package/dist/index.mjs +85 -26
  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-DP2EpI-4.d.ts → nextjs-BIORS__0.d.ts} +1 -1
  69. package/dist/{nextjs-CFA0J_4x.d.mts → nextjs-CjzHdaXA.d.mts} +1 -1
  70. package/dist/registration/index.d.mts +90 -1
  71. package/dist/registration/index.d.ts +90 -1
  72. package/dist/registration/index.js +33 -3
  73. package/dist/registration/index.js.map +1 -1
  74. package/dist/registration/index.mjs +31 -2
  75. package/dist/registration/index.mjs.map +1 -1
  76. package/dist/{sdk-CwwCGDzK.d.ts → sdk-Chhz-FcT.d.mts} +10 -5
  77. package/dist/{sdk-C8W54WZS.d.mts → sdk-CqTEQAc6.d.ts} +10 -5
  78. package/dist/transport/index.d.mts +2 -2
  79. package/dist/transport/index.d.ts +2 -2
  80. package/dist/{types-tBNFSbw_.d.mts → types-DNK2BgIf.d.mts} +2 -2
  81. package/dist/{types-DXNkr61h.d.ts → types-DoWIuzfj.d.ts} +2 -2
  82. package/dist/{types-CbZOkIr-.d.mts → types-L15pYd2c.d.mts} +22 -5
  83. package/dist/{types-CbZOkIr-.d.ts → types-L15pYd2c.d.ts} +22 -5
  84. package/dist/ui/index.d.mts +1 -1
  85. package/dist/ui/index.d.ts +1 -1
  86. package/dist/ui/index.js +1 -1
  87. package/dist/ui/index.js.map +1 -1
  88. package/dist/ui/index.mjs +1 -1
  89. package/dist/ui/index.mjs.map +1 -1
  90. package/package.json +4 -2
@@ -18,7 +18,7 @@ function hasMinimumAccess(actual, required) {
18
18
  }
19
19
 
20
20
  // src/version.ts
21
- var SDK_VERSION = "2.4.7";
21
+ var SDK_VERSION = "2.4.9";
22
22
 
23
23
  // src/verify.ts
24
24
  var DEFAULT_CONFIG = {
@@ -129,12 +129,17 @@ function createGuidanceResponse(config, reason, options = {}) {
129
129
  ]
130
130
  };
131
131
  return {
132
- verified: false,
132
+ // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
133
+ // API-error fallback. Identity is not verified (no agent resolved);
134
+ // policy is not evaluated (we never reached the gate).
135
+ identityVerified: false,
136
+ policyAllowed: false,
133
137
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
134
- // Adapters additionally short-circuit on `verified === false` before
135
- // the gate check, but the access level still has to be honest at the
136
- // data layer so downstream consumers (SDK adapters in other languages,
137
- // custom integrations) inherit the correct semantics.
138
+ // Adapters additionally short-circuit on `!identityVerified ||
139
+ // !policyAllowed` before the gate check, but the access level still has
140
+ // to be honest at the data layer so downstream consumers (SDK adapters
141
+ // in other languages, custom integrations) inherit the correct
142
+ // semantics.
138
143
  accessLevel: "none",
139
144
  guidance,
140
145
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
@@ -278,15 +283,17 @@ async function verify(config, request) {
278
283
  }
279
284
  if (!apiResponse.access?.allowed) {
280
285
  const aggregatedFailures = apiResponse.access?.failures;
286
+ const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true;
281
287
  const result2 = {
282
- verified: false,
288
+ identityVerified: idVerifiedFromBackend,
289
+ policyAllowed: false,
283
290
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
284
291
  // Pre-rename this hardcoded `'guidance'`, which conflated with the
285
292
  // colocated `guidance: {...}` help-payload object below and let
286
293
  // denied requests pass any route gated at `'guidance'` because
287
294
  // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
288
- // ALSO short-circuit on `verified === false` before the gate check —
289
- // belt-and-braces.
295
+ // ALSO short-circuit on `!identityVerified || !policyAllowed` before
296
+ // the gate check — belt-and-braces.
290
297
  accessLevel: "none",
291
298
  denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
292
299
  failures: aggregatedFailures,
@@ -330,7 +337,13 @@ async function verify(config, request) {
330
337
  const verificationContext = apiResponse.verificationContext;
331
338
  const accessLevel = apiResponse.access?.accessLevel ?? "standard";
332
339
  const result = {
333
- verified: true,
340
+ // Round-18 G4: backend allowed access. Identity is verified (we resolved
341
+ // the caller to an agent) and policy passed all gates. Read idVerified
342
+ // from verificationContext for symmetry with the deny branch; default true
343
+ // on success path since `access.allowed === true` implies identity was
344
+ // resolvable (anonymous-allow paths flow through createGuidanceResponse).
345
+ identityVerified: apiResponse.verificationContext?.idVerified !== false,
346
+ policyAllowed: true,
334
347
  accessLevel,
335
348
  agent,
336
349
  developer,
@@ -353,7 +366,7 @@ async function verify(config, request) {
353
366
  warningHeader: apiResponse.warningHeader
354
367
  };
355
368
  if (result.recommendation === "deny") {
356
- result.verified = false;
369
+ result.policyAllowed = false;
357
370
  result.accessLevel = "none";
358
371
  result.denialReasons = result.recommendationReasons || [
359
372
  "Access denied by AstraSync recommendation"
@@ -543,13 +556,16 @@ function readSingleHeader(value) {
543
556
  }
544
557
  function defaultMcpDenied(result, req, res) {
545
558
  const id = req.body?.id ?? null;
546
- const status = result.verified ? 403 : 401;
559
+ const status = !result.identityVerified ? 401 : 403;
547
560
  res.setHeader("X-Astra-Gateway-Mode", "enforced");
548
561
  res.status(status).json({
549
562
  jsonrpc: "2.0",
550
563
  id,
551
564
  error: {
552
- code: result.verified ? -32001 : -32e3,
565
+ // JSON-RPC error codes:
566
+ // -32000 → unauthorized (no identity resolved)
567
+ // -32001 → insufficient access (identity OK, policy denied)
568
+ code: !result.identityVerified ? -32e3 : -32001,
553
569
  message: result.denialReasons?.[0] ?? "Access denied",
554
570
  data: {
555
571
  accessLevel: result.accessLevel,
@@ -683,7 +699,7 @@ function createMcpMiddleware(options) {
683
699
  req.agentVerification = result;
684
700
  const sessionId = result.sessionId;
685
701
  const correlationId = result.correlationId;
686
- if (!result.verified) {
702
+ if (!result.identityVerified || !result.policyAllowed) {
687
703
  if (shouldRecordDecisions && sessionId) {
688
704
  recordDecision(config, sessionId, "denied", result.denialReasons?.[0]).catch(() => {
689
705
  });