@astrasyncai/verification-gateway 2.4.8 → 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 (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 +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/browser/background.js +25 -12
  30. package/dist/browser/background.js.map +1 -1
  31. package/dist/browser/background.mjs +25 -12
  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 +25 -12
  42. package/dist/cursor/extension.js.map +1 -1
  43. package/dist/cursor/extension.mjs +25 -12
  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 +25 -12
  50. package/dist/gateway/gateway.js.map +1 -1
  51. package/dist/gateway/gateway.mjs +25 -12
  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 +80 -25
  62. package/dist/index.js.map +1 -1
  63. package/dist/index.mjs +79 -25
  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
@@ -51,7 +51,7 @@ function hasMinimumAccess(actual, required) {
51
51
  }
52
52
 
53
53
  // src/version.ts
54
- var SDK_VERSION = "2.4.7";
54
+ var SDK_VERSION = "2.4.9";
55
55
 
56
56
  // src/verify.ts
57
57
  var DEFAULT_CONFIG = {
@@ -162,12 +162,17 @@ function createGuidanceResponse(config, reason, options = {}) {
162
162
  ]
163
163
  };
164
164
  return {
165
- verified: false,
165
+ // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
166
+ // API-error fallback. Identity is not verified (no agent resolved);
167
+ // policy is not evaluated (we never reached the gate).
168
+ identityVerified: false,
169
+ policyAllowed: false,
166
170
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
167
- // Adapters additionally short-circuit on `verified === false` before
168
- // the gate check, but the access level still has to be honest at the
169
- // data layer so downstream consumers (SDK adapters in other languages,
170
- // custom integrations) inherit the correct semantics.
171
+ // Adapters additionally short-circuit on `!identityVerified ||
172
+ // !policyAllowed` before the gate check, but the access level still has
173
+ // to be honest at the data layer so downstream consumers (SDK adapters
174
+ // in other languages, custom integrations) inherit the correct
175
+ // semantics.
171
176
  accessLevel: "none",
172
177
  guidance,
173
178
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
@@ -311,15 +316,17 @@ async function verify(config, request) {
311
316
  }
312
317
  if (!apiResponse.access?.allowed) {
313
318
  const aggregatedFailures = apiResponse.access?.failures;
319
+ const idVerifiedFromBackend = apiResponse.verificationContext?.idVerified === true;
314
320
  const result2 = {
315
- verified: false,
321
+ identityVerified: idVerifiedFromBackend,
322
+ policyAllowed: false,
316
323
  // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
317
324
  // Pre-rename this hardcoded `'guidance'`, which conflated with the
318
325
  // colocated `guidance: {...}` help-payload object below and let
319
326
  // denied requests pass any route gated at `'guidance'` because
320
327
  // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
321
- // ALSO short-circuit on `verified === false` before the gate check —
322
- // belt-and-braces.
328
+ // ALSO short-circuit on `!identityVerified || !policyAllowed` before
329
+ // the gate check — belt-and-braces.
323
330
  accessLevel: "none",
324
331
  denialReasons: aggregatedFailures && aggregatedFailures.length > 0 ? aggregatedFailures.map((f) => f.message) : apiResponse.access?.reason ? [apiResponse.access.reason] : ["Access denied"],
325
332
  failures: aggregatedFailures,
@@ -363,7 +370,13 @@ async function verify(config, request) {
363
370
  const verificationContext = apiResponse.verificationContext;
364
371
  const accessLevel = apiResponse.access?.accessLevel ?? "standard";
365
372
  const result = {
366
- verified: true,
373
+ // Round-18 G4: backend allowed access. Identity is verified (we resolved
374
+ // the caller to an agent) and policy passed all gates. Read idVerified
375
+ // from verificationContext for symmetry with the deny branch; default true
376
+ // on success path since `access.allowed === true` implies identity was
377
+ // resolvable (anonymous-allow paths flow through createGuidanceResponse).
378
+ identityVerified: apiResponse.verificationContext?.idVerified !== false,
379
+ policyAllowed: true,
367
380
  accessLevel,
368
381
  agent,
369
382
  developer,
@@ -386,7 +399,7 @@ async function verify(config, request) {
386
399
  warningHeader: apiResponse.warningHeader
387
400
  };
388
401
  if (result.recommendation === "deny") {
389
- result.verified = false;
402
+ result.policyAllowed = false;
390
403
  result.accessLevel = "none";
391
404
  result.denialReasons = result.recommendationReasons || [
392
405
  "Access denied by AstraSync recommendation"
@@ -576,13 +589,16 @@ function readSingleHeader(value) {
576
589
  }
577
590
  function defaultMcpDenied(result, req, res) {
578
591
  const id = req.body?.id ?? null;
579
- const status = result.verified ? 403 : 401;
592
+ const status = !result.identityVerified ? 401 : 403;
580
593
  res.setHeader("X-Astra-Gateway-Mode", "enforced");
581
594
  res.status(status).json({
582
595
  jsonrpc: "2.0",
583
596
  id,
584
597
  error: {
585
- code: result.verified ? -32001 : -32e3,
598
+ // JSON-RPC error codes:
599
+ // -32000 → unauthorized (no identity resolved)
600
+ // -32001 → insufficient access (identity OK, policy denied)
601
+ code: !result.identityVerified ? -32e3 : -32001,
586
602
  message: result.denialReasons?.[0] ?? "Access denied",
587
603
  data: {
588
604
  accessLevel: result.accessLevel,
@@ -716,7 +732,7 @@ function createMcpMiddleware(options) {
716
732
  req.agentVerification = result;
717
733
  const sessionId = result.sessionId;
718
734
  const correlationId = result.correlationId;
719
- if (!result.verified) {
735
+ if (!result.identityVerified || !result.policyAllowed) {
720
736
  if (shouldRecordDecisions && sessionId) {
721
737
  recordDecision(config, sessionId, "denied", result.denialReasons?.[0]).catch(() => {
722
738
  });