@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,3 +1,3 @@
1
- import '../types-Cx9hTpKI.mjs';
2
- export { V as VerificationGatewayClient, c as createClient, e as getCapabilities, f as getTrustLevel, h as hasMinimumAccess, v as verifyOnce } from '../sdk-B9dSwum7.mjs';
1
+ import '../types-CSHcByFX.mjs';
2
+ export { V as VerificationGatewayClient, c as createClient, g as getTrustLevel, v as verifyOnce } from '../sdk-CdO6TIEf.mjs';
3
3
  import '../metadata-capture.mjs';
@@ -1,3 +1,3 @@
1
- import '../types-CGPU7HLi.js';
2
- export { V as VerificationGatewayClient, c as createClient, e as getCapabilities, f as getTrustLevel, h as hasMinimumAccess, v as verifyOnce } from '../sdk-B4aodEwj.js';
1
+ import '../types-CNBaZKxY.js';
2
+ export { V as VerificationGatewayClient, c as createClient, g as getTrustLevel, v as verifyOnce } from '../sdk-DxHuIJBm.js';
3
3
  import '../metadata-capture.js';
@@ -22,15 +22,13 @@ var sdk_exports = {};
22
22
  __export(sdk_exports, {
23
23
  VerificationGatewayClient: () => VerificationGatewayClient,
24
24
  createClient: () => createClient,
25
- getCapabilities: () => getCapabilities,
26
25
  getTrustLevel: () => getTrustLevel,
27
- hasMinimumAccess: () => hasMinimumAccess,
28
26
  verifyOnce: () => verifyOnce
29
27
  });
30
28
  module.exports = __toCommonJS(sdk_exports);
31
29
 
32
30
  // src/version.ts
33
- var SDK_VERSION = "4.6.0";
31
+ var SDK_VERSION = "5.0.0";
34
32
 
35
33
  // src/http.ts
36
34
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -50,84 +48,13 @@ function withUserAgent(initHeaders) {
50
48
  }
51
49
  var sdkFetch = (input, init) => fetch(input, { ...init, headers: withUserAgent(init?.headers) });
52
50
 
53
- // src/access-levels.ts
54
- var ACCESS_LEVEL_HIERARCHY = {
55
- none: 0,
56
- restricted: 1,
57
- "read-only": 2,
58
- standard: 3,
59
- full: 4,
60
- internal: 5
61
- };
51
+ // src/trust-levels.ts
62
52
  function getTrustLevel(score) {
63
53
  if (score >= 80) return "PLATINUM";
64
54
  if (score >= 60) return "GOLD";
65
55
  if (score >= 40) return "SILVER";
66
56
  return "BRONZE";
67
57
  }
68
- function hasMinimumAccess(actual, required) {
69
- return ACCESS_LEVEL_HIERARCHY[actual] >= ACCESS_LEVEL_HIERARCHY[required];
70
- }
71
- function getCapabilities(accessLevel) {
72
- switch (accessLevel) {
73
- case "none":
74
- return {
75
- canRead: false,
76
- canWrite: false,
77
- canDelete: false,
78
- canAdmin: false,
79
- canAccessInternal: false
80
- };
81
- case "restricted":
82
- return {
83
- canRead: false,
84
- canWrite: false,
85
- canDelete: false,
86
- canAdmin: false,
87
- canAccessInternal: false
88
- };
89
- case "read-only":
90
- return {
91
- canRead: true,
92
- canWrite: false,
93
- canDelete: false,
94
- canAdmin: false,
95
- canAccessInternal: false
96
- };
97
- case "standard":
98
- return {
99
- canRead: true,
100
- canWrite: true,
101
- canDelete: false,
102
- canAdmin: false,
103
- canAccessInternal: false
104
- };
105
- case "full":
106
- return {
107
- canRead: true,
108
- canWrite: true,
109
- canDelete: true,
110
- canAdmin: false,
111
- canAccessInternal: false
112
- };
113
- case "internal":
114
- return {
115
- canRead: true,
116
- canWrite: true,
117
- canDelete: true,
118
- canAdmin: true,
119
- canAccessInternal: true
120
- };
121
- default:
122
- return {
123
- canRead: false,
124
- canWrite: false,
125
- canDelete: false,
126
- canAdmin: false,
127
- canAccessInternal: false
128
- };
129
- }
130
- }
131
58
 
132
59
  // src/well-known.ts
133
60
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -139,11 +66,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
139
66
  // src/verify.ts
140
67
  var DEFAULT_CONFIG = {
141
68
  apiBaseUrl: "https://astrasync.ai/api",
142
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
143
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
144
- // a route gated at `'guidance'` to silently let unverified traffic
145
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
146
- defaultAccessLevel: "none",
147
69
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
148
70
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
149
71
  // default; the caller's explicit value is honoured for cacheable results.
@@ -269,6 +191,14 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
269
191
  function clearCache() {
270
192
  verificationCache.clear();
271
193
  }
194
+ function mcpGuidance(urls) {
195
+ if (!urls?.mcpEndpoint) return void 0;
196
+ return {
197
+ endpoint: urls.mcpEndpoint,
198
+ discoveryUrl: urls.mcpDiscoveryUrl,
199
+ 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."
200
+ };
201
+ }
272
202
  function createGuidanceResponse(_config, reason, options = {}) {
273
203
  const source = options.source ?? "no_credentials";
274
204
  const isApiError = source === "api_error";
@@ -295,11 +225,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
295
225
  registrationUrl: urls?.registrationUrl ?? "",
296
226
  documentationUrl: urls?.documentationUrl ?? "",
297
227
  steps: [
228
+ // MCP steering leads when the hosted bridge is advertised — the
229
+ // connector is the agent-actionable path (keyless, human-approved).
230
+ ...urls?.mcpEndpoint ? [
231
+ `Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
232
+ ] : [],
298
233
  "Register for an AstraSync account",
299
234
  "Create and register your agent",
300
235
  "Add your ASTRA-ID to request headers",
301
236
  "Retry your request"
302
- ]
237
+ ],
238
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
303
239
  };
304
240
  return {
305
241
  // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
@@ -307,13 +243,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
307
243
  // policy is not evaluated (we never reached the gate).
308
244
  identityVerified: false,
309
245
  policyAllowed: false,
310
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
311
- // Adapters additionally short-circuit on `!identityVerified ||
312
- // !policyAllowed` before the gate check, but the access level still has
313
- // to be honest at the data layer so downstream consumers (SDK adapters
314
- // in other languages, custom integrations) inherit the correct
315
- // semantics.
316
- accessLevel: "none",
317
246
  guidance,
318
247
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
319
248
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -407,7 +336,6 @@ async function callVerifyAccessAPI(config, request) {
407
336
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
408
337
  access: {
409
338
  allowed: false,
410
- accessLevel: "none",
411
339
  reason: "endpoint_deactivated",
412
340
  failures: [
413
341
  {
@@ -470,7 +398,7 @@ async function verify(config, request, options) {
470
398
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
471
399
  deprecationWarningShown = true;
472
400
  console.warn(
473
- "[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."
401
+ "[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."
474
402
  );
475
403
  }
476
404
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -516,14 +444,6 @@ async function verify(config, request, options) {
516
444
  const result2 = {
517
445
  identityVerified: idVerifiedFromBackend,
518
446
  policyAllowed: false,
519
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
520
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
521
- // colocated `guidance: {...}` help-payload object below and let
522
- // denied requests pass any route gated at `'guidance'` because
523
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
524
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
525
- // the gate check — belt-and-braces.
526
- accessLevel: "none",
527
447
  // 3.6.0: the server now emits top-level denialReasons on every deny
528
448
  // path — prefer it verbatim; the failure-message reconstruction remains
529
449
  // as the fallback for older backends.
@@ -534,7 +454,10 @@ async function verify(config, request, options) {
534
454
  guidance: {
535
455
  message: apiResponse.access?.reason || "Access denied by PDLSS policy",
536
456
  registrationUrl: urls?.registrationUrl ?? "",
537
- documentationUrl: urls?.documentationUrl ?? ""
457
+ documentationUrl: urls?.documentationUrl ?? "",
458
+ // 5.1.0: anonymous callers land on this branch — steer MCP-hosted
459
+ // agents to the connector (this is what the edge deny body surfaces).
460
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
538
461
  },
539
462
  verifiedAt: /* @__PURE__ */ new Date(),
540
463
  // Extract sessionId so decisions can be recorded for denials too
@@ -572,7 +495,6 @@ async function verify(config, request, options) {
572
495
  trustScore: apiResponse.organization.trustScore
573
496
  } : void 0;
574
497
  const verificationContext = apiResponse.verificationContext;
575
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
576
498
  const result = {
577
499
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
578
500
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -584,7 +506,6 @@ async function verify(config, request, options) {
584
506
  // this load-bearing must never be defaulted on.
585
507
  identityVerified: apiResponse.verificationContext?.idVerified === true,
586
508
  policyAllowed: true,
587
- accessLevel,
588
509
  agent,
589
510
  developer,
590
511
  organization,
@@ -611,7 +532,6 @@ async function verify(config, request, options) {
611
532
  };
612
533
  if (result.recommendation === "deny") {
613
534
  result.policyAllowed = false;
614
- result.accessLevel = "none";
615
535
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
616
536
  result.guidance = result.runtimeChallenge ? {
617
537
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -640,7 +560,6 @@ async function quickVerify(config, credentials) {
640
560
  return {
641
561
  identityVerified: result.identityVerified,
642
562
  policyAllowed: result.policyAllowed,
643
- accessLevel: result.accessLevel,
644
563
  reason: result.denialReasons?.[0]
645
564
  };
646
565
  }
@@ -651,7 +570,6 @@ var VerificationGatewayClient = class {
651
570
  this.config = {
652
571
  apiBaseUrl: options.apiBaseUrl,
653
572
  apiKey: options.apiKey,
654
- defaultAccessLevel: options.defaultAccessLevel,
655
573
  minTrustScore: options.minTrustScore,
656
574
  minTrustScoreForFull: options.minTrustScoreForFull,
657
575
  cacheTtl: options.cacheTtl,
@@ -700,26 +618,6 @@ var VerificationGatewayClient = class {
700
618
  async quickVerify(credentials) {
701
619
  return this.executeWithRetry(() => quickVerify(this.config, credentials));
702
620
  }
703
- /**
704
- * Check if an agent has a specific access level.
705
- *
706
- * @deprecated 3.2.0 — the access-level band is informational only; it no
707
- * longer gates in the middleware adapters (post-3.1.0 feedback #1). This
708
- * explicit opt-in query still works, but prefer gating on the server-side
709
- * policy decision (identity + policy + trust) or per-route `minTrustScore`.
710
- * Explicit per-route condition→constraint rules are the Phase-2 successor.
711
- */
712
- async hasAccess(credentials, requiredLevel) {
713
- const result = await this.quickVerify(credentials);
714
- return hasMinimumAccess(result.accessLevel, requiredLevel);
715
- }
716
- /**
717
- * Get capabilities for a verified agent
718
- */
719
- async getCapabilities(credentials) {
720
- const result = await this.quickVerify(credentials);
721
- return getCapabilities(result.accessLevel);
722
- }
723
621
  /**
724
622
  * Verify a specific ASTRA-ID
725
623
  */
@@ -782,9 +680,7 @@ async function verifyOnce(options) {
782
680
  0 && (module.exports = {
783
681
  VerificationGatewayClient,
784
682
  createClient,
785
- getCapabilities,
786
683
  getTrustLevel,
787
- hasMinimumAccess,
788
684
  verifyOnce
789
685
  });
790
686
  //# sourceMappingURL=sdk.js.map