@astrasyncai/verification-gateway 4.5.1 → 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/README.md +1 -1
- 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 +11 -33
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +11 -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 +28 -65
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +27 -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 +9 -30
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +9 -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 +8 -124
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +8 -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 +63 -41
- package/dist/bin/astrasync-codex-hook.js +63 -41
- package/dist/bin/astrasync-guard.js +63 -41
- package/dist/bin/astrasync.js +75 -48
- package/dist/browser/background.js +63 -41
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +63 -41
- 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 +33 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +33 -6
- 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 +63 -41
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +63 -41
- 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 +63 -41
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +63 -41
- 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 +11 -33
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +11 -33
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/{express-DaqL11tx.d.ts → express-B5lWuemA.d.ts} +1 -1
- package/dist/{express-CR6F3njD.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 +63 -41
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +63 -41
- 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-Cub7lK-T.d.mts → index-B5k_vUmK.d.mts} +1 -1
- package/dist/{index-BfIxCYIZ.d.ts → index-BOzM6xUq.d.mts} +1 -2
- package/dist/{index-CwAh7Tln.d.mts → index-dRfxUdFA.d.ts} +1 -2
- package/dist/{index-B5Ts1WtM.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 +30 -217
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +30 -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 +22 -7
- package/dist/local-evaluator/evaluator.js.map +1 -1
- package/dist/local-evaluator/evaluator.mjs +22 -7
- package/dist/local-evaluator/evaluator.mjs.map +1 -1
- package/dist/{mcp-BgBJu4Jl.d.mts → mcp-DgsyQiQq.d.mts} +53 -52
- package/dist/{mcp--DgKOwfu.d.ts → mcp-OosmAcKf.d.ts} +53 -52
- package/dist/{nextjs-DlX6xwbU.d.mts → nextjs-B1sBdEav.d.mts} +1 -1
- package/dist/{nextjs-DL6uE1ye.d.ts → nextjs-DoRmhV_Z.d.ts} +1 -1
- package/dist/registration/index.d.mts +5 -1
- package/dist/registration/index.d.ts +5 -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-DwSfO7Sb.d.ts → types-BK2POWNc.d.ts} +23 -50
- package/dist/{types-C0zfSXMB.d.mts → types-CJjZvPr9.d.mts} +23 -50
- package/dist/{types-C7Rb-w0d.d.mts → types-CXf3q4kZ.d.ts} +14 -3
- package/dist/{types-nIh3HtuA.d.ts → types-DQmop7ZW.d.mts} +14 -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 +8 -28
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +8 -28
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/sdk-Bbh9B_dw.d.mts +0 -215
- package/dist/sdk-C6SASmsh.d.ts +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
|
|
@@ -350,6 +338,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
350
338
|
// 4.0.0: typed marker so adapters render the misconfig envelope (503 +
|
|
351
339
|
// MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
|
|
352
340
|
...isMisconfig && { misconfigured: true },
|
|
341
|
+
// 4.6.0: a transient api_error is retryable — mark it so consumers surface
|
|
342
|
+
// "temporarily unavailable, retry" (recommendation 'error') instead of
|
|
343
|
+
// coercing the absent recommendation to a policy 'deny'. Misconfig is
|
|
344
|
+
// deterministic and intentionally NOT marked retryable.
|
|
345
|
+
...isApiError && { retryable: true },
|
|
353
346
|
correlationId: options.correlationId,
|
|
354
347
|
attemptId: options.attemptId,
|
|
355
348
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
@@ -416,7 +409,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
416
409
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
417
410
|
access: {
|
|
418
411
|
allowed: false,
|
|
419
|
-
accessLevel: "none",
|
|
420
412
|
reason: "endpoint_deactivated",
|
|
421
413
|
failures: [
|
|
422
414
|
{
|
|
@@ -479,7 +471,7 @@ async function verify(config, request, options) {
|
|
|
479
471
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
480
472
|
deprecationWarningShown = true;
|
|
481
473
|
console.warn(
|
|
482
|
-
"[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."
|
|
483
475
|
);
|
|
484
476
|
}
|
|
485
477
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -525,14 +517,6 @@ async function verify(config, request, options) {
|
|
|
525
517
|
const result2 = {
|
|
526
518
|
identityVerified: idVerifiedFromBackend,
|
|
527
519
|
policyAllowed: false,
|
|
528
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
529
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
530
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
531
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
532
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
533
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
534
|
-
// the gate check — belt-and-braces.
|
|
535
|
-
accessLevel: "none",
|
|
536
520
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
537
521
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
538
522
|
// as the fallback for older backends.
|
|
@@ -581,7 +565,6 @@ async function verify(config, request, options) {
|
|
|
581
565
|
trustScore: apiResponse.organization.trustScore
|
|
582
566
|
} : void 0;
|
|
583
567
|
const verificationContext = apiResponse.verificationContext;
|
|
584
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
585
568
|
const result = {
|
|
586
569
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
587
570
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -593,7 +576,6 @@ async function verify(config, request, options) {
|
|
|
593
576
|
// this load-bearing must never be defaulted on.
|
|
594
577
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
595
578
|
policyAllowed: true,
|
|
596
|
-
accessLevel,
|
|
597
579
|
agent,
|
|
598
580
|
developer,
|
|
599
581
|
organization,
|
|
@@ -620,7 +602,6 @@ async function verify(config, request, options) {
|
|
|
620
602
|
};
|
|
621
603
|
if (result.recommendation === "deny") {
|
|
622
604
|
result.policyAllowed = false;
|
|
623
|
-
result.accessLevel = "none";
|
|
624
605
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
625
606
|
result.guidance = result.runtimeChallenge ? {
|
|
626
607
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -1079,18 +1060,13 @@ function mcpToPdlss(parsed, requestPath, headerPurpose, headerAction, toolGate)
|
|
|
1079
1060
|
}
|
|
1080
1061
|
return { purpose, action, resource, purposeSource, actionSource };
|
|
1081
1062
|
}
|
|
1082
|
-
function
|
|
1083
|
-
if (parsed.isInitialize || parsed.method === "notifications/initialized") return
|
|
1084
|
-
if (parsed.isIntrospection) return
|
|
1085
|
-
|
|
1086
|
-
if (parsed.isToolCall) return "standard";
|
|
1087
|
-
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;
|
|
1088
1067
|
}
|
|
1089
1068
|
|
|
1090
1069
|
// src/adapters/mcp.ts
|
|
1091
|
-
function normalizeToolGate(gate) {
|
|
1092
|
-
return typeof gate === "string" ? { minAccessLevel: gate } : gate;
|
|
1093
|
-
}
|
|
1094
1070
|
function readSingleHeader(value) {
|
|
1095
1071
|
if (typeof value === "string") return value;
|
|
1096
1072
|
if (Array.isArray(value)) return value[0];
|
|
@@ -1143,7 +1119,6 @@ function defaultMcpDenied(result, req, res) {
|
|
|
1143
1119
|
code: !result.identityVerified ? -32e3 : -32001,
|
|
1144
1120
|
message: result.denialReasons?.[0] ?? "Access denied",
|
|
1145
1121
|
data: {
|
|
1146
|
-
accessLevel: result.accessLevel,
|
|
1147
1122
|
guidance: result.guidance,
|
|
1148
1123
|
// Round-10: aggregated per-dimension detail + correlation handle.
|
|
1149
1124
|
failures: result.failures,
|
|
@@ -1156,20 +1131,19 @@ function defaultMcpDenied(result, req, res) {
|
|
|
1156
1131
|
}
|
|
1157
1132
|
});
|
|
1158
1133
|
}
|
|
1159
|
-
function
|
|
1134
|
+
function resolveGate(parsed, opts) {
|
|
1160
1135
|
if (!parsed.toolName) {
|
|
1161
|
-
|
|
1162
|
-
|
|
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" };
|
|
1163
1139
|
}
|
|
1164
|
-
return {
|
|
1140
|
+
return { enforce: false, source: "discovery_default" };
|
|
1165
1141
|
}
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
source: "toolGate"
|
|
1170
|
-
};
|
|
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" };
|
|
1171
1145
|
}
|
|
1172
|
-
return {
|
|
1146
|
+
return { enforce: mcpDefaultEnforced(parsed), source: "tier" };
|
|
1173
1147
|
}
|
|
1174
1148
|
function createMcpMiddleware(options) {
|
|
1175
1149
|
const {
|
|
@@ -1189,15 +1163,6 @@ function createMcpMiddleware(options) {
|
|
|
1189
1163
|
prefetchWellKnown(config.apiBaseUrl).catch(() => {
|
|
1190
1164
|
});
|
|
1191
1165
|
}
|
|
1192
|
-
if (toolGates) {
|
|
1193
|
-
for (const [toolName, gate] of Object.entries(toolGates)) {
|
|
1194
|
-
if (typeof gate === "string") {
|
|
1195
|
-
console.warn(
|
|
1196
|
-
`[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: '...' }.`
|
|
1197
|
-
);
|
|
1198
|
-
}
|
|
1199
|
-
}
|
|
1200
|
-
}
|
|
1201
1166
|
return async (req, res, next) => {
|
|
1202
1167
|
try {
|
|
1203
1168
|
if (skip) return next();
|
|
@@ -1246,7 +1211,7 @@ function createMcpMiddleware(options) {
|
|
|
1246
1211
|
return next();
|
|
1247
1212
|
}
|
|
1248
1213
|
}
|
|
1249
|
-
const
|
|
1214
|
+
const gateDecision = resolveGate(parsed, {
|
|
1250
1215
|
toolGates,
|
|
1251
1216
|
methodGates
|
|
1252
1217
|
});
|
|
@@ -1255,16 +1220,15 @@ function createMcpMiddleware(options) {
|
|
|
1255
1220
|
req.query
|
|
1256
1221
|
);
|
|
1257
1222
|
if (effectiveAstraId) credentials.astraId = effectiveAstraId;
|
|
1258
|
-
const shouldEnforce =
|
|
1259
|
-
if (
|
|
1223
|
+
const shouldEnforce = gateDecision.enforce;
|
|
1224
|
+
if (!shouldEnforce && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
|
|
1260
1225
|
if (config.setPassThroughHeader) {
|
|
1261
1226
|
res.setHeader("X-Astra-Gateway-Mode", "unenforced");
|
|
1262
|
-
res.setHeader("X-Astra-Gateway-Reason", "mcp-
|
|
1227
|
+
res.setHeader("X-Astra-Gateway-Reason", "mcp-observe");
|
|
1263
1228
|
}
|
|
1264
1229
|
return next();
|
|
1265
1230
|
}
|
|
1266
|
-
const
|
|
1267
|
-
const gate = rawGate ? normalizeToolGate(rawGate) : void 0;
|
|
1231
|
+
const gate = gateDecision.config;
|
|
1268
1232
|
const headerPurpose = readSingleHeader(req.headers["x-astra-purpose"]);
|
|
1269
1233
|
const headerAction = readSingleHeader(req.headers["x-astra-action"]);
|
|
1270
1234
|
const pdlss = mcpToPdlss(
|
|
@@ -1400,7 +1364,6 @@ function createMcpMiddleware(options) {
|
|
|
1400
1364
|
const result = {
|
|
1401
1365
|
identityVerified: false,
|
|
1402
1366
|
policyAllowed: false,
|
|
1403
|
-
accessLevel: "none",
|
|
1404
1367
|
denialReasons: [`MCP middleware internal error: ${errorClass}`],
|
|
1405
1368
|
failures: [
|
|
1406
1369
|
{
|
|
@@ -1431,7 +1394,7 @@ function createMcpMiddleware(options) {
|
|
|
1431
1394
|
MCP_VERIFIED_HOP_HEADER,
|
|
1432
1395
|
createMcpMiddleware,
|
|
1433
1396
|
isVerifiedHopValidFor,
|
|
1434
|
-
|
|
1397
|
+
mcpDefaultEnforced,
|
|
1435
1398
|
mcpToPdlss,
|
|
1436
1399
|
parseMcpJsonRpc,
|
|
1437
1400
|
parseVerifiedHop,
|