@auctra/mcp-gateway 0.1.9 → 0.1.11
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/package.json +1 -1
- package/src/index.js +8 -3
- package/src/index.ts +3 -0
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -16,11 +16,12 @@ export function requireMcpGateway() {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export class McpToolBlockedError extends Error {
|
|
19
|
-
constructor(message, decision, evidence) {
|
|
19
|
+
constructor(message, decision, evidence, actionDecision = null) {
|
|
20
20
|
super(message);
|
|
21
21
|
this.name = "McpToolBlockedError";
|
|
22
22
|
this.decision = decision;
|
|
23
23
|
this.evidence = evidence;
|
|
24
|
+
this.actionDecision = actionDecision;
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
|
|
@@ -146,7 +147,7 @@ export async function gateMcpInstall(input) {
|
|
|
146
147
|
if (result.decision !== "allowed") {
|
|
147
148
|
const evidenceId = evidenceIdFromResult(result);
|
|
148
149
|
const message = evidenceId ? `${result.reason} (evidence: ${evidenceId})` : result.reason;
|
|
149
|
-
throw new McpToolBlockedError(message, result.decision, result.evidence);
|
|
150
|
+
throw new McpToolBlockedError(message, result.decision, result.evidence, result.action_decision ?? null);
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
return { ...result, metadata };
|
|
@@ -195,7 +196,7 @@ export async function gateMcpToolCall(input) {
|
|
|
195
196
|
if (result.decision !== "allowed") {
|
|
196
197
|
const evidenceId = evidenceIdFromResult(result);
|
|
197
198
|
const message = evidenceId ? `${result.reason} (evidence: ${evidenceId})` : result.reason;
|
|
198
|
-
throw new McpToolBlockedError(message, result.decision, result.evidence);
|
|
199
|
+
throw new McpToolBlockedError(message, result.decision, result.evidence, result.action_decision ?? null);
|
|
199
200
|
}
|
|
200
201
|
|
|
201
202
|
const requireLease =
|
|
@@ -209,6 +210,7 @@ export async function gateMcpToolCall(input) {
|
|
|
209
210
|
"execution lease required but action.execute returned none — configure AUCTRA_EXECUTION_LEASE_SECRET",
|
|
210
211
|
"blocked",
|
|
211
212
|
result.evidence,
|
|
213
|
+
result.action_decision ?? null,
|
|
212
214
|
);
|
|
213
215
|
}
|
|
214
216
|
if (!input.client.executionLease?.consume) {
|
|
@@ -217,18 +219,21 @@ export async function gateMcpToolCall(input) {
|
|
|
217
219
|
"executionLease.consume client method required when AUCTRA_REQUIRE_EXECUTION_LEASE=1",
|
|
218
220
|
"blocked",
|
|
219
221
|
result.evidence,
|
|
222
|
+
result.action_decision ?? null,
|
|
220
223
|
);
|
|
221
224
|
}
|
|
222
225
|
} else {
|
|
223
226
|
const consumed = await input.client.executionLease.consume({
|
|
224
227
|
lease: leaseToken,
|
|
225
228
|
expectedActionType: resolveActionType(input),
|
|
229
|
+
expectedRequestFingerprint: result.execution_lease?.request_fingerprint,
|
|
226
230
|
});
|
|
227
231
|
if (!consumed.ok) {
|
|
228
232
|
throw new McpToolBlockedError(
|
|
229
233
|
consumed.error ?? "execution lease consume failed",
|
|
230
234
|
"blocked",
|
|
231
235
|
result.evidence,
|
|
236
|
+
result.action_decision ?? null,
|
|
232
237
|
);
|
|
233
238
|
}
|
|
234
239
|
}
|
package/src/index.ts
CHANGED
|
@@ -42,6 +42,7 @@ export type ExecuteActionClient = {
|
|
|
42
42
|
expires_at: string;
|
|
43
43
|
action_request_id: string;
|
|
44
44
|
action_type: string;
|
|
45
|
+
request_fingerprint?: string;
|
|
45
46
|
} | null;
|
|
46
47
|
evidence?: {
|
|
47
48
|
format: string;
|
|
@@ -56,6 +57,7 @@ export type ExecuteActionClient = {
|
|
|
56
57
|
consume(input: {
|
|
57
58
|
lease: string;
|
|
58
59
|
expectedActionType?: string;
|
|
60
|
+
expectedRequestFingerprint?: string;
|
|
59
61
|
}): Promise<{ ok: boolean; error?: string; reason_codes?: string[] }>;
|
|
60
62
|
};
|
|
61
63
|
};
|
|
@@ -376,6 +378,7 @@ export async function gateMcpToolCall(input: McpToolGateInput) {
|
|
|
376
378
|
const consumed = await input.client.executionLease.consume({
|
|
377
379
|
lease: leaseToken,
|
|
378
380
|
expectedActionType: resolveActionType(input),
|
|
381
|
+
expectedRequestFingerprint: result.execution_lease?.request_fingerprint,
|
|
379
382
|
});
|
|
380
383
|
if (!consumed.ok) {
|
|
381
384
|
throw new McpToolBlockedError(
|