@chrischall/mcp-utils 2.10.0 → 2.12.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 +448 -15
- package/dist/concurrency/index.d.ts +3 -1
- package/dist/concurrency/index.d.ts.map +1 -1
- package/dist/concurrency/index.js +3 -1
- package/dist/concurrency/index.js.map +1 -1
- package/dist/concurrency/verify-after-write.d.ts +84 -0
- package/dist/concurrency/verify-after-write.d.ts.map +1 -0
- package/dist/concurrency/verify-after-write.js +108 -0
- package/dist/concurrency/verify-after-write.js.map +1 -0
- package/dist/errors/index.d.ts +35 -1
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +79 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/fetchproxy/fallback.d.ts +130 -0
- package/dist/fetchproxy/fallback.d.ts.map +1 -0
- package/dist/fetchproxy/fallback.js +199 -0
- package/dist/fetchproxy/fallback.js.map +1 -0
- package/dist/fetchproxy/index.d.ts +31 -1
- package/dist/fetchproxy/index.d.ts.map +1 -1
- package/dist/fetchproxy/index.js +120 -13
- package/dist/fetchproxy/index.js.map +1 -1
- package/dist/fs/confine.d.ts +9 -0
- package/dist/fs/confine.d.ts.map +1 -1
- package/dist/fs/confine.js +11 -2
- package/dist/fs/confine.js.map +1 -1
- package/dist/fs/index.d.ts +9 -2
- package/dist/fs/index.d.ts.map +1 -1
- package/dist/fs/index.js +13 -4
- package/dist/fs/index.js.map +1 -1
- package/dist/fs/magic.d.ts +35 -0
- package/dist/fs/magic.d.ts.map +1 -0
- package/dist/fs/magic.js +110 -0
- package/dist/fs/magic.js.map +1 -0
- package/dist/fs/output.d.ts +14 -10
- package/dist/fs/output.d.ts.map +1 -1
- package/dist/fs/output.js +21 -45
- package/dist/fs/output.js.map +1 -1
- package/dist/fs/upload-guard.d.ts +97 -0
- package/dist/fs/upload-guard.d.ts.map +1 -0
- package/dist/fs/upload-guard.js +185 -0
- package/dist/fs/upload-guard.js.map +1 -0
- package/dist/fs/write.d.ts +100 -0
- package/dist/fs/write.d.ts.map +1 -0
- package/dist/fs/write.js +207 -0
- package/dist/fs/write.js.map +1 -0
- package/dist/graphql/client.d.ts +223 -0
- package/dist/graphql/client.d.ts.map +1 -0
- package/dist/graphql/client.js +335 -0
- package/dist/graphql/client.js.map +1 -0
- package/dist/graphql/index.d.ts +20 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +20 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/graphql/operation-kind.d.ts +58 -0
- package/dist/graphql/operation-kind.d.ts.map +1 -0
- package/dist/graphql/operation-kind.js +237 -0
- package/dist/graphql/operation-kind.js.map +1 -0
- package/dist/html/index.d.ts +33 -0
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +81 -1
- package/dist/html/index.js.map +1 -1
- package/dist/http/index.d.ts +11 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +35 -7
- package/dist/http/index.js.map +1 -1
- package/dist/response/index.d.ts +1 -0
- package/dist/response/index.d.ts.map +1 -1
- package/dist/response/index.js +1 -0
- package/dist/response/index.js.map +1 -1
- package/dist/response/untrusted.d.ts +72 -0
- package/dist/response/untrusted.d.ts.map +1 -0
- package/dist/response/untrusted.js +55 -0
- package/dist/response/untrusted.js.map +1 -0
- package/dist/scrape/index.d.ts +75 -0
- package/dist/scrape/index.d.ts.map +1 -1
- package/dist/scrape/index.js +272 -0
- package/dist/scrape/index.js.map +1 -1
- package/dist/server/confirm-env.d.ts +12 -2
- package/dist/server/confirm-env.d.ts.map +1 -1
- package/dist/server/confirm-env.js +49 -3
- package/dist/server/confirm-env.js.map +1 -1
- package/dist/server/confirm-spent-file.d.ts +7 -0
- package/dist/server/confirm-spent-file.d.ts.map +1 -0
- package/dist/server/confirm-spent-file.js +118 -0
- package/dist/server/confirm-spent-file.js.map +1 -0
- package/dist/server/confirm-token.d.ts +12 -2
- package/dist/server/confirm-token.d.ts.map +1 -1
- package/dist/server/confirm-token.js +8 -1
- package/dist/server/confirm-token.js.map +1 -1
- package/dist/server/confirm-write.d.ts +152 -0
- package/dist/server/confirm-write.d.ts.map +1 -0
- package/dist/server/confirm-write.js +107 -0
- package/dist/server/confirm-write.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/session/atomic-write.d.ts +15 -0
- package/dist/session/atomic-write.d.ts.map +1 -0
- package/dist/session/atomic-write.js +42 -0
- package/dist/session/atomic-write.js.map +1 -0
- package/dist/session/file-lock.d.ts +57 -0
- package/dist/session/file-lock.d.ts.map +1 -0
- package/dist/session/file-lock.js +215 -0
- package/dist/session/file-lock.js.map +1 -0
- package/dist/session/index.d.ts +118 -2
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +200 -82
- package/dist/session/index.js.map +1 -1
- package/dist/session/login-page.d.ts +73 -0
- package/dist/session/login-page.d.ts.map +1 -0
- package/dist/session/login-page.js +143 -0
- package/dist/session/login-page.js.map +1 -0
- package/package.json +5 -1
package/dist/scrape/index.js
CHANGED
|
@@ -208,6 +208,145 @@ export function extractJsonAfterMarker(text, markers, opts = {}) {
|
|
|
208
208
|
return null;
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
|
+
/** Index just past the string literal opening at `text[i]` (`"`, `'` or a backtick), or `-1`. */
|
|
212
|
+
function skipStringLiteral(text, i) {
|
|
213
|
+
const quote = text[i];
|
|
214
|
+
for (let j = i + 1; j < text.length; j++) {
|
|
215
|
+
const ch = text[j];
|
|
216
|
+
if (ch === '\\')
|
|
217
|
+
j++;
|
|
218
|
+
else if (ch === quote)
|
|
219
|
+
return j + 1;
|
|
220
|
+
}
|
|
221
|
+
return -1;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Index of the `,` / closer that ends the JS value starting at `text[i]`, or
|
|
225
|
+
* `-1` if it never ends. Any JS expression a sibling might hold — a nested
|
|
226
|
+
* object, a `function(a, b) { … }`, `new Date(…)` — is skipped by tracking
|
|
227
|
+
* `(`/`[`/`{` depth and string literals; only a depth-0 `,` or closer ends it.
|
|
228
|
+
*/
|
|
229
|
+
function skipJsValue(text, i) {
|
|
230
|
+
let depth = 0;
|
|
231
|
+
while (i < text.length) {
|
|
232
|
+
const ch = text[i];
|
|
233
|
+
if (ch === '"' || ch === "'" || ch === '`') {
|
|
234
|
+
i = skipStringLiteral(text, i);
|
|
235
|
+
if (i < 0)
|
|
236
|
+
return -1;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if (ch === '{' || ch === '[' || ch === '(')
|
|
240
|
+
depth++;
|
|
241
|
+
else if (ch === '}' || ch === ']' || ch === ')') {
|
|
242
|
+
if (depth === 0)
|
|
243
|
+
return i;
|
|
244
|
+
depth--;
|
|
245
|
+
}
|
|
246
|
+
else if (ch === ',' && depth === 0)
|
|
247
|
+
return i;
|
|
248
|
+
i++;
|
|
249
|
+
}
|
|
250
|
+
return -1;
|
|
251
|
+
}
|
|
252
|
+
const JS_WHITESPACE = /\s/;
|
|
253
|
+
function skipWhitespace(text, i) {
|
|
254
|
+
while (i < text.length && JS_WHITESPACE.test(text[i]))
|
|
255
|
+
i++;
|
|
256
|
+
return i;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Find the first of `markers` in `text`, take the object literal that follows
|
|
260
|
+
* it (the next `{`), and return the parsed value of its **top-level** property
|
|
261
|
+
* `key` — without parsing the rest of the object.
|
|
262
|
+
*
|
|
263
|
+
* For SSR stores that cannot be parsed whole: Tock's `window.$REDUX_STATE`
|
|
264
|
+
* embeds `function` values in its `navigation` slice, so
|
|
265
|
+
* {@link extractJsonAfterMarker} fails on the store while every other slice is
|
|
266
|
+
* plain JSON. Sibling values are skipped as arbitrary JS (nested objects,
|
|
267
|
+
* function literals, calls); keys may be double-quoted (escapes decoded),
|
|
268
|
+
* single-quoted, or bare identifiers. A same-named key nested inside a sibling
|
|
269
|
+
* never matches. One linear pass. Hoisted from tock-mcp's `extractReduxSlice`
|
|
270
|
+
* (fleet audit #1130).
|
|
271
|
+
*
|
|
272
|
+
* Returns `undefined` — never `null`, which is a legitimate slice value (a
|
|
273
|
+
* logged-out `"patron":null`) — when the marker, the object, or the key is
|
|
274
|
+
* absent, the object is unterminated, or the value is not valid JSON (pass
|
|
275
|
+
* `{ sanitize: true }` to repair bare `undefined` literals first, see
|
|
276
|
+
* {@link sanitizeJsLiterals}). Limitation: a regex literal containing a quote
|
|
277
|
+
* in a sibling value can confuse the skip, as in every string-aware walker here.
|
|
278
|
+
*/
|
|
279
|
+
export function extractJsonKeyAfterMarker(text, markers, key, opts = {}) {
|
|
280
|
+
const list = Array.isArray(markers) ? markers : [markers];
|
|
281
|
+
let from = -1;
|
|
282
|
+
for (const m of list) {
|
|
283
|
+
const i = text.indexOf(m);
|
|
284
|
+
if (i >= 0) {
|
|
285
|
+
from = i + m.length;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (from < 0)
|
|
290
|
+
return undefined;
|
|
291
|
+
const open = text.indexOf('{', from);
|
|
292
|
+
if (open < 0)
|
|
293
|
+
return undefined;
|
|
294
|
+
let pos = open + 1;
|
|
295
|
+
for (;;) {
|
|
296
|
+
pos = skipWhitespace(text, pos);
|
|
297
|
+
const first = text[pos];
|
|
298
|
+
if (first === undefined || first === '}')
|
|
299
|
+
return undefined;
|
|
300
|
+
// Property name.
|
|
301
|
+
let name;
|
|
302
|
+
if (first === '"' || first === "'") {
|
|
303
|
+
const end = skipStringLiteral(text, pos);
|
|
304
|
+
if (end < 0)
|
|
305
|
+
return undefined;
|
|
306
|
+
const inner = text.slice(pos + 1, end - 1);
|
|
307
|
+
name = inner;
|
|
308
|
+
if (first === '"') {
|
|
309
|
+
try {
|
|
310
|
+
name = JSON.parse(text.slice(pos, end));
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
// Not a JSON string (e.g. a JS-only escape): compare it raw.
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
pos = end;
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
const start = pos;
|
|
320
|
+
while (pos < text.length && IDENT_CHAR.test(text[pos]))
|
|
321
|
+
pos++;
|
|
322
|
+
if (pos === start)
|
|
323
|
+
return undefined;
|
|
324
|
+
name = text.slice(start, pos);
|
|
325
|
+
}
|
|
326
|
+
pos = skipWhitespace(text, pos);
|
|
327
|
+
if (text[pos] !== ':')
|
|
328
|
+
return undefined;
|
|
329
|
+
const valueStart = skipWhitespace(text, pos + 1);
|
|
330
|
+
const valueEnd = skipJsValue(text, valueStart);
|
|
331
|
+
if (valueEnd < 0)
|
|
332
|
+
return undefined;
|
|
333
|
+
if (name === key) {
|
|
334
|
+
let raw = text.slice(valueStart, valueEnd).trim();
|
|
335
|
+
if (opts.sanitize)
|
|
336
|
+
raw = sanitizeJsLiterals(raw);
|
|
337
|
+
try {
|
|
338
|
+
return JSON.parse(raw);
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
pos = valueEnd;
|
|
345
|
+
if (text[pos] !== ',')
|
|
346
|
+
return undefined; // the object's closer: key absent
|
|
347
|
+
pos++;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
211
350
|
// ---------------------------------------------------------------------------
|
|
212
351
|
// JSON-LD / OpenGraph readers
|
|
213
352
|
// ---------------------------------------------------------------------------
|
|
@@ -270,6 +409,139 @@ export function extractJsonLdBlocks(html) {
|
|
|
270
409
|
}
|
|
271
410
|
return out;
|
|
272
411
|
}
|
|
412
|
+
// ---------------------------------------------------------------------------
|
|
413
|
+
// Next.js `__NEXT_DATA__` (and same-shaped `<script id=…>` JSON blobs)
|
|
414
|
+
// ---------------------------------------------------------------------------
|
|
415
|
+
/**
|
|
416
|
+
* Default cap, in UTF-16 code units, on the `__NEXT_DATA__` body
|
|
417
|
+
* {@link extractNextData} will hand to `JSON.parse` (16 Mi chars). Real
|
|
418
|
+
* pages run to a few MB (zillow search ≈ 2–4 MB); the cap stops a hostile or
|
|
419
|
+
* runaway page from making one call allocate an unbounded object graph.
|
|
420
|
+
*/
|
|
421
|
+
export const NEXT_DATA_MAX_CHARS = 16 * 1024 * 1024;
|
|
422
|
+
function isAsciiSpace(ch) {
|
|
423
|
+
return ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r' || ch === '\f';
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Walk one opening tag's attributes from `from` (just past `<script`) to its
|
|
427
|
+
* closing `>`, honouring quoted values (a `>` inside quotes does not end the
|
|
428
|
+
* tag). Returns the index of that `>` and whether an `id` attribute equals
|
|
429
|
+
* `id` exactly, or `null` when the tag never closes. Every step advances, so
|
|
430
|
+
* it is linear in the tag's length — the backtracking-free replacement for a
|
|
431
|
+
* `[^>]*id=…[^>]*>` regex.
|
|
432
|
+
*/
|
|
433
|
+
function scanScriptTag(html, from, id) {
|
|
434
|
+
let p = from;
|
|
435
|
+
let idMatches = false;
|
|
436
|
+
for (;;) {
|
|
437
|
+
while (p < html.length && (isAsciiSpace(html[p]) || html[p] === '/'))
|
|
438
|
+
p++;
|
|
439
|
+
if (p >= html.length)
|
|
440
|
+
return null;
|
|
441
|
+
if (html[p] === '>')
|
|
442
|
+
return { end: p, idMatches };
|
|
443
|
+
const nameStart = p;
|
|
444
|
+
while (p < html.length && !isAsciiSpace(html[p]) && html[p] !== '/' && html[p] !== '>' && html[p] !== '=')
|
|
445
|
+
p++;
|
|
446
|
+
const name = asciiLower(html.slice(nameStart, p));
|
|
447
|
+
while (p < html.length && isAsciiSpace(html[p]))
|
|
448
|
+
p++;
|
|
449
|
+
if (html[p] !== '=')
|
|
450
|
+
continue; // boolean attribute (the name loop advanced)
|
|
451
|
+
p++; // past '='
|
|
452
|
+
while (p < html.length && isAsciiSpace(html[p]))
|
|
453
|
+
p++;
|
|
454
|
+
let value;
|
|
455
|
+
const quote = html[p];
|
|
456
|
+
if (quote === '"' || quote === "'") {
|
|
457
|
+
const close = html.indexOf(quote, p + 1);
|
|
458
|
+
if (close < 0)
|
|
459
|
+
return null;
|
|
460
|
+
value = html.slice(p + 1, close);
|
|
461
|
+
p = close + 1;
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
const valueStart = p;
|
|
465
|
+
while (p < html.length && !isAsciiSpace(html[p]) && html[p] !== '>')
|
|
466
|
+
p++;
|
|
467
|
+
value = html.slice(valueStart, p);
|
|
468
|
+
}
|
|
469
|
+
if (name === 'id' && value === id)
|
|
470
|
+
idMatches = true;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* The raw, trimmed text inside the first `<script id="__NEXT_DATA__" …>` tag
|
|
475
|
+
* (or `opts.id`), or `undefined` when there is no such complete tag or its
|
|
476
|
+
* body exceeds `opts.maxChars`. For callers that must tell "the page has no
|
|
477
|
+
* blob" apart from "the blob is not valid JSON" (zola-mcp reports them as
|
|
478
|
+
* different failure steps) — everyone else wants {@link extractNextData}.
|
|
479
|
+
*
|
|
480
|
+
* One forward pass, tag-bounded: `indexOf` finds each `<script` opener, the
|
|
481
|
+
* attribute walk finds its `>`, and a non-matching script's body is skipped
|
|
482
|
+
* to its `</script` so a `<script id="__NEXT_DATA__">` string inside another
|
|
483
|
+
* script cannot match. No regex runs over the page.
|
|
484
|
+
*/
|
|
485
|
+
export function extractNextDataText(html, opts = {}) {
|
|
486
|
+
const id = opts.id ?? '__NEXT_DATA__';
|
|
487
|
+
const maxChars = opts.maxChars ?? NEXT_DATA_MAX_CHARS;
|
|
488
|
+
const lower = asciiLower(html);
|
|
489
|
+
let i = 0;
|
|
490
|
+
for (;;) {
|
|
491
|
+
const open = nextTagOpen(lower, 'script', i);
|
|
492
|
+
if (open < 0)
|
|
493
|
+
return undefined;
|
|
494
|
+
const tag = scanScriptTag(html, open + '<script'.length, id);
|
|
495
|
+
if (!tag)
|
|
496
|
+
return undefined; // unterminated opening tag: nothing after it is a tag
|
|
497
|
+
const bodyStart = tag.end + 1;
|
|
498
|
+
const bodyEnd = lower.indexOf('</script', bodyStart);
|
|
499
|
+
if (bodyEnd < 0)
|
|
500
|
+
return undefined; // no closing tag anywhere after this point
|
|
501
|
+
if (tag.idMatches) {
|
|
502
|
+
if (bodyEnd - bodyStart > maxChars)
|
|
503
|
+
return undefined;
|
|
504
|
+
return html.slice(bodyStart, bodyEnd).trim();
|
|
505
|
+
}
|
|
506
|
+
i = bodyEnd + '</script'.length;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
function asPlainObject(v) {
|
|
510
|
+
return v !== null && typeof v === 'object' && !Array.isArray(v) ? v : undefined;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Parse a Next.js page's `<script id="__NEXT_DATA__" type="application/json">`
|
|
514
|
+
* hydration blob (or any same-shaped tag via `opts.id`), returning the whole
|
|
515
|
+
* object, its `props`, or `props.pageProps` (`opts.select`). Returns
|
|
516
|
+
* `undefined` — never throws — when the tag is absent or unterminated, the
|
|
517
|
+
* body is over `opts.maxChars` ({@link NEXT_DATA_MAX_CHARS} by default), the
|
|
518
|
+
* JSON is invalid, or the selected level is not an object.
|
|
519
|
+
*
|
|
520
|
+
* Replaces the fleet's per-repo copies (fleet-audit#1145): zillow-mcp's
|
|
521
|
+
* `/<script[^>]*id=["']__NEXT_DATA__["'][^>]*>/i` + `indexOf` (quadratic over
|
|
522
|
+
* repeated `<script` with the `>` withheld), zola-mcp's lazy
|
|
523
|
+
* `([\s\S]*?)<\/script>` (quadratic with the closer withheld), and the
|
|
524
|
+
* `extractJsonAfterMarker(html, 'id="__NEXT_DATA__"')` calls in angi-mcp /
|
|
525
|
+
* thumbtack-mcp (which are linear but match the marker text anywhere, even
|
|
526
|
+
* inside another script). Built on {@link extractNextDataText}; linear.
|
|
527
|
+
*/
|
|
528
|
+
export function extractNextData(html, opts = {}) {
|
|
529
|
+
const text = extractNextDataText(html, opts);
|
|
530
|
+
if (text === undefined)
|
|
531
|
+
return undefined;
|
|
532
|
+
let data;
|
|
533
|
+
try {
|
|
534
|
+
data = asPlainObject(JSON.parse(text));
|
|
535
|
+
}
|
|
536
|
+
catch {
|
|
537
|
+
return undefined;
|
|
538
|
+
}
|
|
539
|
+
const select = opts.select ?? 'all';
|
|
540
|
+
if (select === 'all' || data === undefined)
|
|
541
|
+
return data;
|
|
542
|
+
const props = asPlainObject(data.props);
|
|
543
|
+
return select === 'props' ? props : asPlainObject(props?.pageProps);
|
|
544
|
+
}
|
|
273
545
|
/** True when a JSON-LD node's `@type` (string or array) includes `type`. */
|
|
274
546
|
function typeMatches(node, type) {
|
|
275
547
|
if (node === null || typeof node !== 'object')
|
package/dist/scrape/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scrape/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scrape/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,11 +12,21 @@ export declare function readConfirmMode(env?: EnvSource): ConfirmMode;
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function confirmTtlFromEnv(env?: EnvSource): number;
|
|
14
14
|
/**
|
|
15
|
-
* The HMAC key: `MCP_CONFIRM_SECRET`
|
|
15
|
+
* The HMAC key: `MCP_CONFIRM_SECRET` — else `MCP_HOST_CONFIRM_SECRET`, but only
|
|
16
|
+
* beside an absolute `MCP_DATA_DIR` — of any length stretched through SHA-256 to
|
|
16
17
|
* the 32 bytes the token functions require, or 32 random bytes fixed for the
|
|
17
18
|
* life of the process (so a restart invalidates every outstanding token).
|
|
18
19
|
*/
|
|
19
20
|
export declare function confirmKeyFromEnv(env?: EnvSource): Uint8Array;
|
|
21
|
+
/**
|
|
22
|
+
* Where {@link confirmationFromEnv} records spent tokens by default: a
|
|
23
|
+
* {@link createFileSpentTokenStore} under `$MCP_DATA_DIR/.mcp-confirm/spent`
|
|
24
|
+
* when the key is stable and the data dir is absolute, else `undefined` (the
|
|
25
|
+
* process-wide in-memory store — enough for a random key, whose tokens cannot
|
|
26
|
+
* outlive the process; with an operator's secret and no data dir, a restart can
|
|
27
|
+
* re-accept a spent token until it expires).
|
|
28
|
+
*/
|
|
29
|
+
export declare function spentTokenStoreFromEnv(env?: EnvSource): SpentTokenStore | undefined;
|
|
20
30
|
/** Phase 1's instruction under `MCP_CONFIRM_MODE=auto`. */
|
|
21
31
|
export declare const CONFIRM_TOKEN_AUTO_INSTRUCTION: string;
|
|
22
32
|
/** {@link confirmationFromEnv}'s input: the confirmation options plus what the token binds. */
|
|
@@ -31,7 +41,7 @@ export interface ConfirmationFromEnvOptions extends RequireConfirmationOptions {
|
|
|
31
41
|
subject: ConfirmTokenFallback['subject'];
|
|
32
42
|
/** Phase 1's instruction in `ask-user` mode; defaults to {@link CONFIRM_TOKEN_INSTRUCTION}. */
|
|
33
43
|
instruction?: string;
|
|
34
|
-
/** Spent-token store; defaults to the process-wide one. */
|
|
44
|
+
/** Spent-token store; defaults to {@link spentTokenStoreFromEnv}, else the process-wide one. */
|
|
35
45
|
spent?: SpentTokenStore;
|
|
36
46
|
/** Environment to read; defaults to `process.env`. */
|
|
37
47
|
env?: EnvSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-env.d.ts","sourceRoot":"","sources":["../../src/server/confirm-env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"confirm-env.d.ts","sourceRoot":"","sources":["../../src/server/confirm-env.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,sCAAsC,EAC3C,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,6BAA6B;AAC7B,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAMzD,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,GAAE,SAAuB,GAAG,WAAW,CAWzE;AAwBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,SAAuB,GAAG,MAAM,CAEtE;AAgBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,SAAuB,GAAG,UAAU,CAK1E;AAID;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,SAAuB,GAAG,eAAe,GAAG,SAAS,CAUhG;AAED,2DAA2D;AAC3D,eAAO,MAAM,8BAA8B,QAE6E,CAAC;AAczH,+FAA+F;AAC/F,MAAM,WAAW,0BAA2B,SAAQ,0BAA0B;IAC5E,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gGAAgG;IAChG,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,sDAAsD;IACtD,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,sCAAsC,CAuC/G"}
|
|
@@ -8,6 +8,15 @@
|
|
|
8
8
|
* | `MCP_CONFIRM_MODE` | `ask-user` | what a gated write does on a client that CANNOT show a confirmation prompt |
|
|
9
9
|
* | `MCP_CONFIRM_TTL_SECONDS` | `600` | how long a token stays valid; unparseable → `refuse` + a stderr warning |
|
|
10
10
|
* | `MCP_CONFIRM_SECRET` | random per process | HMAC key; set only if tokens must survive a restart |
|
|
11
|
+
* | `MCP_HOST_CONFIRM_SECRET` | unset | the same, set by a HOST (mcp-host); honoured only beside an absolute `MCP_DATA_DIR` |
|
|
12
|
+
*
|
|
13
|
+
* Whenever the key is stable (either secret) and `MCP_DATA_DIR` is absolute,
|
|
14
|
+
* spent tokens are recorded under `$MCP_DATA_DIR/.mcp-confirm/spent`
|
|
15
|
+
* ({@link createFileSpentTokenStore}), so a restart cannot re-accept one
|
|
16
|
+
* within its TTL. The host's secret has a name of its own so that a child on an
|
|
17
|
+
* mcp-utils that predates the durable store ignores it — keeping its random,
|
|
18
|
+
* restart-invalidated key — rather than pairing a stable key with an in-memory
|
|
19
|
+
* store, and it is ignored without a data dir for the same reason.
|
|
11
20
|
*
|
|
12
21
|
* `MCP_CONFIRM_MODE`:
|
|
13
22
|
* - `ask-user`: two steps. Phase 1 returns the preview and a token and tells the
|
|
@@ -24,7 +33,9 @@
|
|
|
24
33
|
* server uses when it wants the fleet defaults.
|
|
25
34
|
*/
|
|
26
35
|
import { createHash, randomBytes } from 'node:crypto';
|
|
36
|
+
import { isAbsolute, join } from 'node:path';
|
|
27
37
|
import { readEnvVar } from '../config/index.js';
|
|
38
|
+
import { createFileSpentTokenStore } from './confirm-spent-file.js';
|
|
28
39
|
import { CONFIRM_TOKEN_INSTRUCTION, } from './confirm-token.js';
|
|
29
40
|
const MODES = new Set(['ask-user', 'auto', 'refuse']);
|
|
30
41
|
const DEFAULT_TTL_SECONDS = 600;
|
|
@@ -72,18 +83,50 @@ export function confirmTtlFromEnv(env = process.env) {
|
|
|
72
83
|
return readConfirmTtl(env) ?? DEFAULT_TTL_SECONDS;
|
|
73
84
|
}
|
|
74
85
|
let processKey;
|
|
86
|
+
/** `MCP_DATA_DIR` when it names an absolute directory; a relative one is the process cwd's, not durable. */
|
|
87
|
+
function durableDataDir(env) {
|
|
88
|
+
const dir = readEnvVar('MCP_DATA_DIR', { env });
|
|
89
|
+
return dir && isAbsolute(dir) ? dir : undefined;
|
|
90
|
+
}
|
|
91
|
+
/** The stable secret in force, if any: the operator's, else the host's when spends can be recorded. */
|
|
92
|
+
function stableSecret(env) {
|
|
93
|
+
return readEnvVar('MCP_CONFIRM_SECRET', { env })
|
|
94
|
+
?? (durableDataDir(env) ? readEnvVar('MCP_HOST_CONFIRM_SECRET', { env }) : undefined);
|
|
95
|
+
}
|
|
75
96
|
/**
|
|
76
|
-
* The HMAC key: `MCP_CONFIRM_SECRET`
|
|
97
|
+
* The HMAC key: `MCP_CONFIRM_SECRET` — else `MCP_HOST_CONFIRM_SECRET`, but only
|
|
98
|
+
* beside an absolute `MCP_DATA_DIR` — of any length stretched through SHA-256 to
|
|
77
99
|
* the 32 bytes the token functions require, or 32 random bytes fixed for the
|
|
78
100
|
* life of the process (so a restart invalidates every outstanding token).
|
|
79
101
|
*/
|
|
80
102
|
export function confirmKeyFromEnv(env = process.env) {
|
|
81
|
-
const secret =
|
|
103
|
+
const secret = stableSecret(env);
|
|
82
104
|
if (secret)
|
|
83
105
|
return createHash('sha256').update(secret, 'utf8').digest();
|
|
84
106
|
processKey ??= randomBytes(32);
|
|
85
107
|
return processKey;
|
|
86
108
|
}
|
|
109
|
+
const fileStores = new Map();
|
|
110
|
+
/**
|
|
111
|
+
* Where {@link confirmationFromEnv} records spent tokens by default: a
|
|
112
|
+
* {@link createFileSpentTokenStore} under `$MCP_DATA_DIR/.mcp-confirm/spent`
|
|
113
|
+
* when the key is stable and the data dir is absolute, else `undefined` (the
|
|
114
|
+
* process-wide in-memory store — enough for a random key, whose tokens cannot
|
|
115
|
+
* outlive the process; with an operator's secret and no data dir, a restart can
|
|
116
|
+
* re-accept a spent token until it expires).
|
|
117
|
+
*/
|
|
118
|
+
export function spentTokenStoreFromEnv(env = process.env) {
|
|
119
|
+
const dataDir = durableDataDir(env);
|
|
120
|
+
if (!dataDir || !stableSecret(env))
|
|
121
|
+
return undefined;
|
|
122
|
+
const dir = join(dataDir, '.mcp-confirm', 'spent');
|
|
123
|
+
let store = fileStores.get(dir);
|
|
124
|
+
if (!store) {
|
|
125
|
+
store = createFileSpentTokenStore(dir);
|
|
126
|
+
fileStores.set(dir, store);
|
|
127
|
+
}
|
|
128
|
+
return store;
|
|
129
|
+
}
|
|
87
130
|
/** Phase 1's instruction under `MCP_CONFIRM_MODE=auto`. */
|
|
88
131
|
export const CONFIRM_TOKEN_AUTO_INSTRUCTION = 'Nothing has been done yet. Review this preview; if it is what was intended, call again with the same arguments '
|
|
89
132
|
+ 'plus confirmToken. (This server runs with MCP_CONFIRM_MODE=auto, so the user\'s approval in chat is not required.)';
|
|
@@ -112,7 +155,10 @@ function boundArgs(args) {
|
|
|
112
155
|
* ```
|
|
113
156
|
*/
|
|
114
157
|
export function confirmationFromEnv(options) {
|
|
115
|
-
const { tool, account, confirmToken, subject, instruction,
|
|
158
|
+
const { tool, account, confirmToken, subject, instruction, args, env = process.env, spent: callerSpent, ...rest } = options;
|
|
159
|
+
// Destructured out of `rest` so it rides the token fallback only, never the
|
|
160
|
+
// returned options (#312).
|
|
161
|
+
const spent = callerSpent ?? spentTokenStoreFromEnv(env);
|
|
116
162
|
const mode = readConfirmMode(env);
|
|
117
163
|
const ttlSeconds = readConfirmTtl(env);
|
|
118
164
|
const bound = args === undefined ? undefined : boundArgs(args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-env.js","sourceRoot":"","sources":["../../src/server/confirm-env.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"confirm-env.js","sourceRoot":"","sources":["../../src/server/confirm-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SpentTokenStore } from './confirm-token.js';
|
|
2
|
+
/**
|
|
3
|
+
* A spent-token store backed by `dir` (created 0700 on the first spend). Share
|
|
4
|
+
* one directory between every process that verifies tokens under the same key.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createFileSpentTokenStore(dir: string): SpentTokenStore;
|
|
7
|
+
//# sourceMappingURL=confirm-spent-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-spent-file.d.ts","sourceRoot":"","sources":["../../src/server/confirm-spent-file.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAW1D;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAqEtE"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A {@link SpentTokenStore} on disk, so "single use" survives a restart.
|
|
3
|
+
*
|
|
4
|
+
* The in-memory store forgets every spend when the process exits. With a
|
|
5
|
+
* random per-process key that is harmless — a restart invalidates every
|
|
6
|
+
* outstanding token anyway. With a STABLE key (an operator's
|
|
7
|
+
* `MCP_CONFIRM_SECRET`, or the one mcp-host derives per child) it is a replay
|
|
8
|
+
* window: a token spent just before a restart verifies again after it, until it
|
|
9
|
+
* expires. A hosted child idle-stops after about ten minutes, close to the
|
|
10
|
+
* default 600 s TTL, so that window is the normal case there, not an edge
|
|
11
|
+
* (fleet audit 2026-09-24, kiaaccess-mcp BUG-2).
|
|
12
|
+
*
|
|
13
|
+
* One file per spent nonce, named by the nonce and holding its expiry:
|
|
14
|
+
* - **Atomic spend.** `claim` creates the file with `O_EXCL` (`wx`), so of two
|
|
15
|
+
* processes sharing the directory that both passed `has`, exactly one spends.
|
|
16
|
+
* - **Bounded.** Every verify prunes entries past their expiry, so the
|
|
17
|
+
* directory holds at most one TTL's worth of approvals.
|
|
18
|
+
* - **Fails closed.** A lookup or a spend that cannot be done THROWS rather
|
|
19
|
+
* than answering "not spent", so the gate errors and nothing runs. Only
|
|
20
|
+
* `prune` swallows errors — it is housekeeping. An entry whose expiry cannot
|
|
21
|
+
* be read (a write torn by a crash) is kept until it is a day old rather
|
|
22
|
+
* than forgotten early.
|
|
23
|
+
*
|
|
24
|
+
* 0700 directory, 0600 entries, like the session store.
|
|
25
|
+
*/
|
|
26
|
+
import { mkdirSync, readFileSync, readdirSync, rmSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
/** Nonces are 16 random bytes base64url (`issueConfirmToken`); anything else is not ours. */
|
|
29
|
+
const NONCE = /^[A-Za-z0-9_-]{1,128}$/;
|
|
30
|
+
/** How long an entry whose expiry cannot be read is kept: far beyond any sane TTL. */
|
|
31
|
+
const UNREADABLE_KEEP_MS = 24 * 3600_000;
|
|
32
|
+
function code(err) {
|
|
33
|
+
return err?.code;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A spent-token store backed by `dir` (created 0700 on the first spend). Share
|
|
37
|
+
* one directory between every process that verifies tokens under the same key.
|
|
38
|
+
*/
|
|
39
|
+
export function createFileSpentTokenStore(dir) {
|
|
40
|
+
const fail = (what, err) => {
|
|
41
|
+
throw new Error(`confirm token: the spent-token store at ${dir} could not be ${what} (${code(err) ?? String(err)}); `
|
|
42
|
+
+ 'refusing rather than risking a second use of an approval.');
|
|
43
|
+
};
|
|
44
|
+
const entry = (nonce) => {
|
|
45
|
+
if (!NONCE.test(nonce))
|
|
46
|
+
throw new TypeError(`confirm token: ${JSON.stringify(nonce)} is not a nonce.`);
|
|
47
|
+
return join(dir, nonce);
|
|
48
|
+
};
|
|
49
|
+
const names = () => {
|
|
50
|
+
try {
|
|
51
|
+
return readdirSync(dir).filter((n) => NONCE.test(n));
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (code(err) === 'ENOENT')
|
|
55
|
+
return [];
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const claim = (nonce, expiresAtMs) => {
|
|
60
|
+
const path = entry(nonce);
|
|
61
|
+
try {
|
|
62
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
63
|
+
writeFileSync(path, String(expiresAtMs), { flag: 'wx', mode: 0o600 });
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (code(err) === 'EEXIST')
|
|
68
|
+
return false;
|
|
69
|
+
return fail('written', err);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
return {
|
|
73
|
+
has(nonce) {
|
|
74
|
+
const path = entry(nonce);
|
|
75
|
+
try {
|
|
76
|
+
statSync(path);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
if (code(err) === 'ENOENT')
|
|
81
|
+
return false;
|
|
82
|
+
return fail('read', err);
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
add(nonce, expiresAtMs) {
|
|
86
|
+
claim(nonce, expiresAtMs);
|
|
87
|
+
},
|
|
88
|
+
claim,
|
|
89
|
+
prune(now) {
|
|
90
|
+
try {
|
|
91
|
+
for (const name of names()) {
|
|
92
|
+
const path = join(dir, name);
|
|
93
|
+
try {
|
|
94
|
+
const raw = readFileSync(path, 'utf8').trim();
|
|
95
|
+
const exp = /^\d+$/.test(raw) ? Number(raw) : Number.NaN;
|
|
96
|
+
const expired = Number.isFinite(exp) ? exp < now : statSync(path).mtimeMs < now - UNREADABLE_KEEP_MS;
|
|
97
|
+
if (expired)
|
|
98
|
+
unlinkSync(path);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// One entry we cannot judge or remove stays; the next prune retries.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Housekeeping only: `has` and `claim` are what refuse.
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
clear() {
|
|
110
|
+
for (const name of names())
|
|
111
|
+
rmSync(join(dir, name), { force: true });
|
|
112
|
+
},
|
|
113
|
+
get size() {
|
|
114
|
+
return names().length;
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=confirm-spent-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-spent-file.js","sourceRoot":"","sources":["../../src/server/confirm-spent-file.ts"],"names":[],"mappings":"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"}
|