@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,5 +1,5 @@
1
1
  // src/version.ts
2
- var SDK_VERSION = "4.6.0";
2
+ var SDK_VERSION = "5.0.0";
3
3
 
4
4
  // src/http.ts
5
5
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -19,84 +19,13 @@ function withUserAgent(initHeaders) {
19
19
  }
20
20
  var sdkFetch = (input, init) => fetch(input, { ...init, headers: withUserAgent(init?.headers) });
21
21
 
22
- // src/access-levels.ts
23
- var ACCESS_LEVEL_HIERARCHY = {
24
- none: 0,
25
- restricted: 1,
26
- "read-only": 2,
27
- standard: 3,
28
- full: 4,
29
- internal: 5
30
- };
22
+ // src/trust-levels.ts
31
23
  function getTrustLevel(score) {
32
24
  if (score >= 80) return "PLATINUM";
33
25
  if (score >= 60) return "GOLD";
34
26
  if (score >= 40) return "SILVER";
35
27
  return "BRONZE";
36
28
  }
37
- function hasMinimumAccess(actual, required) {
38
- return ACCESS_LEVEL_HIERARCHY[actual] >= ACCESS_LEVEL_HIERARCHY[required];
39
- }
40
- function getCapabilities(accessLevel) {
41
- switch (accessLevel) {
42
- case "none":
43
- return {
44
- canRead: false,
45
- canWrite: false,
46
- canDelete: false,
47
- canAdmin: false,
48
- canAccessInternal: false
49
- };
50
- case "restricted":
51
- return {
52
- canRead: false,
53
- canWrite: false,
54
- canDelete: false,
55
- canAdmin: false,
56
- canAccessInternal: false
57
- };
58
- case "read-only":
59
- return {
60
- canRead: true,
61
- canWrite: false,
62
- canDelete: false,
63
- canAdmin: false,
64
- canAccessInternal: false
65
- };
66
- case "standard":
67
- return {
68
- canRead: true,
69
- canWrite: true,
70
- canDelete: false,
71
- canAdmin: false,
72
- canAccessInternal: false
73
- };
74
- case "full":
75
- return {
76
- canRead: true,
77
- canWrite: true,
78
- canDelete: true,
79
- canAdmin: false,
80
- canAccessInternal: false
81
- };
82
- case "internal":
83
- return {
84
- canRead: true,
85
- canWrite: true,
86
- canDelete: true,
87
- canAdmin: true,
88
- canAccessInternal: true
89
- };
90
- default:
91
- return {
92
- canRead: false,
93
- canWrite: false,
94
- canDelete: false,
95
- canAdmin: false,
96
- canAccessInternal: false
97
- };
98
- }
99
- }
100
29
 
101
30
  // src/well-known.ts
102
31
  var CACHE_TTL_MS = 60 * 60 * 1e3;
@@ -108,11 +37,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
108
37
  // src/verify.ts
109
38
  var DEFAULT_CONFIG = {
110
39
  apiBaseUrl: "https://astrasync.ai/api",
111
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
112
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
113
- // a route gated at `'guidance'` to silently let unverified traffic
114
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
115
- defaultAccessLevel: "none",
116
40
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
117
41
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
118
42
  // default; the caller's explicit value is honoured for cacheable results.
@@ -238,6 +162,14 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
238
162
  function clearCache() {
239
163
  verificationCache.clear();
240
164
  }
165
+ function mcpGuidance(urls) {
166
+ if (!urls?.mcpEndpoint) return void 0;
167
+ return {
168
+ endpoint: urls.mcpEndpoint,
169
+ discoveryUrl: urls.mcpDiscoveryUrl,
170
+ 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."
171
+ };
172
+ }
241
173
  function createGuidanceResponse(_config, reason, options = {}) {
242
174
  const source = options.source ?? "no_credentials";
243
175
  const isApiError = source === "api_error";
@@ -264,11 +196,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
264
196
  registrationUrl: urls?.registrationUrl ?? "",
265
197
  documentationUrl: urls?.documentationUrl ?? "",
266
198
  steps: [
199
+ // MCP steering leads when the hosted bridge is advertised — the
200
+ // connector is the agent-actionable path (keyless, human-approved).
201
+ ...urls?.mcpEndpoint ? [
202
+ `Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
203
+ ] : [],
267
204
  "Register for an AstraSync account",
268
205
  "Create and register your agent",
269
206
  "Add your ASTRA-ID to request headers",
270
207
  "Retry your request"
271
- ]
208
+ ],
209
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
272
210
  };
273
211
  return {
274
212
  // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
@@ -276,13 +214,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
276
214
  // policy is not evaluated (we never reached the gate).
277
215
  identityVerified: false,
278
216
  policyAllowed: false,
279
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
280
- // Adapters additionally short-circuit on `!identityVerified ||
281
- // !policyAllowed` before the gate check, but the access level still has
282
- // to be honest at the data layer so downstream consumers (SDK adapters
283
- // in other languages, custom integrations) inherit the correct
284
- // semantics.
285
- accessLevel: "none",
286
217
  guidance,
287
218
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
288
219
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -376,7 +307,6 @@ async function callVerifyAccessAPI(config, request) {
376
307
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
377
308
  access: {
378
309
  allowed: false,
379
- accessLevel: "none",
380
310
  reason: "endpoint_deactivated",
381
311
  failures: [
382
312
  {
@@ -439,7 +369,7 @@ async function verify(config, request, options) {
439
369
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
440
370
  deprecationWarningShown = true;
441
371
  console.warn(
442
- "[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."
372
+ "[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."
443
373
  );
444
374
  }
445
375
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -485,14 +415,6 @@ async function verify(config, request, options) {
485
415
  const result2 = {
486
416
  identityVerified: idVerifiedFromBackend,
487
417
  policyAllowed: false,
488
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
489
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
490
- // colocated `guidance: {...}` help-payload object below and let
491
- // denied requests pass any route gated at `'guidance'` because
492
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
493
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
494
- // the gate check — belt-and-braces.
495
- accessLevel: "none",
496
418
  // 3.6.0: the server now emits top-level denialReasons on every deny
497
419
  // path — prefer it verbatim; the failure-message reconstruction remains
498
420
  // as the fallback for older backends.
@@ -503,7 +425,10 @@ async function verify(config, request, options) {
503
425
  guidance: {
504
426
  message: apiResponse.access?.reason || "Access denied by PDLSS policy",
505
427
  registrationUrl: urls?.registrationUrl ?? "",
506
- documentationUrl: urls?.documentationUrl ?? ""
428
+ documentationUrl: urls?.documentationUrl ?? "",
429
+ // 5.1.0: anonymous callers land on this branch — steer MCP-hosted
430
+ // agents to the connector (this is what the edge deny body surfaces).
431
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
507
432
  },
508
433
  verifiedAt: /* @__PURE__ */ new Date(),
509
434
  // Extract sessionId so decisions can be recorded for denials too
@@ -541,7 +466,6 @@ async function verify(config, request, options) {
541
466
  trustScore: apiResponse.organization.trustScore
542
467
  } : void 0;
543
468
  const verificationContext = apiResponse.verificationContext;
544
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
545
469
  const result = {
546
470
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
547
471
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -553,7 +477,6 @@ async function verify(config, request, options) {
553
477
  // this load-bearing must never be defaulted on.
554
478
  identityVerified: apiResponse.verificationContext?.idVerified === true,
555
479
  policyAllowed: true,
556
- accessLevel,
557
480
  agent,
558
481
  developer,
559
482
  organization,
@@ -580,7 +503,6 @@ async function verify(config, request, options) {
580
503
  };
581
504
  if (result.recommendation === "deny") {
582
505
  result.policyAllowed = false;
583
- result.accessLevel = "none";
584
506
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
585
507
  result.guidance = result.runtimeChallenge ? {
586
508
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -609,7 +531,6 @@ async function quickVerify(config, credentials) {
609
531
  return {
610
532
  identityVerified: result.identityVerified,
611
533
  policyAllowed: result.policyAllowed,
612
- accessLevel: result.accessLevel,
613
534
  reason: result.denialReasons?.[0]
614
535
  };
615
536
  }
@@ -620,7 +541,6 @@ var VerificationGatewayClient = class {
620
541
  this.config = {
621
542
  apiBaseUrl: options.apiBaseUrl,
622
543
  apiKey: options.apiKey,
623
- defaultAccessLevel: options.defaultAccessLevel,
624
544
  minTrustScore: options.minTrustScore,
625
545
  minTrustScoreForFull: options.minTrustScoreForFull,
626
546
  cacheTtl: options.cacheTtl,
@@ -669,26 +589,6 @@ var VerificationGatewayClient = class {
669
589
  async quickVerify(credentials) {
670
590
  return this.executeWithRetry(() => quickVerify(this.config, credentials));
671
591
  }
672
- /**
673
- * Check if an agent has a specific access level.
674
- *
675
- * @deprecated 3.2.0 — the access-level band is informational only; it no
676
- * longer gates in the middleware adapters (post-3.1.0 feedback #1). This
677
- * explicit opt-in query still works, but prefer gating on the server-side
678
- * policy decision (identity + policy + trust) or per-route `minTrustScore`.
679
- * Explicit per-route condition→constraint rules are the Phase-2 successor.
680
- */
681
- async hasAccess(credentials, requiredLevel) {
682
- const result = await this.quickVerify(credentials);
683
- return hasMinimumAccess(result.accessLevel, requiredLevel);
684
- }
685
- /**
686
- * Get capabilities for a verified agent
687
- */
688
- async getCapabilities(credentials) {
689
- const result = await this.quickVerify(credentials);
690
- return getCapabilities(result.accessLevel);
691
- }
692
592
  /**
693
593
  * Verify a specific ASTRA-ID
694
594
  */
@@ -750,9 +650,7 @@ async function verifyOnce(options) {
750
650
  export {
751
651
  VerificationGatewayClient,
752
652
  createClient,
753
- getCapabilities,
754
653
  getTrustLevel,
755
- hasMinimumAccess,
756
654
  verifyOnce
757
655
  };
758
656
  //# sourceMappingURL=sdk.mjs.map