@astrasyncai/verification-gateway 4.6.0 → 5.0.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.
- package/dist/adapter-interface/interface.d.mts +2 -2
- package/dist/adapter-interface/interface.d.ts +2 -2
- package/dist/adapters/express.d.mts +2 -2
- package/dist/adapters/express.d.ts +2 -2
- package/dist/adapters/express.js +6 -33
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +6 -33
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +2 -2
- package/dist/adapters/mcp.d.ts +2 -2
- package/dist/adapters/mcp.js +23 -65
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +22 -64
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +2 -2
- package/dist/adapters/nextjs.d.ts +2 -2
- package/dist/adapters/nextjs.js +4 -30
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +4 -30
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +2 -2
- package/dist/adapters/sdk.d.ts +2 -2
- package/dist/adapters/sdk.js +3 -124
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +3 -122
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.d.mts +2 -2
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +1 -1
- package/dist/agent/index.mjs.map +1 -1
- package/dist/bin/astrasync-claude-hook.js +4 -29
- package/dist/bin/astrasync-codex-hook.js +4 -29
- package/dist/bin/astrasync-guard.js +4 -29
- package/dist/bin/astrasync.js +9 -34
- package/dist/browser/background.js +4 -29
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +4 -29
- package/dist/browser/background.mjs.map +1 -1
- package/dist/browser/browser-adapter.d.mts +2 -2
- package/dist/browser/browser-adapter.d.ts +2 -2
- package/dist/claude-code/claude-code-adapter.d.mts +2 -2
- package/dist/claude-code/claude-code-adapter.d.ts +2 -2
- package/dist/cli/index.d.mts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/cli/index.mjs.map +1 -1
- package/dist/codex/index.d.mts +2 -2
- package/dist/codex/index.d.ts +2 -2
- package/dist/codex/index.js +4 -29
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +4 -29
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/cursor-adapter.d.mts +2 -2
- package/dist/cursor/cursor-adapter.d.ts +2 -2
- package/dist/cursor/extension.d.mts +2 -2
- package/dist/cursor/extension.d.ts +2 -2
- package/dist/cursor/extension.js +4 -29
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +4 -29
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.d.mts +1 -1
- package/dist/edge-config.d.ts +1 -1
- package/dist/edge-config.js +1 -1
- package/dist/edge-config.js.map +1 -1
- package/dist/edge-config.mjs +1 -1
- package/dist/edge-config.mjs.map +1 -1
- package/dist/edge-core/index.d.mts +1 -3
- package/dist/edge-core/index.d.ts +1 -3
- package/dist/edge-core/index.js +6 -33
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +6 -33
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/{express-D-8Ks2Uo.d.ts → express-B5lWuemA.d.ts} +1 -1
- package/dist/{express-DBtPKXOL.d.mts → express-Dm-snUuY.d.mts} +1 -1
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +4 -29
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +4 -29
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/git-trigger/git-hooks.d.mts +2 -2
- package/dist/git-trigger/git-hooks.d.ts +2 -2
- package/dist/{index-kGCGWd5x.d.mts → index-B5k_vUmK.d.mts} +1 -1
- package/dist/{index-CUfmJ1Dq.d.mts → index-BOzM6xUq.d.mts} +1 -1
- package/dist/{index-BND3kQev.d.ts → index-dRfxUdFA.d.ts} +1 -1
- package/dist/{index-DlZORQsb.d.ts → index-y8xToocF.d.ts} +1 -1
- package/dist/index.d.mts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +25 -217
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +25 -210
- package/dist/index.mjs.map +1 -1
- package/dist/local-evaluator/evaluator.d.mts +2 -2
- package/dist/local-evaluator/evaluator.d.ts +2 -2
- package/dist/local-evaluator/evaluator.js.map +1 -1
- package/dist/local-evaluator/evaluator.mjs.map +1 -1
- package/dist/{mcp-ZRN4kY3b.d.mts → mcp-DgsyQiQq.d.mts} +53 -52
- package/dist/{mcp-DToTlwIn.d.ts → mcp-OosmAcKf.d.ts} +53 -52
- package/dist/{nextjs-C0KASOy_.d.mts → nextjs-B1sBdEav.d.mts} +1 -1
- package/dist/{nextjs-lwNvWYWT.d.ts → nextjs-DoRmhV_Z.d.ts} +1 -1
- package/dist/registration/index.js +1 -1
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +1 -1
- package/dist/registration/index.mjs.map +1 -1
- package/dist/sdk-B83N3xKc.d.mts +142 -0
- package/dist/sdk-H_9BTNBS.d.ts +142 -0
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/transport/index.js +1 -1
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +1 -1
- package/dist/transport/index.mjs.map +1 -1
- package/dist/{types-CGPU7HLi.d.ts → types-BK2POWNc.d.ts} +15 -50
- package/dist/{types-Cx9hTpKI.d.mts → types-CJjZvPr9.d.mts} +15 -50
- package/dist/{types-DhhJxKIC.d.ts → types-CXf3q4kZ.d.ts} +1 -3
- package/dist/{types-CfSJLS4i.d.mts → types-DQmop7ZW.d.mts} +1 -3
- package/dist/ui/index.d.mts +2 -17
- package/dist/ui/index.d.ts +2 -17
- package/dist/ui/index.js +1 -43
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +1 -42
- package/dist/ui/index.mjs.map +1 -1
- package/dist/verify.d.mts +3 -4
- package/dist/verify.d.ts +3 -4
- package/dist/verify.js +3 -28
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +3 -28
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/sdk-B4aodEwj.d.ts +0 -215
- package/dist/sdk-B9dSwum7.d.mts +0 -215
package/dist/adapters/mcp.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'express';
|
|
2
|
-
import '../types-
|
|
3
|
-
export { M as MCP_VERIFIED_HOP_HEADER, b as McpMiddlewareOptions, P as ParsedMcpRequest, T as
|
|
2
|
+
import '../types-CJjZvPr9.mjs';
|
|
3
|
+
export { M as MCP_VERIFIED_HOP_HEADER, b as McpMiddlewareOptions, P as ParsedMcpRequest, T as ToolGate, c as ToolGateConfig, d as createMcpMiddleware, i as isVerifiedHopValidFor, m as mcpDefaultEnforced, e as mcpToPdlss, p as parseMcpJsonRpc, f as parseVerifiedHop, s as serializeVerifiedHop } from '../mcp-DgsyQiQq.mjs';
|
|
4
4
|
import '../metadata-capture.mjs';
|
package/dist/adapters/mcp.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'express';
|
|
2
|
-
import '../types-
|
|
3
|
-
export { M as MCP_VERIFIED_HOP_HEADER, b as McpMiddlewareOptions, P as ParsedMcpRequest, T as
|
|
2
|
+
import '../types-BK2POWNc.js';
|
|
3
|
+
export { M as MCP_VERIFIED_HOP_HEADER, b as McpMiddlewareOptions, P as ParsedMcpRequest, T as ToolGate, c as ToolGateConfig, d as createMcpMiddleware, i as isVerifiedHopValidFor, m as mcpDefaultEnforced, e as mcpToPdlss, p as parseMcpJsonRpc, f as parseVerifiedHop, s as serializeVerifiedHop } from '../mcp-OosmAcKf.js';
|
|
4
4
|
import '../metadata-capture.js';
|
package/dist/adapters/mcp.js
CHANGED
|
@@ -23,7 +23,7 @@ __export(mcp_exports, {
|
|
|
23
23
|
MCP_VERIFIED_HOP_HEADER: () => MCP_VERIFIED_HOP_HEADER,
|
|
24
24
|
createMcpMiddleware: () => createMcpMiddleware,
|
|
25
25
|
isVerifiedHopValidFor: () => isVerifiedHopValidFor,
|
|
26
|
-
|
|
26
|
+
mcpDefaultEnforced: () => mcpDefaultEnforced,
|
|
27
27
|
mcpToPdlss: () => mcpToPdlss,
|
|
28
28
|
parseMcpJsonRpc: () => parseMcpJsonRpc,
|
|
29
29
|
parseVerifiedHop: () => parseVerifiedHop,
|
|
@@ -32,7 +32,7 @@ __export(mcp_exports, {
|
|
|
32
32
|
module.exports = __toCommonJS(mcp_exports);
|
|
33
33
|
|
|
34
34
|
// src/version.ts
|
|
35
|
-
var SDK_VERSION = "
|
|
35
|
+
var SDK_VERSION = "5.0.0";
|
|
36
36
|
|
|
37
37
|
// src/http.ts
|
|
38
38
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -52,7 +52,7 @@ function withUserAgent(initHeaders) {
|
|
|
52
52
|
}
|
|
53
53
|
var sdkFetch = (input, init) => fetch(input, { ...init, headers: withUserAgent(init?.headers) });
|
|
54
54
|
|
|
55
|
-
// src/
|
|
55
|
+
// src/trust-levels.ts
|
|
56
56
|
function getTrustLevel(score) {
|
|
57
57
|
if (score >= 80) return "PLATINUM";
|
|
58
58
|
if (score >= 60) return "GOLD";
|
|
@@ -122,11 +122,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
122
122
|
// src/verify.ts
|
|
123
123
|
var DEFAULT_CONFIG = {
|
|
124
124
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
125
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
126
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
127
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
128
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
129
|
-
defaultAccessLevel: "none",
|
|
130
125
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
131
126
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
132
127
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -321,13 +316,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
321
316
|
// policy is not evaluated (we never reached the gate).
|
|
322
317
|
identityVerified: false,
|
|
323
318
|
policyAllowed: false,
|
|
324
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
325
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
326
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
327
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
328
|
-
// in other languages, custom integrations) inherit the correct
|
|
329
|
-
// semantics.
|
|
330
|
-
accessLevel: "none",
|
|
331
319
|
guidance,
|
|
332
320
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
333
321
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -421,7 +409,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
421
409
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
422
410
|
access: {
|
|
423
411
|
allowed: false,
|
|
424
|
-
accessLevel: "none",
|
|
425
412
|
reason: "endpoint_deactivated",
|
|
426
413
|
failures: [
|
|
427
414
|
{
|
|
@@ -484,7 +471,7 @@ async function verify(config, request, options) {
|
|
|
484
471
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
485
472
|
deprecationWarningShown = true;
|
|
486
473
|
console.warn(
|
|
487
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
474
|
+
"[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."
|
|
488
475
|
);
|
|
489
476
|
}
|
|
490
477
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -530,14 +517,6 @@ async function verify(config, request, options) {
|
|
|
530
517
|
const result2 = {
|
|
531
518
|
identityVerified: idVerifiedFromBackend,
|
|
532
519
|
policyAllowed: false,
|
|
533
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
534
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
535
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
536
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
537
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
538
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
539
|
-
// the gate check — belt-and-braces.
|
|
540
|
-
accessLevel: "none",
|
|
541
520
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
542
521
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
543
522
|
// as the fallback for older backends.
|
|
@@ -586,7 +565,6 @@ async function verify(config, request, options) {
|
|
|
586
565
|
trustScore: apiResponse.organization.trustScore
|
|
587
566
|
} : void 0;
|
|
588
567
|
const verificationContext = apiResponse.verificationContext;
|
|
589
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
590
568
|
const result = {
|
|
591
569
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
592
570
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -598,7 +576,6 @@ async function verify(config, request, options) {
|
|
|
598
576
|
// this load-bearing must never be defaulted on.
|
|
599
577
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
600
578
|
policyAllowed: true,
|
|
601
|
-
accessLevel,
|
|
602
579
|
agent,
|
|
603
580
|
developer,
|
|
604
581
|
organization,
|
|
@@ -625,7 +602,6 @@ async function verify(config, request, options) {
|
|
|
625
602
|
};
|
|
626
603
|
if (result.recommendation === "deny") {
|
|
627
604
|
result.policyAllowed = false;
|
|
628
|
-
result.accessLevel = "none";
|
|
629
605
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
630
606
|
result.guidance = result.runtimeChallenge ? {
|
|
631
607
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -1084,18 +1060,13 @@ function mcpToPdlss(parsed, requestPath, headerPurpose, headerAction, toolGate)
|
|
|
1084
1060
|
}
|
|
1085
1061
|
return { purpose, action, resource, purposeSource, actionSource };
|
|
1086
1062
|
}
|
|
1087
|
-
function
|
|
1088
|
-
if (parsed.isInitialize || parsed.method === "notifications/initialized") return
|
|
1089
|
-
if (parsed.isIntrospection) return
|
|
1090
|
-
|
|
1091
|
-
if (parsed.isToolCall) return "standard";
|
|
1092
|
-
return "standard";
|
|
1063
|
+
function mcpDefaultEnforced(parsed) {
|
|
1064
|
+
if (parsed.isInitialize || parsed.method === "notifications/initialized") return false;
|
|
1065
|
+
if (parsed.isIntrospection) return false;
|
|
1066
|
+
return true;
|
|
1093
1067
|
}
|
|
1094
1068
|
|
|
1095
1069
|
// src/adapters/mcp.ts
|
|
1096
|
-
function normalizeToolGate(gate) {
|
|
1097
|
-
return typeof gate === "string" ? { minAccessLevel: gate } : gate;
|
|
1098
|
-
}
|
|
1099
1070
|
function readSingleHeader(value) {
|
|
1100
1071
|
if (typeof value === "string") return value;
|
|
1101
1072
|
if (Array.isArray(value)) return value[0];
|
|
@@ -1148,7 +1119,6 @@ function defaultMcpDenied(result, req, res) {
|
|
|
1148
1119
|
code: !result.identityVerified ? -32e3 : -32001,
|
|
1149
1120
|
message: result.denialReasons?.[0] ?? "Access denied",
|
|
1150
1121
|
data: {
|
|
1151
|
-
accessLevel: result.accessLevel,
|
|
1152
1122
|
guidance: result.guidance,
|
|
1153
1123
|
// Round-10: aggregated per-dimension detail + correlation handle.
|
|
1154
1124
|
failures: result.failures,
|
|
@@ -1161,20 +1131,19 @@ function defaultMcpDenied(result, req, res) {
|
|
|
1161
1131
|
}
|
|
1162
1132
|
});
|
|
1163
1133
|
}
|
|
1164
|
-
function
|
|
1134
|
+
function resolveGate(parsed, opts) {
|
|
1165
1135
|
if (!parsed.toolName) {
|
|
1166
|
-
|
|
1167
|
-
|
|
1136
|
+
const methodGate = opts.methodGates?.[parsed.method];
|
|
1137
|
+
if (methodGate !== void 0) {
|
|
1138
|
+
return methodGate === "observe" ? { enforce: false, source: "methodGate" } : { enforce: true, config: methodGate, source: "methodGate" };
|
|
1168
1139
|
}
|
|
1169
|
-
return {
|
|
1140
|
+
return { enforce: false, source: "discovery_default" };
|
|
1170
1141
|
}
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
source: "toolGate"
|
|
1175
|
-
};
|
|
1142
|
+
const toolGate = opts.toolGates?.[parsed.toolName];
|
|
1143
|
+
if (toolGate !== void 0) {
|
|
1144
|
+
return toolGate === "observe" ? { enforce: false, source: "toolGate" } : { enforce: true, config: toolGate, source: "toolGate" };
|
|
1176
1145
|
}
|
|
1177
|
-
return {
|
|
1146
|
+
return { enforce: mcpDefaultEnforced(parsed), source: "tier" };
|
|
1178
1147
|
}
|
|
1179
1148
|
function createMcpMiddleware(options) {
|
|
1180
1149
|
const {
|
|
@@ -1194,15 +1163,6 @@ function createMcpMiddleware(options) {
|
|
|
1194
1163
|
prefetchWellKnown(config.apiBaseUrl).catch(() => {
|
|
1195
1164
|
});
|
|
1196
1165
|
}
|
|
1197
|
-
if (toolGates) {
|
|
1198
|
-
for (const [toolName, gate] of Object.entries(toolGates)) {
|
|
1199
|
-
if (typeof gate === "string") {
|
|
1200
|
-
console.warn(
|
|
1201
|
-
`[VerificationGateway/MCP] toolGates['${toolName}'] uses the bare-string shorthand ('${gate}'). Gated tools need a PDLSS purpose (else PDLSS_PURPOSE_REQUIRED 400) and evaluate purpose-only without a declared action. Use the object form instead: { minAccessLevel: '${gate}', purpose: '...', action: '...' }.`
|
|
1202
|
-
);
|
|
1203
|
-
}
|
|
1204
|
-
}
|
|
1205
|
-
}
|
|
1206
1166
|
return async (req, res, next) => {
|
|
1207
1167
|
try {
|
|
1208
1168
|
if (skip) return next();
|
|
@@ -1251,7 +1211,7 @@ function createMcpMiddleware(options) {
|
|
|
1251
1211
|
return next();
|
|
1252
1212
|
}
|
|
1253
1213
|
}
|
|
1254
|
-
const
|
|
1214
|
+
const gateDecision = resolveGate(parsed, {
|
|
1255
1215
|
toolGates,
|
|
1256
1216
|
methodGates
|
|
1257
1217
|
});
|
|
@@ -1260,16 +1220,15 @@ function createMcpMiddleware(options) {
|
|
|
1260
1220
|
req.query
|
|
1261
1221
|
);
|
|
1262
1222
|
if (effectiveAstraId) credentials.astraId = effectiveAstraId;
|
|
1263
|
-
const shouldEnforce =
|
|
1264
|
-
if (
|
|
1223
|
+
const shouldEnforce = gateDecision.enforce;
|
|
1224
|
+
if (!shouldEnforce && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
|
|
1265
1225
|
if (config.setPassThroughHeader) {
|
|
1266
1226
|
res.setHeader("X-Astra-Gateway-Mode", "unenforced");
|
|
1267
|
-
res.setHeader("X-Astra-Gateway-Reason", "mcp-
|
|
1227
|
+
res.setHeader("X-Astra-Gateway-Reason", "mcp-observe");
|
|
1268
1228
|
}
|
|
1269
1229
|
return next();
|
|
1270
1230
|
}
|
|
1271
|
-
const
|
|
1272
|
-
const gate = rawGate ? normalizeToolGate(rawGate) : void 0;
|
|
1231
|
+
const gate = gateDecision.config;
|
|
1273
1232
|
const headerPurpose = readSingleHeader(req.headers["x-astra-purpose"]);
|
|
1274
1233
|
const headerAction = readSingleHeader(req.headers["x-astra-action"]);
|
|
1275
1234
|
const pdlss = mcpToPdlss(
|
|
@@ -1405,7 +1364,6 @@ function createMcpMiddleware(options) {
|
|
|
1405
1364
|
const result = {
|
|
1406
1365
|
identityVerified: false,
|
|
1407
1366
|
policyAllowed: false,
|
|
1408
|
-
accessLevel: "none",
|
|
1409
1367
|
denialReasons: [`MCP middleware internal error: ${errorClass}`],
|
|
1410
1368
|
failures: [
|
|
1411
1369
|
{
|
|
@@ -1436,7 +1394,7 @@ function createMcpMiddleware(options) {
|
|
|
1436
1394
|
MCP_VERIFIED_HOP_HEADER,
|
|
1437
1395
|
createMcpMiddleware,
|
|
1438
1396
|
isVerifiedHopValidFor,
|
|
1439
|
-
|
|
1397
|
+
mcpDefaultEnforced,
|
|
1440
1398
|
mcpToPdlss,
|
|
1441
1399
|
parseMcpJsonRpc,
|
|
1442
1400
|
parseVerifiedHop,
|