@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.
- 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 +25 -35
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +25 -35
- 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 +42 -67
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +41 -66
- 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 +23 -32
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +23 -32
- 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 +22 -126
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +22 -124
- 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 +23 -31
- package/dist/bin/astrasync-codex-hook.js +23 -31
- package/dist/bin/astrasync-guard.js +23 -31
- package/dist/bin/astrasync.js +28 -36
- package/dist/browser/background.js +23 -31
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +23 -31
- 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 +23 -31
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +23 -31
- 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 +23 -31
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +23 -31
- 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 +12 -3
- package/dist/edge-core/index.d.ts +12 -3
- package/dist/edge-core/index.js +42 -36
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +42 -36
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/{express-DBtPKXOL.d.mts → express-KkBZBMqi.d.mts} +1 -1
- package/dist/{express-D-8Ks2Uo.d.ts → express-xK8pRrmj.d.ts} +1 -1
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +23 -31
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +23 -31
- 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-DIRzR5IS.d.mts} +1 -1
- package/dist/{index-DlZORQsb.d.ts → index-DLQ4Rcuc.d.ts} +1 -1
- package/dist/{index-CUfmJ1Dq.d.mts → index-GPDn_EGI.d.mts} +1 -1
- package/dist/{index-BND3kQev.d.ts → index-Hnz5VyMR.d.ts} +1 -1
- package/dist/index.d.mts +14 -10
- package/dist/index.d.ts +14 -10
- package/dist/index.js +44 -219
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +44 -212
- 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-DToTlwIn.d.ts → mcp-DPpu4xQz.d.ts} +53 -52
- package/dist/{mcp-ZRN4kY3b.d.mts → mcp-Dju_Sr1o.d.mts} +53 -52
- package/dist/{nextjs-C0KASOy_.d.mts → nextjs-BuoDBN4g.d.mts} +1 -1
- package/dist/{nextjs-lwNvWYWT.d.ts → nextjs-rZKzY_8o.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-CdO6TIEf.d.mts +142 -0
- package/dist/sdk-DxHuIJBm.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-DhhJxKIC.d.ts → types-3UV7IZx7.d.ts} +1 -3
- package/dist/{types-CGPU7HLi.d.ts → types-CNBaZKxY.d.ts} +24 -50
- package/dist/{types-Cx9hTpKI.d.mts → types-CSHcByFX.d.mts} +24 -50
- package/dist/{types-CfSJLS4i.d.mts → types-CoDjpbVY.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 +22 -30
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +22 -30
- 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.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
|
-
var SDK_VERSION = "
|
|
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,7 +19,7 @@ function withUserAgent(initHeaders) {
|
|
|
19
19
|
}
|
|
20
20
|
var sdkFetch = (input, init) => fetch(input, { ...init, headers: withUserAgent(init?.headers) });
|
|
21
21
|
|
|
22
|
-
// src/
|
|
22
|
+
// src/trust-levels.ts
|
|
23
23
|
function getTrustLevel(score) {
|
|
24
24
|
if (score >= 80) return "PLATINUM";
|
|
25
25
|
if (score >= 60) return "GOLD";
|
|
@@ -89,11 +89,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
89
89
|
// src/verify.ts
|
|
90
90
|
var DEFAULT_CONFIG = {
|
|
91
91
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
92
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
93
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
94
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
95
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
96
|
-
defaultAccessLevel: "none",
|
|
97
92
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
98
93
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
99
94
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -250,6 +245,14 @@ function extractCredentials(headers, query) {
|
|
|
250
245
|
}
|
|
251
246
|
return credentials;
|
|
252
247
|
}
|
|
248
|
+
function mcpGuidance(urls) {
|
|
249
|
+
if (!urls?.mcpEndpoint) return void 0;
|
|
250
|
+
return {
|
|
251
|
+
endpoint: urls.mcpEndpoint,
|
|
252
|
+
discoveryUrl: urls.mcpDiscoveryUrl,
|
|
253
|
+
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."
|
|
254
|
+
};
|
|
255
|
+
}
|
|
253
256
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
254
257
|
const source = options.source ?? "no_credentials";
|
|
255
258
|
const isApiError = source === "api_error";
|
|
@@ -276,11 +279,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
276
279
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
277
280
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
278
281
|
steps: [
|
|
282
|
+
// MCP steering leads when the hosted bridge is advertised — the
|
|
283
|
+
// connector is the agent-actionable path (keyless, human-approved).
|
|
284
|
+
...urls?.mcpEndpoint ? [
|
|
285
|
+
`Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
|
|
286
|
+
] : [],
|
|
279
287
|
"Register for an AstraSync account",
|
|
280
288
|
"Create and register your agent",
|
|
281
289
|
"Add your ASTRA-ID to request headers",
|
|
282
290
|
"Retry your request"
|
|
283
|
-
]
|
|
291
|
+
],
|
|
292
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
284
293
|
};
|
|
285
294
|
return {
|
|
286
295
|
// Round-18 G4: createGuidanceResponse fires for unverified-agent path or
|
|
@@ -288,13 +297,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
288
297
|
// policy is not evaluated (we never reached the gate).
|
|
289
298
|
identityVerified: false,
|
|
290
299
|
policyAllowed: false,
|
|
291
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
292
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
293
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
294
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
295
|
-
// in other languages, custom integrations) inherit the correct
|
|
296
|
-
// semantics.
|
|
297
|
-
accessLevel: "none",
|
|
298
300
|
guidance,
|
|
299
301
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
300
302
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -388,7 +390,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
388
390
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
389
391
|
access: {
|
|
390
392
|
allowed: false,
|
|
391
|
-
accessLevel: "none",
|
|
392
393
|
reason: "endpoint_deactivated",
|
|
393
394
|
failures: [
|
|
394
395
|
{
|
|
@@ -451,7 +452,7 @@ async function verify(config, request, options) {
|
|
|
451
452
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
452
453
|
deprecationWarningShown = true;
|
|
453
454
|
console.warn(
|
|
454
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
455
|
+
"[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."
|
|
455
456
|
);
|
|
456
457
|
}
|
|
457
458
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -497,14 +498,6 @@ async function verify(config, request, options) {
|
|
|
497
498
|
const result2 = {
|
|
498
499
|
identityVerified: idVerifiedFromBackend,
|
|
499
500
|
policyAllowed: false,
|
|
500
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
501
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
502
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
503
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
504
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
505
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
506
|
-
// the gate check — belt-and-braces.
|
|
507
|
-
accessLevel: "none",
|
|
508
501
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
509
502
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
510
503
|
// as the fallback for older backends.
|
|
@@ -515,7 +508,10 @@ async function verify(config, request, options) {
|
|
|
515
508
|
guidance: {
|
|
516
509
|
message: apiResponse.access?.reason || "Access denied by PDLSS policy",
|
|
517
510
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
518
|
-
documentationUrl: urls?.documentationUrl ?? ""
|
|
511
|
+
documentationUrl: urls?.documentationUrl ?? "",
|
|
512
|
+
// 5.1.0: anonymous callers land on this branch — steer MCP-hosted
|
|
513
|
+
// agents to the connector (this is what the edge deny body surfaces).
|
|
514
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
519
515
|
},
|
|
520
516
|
verifiedAt: /* @__PURE__ */ new Date(),
|
|
521
517
|
// Extract sessionId so decisions can be recorded for denials too
|
|
@@ -553,7 +549,6 @@ async function verify(config, request, options) {
|
|
|
553
549
|
trustScore: apiResponse.organization.trustScore
|
|
554
550
|
} : void 0;
|
|
555
551
|
const verificationContext = apiResponse.verificationContext;
|
|
556
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
557
552
|
const result = {
|
|
558
553
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
559
554
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -565,7 +560,6 @@ async function verify(config, request, options) {
|
|
|
565
560
|
// this load-bearing must never be defaulted on.
|
|
566
561
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
567
562
|
policyAllowed: true,
|
|
568
|
-
accessLevel,
|
|
569
563
|
agent,
|
|
570
564
|
developer,
|
|
571
565
|
organization,
|
|
@@ -592,7 +586,6 @@ async function verify(config, request, options) {
|
|
|
592
586
|
};
|
|
593
587
|
if (result.recommendation === "deny") {
|
|
594
588
|
result.policyAllowed = false;
|
|
595
|
-
result.accessLevel = "none";
|
|
596
589
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
597
590
|
result.guidance = result.runtimeChallenge ? {
|
|
598
591
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -1051,18 +1044,13 @@ function mcpToPdlss(parsed, requestPath, headerPurpose, headerAction, toolGate)
|
|
|
1051
1044
|
}
|
|
1052
1045
|
return { purpose, action, resource, purposeSource, actionSource };
|
|
1053
1046
|
}
|
|
1054
|
-
function
|
|
1055
|
-
if (parsed.isInitialize || parsed.method === "notifications/initialized") return
|
|
1056
|
-
if (parsed.isIntrospection) return
|
|
1057
|
-
|
|
1058
|
-
if (parsed.isToolCall) return "standard";
|
|
1059
|
-
return "standard";
|
|
1047
|
+
function mcpDefaultEnforced(parsed) {
|
|
1048
|
+
if (parsed.isInitialize || parsed.method === "notifications/initialized") return false;
|
|
1049
|
+
if (parsed.isIntrospection) return false;
|
|
1050
|
+
return true;
|
|
1060
1051
|
}
|
|
1061
1052
|
|
|
1062
1053
|
// src/adapters/mcp.ts
|
|
1063
|
-
function normalizeToolGate(gate) {
|
|
1064
|
-
return typeof gate === "string" ? { minAccessLevel: gate } : gate;
|
|
1065
|
-
}
|
|
1066
1054
|
function readSingleHeader(value) {
|
|
1067
1055
|
if (typeof value === "string") return value;
|
|
1068
1056
|
if (Array.isArray(value)) return value[0];
|
|
@@ -1115,7 +1103,6 @@ function defaultMcpDenied(result, req, res) {
|
|
|
1115
1103
|
code: !result.identityVerified ? -32e3 : -32001,
|
|
1116
1104
|
message: result.denialReasons?.[0] ?? "Access denied",
|
|
1117
1105
|
data: {
|
|
1118
|
-
accessLevel: result.accessLevel,
|
|
1119
1106
|
guidance: result.guidance,
|
|
1120
1107
|
// Round-10: aggregated per-dimension detail + correlation handle.
|
|
1121
1108
|
failures: result.failures,
|
|
@@ -1128,20 +1115,19 @@ function defaultMcpDenied(result, req, res) {
|
|
|
1128
1115
|
}
|
|
1129
1116
|
});
|
|
1130
1117
|
}
|
|
1131
|
-
function
|
|
1118
|
+
function resolveGate(parsed, opts) {
|
|
1132
1119
|
if (!parsed.toolName) {
|
|
1133
|
-
|
|
1134
|
-
|
|
1120
|
+
const methodGate = opts.methodGates?.[parsed.method];
|
|
1121
|
+
if (methodGate !== void 0) {
|
|
1122
|
+
return methodGate === "observe" ? { enforce: false, source: "methodGate" } : { enforce: true, config: methodGate, source: "methodGate" };
|
|
1135
1123
|
}
|
|
1136
|
-
return {
|
|
1124
|
+
return { enforce: false, source: "discovery_default" };
|
|
1137
1125
|
}
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
source: "toolGate"
|
|
1142
|
-
};
|
|
1126
|
+
const toolGate = opts.toolGates?.[parsed.toolName];
|
|
1127
|
+
if (toolGate !== void 0) {
|
|
1128
|
+
return toolGate === "observe" ? { enforce: false, source: "toolGate" } : { enforce: true, config: toolGate, source: "toolGate" };
|
|
1143
1129
|
}
|
|
1144
|
-
return {
|
|
1130
|
+
return { enforce: mcpDefaultEnforced(parsed), source: "tier" };
|
|
1145
1131
|
}
|
|
1146
1132
|
function createMcpMiddleware(options) {
|
|
1147
1133
|
const {
|
|
@@ -1161,15 +1147,6 @@ function createMcpMiddleware(options) {
|
|
|
1161
1147
|
prefetchWellKnown(config.apiBaseUrl).catch(() => {
|
|
1162
1148
|
});
|
|
1163
1149
|
}
|
|
1164
|
-
if (toolGates) {
|
|
1165
|
-
for (const [toolName, gate] of Object.entries(toolGates)) {
|
|
1166
|
-
if (typeof gate === "string") {
|
|
1167
|
-
console.warn(
|
|
1168
|
-
`[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: '...' }.`
|
|
1169
|
-
);
|
|
1170
|
-
}
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
1150
|
return async (req, res, next) => {
|
|
1174
1151
|
try {
|
|
1175
1152
|
if (skip) return next();
|
|
@@ -1218,7 +1195,7 @@ function createMcpMiddleware(options) {
|
|
|
1218
1195
|
return next();
|
|
1219
1196
|
}
|
|
1220
1197
|
}
|
|
1221
|
-
const
|
|
1198
|
+
const gateDecision = resolveGate(parsed, {
|
|
1222
1199
|
toolGates,
|
|
1223
1200
|
methodGates
|
|
1224
1201
|
});
|
|
@@ -1227,16 +1204,15 @@ function createMcpMiddleware(options) {
|
|
|
1227
1204
|
req.query
|
|
1228
1205
|
);
|
|
1229
1206
|
if (effectiveAstraId) credentials.astraId = effectiveAstraId;
|
|
1230
|
-
const shouldEnforce =
|
|
1231
|
-
if (
|
|
1207
|
+
const shouldEnforce = gateDecision.enforce;
|
|
1208
|
+
if (!shouldEnforce && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
|
|
1232
1209
|
if (config.setPassThroughHeader) {
|
|
1233
1210
|
res.setHeader("X-Astra-Gateway-Mode", "unenforced");
|
|
1234
|
-
res.setHeader("X-Astra-Gateway-Reason", "mcp-
|
|
1211
|
+
res.setHeader("X-Astra-Gateway-Reason", "mcp-observe");
|
|
1235
1212
|
}
|
|
1236
1213
|
return next();
|
|
1237
1214
|
}
|
|
1238
|
-
const
|
|
1239
|
-
const gate = rawGate ? normalizeToolGate(rawGate) : void 0;
|
|
1215
|
+
const gate = gateDecision.config;
|
|
1240
1216
|
const headerPurpose = readSingleHeader(req.headers["x-astra-purpose"]);
|
|
1241
1217
|
const headerAction = readSingleHeader(req.headers["x-astra-action"]);
|
|
1242
1218
|
const pdlss = mcpToPdlss(
|
|
@@ -1372,7 +1348,6 @@ function createMcpMiddleware(options) {
|
|
|
1372
1348
|
const result = {
|
|
1373
1349
|
identityVerified: false,
|
|
1374
1350
|
policyAllowed: false,
|
|
1375
|
-
accessLevel: "none",
|
|
1376
1351
|
denialReasons: [`MCP middleware internal error: ${errorClass}`],
|
|
1377
1352
|
failures: [
|
|
1378
1353
|
{
|
|
@@ -1402,7 +1377,7 @@ export {
|
|
|
1402
1377
|
MCP_VERIFIED_HOP_HEADER,
|
|
1403
1378
|
createMcpMiddleware,
|
|
1404
1379
|
isVerifiedHopValidFor,
|
|
1405
|
-
|
|
1380
|
+
mcpDefaultEnforced,
|
|
1406
1381
|
mcpToPdlss,
|
|
1407
1382
|
parseMcpJsonRpc,
|
|
1408
1383
|
parseVerifiedHop,
|