@astrasyncai/verification-gateway 4.6.0 → 5.1.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 (135) 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 +25 -35
  6. package/dist/adapters/express.js.map +1 -1
  7. package/dist/adapters/express.mjs +25 -35
  8. package/dist/adapters/express.mjs.map +1 -1
  9. package/dist/adapters/mcp.d.mts +2 -2
  10. package/dist/adapters/mcp.d.ts +2 -2
  11. package/dist/adapters/mcp.js +42 -67
  12. package/dist/adapters/mcp.js.map +1 -1
  13. package/dist/adapters/mcp.mjs +41 -66
  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 +23 -32
  18. package/dist/adapters/nextjs.js.map +1 -1
  19. package/dist/adapters/nextjs.mjs +23 -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 +22 -126
  24. package/dist/adapters/sdk.js.map +1 -1
  25. package/dist/adapters/sdk.mjs +22 -124
  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/agent/index.js +1 -1
  30. package/dist/agent/index.js.map +1 -1
  31. package/dist/agent/index.mjs +1 -1
  32. package/dist/agent/index.mjs.map +1 -1
  33. package/dist/bin/astrasync-claude-hook.js +23 -31
  34. package/dist/bin/astrasync-codex-hook.js +23 -31
  35. package/dist/bin/astrasync-guard.js +23 -31
  36. package/dist/bin/astrasync.js +28 -36
  37. package/dist/browser/background.js +23 -31
  38. package/dist/browser/background.js.map +1 -1
  39. package/dist/browser/background.mjs +23 -31
  40. package/dist/browser/background.mjs.map +1 -1
  41. package/dist/browser/browser-adapter.d.mts +2 -2
  42. package/dist/browser/browser-adapter.d.ts +2 -2
  43. package/dist/claude-code/claude-code-adapter.d.mts +2 -2
  44. package/dist/claude-code/claude-code-adapter.d.ts +2 -2
  45. package/dist/cli/index.d.mts +2 -2
  46. package/dist/cli/index.d.ts +2 -2
  47. package/dist/cli/index.js +1 -1
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/cli/index.mjs +1 -1
  50. package/dist/cli/index.mjs.map +1 -1
  51. package/dist/codex/index.d.mts +2 -2
  52. package/dist/codex/index.d.ts +2 -2
  53. package/dist/codex/index.js +23 -31
  54. package/dist/codex/index.js.map +1 -1
  55. package/dist/codex/index.mjs +23 -31
  56. package/dist/codex/index.mjs.map +1 -1
  57. package/dist/cursor/cursor-adapter.d.mts +2 -2
  58. package/dist/cursor/cursor-adapter.d.ts +2 -2
  59. package/dist/cursor/extension.d.mts +2 -2
  60. package/dist/cursor/extension.d.ts +2 -2
  61. package/dist/cursor/extension.js +23 -31
  62. package/dist/cursor/extension.js.map +1 -1
  63. package/dist/cursor/extension.mjs +23 -31
  64. package/dist/cursor/extension.mjs.map +1 -1
  65. package/dist/edge-config.d.mts +1 -1
  66. package/dist/edge-config.d.ts +1 -1
  67. package/dist/edge-config.js +1 -1
  68. package/dist/edge-config.js.map +1 -1
  69. package/dist/edge-config.mjs +1 -1
  70. package/dist/edge-config.mjs.map +1 -1
  71. package/dist/edge-core/index.d.mts +12 -3
  72. package/dist/edge-core/index.d.ts +12 -3
  73. package/dist/edge-core/index.js +42 -36
  74. package/dist/edge-core/index.js.map +1 -1
  75. package/dist/edge-core/index.mjs +42 -36
  76. package/dist/edge-core/index.mjs.map +1 -1
  77. package/dist/{express-DBtPKXOL.d.mts → express-KkBZBMqi.d.mts} +1 -1
  78. package/dist/{express-D-8Ks2Uo.d.ts → express-xK8pRrmj.d.ts} +1 -1
  79. package/dist/gateway/gateway.d.mts +2 -2
  80. package/dist/gateway/gateway.d.ts +2 -2
  81. package/dist/gateway/gateway.js +23 -31
  82. package/dist/gateway/gateway.js.map +1 -1
  83. package/dist/gateway/gateway.mjs +23 -31
  84. package/dist/gateway/gateway.mjs.map +1 -1
  85. package/dist/git-trigger/git-hooks.d.mts +2 -2
  86. package/dist/git-trigger/git-hooks.d.ts +2 -2
  87. package/dist/{index-kGCGWd5x.d.mts → index-DIRzR5IS.d.mts} +1 -1
  88. package/dist/{index-DlZORQsb.d.ts → index-DLQ4Rcuc.d.ts} +1 -1
  89. package/dist/{index-CUfmJ1Dq.d.mts → index-GPDn_EGI.d.mts} +1 -1
  90. package/dist/{index-BND3kQev.d.ts → index-Hnz5VyMR.d.ts} +1 -1
  91. package/dist/index.d.mts +14 -10
  92. package/dist/index.d.ts +14 -10
  93. package/dist/index.js +44 -219
  94. package/dist/index.js.map +1 -1
  95. package/dist/index.mjs +44 -212
  96. package/dist/index.mjs.map +1 -1
  97. package/dist/local-evaluator/evaluator.d.mts +2 -2
  98. package/dist/local-evaluator/evaluator.d.ts +2 -2
  99. package/dist/local-evaluator/evaluator.js.map +1 -1
  100. package/dist/local-evaluator/evaluator.mjs.map +1 -1
  101. package/dist/{mcp-DToTlwIn.d.ts → mcp-DPpu4xQz.d.ts} +53 -52
  102. package/dist/{mcp-ZRN4kY3b.d.mts → mcp-Dju_Sr1o.d.mts} +53 -52
  103. package/dist/{nextjs-C0KASOy_.d.mts → nextjs-BuoDBN4g.d.mts} +1 -1
  104. package/dist/{nextjs-lwNvWYWT.d.ts → nextjs-rZKzY_8o.d.ts} +1 -1
  105. package/dist/registration/index.js +1 -1
  106. package/dist/registration/index.js.map +1 -1
  107. package/dist/registration/index.mjs +1 -1
  108. package/dist/registration/index.mjs.map +1 -1
  109. package/dist/sdk-CdO6TIEf.d.mts +142 -0
  110. package/dist/sdk-DxHuIJBm.d.ts +142 -0
  111. package/dist/transport/index.d.mts +2 -2
  112. package/dist/transport/index.d.ts +2 -2
  113. package/dist/transport/index.js +1 -1
  114. package/dist/transport/index.js.map +1 -1
  115. package/dist/transport/index.mjs +1 -1
  116. package/dist/transport/index.mjs.map +1 -1
  117. package/dist/{types-DhhJxKIC.d.ts → types-3UV7IZx7.d.ts} +1 -3
  118. package/dist/{types-CGPU7HLi.d.ts → types-CNBaZKxY.d.ts} +24 -50
  119. package/dist/{types-Cx9hTpKI.d.mts → types-CSHcByFX.d.mts} +24 -50
  120. package/dist/{types-CfSJLS4i.d.mts → types-CoDjpbVY.d.mts} +1 -3
  121. package/dist/ui/index.d.mts +2 -17
  122. package/dist/ui/index.d.ts +2 -17
  123. package/dist/ui/index.js +1 -43
  124. package/dist/ui/index.js.map +1 -1
  125. package/dist/ui/index.mjs +1 -42
  126. package/dist/ui/index.mjs.map +1 -1
  127. package/dist/verify.d.mts +3 -4
  128. package/dist/verify.d.ts +3 -4
  129. package/dist/verify.js +22 -30
  130. package/dist/verify.js.map +1 -1
  131. package/dist/verify.mjs +22 -30
  132. package/dist/verify.mjs.map +1 -1
  133. package/package.json +1 -1
  134. package/dist/sdk-B4aodEwj.d.ts +0 -215
  135. package/dist/sdk-B9dSwum7.d.mts +0 -215
@@ -1,6 +1,6 @@
1
1
  import { AstraSyncGateway } from '../gateway/gateway.mjs';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-CfSJLS4i.mjs';
3
- import '../types-Cx9hTpKI.mjs';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-CoDjpbVY.mjs';
3
+ import '../types-CSHcByFX.mjs';
4
4
  import '../metadata-capture.mjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { AstraSyncGateway } from '../gateway/gateway.js';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-DhhJxKIC.js';
3
- import '../types-CGPU7HLi.js';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-3UV7IZx7.js';
3
+ import '../types-CNBaZKxY.js';
4
4
  import '../metadata-capture.js';
5
5
 
6
6
  /**
@@ -1,4 +1,4 @@
1
1
  import 'express';
2
- import '../types-Cx9hTpKI.mjs';
3
- export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-DBtPKXOL.mjs';
2
+ import '../types-CSHcByFX.mjs';
3
+ export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-KkBZBMqi.mjs';
4
4
  import '../metadata-capture.mjs';
@@ -1,4 +1,4 @@
1
1
  import 'express';
2
- import '../types-CGPU7HLi.js';
3
- export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-D-8Ks2Uo.js';
2
+ import '../types-CNBaZKxY.js';
3
+ export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-xK8pRrmj.js';
4
4
  import '../metadata-capture.js';
@@ -26,7 +26,7 @@ __export(express_exports, {
26
26
  module.exports = __toCommonJS(express_exports);
27
27
 
28
28
  // src/version.ts
29
- var SDK_VERSION = "4.6.0";
29
+ var SDK_VERSION = "5.0.0";
30
30
 
31
31
  // src/http.ts
32
32
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -104,7 +104,7 @@ async function awaitStepUpApproval(config, approval) {
104
104
  return "timeout";
105
105
  }
106
106
 
107
- // src/access-levels.ts
107
+ // src/trust-levels.ts
108
108
  function getTrustLevel(score) {
109
109
  if (score >= 80) return "PLATINUM";
110
110
  if (score >= 60) return "GOLD";
@@ -174,11 +174,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
174
174
  // src/verify.ts
175
175
  var DEFAULT_CONFIG = {
176
176
  apiBaseUrl: "https://astrasync.ai/api",
177
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
178
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
179
- // a route gated at `'guidance'` to silently let unverified traffic
180
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
181
- defaultAccessLevel: "none",
182
177
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
183
178
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
184
179
  // default; the caller's explicit value is honoured for cacheable results.
@@ -335,6 +330,14 @@ function extractCredentials(headers, query) {
335
330
  }
336
331
  return credentials;
337
332
  }
333
+ function mcpGuidance(urls) {
334
+ if (!urls?.mcpEndpoint) return void 0;
335
+ return {
336
+ endpoint: urls.mcpEndpoint,
337
+ discoveryUrl: urls.mcpDiscoveryUrl,
338
+ message: "If you are operating inside an MCP-capable host (Claude, ChatGPT, Cursor, or any MCP client), add the AstraSync MCP connector instead of integrating these URLs by hand: registration through the connector is KEYLESS and HUMAN-APPROVED \u2014 your human approves in an in-chat card, and you never see, hold, or transmit an API key, password, or private key."
339
+ };
340
+ }
338
341
  function createGuidanceResponse(_config, reason, options = {}) {
339
342
  const source = options.source ?? "no_credentials";
340
343
  const isApiError = source === "api_error";
@@ -361,11 +364,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
361
364
  registrationUrl: urls?.registrationUrl ?? "",
362
365
  documentationUrl: urls?.documentationUrl ?? "",
363
366
  steps: [
367
+ // MCP steering leads when the hosted bridge is advertised — the
368
+ // connector is the agent-actionable path (keyless, human-approved).
369
+ ...urls?.mcpEndpoint ? [
370
+ `Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
371
+ ] : [],
364
372
  "Register for an AstraSync account",
365
373
  "Create and register your agent",
366
374
  "Add your ASTRA-ID to request headers",
367
375
  "Retry your request"
368
- ]
376
+ ],
377
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
369
378
  };
370
379
  return {
371
380
  // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
@@ -373,13 +382,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
373
382
  // policy is not evaluated (we never reached the gate).
374
383
  identityVerified: false,
375
384
  policyAllowed: false,
376
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
377
- // Adapters additionally short-circuit on `!identityVerified ||
378
- // !policyAllowed` before the gate check, but the access level still has
379
- // to be honest at the data layer so downstream consumers (SDK adapters
380
- // in other languages, custom integrations) inherit the correct
381
- // semantics.
382
- accessLevel: "none",
383
385
  guidance,
384
386
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
385
387
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -473,7 +475,6 @@ async function callVerifyAccessAPI(config, request) {
473
475
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
474
476
  access: {
475
477
  allowed: false,
476
- accessLevel: "none",
477
478
  reason: "endpoint_deactivated",
478
479
  failures: [
479
480
  {
@@ -536,7 +537,7 @@ async function verify(config, request, options) {
536
537
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
537
538
  deprecationWarningShown = true;
538
539
  console.warn(
539
- "[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."
540
+ "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
540
541
  );
541
542
  }
542
543
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -582,14 +583,6 @@ async function verify(config, request, options) {
582
583
  const result2 = {
583
584
  identityVerified: idVerifiedFromBackend,
584
585
  policyAllowed: false,
585
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
586
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
587
- // colocated `guidance: {...}` help-payload object below and let
588
- // denied requests pass any route gated at `'guidance'` because
589
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
590
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
591
- // the gate check — belt-and-braces.
592
- accessLevel: "none",
593
586
  // 3.6.0: the server now emits top-level denialReasons on every deny
594
587
  // path — prefer it verbatim; the failure-message reconstruction remains
595
588
  // as the fallback for older backends.
@@ -600,7 +593,10 @@ async function verify(config, request, options) {
600
593
  guidance: {
601
594
  message: apiResponse.access?.reason || "Access denied by PDLSS policy",
602
595
  registrationUrl: urls?.registrationUrl ?? "",
603
- documentationUrl: urls?.documentationUrl ?? ""
596
+ documentationUrl: urls?.documentationUrl ?? "",
597
+ // 5.1.0: anonymous callers land on this branch — steer MCP-hosted
598
+ // agents to the connector (this is what the edge deny body surfaces).
599
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
604
600
  },
605
601
  verifiedAt: /* @__PURE__ */ new Date(),
606
602
  // Extract sessionId so decisions can be recorded for denials too
@@ -638,7 +634,6 @@ async function verify(config, request, options) {
638
634
  trustScore: apiResponse.organization.trustScore
639
635
  } : void 0;
640
636
  const verificationContext = apiResponse.verificationContext;
641
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
642
637
  const result = {
643
638
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
644
639
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -650,7 +645,6 @@ async function verify(config, request, options) {
650
645
  // this load-bearing must never be defaulted on.
651
646
  identityVerified: apiResponse.verificationContext?.idVerified === true,
652
647
  policyAllowed: true,
653
- accessLevel,
654
648
  agent,
655
649
  developer,
656
650
  organization,
@@ -677,7 +671,6 @@ async function verify(config, request, options) {
677
671
  };
678
672
  if (result.recommendation === "deny") {
679
673
  result.policyAllowed = false;
680
- result.accessLevel = "none";
681
674
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
682
675
  result.guidance = result.runtimeChallenge ? {
683
676
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -1617,7 +1610,6 @@ function defaultOnDenied(result, _req, res) {
1617
1610
  error: {
1618
1611
  code: !result.identityVerified ? "UNAUTHORIZED" : "INSUFFICIENT_ACCESS",
1619
1612
  message: result.denialReasons?.[0] || "Access denied",
1620
- accessLevel: result.accessLevel,
1621
1613
  guidance: result.guidance,
1622
1614
  // Round-10: aggregated per-dimension detail + correlation handle.
1623
1615
  failures: result.failures,
@@ -1733,11 +1725,11 @@ function createMiddleware(options) {
1733
1725
  }
1734
1726
  const wellKnownUrls = config.apiBaseUrl ? await getWellKnownUrls(config.apiBaseUrl).catch(() => void 0) : void 0;
1735
1727
  const credentials = customExtractCredentials ? customExtractCredentials(req) : defaultExtractCredentials(req);
1736
- const shouldEnforce = routeConfig.minAccessLevel !== "none";
1737
- if (routeConfig.minAccessLevel === "none" && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
1728
+ const shouldEnforce = !routeConfig.observe;
1729
+ if (routeConfig.observe && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
1738
1730
  if (config.setPassThroughHeader) {
1739
1731
  res.setHeader("X-Astra-Gateway-Mode", "unenforced");
1740
- res.setHeader("X-Astra-Gateway-Reason", "route-none");
1732
+ res.setHeader("X-Astra-Gateway-Reason", "route-observe");
1741
1733
  }
1742
1734
  beaconPassThrough?.(req);
1743
1735
  return next();
@@ -1774,7 +1766,6 @@ function createMiddleware(options) {
1774
1766
  const result2 = {
1775
1767
  identityVerified: false,
1776
1768
  policyAllowed: false,
1777
- accessLevel: "none",
1778
1769
  denialReasons: preCheckFailures.map((f) => f.message),
1779
1770
  guidance: {
1780
1771
  message: "Request exceeds counterparty-defined PDLSS limits.",
@@ -1937,7 +1928,6 @@ function createMiddleware(options) {
1937
1928
  const result = {
1938
1929
  identityVerified: false,
1939
1930
  policyAllowed: false,
1940
- accessLevel: "none",
1941
1931
  denialReasons: [`Verification middleware internal error: ${errorClass}`],
1942
1932
  failures: [
1943
1933
  {