@winstonsayno/mcp-gateway 7.6.0 → 7.7.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/CHANGELOG.md +10 -0
- package/README.md +7 -0
- package/dist/config/loader.d.ts +6 -6
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +2 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/features/approval-flows.d.ts +480 -0
- package/dist/features/approval-flows.d.ts.map +1 -0
- package/dist/features/approval-flows.js +334 -0
- package/dist/features/approval-flows.js.map +1 -0
- package/dist/features/index.d.ts +1 -0
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +1 -0
- package/dist/features/index.js.map +1 -1
- package/dist/features/k8s.d.ts +2 -2
- package/dist/features/policy-sim.d.ts +16 -16
- package/dist/features/rollouts.d.ts +11 -11
- package/dist/gateway/features.d.ts +5 -1
- package/dist/gateway/features.d.ts.map +1 -1
- package/dist/gateway/features.js +8 -1
- package/dist/gateway/features.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/policy/rule-schema.d.ts +4 -4
- package/dist/utils/types.d.ts +2 -0
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approvals 2.0 (7.7): multi-step, conditional approval flows with named approvers and escalation.
|
|
3
|
+
*
|
|
4
|
+
* The 1.x approvals hold a call until *an operator* approves it. An **approval flow** holds matching calls until each
|
|
5
|
+
* of its **steps** is approved by the required number of **approvers** (client-id globs — any authenticated client,
|
|
6
|
+
* not only operators). Flows and steps can be **conditional** on the arguments; a step can **escalate** to more
|
|
7
|
+
* approvers after a while. A denial at any step, or the flow timeout, refuses the call (JSON-RPC -32004, as 1.x).
|
|
8
|
+
*
|
|
9
|
+
* ```yaml
|
|
10
|
+
* approvalFlows:
|
|
11
|
+
* flows:
|
|
12
|
+
* - id: payments
|
|
13
|
+
* tools: ["payments/transfer"] # server/tool globs
|
|
14
|
+
* when: [{ path: amount, op: gte, value: 1000 }]
|
|
15
|
+
* timeoutSeconds: 900
|
|
16
|
+
* steps:
|
|
17
|
+
* - { name: lead, approvers: ["key:lead-*"] }
|
|
18
|
+
* - name: finance
|
|
19
|
+
* approvers: ["key:fin-*"]
|
|
20
|
+
* required: 2
|
|
21
|
+
* when: [{ path: amount, op: gte, value: 10000 }] # only for large transfers
|
|
22
|
+
* escalateAfterSeconds: 300
|
|
23
|
+
* escalateTo: ["key:cfo"]
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* Conditions: `{ path, op, value }` on the arguments (dot path), `op` ∈ `eq ne gt gte lt lte in matches exists`.
|
|
27
|
+
* The requester can never approve its own call; one approval per client per step.
|
|
28
|
+
*
|
|
29
|
+
* Approvers (any client): `GET /api/v1/features/approval-flows/inbox`, `GET …/mine`,
|
|
30
|
+
* `POST /api/v1/features/approval-flows/:id/approve|deny` `{ reason? }`.
|
|
31
|
+
* Operators: `GET /api/v1/admin/approval-flows`, `POST /api/v1/admin/approval-flows/:id/approve|deny` (override),
|
|
32
|
+
* `POST /api/v1/admin/approval-flows/evaluate` `{ server, tool, client?, arguments? }` (which flow / steps would apply).
|
|
33
|
+
*
|
|
34
|
+
* @module features/approval-flows
|
|
35
|
+
*/
|
|
36
|
+
import { randomUUID } from 'node:crypto';
|
|
37
|
+
import { z } from 'zod';
|
|
38
|
+
import { registerFeature, objectBody, badRequest, clientIdOf } from '../gateway/features.js';
|
|
39
|
+
import { registerCallHook } from '../gateway/hooks.js';
|
|
40
|
+
import { ERR_APPROVAL_REJECTED } from '../gateway/invoker.js';
|
|
41
|
+
import { globToRegExp } from '../utils/tool-filter.js';
|
|
42
|
+
import { redactValue } from '../security/redact.js';
|
|
43
|
+
const Cond = z
|
|
44
|
+
.object({ path: z.string().min(1), op: z.enum(['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'matches', 'exists']), value: z.unknown().optional() })
|
|
45
|
+
.strict()
|
|
46
|
+
.superRefine((c, ctx) => {
|
|
47
|
+
if (c.op === 'matches') {
|
|
48
|
+
try {
|
|
49
|
+
new RegExp(String(c.value));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
ctx.addIssue({ code: 'custom', message: `invalid regular expression ${JSON.stringify(c.value)}` });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (c.op === 'in' && !Array.isArray(c.value))
|
|
56
|
+
ctx.addIssue({ code: 'custom', message: '`in` needs an array value' });
|
|
57
|
+
});
|
|
58
|
+
const Step = z
|
|
59
|
+
.object({
|
|
60
|
+
name: z.string().min(1),
|
|
61
|
+
approvers: z.array(z.string().min(1)).min(1),
|
|
62
|
+
required: z.number().int().min(1).default(1),
|
|
63
|
+
when: z.array(Cond).default([]),
|
|
64
|
+
escalateAfterSeconds: z.number().int().min(1).optional(),
|
|
65
|
+
escalateTo: z.array(z.string().min(1)).default([]),
|
|
66
|
+
})
|
|
67
|
+
.strict();
|
|
68
|
+
const Flow = z
|
|
69
|
+
.object({
|
|
70
|
+
id: z.string().min(1).regex(/^[A-Za-z0-9._-]+$/),
|
|
71
|
+
tools: z.array(z.string().min(1)).min(1),
|
|
72
|
+
clients: z.array(z.string().min(1)).optional(),
|
|
73
|
+
when: z.array(Cond).default([]),
|
|
74
|
+
timeoutSeconds: z.number().int().min(1).max(7 * 86400).default(900),
|
|
75
|
+
steps: z.array(Step).min(1),
|
|
76
|
+
})
|
|
77
|
+
.strict();
|
|
78
|
+
export const ApprovalFlowsSchema = z
|
|
79
|
+
.object({ enabled: z.boolean().default(true), flows: z.array(Flow).default([]), historySize: z.number().int().min(1).max(10_000).default(200) })
|
|
80
|
+
.strict()
|
|
81
|
+
.superRefine((c, ctx) => {
|
|
82
|
+
const ids = new Set();
|
|
83
|
+
for (const f of c.flows) {
|
|
84
|
+
if (ids.has(f.id))
|
|
85
|
+
ctx.addIssue({ code: 'custom', message: `duplicate flow id "${f.id}"` });
|
|
86
|
+
ids.add(f.id);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
const get = (obj, path) => path.split('.').reduce((o, k) => (o && typeof o === 'object' ? o[k] : undefined), obj);
|
|
90
|
+
/** Evaluate one condition against the call arguments. */
|
|
91
|
+
export function test(c, args) {
|
|
92
|
+
const v = get(args, c.path);
|
|
93
|
+
switch (c.op) {
|
|
94
|
+
case 'exists':
|
|
95
|
+
return v !== undefined;
|
|
96
|
+
case 'eq':
|
|
97
|
+
return JSON.stringify(v) === JSON.stringify(c.value);
|
|
98
|
+
case 'ne':
|
|
99
|
+
return JSON.stringify(v) !== JSON.stringify(c.value);
|
|
100
|
+
case 'in':
|
|
101
|
+
return c.value.some((x) => JSON.stringify(x) === JSON.stringify(v));
|
|
102
|
+
case 'matches':
|
|
103
|
+
return typeof v === 'string' && new RegExp(String(c.value)).test(v);
|
|
104
|
+
default: {
|
|
105
|
+
const a = Number(v);
|
|
106
|
+
const b = Number(c.value);
|
|
107
|
+
if (v === undefined || v === null || Number.isNaN(a) || Number.isNaN(b))
|
|
108
|
+
return false;
|
|
109
|
+
return c.op === 'gt' ? a > b : c.op === 'gte' ? a >= b : c.op === 'lt' ? a < b : a <= b;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const all = (cs, args) => cs.every((c) => test(c, args));
|
|
114
|
+
const anyGlob = (ps, v) => ps.some((p) => globToRegExp(p).test(v));
|
|
115
|
+
/** First flow matching a call, with the steps that apply to it. */
|
|
116
|
+
export function matchFlow(c, call) {
|
|
117
|
+
const target = `${call.serverId}/${call.tool}`;
|
|
118
|
+
for (const f of c.flows) {
|
|
119
|
+
if (!anyGlob(f.tools, target))
|
|
120
|
+
continue;
|
|
121
|
+
if (f.clients && !anyGlob(f.clients, call.clientId ?? 'anonymous'))
|
|
122
|
+
continue;
|
|
123
|
+
if (!all(f.when, call.args))
|
|
124
|
+
continue;
|
|
125
|
+
return { flow: f, steps: f.steps.filter((s) => all(s.when, call.args)) };
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
export class FlowError extends Error {
|
|
130
|
+
status;
|
|
131
|
+
constructor(message, status) {
|
|
132
|
+
super(message);
|
|
133
|
+
this.status = status;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export class FlowQueue {
|
|
137
|
+
historySize;
|
|
138
|
+
held = new Map();
|
|
139
|
+
history = [];
|
|
140
|
+
constructor(historySize = 200) {
|
|
141
|
+
this.historySize = historySize;
|
|
142
|
+
}
|
|
143
|
+
start(flow, steps, call) {
|
|
144
|
+
const now = Date.now();
|
|
145
|
+
const req = {
|
|
146
|
+
id: randomUUID(),
|
|
147
|
+
flow: flow.id,
|
|
148
|
+
status: 'pending',
|
|
149
|
+
clientId: call.clientId,
|
|
150
|
+
serverId: call.serverId,
|
|
151
|
+
tool: call.tool,
|
|
152
|
+
arguments: redactValue(call.args),
|
|
153
|
+
steps: steps.map((s, i) => ({ name: s.name, approvers: s.approvers, required: s.required, escalateTo: s.escalateTo, escalated: false, status: i === 0 ? 'pending' : 'waiting', approvals: [] })),
|
|
154
|
+
current: 0,
|
|
155
|
+
createdAt: new Date(now).toISOString(),
|
|
156
|
+
expiresAt: new Date(now + flow.timeoutSeconds * 1000).toISOString(),
|
|
157
|
+
};
|
|
158
|
+
return new Promise((resolve) => {
|
|
159
|
+
const h = { req, resolve, timers: [] };
|
|
160
|
+
this.held.set(req.id, h);
|
|
161
|
+
const t = setTimeout(() => this.finish(req.id, 'expired', undefined, 'not approved in time'), flow.timeoutSeconds * 1000);
|
|
162
|
+
t.unref();
|
|
163
|
+
h.timers.push(t);
|
|
164
|
+
this.armEscalation(h, steps);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
armEscalation(h, steps) {
|
|
168
|
+
const s = steps[h.req.current];
|
|
169
|
+
if (!s?.escalateAfterSeconds || !s.escalateTo.length)
|
|
170
|
+
return;
|
|
171
|
+
const idx = h.req.current;
|
|
172
|
+
const t = setTimeout(() => {
|
|
173
|
+
if (h.req.status === 'pending' && h.req.current === idx)
|
|
174
|
+
h.req.steps[idx].escalated = true;
|
|
175
|
+
}, s.escalateAfterSeconds * 1000);
|
|
176
|
+
t.unref();
|
|
177
|
+
h.timers.push(t);
|
|
178
|
+
h.steps = steps;
|
|
179
|
+
}
|
|
180
|
+
finish(id, status, by, reason) {
|
|
181
|
+
const h = this.held.get(id);
|
|
182
|
+
if (!h)
|
|
183
|
+
return undefined;
|
|
184
|
+
this.held.delete(id);
|
|
185
|
+
for (const t of h.timers)
|
|
186
|
+
clearTimeout(t);
|
|
187
|
+
h.req.status = status;
|
|
188
|
+
h.req.decidedAt = new Date().toISOString();
|
|
189
|
+
if (by)
|
|
190
|
+
h.req.decidedBy = by;
|
|
191
|
+
if (reason)
|
|
192
|
+
h.req.reason = reason;
|
|
193
|
+
this.history.unshift(h.req);
|
|
194
|
+
if (this.history.length > this.historySize)
|
|
195
|
+
this.history.length = this.historySize;
|
|
196
|
+
h.resolve(h.req);
|
|
197
|
+
return h.req;
|
|
198
|
+
}
|
|
199
|
+
/** May `client` act on the current step of `req`? */
|
|
200
|
+
canApprove(req, client) {
|
|
201
|
+
const s = req.steps[req.current];
|
|
202
|
+
if (!s || req.status !== 'pending' || client === req.clientId)
|
|
203
|
+
return false;
|
|
204
|
+
return anyGlob(s.approvers, client) || (s.escalated && anyGlob(s.escalateTo, client));
|
|
205
|
+
}
|
|
206
|
+
/** Approve / deny the current step. `override` (operators) skips the approver check and completes the step. */
|
|
207
|
+
decide(id, approve, by, reason, override = false) {
|
|
208
|
+
const h = this.held.get(id);
|
|
209
|
+
if (!h) {
|
|
210
|
+
if (this.history.some((x) => x.id === id))
|
|
211
|
+
throw new FlowError('Approval request was already decided', 409);
|
|
212
|
+
throw new FlowError('Approval request not found', 404);
|
|
213
|
+
}
|
|
214
|
+
const req = h.req;
|
|
215
|
+
if (by === req.clientId && !override)
|
|
216
|
+
throw new FlowError('A client cannot approve its own tool call', 403);
|
|
217
|
+
if (!override && !this.canApprove(req, by))
|
|
218
|
+
throw new FlowError(`Not an approver of step "${req.steps[req.current].name}"`, 403);
|
|
219
|
+
const step = req.steps[req.current];
|
|
220
|
+
if (!approve)
|
|
221
|
+
return this.finish(id, 'denied', by, reason ?? `denied at step "${step.name}"`);
|
|
222
|
+
if (step.approvals.some((a) => a.by === by))
|
|
223
|
+
throw new FlowError('Already approved this step', 409);
|
|
224
|
+
step.approvals.push({ by, at: new Date().toISOString(), ...(reason ? { reason } : {}) });
|
|
225
|
+
if (override || step.approvals.length >= step.required) {
|
|
226
|
+
step.status = 'approved';
|
|
227
|
+
req.current++;
|
|
228
|
+
if (req.current >= req.steps.length)
|
|
229
|
+
return this.finish(id, 'approved', by);
|
|
230
|
+
req.steps[req.current].status = 'pending';
|
|
231
|
+
const steps = h.steps;
|
|
232
|
+
if (steps)
|
|
233
|
+
this.armEscalation(h, steps);
|
|
234
|
+
}
|
|
235
|
+
return req;
|
|
236
|
+
}
|
|
237
|
+
pending() {
|
|
238
|
+
return [...this.held.values()].map((h) => h.req);
|
|
239
|
+
}
|
|
240
|
+
get(id) {
|
|
241
|
+
return this.held.get(id)?.req ?? this.history.find((x) => x.id === id);
|
|
242
|
+
}
|
|
243
|
+
close() {
|
|
244
|
+
for (const id of [...this.held.keys()])
|
|
245
|
+
this.finish(id, 'expired', undefined, 'gateway stopped');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
export const flowQueue = new FlowQueue();
|
|
249
|
+
const settings = (cfg) => {
|
|
250
|
+
if (!cfg.approvalFlows)
|
|
251
|
+
return undefined;
|
|
252
|
+
const c = ApprovalFlowsSchema.parse(cfg.approvalFlows);
|
|
253
|
+
return c.enabled ? c : undefined;
|
|
254
|
+
};
|
|
255
|
+
registerCallHook({
|
|
256
|
+
id: 'approval-flows',
|
|
257
|
+
before: async (call, cfg) => {
|
|
258
|
+
const c = settings(cfg);
|
|
259
|
+
if (!c)
|
|
260
|
+
return;
|
|
261
|
+
const m = matchFlow(c, call);
|
|
262
|
+
if (!m || !m.steps.length)
|
|
263
|
+
return;
|
|
264
|
+
const r = await flowQueue.start(m.flow, m.steps, call);
|
|
265
|
+
if (r.status === 'approved')
|
|
266
|
+
return;
|
|
267
|
+
const step = r.steps[Math.min(r.current, r.steps.length - 1)];
|
|
268
|
+
return {
|
|
269
|
+
refuse: {
|
|
270
|
+
code: ERR_APPROVAL_REJECTED,
|
|
271
|
+
message: r.status === 'expired' ? `Tool call was not approved in time (flow ${r.flow}, step ${step?.name})` : `Tool call was denied (flow ${r.flow}, step ${step?.name})`,
|
|
272
|
+
data: { flow: r.flow, step: step?.name, approval: r.status, requestId: r.id, ...(r.reason ? { reason: r.reason } : {}) },
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
function decideRoute(router, operator) {
|
|
278
|
+
for (const action of ['approve', 'deny']) {
|
|
279
|
+
router.post(`/:id/${action}`, (req, res) => {
|
|
280
|
+
const b = (req.body && typeof req.body === 'object' && !Array.isArray(req.body) ? req.body : {});
|
|
281
|
+
const by = clientIdOf(req) ?? 'anonymous';
|
|
282
|
+
try {
|
|
283
|
+
const r = flowQueue.decide(String(req.params.id), action === 'approve', operator ? `operator:${by}` : by, typeof b.reason === 'string' ? b.reason : undefined, operator);
|
|
284
|
+
res.json(r);
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
if (err instanceof FlowError)
|
|
288
|
+
return void res.status(err.status).json({ error: err.status === 404 ? 'Not Found' : err.status === 409 ? 'Conflict' : 'Forbidden', message: err.message });
|
|
289
|
+
throw err;
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
registerFeature({
|
|
295
|
+
id: 'approval-flows',
|
|
296
|
+
since: '7.7.0',
|
|
297
|
+
summary: 'Approvals 2.0: multi-step, conditional approval flows with named approvers and escalation',
|
|
298
|
+
mount: (router, ctx) => {
|
|
299
|
+
ctx.onStop?.(() => flowQueue.close());
|
|
300
|
+
router.get('/', (_req, res) => {
|
|
301
|
+
const c = settings(ctx.config());
|
|
302
|
+
res.json({ enabled: !!c, flows: c?.flows ?? [], pending: flowQueue.pending(), recent: flowQueue.history.slice(0, 50) });
|
|
303
|
+
});
|
|
304
|
+
router.post('/evaluate', (req, res) => {
|
|
305
|
+
const b = objectBody(req, res);
|
|
306
|
+
if (!b)
|
|
307
|
+
return;
|
|
308
|
+
if (typeof b.server !== 'string' || typeof b.tool !== 'string')
|
|
309
|
+
return badRequest(res, 'Body must be { "server", "tool", "client"?, "arguments"? }');
|
|
310
|
+
const c = settings(ctx.config());
|
|
311
|
+
const m = c ? matchFlow(c, { serverId: b.server, tool: b.tool, clientId: typeof b.client === 'string' ? b.client : undefined, args: b.arguments ?? {} }) : undefined;
|
|
312
|
+
res.json(m ? { flow: m.flow.id, steps: m.steps.map((s) => ({ name: s.name, approvers: s.approvers, required: s.required })), held: m.steps.length > 0 } : { flow: null, steps: [], held: false });
|
|
313
|
+
});
|
|
314
|
+
router.get('/:id', (req, res) => {
|
|
315
|
+
const r = flowQueue.get(req.params.id);
|
|
316
|
+
if (!r)
|
|
317
|
+
return void res.status(404).json({ error: 'Not Found', message: 'Approval request not found' });
|
|
318
|
+
res.json(r);
|
|
319
|
+
});
|
|
320
|
+
decideRoute(router, true);
|
|
321
|
+
},
|
|
322
|
+
mountClient: (router) => {
|
|
323
|
+
router.get('/inbox', (req, res) => {
|
|
324
|
+
const me = clientIdOf(req) ?? 'anonymous';
|
|
325
|
+
res.json({ client: me, pending: flowQueue.pending().filter((r) => flowQueue.canApprove(r, me)) });
|
|
326
|
+
});
|
|
327
|
+
router.get('/mine', (req, res) => {
|
|
328
|
+
const me = clientIdOf(req) ?? 'anonymous';
|
|
329
|
+
res.json({ client: me, pending: flowQueue.pending().filter((r) => r.clientId === me), recent: flowQueue.history.filter((r) => r.clientId === me).slice(0, 50) });
|
|
330
|
+
});
|
|
331
|
+
decideRoute(router, false);
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
//# sourceMappingURL=approval-flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-flows.js","sourceRoot":"","sources":["../../src/features/approval-flows.ts"],"names":[],"mappings":"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"}
|
package/dist/features/index.d.ts
CHANGED
|
@@ -25,5 +25,6 @@ import './sanitize.js';
|
|
|
25
25
|
import './semantic-cache.js';
|
|
26
26
|
import './rollouts.js';
|
|
27
27
|
import './offline.js';
|
|
28
|
+
import './approval-flows.js';
|
|
28
29
|
export { listFeatures, registerFeature, createFeatureRouter } from '../gateway/features.js';
|
|
29
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/features/index.js
CHANGED
|
@@ -25,5 +25,6 @@ import './sanitize.js';
|
|
|
25
25
|
import './semantic-cache.js';
|
|
26
26
|
import './rollouts.js';
|
|
27
27
|
import './offline.js';
|
|
28
|
+
import './approval-flows.js';
|
|
28
29
|
export { listFeatures, registerFeature, createFeatureRouter } from '../gateway/features.js';
|
|
29
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/features/k8s.d.ts
CHANGED
|
@@ -49,11 +49,11 @@ export declare const McpGatewaySpecSchema: z.ZodObject<{
|
|
|
49
49
|
}, "strict", z.ZodTypeAny, {
|
|
50
50
|
config: Record<string, unknown>;
|
|
51
51
|
port: number;
|
|
52
|
-
replicas: number;
|
|
53
52
|
resources: {
|
|
54
53
|
requests?: Record<string, string> | undefined;
|
|
55
54
|
limits?: Record<string, string> | undefined;
|
|
56
55
|
};
|
|
56
|
+
replicas: number;
|
|
57
57
|
serviceMonitor: boolean;
|
|
58
58
|
image?: string | undefined;
|
|
59
59
|
envFromSecret?: string | undefined;
|
|
@@ -66,11 +66,11 @@ export declare const McpGatewaySpecSchema: z.ZodObject<{
|
|
|
66
66
|
}, {
|
|
67
67
|
config?: Record<string, unknown> | undefined;
|
|
68
68
|
port?: number | undefined;
|
|
69
|
-
replicas?: number | undefined;
|
|
70
69
|
resources?: {
|
|
71
70
|
requests?: Record<string, string> | undefined;
|
|
72
71
|
limits?: Record<string, string> | undefined;
|
|
73
72
|
} | undefined;
|
|
73
|
+
replicas?: number | undefined;
|
|
74
74
|
image?: string | undefined;
|
|
75
75
|
envFromSecret?: string | undefined;
|
|
76
76
|
autoscaling?: {
|
|
@@ -43,9 +43,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
43
43
|
notUnder: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
44
44
|
}, "strict", z.ZodTypeAny, {
|
|
45
45
|
path: string;
|
|
46
|
+
in?: (string | number | boolean)[] | undefined;
|
|
46
47
|
exists?: boolean | undefined;
|
|
47
48
|
equals?: string | number | boolean | undefined;
|
|
48
|
-
in?: (string | number | boolean)[] | undefined;
|
|
49
49
|
glob?: string[] | undefined;
|
|
50
50
|
notGlob?: string[] | undefined;
|
|
51
51
|
regex?: string | undefined;
|
|
@@ -55,9 +55,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
55
55
|
notUnder?: string[] | undefined;
|
|
56
56
|
}, {
|
|
57
57
|
path: string;
|
|
58
|
+
in?: (string | number | boolean)[] | undefined;
|
|
58
59
|
exists?: boolean | undefined;
|
|
59
60
|
equals?: string | number | boolean | undefined;
|
|
60
|
-
in?: (string | number | boolean)[] | undefined;
|
|
61
61
|
glob?: string[] | undefined;
|
|
62
62
|
notGlob?: string[] | undefined;
|
|
63
63
|
regex?: string | undefined;
|
|
@@ -76,9 +76,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
76
76
|
clients?: string[] | undefined;
|
|
77
77
|
args?: {
|
|
78
78
|
path: string;
|
|
79
|
+
in?: (string | number | boolean)[] | undefined;
|
|
79
80
|
exists?: boolean | undefined;
|
|
80
81
|
equals?: string | number | boolean | undefined;
|
|
81
|
-
in?: (string | number | boolean)[] | undefined;
|
|
82
82
|
glob?: string[] | undefined;
|
|
83
83
|
notGlob?: string[] | undefined;
|
|
84
84
|
regex?: string | undefined;
|
|
@@ -96,9 +96,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
96
96
|
clients?: string[] | undefined;
|
|
97
97
|
args?: {
|
|
98
98
|
path: string;
|
|
99
|
+
in?: (string | number | boolean)[] | undefined;
|
|
99
100
|
exists?: boolean | undefined;
|
|
100
101
|
equals?: string | number | boolean | undefined;
|
|
101
|
-
in?: (string | number | boolean)[] | undefined;
|
|
102
102
|
glob?: string[] | undefined;
|
|
103
103
|
notGlob?: string[] | undefined;
|
|
104
104
|
regex?: string | undefined;
|
|
@@ -120,9 +120,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
120
120
|
clients?: string[] | undefined;
|
|
121
121
|
args?: {
|
|
122
122
|
path: string;
|
|
123
|
+
in?: (string | number | boolean)[] | undefined;
|
|
123
124
|
exists?: boolean | undefined;
|
|
124
125
|
equals?: string | number | boolean | undefined;
|
|
125
|
-
in?: (string | number | boolean)[] | undefined;
|
|
126
126
|
glob?: string[] | undefined;
|
|
127
127
|
notGlob?: string[] | undefined;
|
|
128
128
|
regex?: string | undefined;
|
|
@@ -143,9 +143,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
143
143
|
clients?: string[] | undefined;
|
|
144
144
|
args?: {
|
|
145
145
|
path: string;
|
|
146
|
+
in?: (string | number | boolean)[] | undefined;
|
|
146
147
|
exists?: boolean | undefined;
|
|
147
148
|
equals?: string | number | boolean | undefined;
|
|
148
|
-
in?: (string | number | boolean)[] | undefined;
|
|
149
149
|
glob?: string[] | undefined;
|
|
150
150
|
notGlob?: string[] | undefined;
|
|
151
151
|
regex?: string | undefined;
|
|
@@ -166,9 +166,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
166
166
|
clients?: string[] | undefined;
|
|
167
167
|
args?: {
|
|
168
168
|
path: string;
|
|
169
|
+
in?: (string | number | boolean)[] | undefined;
|
|
169
170
|
exists?: boolean | undefined;
|
|
170
171
|
equals?: string | number | boolean | undefined;
|
|
171
|
-
in?: (string | number | boolean)[] | undefined;
|
|
172
172
|
glob?: string[] | undefined;
|
|
173
173
|
notGlob?: string[] | undefined;
|
|
174
174
|
regex?: string | undefined;
|
|
@@ -189,9 +189,9 @@ export declare const CandidatePolicySchema: z.ZodEffects<z.ZodObject<{
|
|
|
189
189
|
clients?: string[] | undefined;
|
|
190
190
|
args?: {
|
|
191
191
|
path: string;
|
|
192
|
+
in?: (string | number | boolean)[] | undefined;
|
|
192
193
|
exists?: boolean | undefined;
|
|
193
194
|
equals?: string | number | boolean | undefined;
|
|
194
|
-
in?: (string | number | boolean)[] | undefined;
|
|
195
195
|
glob?: string[] | undefined;
|
|
196
196
|
notGlob?: string[] | undefined;
|
|
197
197
|
regex?: string | undefined;
|
|
@@ -224,9 +224,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
224
224
|
notUnder: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
225
225
|
}, "strict", z.ZodTypeAny, {
|
|
226
226
|
path: string;
|
|
227
|
+
in?: (string | number | boolean)[] | undefined;
|
|
227
228
|
exists?: boolean | undefined;
|
|
228
229
|
equals?: string | number | boolean | undefined;
|
|
229
|
-
in?: (string | number | boolean)[] | undefined;
|
|
230
230
|
glob?: string[] | undefined;
|
|
231
231
|
notGlob?: string[] | undefined;
|
|
232
232
|
regex?: string | undefined;
|
|
@@ -236,9 +236,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
236
236
|
notUnder?: string[] | undefined;
|
|
237
237
|
}, {
|
|
238
238
|
path: string;
|
|
239
|
+
in?: (string | number | boolean)[] | undefined;
|
|
239
240
|
exists?: boolean | undefined;
|
|
240
241
|
equals?: string | number | boolean | undefined;
|
|
241
|
-
in?: (string | number | boolean)[] | undefined;
|
|
242
242
|
glob?: string[] | undefined;
|
|
243
243
|
notGlob?: string[] | undefined;
|
|
244
244
|
regex?: string | undefined;
|
|
@@ -257,9 +257,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
257
257
|
clients?: string[] | undefined;
|
|
258
258
|
args?: {
|
|
259
259
|
path: string;
|
|
260
|
+
in?: (string | number | boolean)[] | undefined;
|
|
260
261
|
exists?: boolean | undefined;
|
|
261
262
|
equals?: string | number | boolean | undefined;
|
|
262
|
-
in?: (string | number | boolean)[] | undefined;
|
|
263
263
|
glob?: string[] | undefined;
|
|
264
264
|
notGlob?: string[] | undefined;
|
|
265
265
|
regex?: string | undefined;
|
|
@@ -277,9 +277,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
277
277
|
clients?: string[] | undefined;
|
|
278
278
|
args?: {
|
|
279
279
|
path: string;
|
|
280
|
+
in?: (string | number | boolean)[] | undefined;
|
|
280
281
|
exists?: boolean | undefined;
|
|
281
282
|
equals?: string | number | boolean | undefined;
|
|
282
|
-
in?: (string | number | boolean)[] | undefined;
|
|
283
283
|
glob?: string[] | undefined;
|
|
284
284
|
notGlob?: string[] | undefined;
|
|
285
285
|
regex?: string | undefined;
|
|
@@ -302,9 +302,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
302
302
|
clients?: string[] | undefined;
|
|
303
303
|
args?: {
|
|
304
304
|
path: string;
|
|
305
|
+
in?: (string | number | boolean)[] | undefined;
|
|
305
306
|
exists?: boolean | undefined;
|
|
306
307
|
equals?: string | number | boolean | undefined;
|
|
307
|
-
in?: (string | number | boolean)[] | undefined;
|
|
308
308
|
glob?: string[] | undefined;
|
|
309
309
|
notGlob?: string[] | undefined;
|
|
310
310
|
regex?: string | undefined;
|
|
@@ -326,9 +326,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
326
326
|
clients?: string[] | undefined;
|
|
327
327
|
args?: {
|
|
328
328
|
path: string;
|
|
329
|
+
in?: (string | number | boolean)[] | undefined;
|
|
329
330
|
exists?: boolean | undefined;
|
|
330
331
|
equals?: string | number | boolean | undefined;
|
|
331
|
-
in?: (string | number | boolean)[] | undefined;
|
|
332
332
|
glob?: string[] | undefined;
|
|
333
333
|
notGlob?: string[] | undefined;
|
|
334
334
|
regex?: string | undefined;
|
|
@@ -350,9 +350,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
350
350
|
clients?: string[] | undefined;
|
|
351
351
|
args?: {
|
|
352
352
|
path: string;
|
|
353
|
+
in?: (string | number | boolean)[] | undefined;
|
|
353
354
|
exists?: boolean | undefined;
|
|
354
355
|
equals?: string | number | boolean | undefined;
|
|
355
|
-
in?: (string | number | boolean)[] | undefined;
|
|
356
356
|
glob?: string[] | undefined;
|
|
357
357
|
notGlob?: string[] | undefined;
|
|
358
358
|
regex?: string | undefined;
|
|
@@ -374,9 +374,9 @@ export declare const PolicyShadowSchema: z.ZodEffects<z.ZodObject<{
|
|
|
374
374
|
clients?: string[] | undefined;
|
|
375
375
|
args?: {
|
|
376
376
|
path: string;
|
|
377
|
+
in?: (string | number | boolean)[] | undefined;
|
|
377
378
|
exists?: boolean | undefined;
|
|
378
379
|
equals?: string | number | boolean | undefined;
|
|
379
|
-
in?: (string | number | boolean)[] | undefined;
|
|
380
380
|
glob?: string[] | undefined;
|
|
381
381
|
notGlob?: string[] | undefined;
|
|
382
382
|
regex?: string | undefined;
|