@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,4 +1,4 @@
1
1
  import 'next/server';
2
- import '../types-Cx9hTpKI.mjs';
3
- export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-C0KASOy_.mjs';
2
+ import '../types-CSHcByFX.mjs';
3
+ export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-BuoDBN4g.mjs';
4
4
  import '../metadata-capture.mjs';
@@ -1,4 +1,4 @@
1
1
  import 'next/server';
2
- import '../types-CGPU7HLi.js';
3
- export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-lwNvWYWT.js';
2
+ import '../types-CNBaZKxY.js';
3
+ export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-rZKzY_8o.js';
4
4
  import '../metadata-capture.js';
@@ -36,7 +36,7 @@ __export(nextjs_exports, {
36
36
  module.exports = __toCommonJS(nextjs_exports);
37
37
 
38
38
  // src/version.ts
39
- var SDK_VERSION = "4.6.0";
39
+ var SDK_VERSION = "5.0.0";
40
40
 
41
41
  // src/http.ts
42
42
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -114,7 +114,7 @@ async function awaitStepUpApproval(config, approval) {
114
114
  return "timeout";
115
115
  }
116
116
 
117
- // src/access-levels.ts
117
+ // src/trust-levels.ts
118
118
  function getTrustLevel(score) {
119
119
  if (score >= 80) return "PLATINUM";
120
120
  if (score >= 60) return "GOLD";
@@ -132,11 +132,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
132
132
  // src/verify.ts
133
133
  var DEFAULT_CONFIG = {
134
134
  apiBaseUrl: "https://astrasync.ai/api",
135
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
136
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
137
- // a route gated at `'guidance'` to silently let unverified traffic
138
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
139
- defaultAccessLevel: "none",
140
135
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
141
136
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
142
137
  // default; the caller's explicit value is honoured for cacheable results.
@@ -293,6 +288,14 @@ function extractCredentials(headers, query) {
293
288
  }
294
289
  return credentials;
295
290
  }
291
+ function mcpGuidance(urls) {
292
+ if (!urls?.mcpEndpoint) return void 0;
293
+ return {
294
+ endpoint: urls.mcpEndpoint,
295
+ discoveryUrl: urls.mcpDiscoveryUrl,
296
+ 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."
297
+ };
298
+ }
296
299
  function createGuidanceResponse(_config, reason, options = {}) {
297
300
  const source = options.source ?? "no_credentials";
298
301
  const isApiError = source === "api_error";
@@ -319,11 +322,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
319
322
  registrationUrl: urls?.registrationUrl ?? "",
320
323
  documentationUrl: urls?.documentationUrl ?? "",
321
324
  steps: [
325
+ // MCP steering leads when the hosted bridge is advertised — the
326
+ // connector is the agent-actionable path (keyless, human-approved).
327
+ ...urls?.mcpEndpoint ? [
328
+ `Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
329
+ ] : [],
322
330
  "Register for an AstraSync account",
323
331
  "Create and register your agent",
324
332
  "Add your ASTRA-ID to request headers",
325
333
  "Retry your request"
326
- ]
334
+ ],
335
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
327
336
  };
328
337
  return {
329
338
  // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
@@ -331,13 +340,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
331
340
  // policy is not evaluated (we never reached the gate).
332
341
  identityVerified: false,
333
342
  policyAllowed: false,
334
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
335
- // Adapters additionally short-circuit on `!identityVerified ||
336
- // !policyAllowed` before the gate check, but the access level still has
337
- // to be honest at the data layer so downstream consumers (SDK adapters
338
- // in other languages, custom integrations) inherit the correct
339
- // semantics.
340
- accessLevel: "none",
341
343
  guidance,
342
344
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
343
345
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -431,7 +433,6 @@ async function callVerifyAccessAPI(config, request) {
431
433
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
432
434
  access: {
433
435
  allowed: false,
434
- accessLevel: "none",
435
436
  reason: "endpoint_deactivated",
436
437
  failures: [
437
438
  {
@@ -494,7 +495,7 @@ async function verify(config, request, options) {
494
495
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
495
496
  deprecationWarningShown = true;
496
497
  console.warn(
497
- "[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."
498
+ "[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."
498
499
  );
499
500
  }
500
501
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -540,14 +541,6 @@ async function verify(config, request, options) {
540
541
  const result2 = {
541
542
  identityVerified: idVerifiedFromBackend,
542
543
  policyAllowed: false,
543
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
544
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
545
- // colocated `guidance: {...}` help-payload object below and let
546
- // denied requests pass any route gated at `'guidance'` because
547
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
548
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
549
- // the gate check — belt-and-braces.
550
- accessLevel: "none",
551
544
  // 3.6.0: the server now emits top-level denialReasons on every deny
552
545
  // path — prefer it verbatim; the failure-message reconstruction remains
553
546
  // as the fallback for older backends.
@@ -558,7 +551,10 @@ async function verify(config, request, options) {
558
551
  guidance: {
559
552
  message: apiResponse.access?.reason || "Access denied by PDLSS policy",
560
553
  registrationUrl: urls?.registrationUrl ?? "",
561
- documentationUrl: urls?.documentationUrl ?? ""
554
+ documentationUrl: urls?.documentationUrl ?? "",
555
+ // 5.1.0: anonymous callers land on this branch — steer MCP-hosted
556
+ // agents to the connector (this is what the edge deny body surfaces).
557
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
562
558
  },
563
559
  verifiedAt: /* @__PURE__ */ new Date(),
564
560
  // Extract sessionId so decisions can be recorded for denials too
@@ -596,7 +592,6 @@ async function verify(config, request, options) {
596
592
  trustScore: apiResponse.organization.trustScore
597
593
  } : void 0;
598
594
  const verificationContext = apiResponse.verificationContext;
599
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
600
595
  const result = {
601
596
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
602
597
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -608,7 +603,6 @@ async function verify(config, request, options) {
608
603
  // this load-bearing must never be defaulted on.
609
604
  identityVerified: apiResponse.verificationContext?.idVerified === true,
610
605
  policyAllowed: true,
611
- accessLevel,
612
606
  agent,
613
607
  developer,
614
608
  organization,
@@ -635,7 +629,6 @@ async function verify(config, request, options) {
635
629
  };
636
630
  if (result.recommendation === "deny") {
637
631
  result.policyAllowed = false;
638
- result.accessLevel = "none";
639
632
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
640
633
  result.guidance = result.runtimeChallenge ? {
641
634
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -1770,7 +1763,7 @@ function createMiddleware(options) {
1770
1763
  beaconPassThrough?.(request, pathname);
1771
1764
  return NextResponse.next();
1772
1765
  }
1773
- if (routeConfig.minAccessLevel === "none") {
1766
+ if (routeConfig.observe) {
1774
1767
  beaconPassThrough?.(request, pathname);
1775
1768
  return NextResponse.next();
1776
1769
  }
@@ -1800,7 +1793,6 @@ function createMiddleware(options) {
1800
1793
  const preCheckResult = {
1801
1794
  identityVerified: false,
1802
1795
  policyAllowed: false,
1803
- accessLevel: "none",
1804
1796
  denialReasons: preCheckFailures.map((f) => f.message),
1805
1797
  guidance: {
1806
1798
  message: "Request exceeds counterparty-defined PDLSS limits.",
@@ -1938,7 +1930,6 @@ function createMiddleware(options) {
1938
1930
  }
1939
1931
  response.headers.set("X-AstraSync-Identity-Verified", result.identityVerified.toString());
1940
1932
  response.headers.set("X-AstraSync-Policy-Allowed", result.policyAllowed.toString());
1941
- response.headers.set("X-AstraSync-Access-Level", result.accessLevel);
1942
1933
  if (result.agent) {
1943
1934
  response.headers.set("X-AstraSync-Agent-Id", result.agent.astraId);
1944
1935
  }