@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
@@ -3948,7 +3948,7 @@ function verifyLocal(evaluator, context) {
3948
3948
  return evaluator.evaluate(context);
3949
3949
  }
3950
3950
 
3951
- // src/access-levels.ts
3951
+ // src/trust-levels.ts
3952
3952
  function getTrustLevel(score) {
3953
3953
  if (score >= 80) return "PLATINUM";
3954
3954
  if (score >= 60) return "GOLD";
@@ -3957,7 +3957,7 @@ function getTrustLevel(score) {
3957
3957
  }
3958
3958
 
3959
3959
  // src/version.ts
3960
- var SDK_VERSION = "4.6.0";
3960
+ var SDK_VERSION = "5.0.0";
3961
3961
 
3962
3962
  // src/http.ts
3963
3963
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -3987,11 +3987,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
3987
3987
  // src/verify.ts
3988
3988
  var DEFAULT_CONFIG = {
3989
3989
  apiBaseUrl: "https://astrasync.ai/api",
3990
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
3991
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
3992
- // a route gated at `'guidance'` to silently let unverified traffic
3993
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
3994
- defaultAccessLevel: "none",
3995
3990
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
3996
3991
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
3997
3992
  // default; the caller's explicit value is honoured for cacheable results.
@@ -4114,6 +4109,14 @@ function cacheResult(request, result, configuredTtl, counterpartyId) {
4114
4109
  expiresAt: Date.now() + ttlSeconds * 1e3
4115
4110
  });
4116
4111
  }
4112
+ function mcpGuidance(urls) {
4113
+ if (!urls?.mcpEndpoint) return void 0;
4114
+ return {
4115
+ endpoint: urls.mcpEndpoint,
4116
+ discoveryUrl: urls.mcpDiscoveryUrl,
4117
+ 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."
4118
+ };
4119
+ }
4117
4120
  function createGuidanceResponse(_config, reason, options = {}) {
4118
4121
  const source = options.source ?? "no_credentials";
4119
4122
  const isApiError = source === "api_error";
@@ -4140,11 +4143,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
4140
4143
  registrationUrl: urls?.registrationUrl ?? "",
4141
4144
  documentationUrl: urls?.documentationUrl ?? "",
4142
4145
  steps: [
4146
+ // MCP steering leads when the hosted bridge is advertised — the
4147
+ // connector is the agent-actionable path (keyless, human-approved).
4148
+ ...urls?.mcpEndpoint ? [
4149
+ `Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
4150
+ ] : [],
4143
4151
  "Register for an AstraSync account",
4144
4152
  "Create and register your agent",
4145
4153
  "Add your ASTRA-ID to request headers",
4146
4154
  "Retry your request"
4147
- ]
4155
+ ],
4156
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
4148
4157
  };
4149
4158
  return {
4150
4159
  // Round-18 G4: createGuidanceResponse fires for unverified-agent path or
@@ -4152,13 +4161,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
4152
4161
  // policy is not evaluated (we never reached the gate).
4153
4162
  identityVerified: false,
4154
4163
  policyAllowed: false,
4155
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
4156
- // Adapters additionally short-circuit on `!identityVerified ||
4157
- // !policyAllowed` before the gate check, but the access level still has
4158
- // to be honest at the data layer so downstream consumers (SDK adapters
4159
- // in other languages, custom integrations) inherit the correct
4160
- // semantics.
4161
- accessLevel: "none",
4162
4164
  guidance,
4163
4165
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
4164
4166
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -4252,7 +4254,6 @@ async function callVerifyAccessAPI(config, request) {
4252
4254
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
4253
4255
  access: {
4254
4256
  allowed: false,
4255
- accessLevel: "none",
4256
4257
  reason: "endpoint_deactivated",
4257
4258
  failures: [
4258
4259
  {
@@ -4315,7 +4316,7 @@ async function verify(config, request, options) {
4315
4316
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
4316
4317
  deprecationWarningShown = true;
4317
4318
  console.warn(
4318
- "[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."
4319
+ "[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."
4319
4320
  );
4320
4321
  }
4321
4322
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -4361,14 +4362,6 @@ async function verify(config, request, options) {
4361
4362
  const result2 = {
4362
4363
  identityVerified: idVerifiedFromBackend,
4363
4364
  policyAllowed: false,
4364
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
4365
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
4366
- // colocated `guidance: {...}` help-payload object below and let
4367
- // denied requests pass any route gated at `'guidance'` because
4368
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
4369
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
4370
- // the gate check — belt-and-braces.
4371
- accessLevel: "none",
4372
4365
  // 3.6.0: the server now emits top-level denialReasons on every deny
4373
4366
  // path — prefer it verbatim; the failure-message reconstruction remains
4374
4367
  // as the fallback for older backends.
@@ -4379,7 +4372,10 @@ async function verify(config, request, options) {
4379
4372
  guidance: {
4380
4373
  message: apiResponse.access?.reason || "Access denied by PDLSS policy",
4381
4374
  registrationUrl: urls?.registrationUrl ?? "",
4382
- documentationUrl: urls?.documentationUrl ?? ""
4375
+ documentationUrl: urls?.documentationUrl ?? "",
4376
+ // 5.1.0: anonymous callers land on this branch — steer MCP-hosted
4377
+ // agents to the connector (this is what the edge deny body surfaces).
4378
+ ...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
4383
4379
  },
4384
4380
  verifiedAt: /* @__PURE__ */ new Date(),
4385
4381
  // Extract sessionId so decisions can be recorded for denials too
@@ -4417,7 +4413,6 @@ async function verify(config, request, options) {
4417
4413
  trustScore: apiResponse.organization.trustScore
4418
4414
  } : void 0;
4419
4415
  const verificationContext = apiResponse.verificationContext;
4420
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
4421
4416
  const result = {
4422
4417
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
4423
4418
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -4429,7 +4424,6 @@ async function verify(config, request, options) {
4429
4424
  // this load-bearing must never be defaulted on.
4430
4425
  identityVerified: apiResponse.verificationContext?.idVerified === true,
4431
4426
  policyAllowed: true,
4432
- accessLevel,
4433
4427
  agent,
4434
4428
  developer,
4435
4429
  organization,
@@ -4456,7 +4450,6 @@ async function verify(config, request, options) {
4456
4450
  };
4457
4451
  if (result.recommendation === "deny") {
4458
4452
  result.policyAllowed = false;
4459
- result.accessLevel = "none";
4460
4453
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
4461
4454
  result.guidance = result.runtimeChallenge ? {
4462
4455
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -4572,7 +4565,6 @@ function toGatewayConfig(config) {
4572
4565
  return {
4573
4566
  apiBaseUrl: config.apiBaseUrl || "https://api.astrasync.ai",
4574
4567
  apiKey: config.apiKey,
4575
- defaultAccessLevel: config.defaultAccessLevel,
4576
4568
  minTrustScore: config.minTrustScore,
4577
4569
  minTrustScoreForFull: config.minTrustScoreForFull,
4578
4570
  cacheTtl: config.cacheTtl,
@@ -4600,7 +4592,7 @@ function toDecision(result) {
4600
4592
  if (result.identityVerified && result.policyAllowed) {
4601
4593
  return {
4602
4594
  recommendation: "ALLOW",
4603
- reason: `Verified with access level: ${result.accessLevel}`,
4595
+ reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
4604
4596
  trustScore: result.agent?.trustScore,
4605
4597
  sessionId: "sessionId" in result ? result.sessionId : void 0
4606
4598
  };