@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
@@ -3988,7 +3988,7 @@ function verifyLocal(evaluator, context) {
3988
3988
  return evaluator.evaluate(context);
3989
3989
  }
3990
3990
 
3991
- // src/access-levels.ts
3991
+ // src/trust-levels.ts
3992
3992
  function getTrustLevel(score) {
3993
3993
  if (score >= 80) return "PLATINUM";
3994
3994
  if (score >= 60) return "GOLD";
@@ -3997,7 +3997,7 @@ function getTrustLevel(score) {
3997
3997
  }
3998
3998
 
3999
3999
  // src/version.ts
4000
- var SDK_VERSION = "4.6.0";
4000
+ var SDK_VERSION = "5.0.0";
4001
4001
 
4002
4002
  // src/http.ts
4003
4003
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4027,11 +4027,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
4027
4027
  // src/verify.ts
4028
4028
  var DEFAULT_CONFIG = {
4029
4029
  apiBaseUrl: "https://astrasync.ai/api",
4030
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
4031
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
4032
- // a route gated at `'guidance'` to silently let unverified traffic
4033
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
4034
- defaultAccessLevel: "none",
4035
4030
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
4036
4031
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
4037
4032
  // default; the caller's explicit value is honoured for cacheable results.
@@ -4154,6 +4149,14 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
4154
4149
  expiresAt: Date.now() + ttlSeconds * 1e3
4155
4150
  });
4156
4151
  }
4152
+ function mcpGuidance(urls) {
4153
+ if (!urls?.mcpEndpoint) return void 0;
4154
+ return {
4155
+ endpoint: urls.mcpEndpoint,
4156
+ discoveryUrl: urls.mcpDiscoveryUrl,
4157
+ 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."
4158
+ };
4159
+ }
4157
4160
  function createGuidanceResponse(_config, reason, options = {}) {
4158
4161
  const source = options.source ?? "no_credentials";
4159
4162
  const isApiError = source === "api_error";
@@ -4180,11 +4183,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
4180
4183
  registrationUrl: urls?.registrationUrl ?? "",
4181
4184
  documentationUrl: urls?.documentationUrl ?? "",
4182
4185
  steps: [
4186
+ // MCP steering leads when the hosted bridge is advertised — the
4187
+ // connector is the agent-actionable path (keyless, human-approved).
4188
+ ...urls?.mcpEndpoint ? [
4189
+ `Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
4190
+ ] : [],
4183
4191
  "Register for an AstraSync account",
4184
4192
  "Create and register your agent",
4185
4193
  "Add your ASTRA-ID to request headers",
4186
4194
  "Retry your request"
4187
- ]
4195
+ ],
4196
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
4188
4197
  };
4189
4198
  return {
4190
4199
  // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
@@ -4192,13 +4201,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
4192
4201
  // policy is not evaluated (we never reached the gate).
4193
4202
  identityVerified: false,
4194
4203
  policyAllowed: false,
4195
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
4196
- // Adapters additionally short-circuit on `!identityVerified ||
4197
- // !policyAllowed` before the gate check, but the access level still has
4198
- // to be honest at the data layer so downstream consumers (SDK adapters
4199
- // in other languages, custom integrations) inherit the correct
4200
- // semantics.
4201
- accessLevel: "none",
4202
4204
  guidance,
4203
4205
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
4204
4206
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -4292,7 +4294,6 @@ async function callVerifyAccessAPI(config, request) {
4292
4294
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
4293
4295
  access: {
4294
4296
  allowed: false,
4295
- accessLevel: "none",
4296
4297
  reason: "endpoint_deactivated",
4297
4298
  failures: [
4298
4299
  {
@@ -4355,7 +4356,7 @@ async function verify(config, request, options) {
4355
4356
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
4356
4357
  deprecationWarningShown = true;
4357
4358
  console.warn(
4358
- "[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."
4359
+ "[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."
4359
4360
  );
4360
4361
  }
4361
4362
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -4401,14 +4402,6 @@ async function verify(config, request, options) {
4401
4402
  const result2 = {
4402
4403
  identityVerified: idVerifiedFromBackend,
4403
4404
  policyAllowed: false,
4404
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
4405
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
4406
- // colocated `guidance: {...}` help-payload object below and let
4407
- // denied requests pass any route gated at `'guidance'` because
4408
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
4409
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
4410
- // the gate check — belt-and-braces.
4411
- accessLevel: "none",
4412
4405
  // 3.6.0: the server now emits top-level denialReasons on every deny
4413
4406
  // path — prefer it verbatim; the failure-message reconstruction remains
4414
4407
  // as the fallback for older backends.
@@ -4419,7 +4412,10 @@ async function verify(config, request, options) {
4419
4412
  guidance: {
4420
4413
  message: apiResponse.access?.reason || "Access denied by PDLSS policy",
4421
4414
  registrationUrl: urls?.registrationUrl ?? "",
4422
- documentationUrl: urls?.documentationUrl ?? ""
4415
+ documentationUrl: urls?.documentationUrl ?? "",
4416
+ // 5.1.0: anonymous callers land on this branch — steer MCP-hosted
4417
+ // agents to the connector (this is what the edge deny body surfaces).
4418
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
4423
4419
  },
4424
4420
  verifiedAt: /* @__PURE__ */ new Date(),
4425
4421
  // Extract sessionId so decisions can be recorded for denials too
@@ -4457,7 +4453,6 @@ async function verify(config, request, options) {
4457
4453
  trustScore: apiResponse.organization.trustScore
4458
4454
  } : void 0;
4459
4455
  const verificationContext = apiResponse.verificationContext;
4460
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
4461
4456
  const result = {
4462
4457
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
4463
4458
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -4469,7 +4464,6 @@ async function verify(config, request, options) {
4469
4464
  // this load-bearing must never be defaulted on.
4470
4465
  identityVerified: apiResponse.verificationContext?.idVerified === true,
4471
4466
  policyAllowed: true,
4472
- accessLevel,
4473
4467
  agent,
4474
4468
  developer,
4475
4469
  organization,
@@ -4496,7 +4490,6 @@ async function verify(config, request, options) {
4496
4490
  };
4497
4491
  if (result.recommendation === "deny") {
4498
4492
  result.policyAllowed = false;
4499
- result.accessLevel = "none";
4500
4493
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
4501
4494
  result.guidance = result.runtimeChallenge ? {
4502
4495
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -4612,7 +4605,6 @@ function toGatewayConfig(config) {
4612
4605
  return {
4613
4606
  apiBaseUrl: config.apiBaseUrl || "https://api.astrasync.ai",
4614
4607
  apiKey: config.apiKey,
4615
- defaultAccessLevel: config.defaultAccessLevel,
4616
4608
  minTrustScore: config.minTrustScore,
4617
4609
  minTrustScoreForFull: config.minTrustScoreForFull,
4618
4610
  cacheTtl: config.cacheTtl,
@@ -4640,7 +4632,7 @@ function toDecision(result) {
4640
4632
  if (result.identityVerified && result.policyAllowed) {
4641
4633
  return {
4642
4634
  recommendation: "ALLOW",
4643
- reason: `Verified with access level: ${result.accessLevel}`,
4635
+ reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
4644
4636
  trustScore: result.agent?.trustScore,
4645
4637
  sessionId: "sessionId" in result ? result.sessionId : void 0
4646
4638
  };