@chrischall/mcp-utils 3.0.1 → 3.0.3

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.
Files changed (49) hide show
  1. package/README.md +86 -13
  2. package/dist/errors/index.d.ts.map +1 -1
  3. package/dist/errors/index.js +6 -1
  4. package/dist/errors/index.js.map +1 -1
  5. package/dist/fs/index.d.ts +1 -1
  6. package/dist/fs/index.d.ts.map +1 -1
  7. package/dist/fs/index.js +1 -1
  8. package/dist/fs/index.js.map +1 -1
  9. package/dist/fs/output.d.ts +26 -3
  10. package/dist/fs/output.d.ts.map +1 -1
  11. package/dist/fs/output.js +70 -5
  12. package/dist/fs/output.js.map +1 -1
  13. package/dist/fs/write.d.ts +19 -1
  14. package/dist/fs/write.d.ts.map +1 -1
  15. package/dist/fs/write.js +23 -0
  16. package/dist/fs/write.js.map +1 -1
  17. package/dist/graphql/client.d.ts +19 -1
  18. package/dist/graphql/client.d.ts.map +1 -1
  19. package/dist/graphql/client.js +49 -3
  20. package/dist/graphql/client.js.map +1 -1
  21. package/dist/html/index.d.ts +16 -4
  22. package/dist/html/index.d.ts.map +1 -1
  23. package/dist/html/index.js +118 -29
  24. package/dist/html/index.js.map +1 -1
  25. package/dist/http/body-limit.d.ts.map +1 -1
  26. package/dist/http/body-limit.js +2 -1
  27. package/dist/http/body-limit.js.map +1 -1
  28. package/dist/http/index.d.ts +10 -3
  29. package/dist/http/index.d.ts.map +1 -1
  30. package/dist/http/index.js +87 -21
  31. package/dist/http/index.js.map +1 -1
  32. package/dist/internal/tags.d.ts +16 -0
  33. package/dist/internal/tags.d.ts.map +1 -0
  34. package/dist/internal/tags.js +37 -0
  35. package/dist/internal/tags.js.map +1 -0
  36. package/dist/netguard/index.d.ts +2 -1
  37. package/dist/netguard/index.d.ts.map +1 -1
  38. package/dist/netguard/index.js +9 -3
  39. package/dist/netguard/index.js.map +1 -1
  40. package/dist/scrape/index.d.ts +4 -3
  41. package/dist/scrape/index.d.ts.map +1 -1
  42. package/dist/scrape/index.js +69 -38
  43. package/dist/scrape/index.js.map +1 -1
  44. package/dist/session/index.d.ts +5 -7
  45. package/dist/session/index.d.ts.map +1 -1
  46. package/dist/session/index.js +44 -26
  47. package/dist/session/index.js.map +1 -1
  48. package/docs/CONFIRM-TOKEN.md +9 -4
  49. package/package.json +9 -9
package/README.md CHANGED
@@ -696,7 +696,8 @@ without re-reading). Pass `readFile` to inject a reader in tests.
696
696
 
697
697
  `fileBlob`, `readFileHead`, `resolveOutputDir`, `uniquePath`,
698
698
  `writeBinaryOutput`, `writeFileSafe`, `writeUniqueFile`, `vetUploadFile`,
699
- `sniffMimeBytes`, `bytesMatchMime`, `assertPathWithinRoots`.
699
+ `sniffMimeBytes`, `bytesMatchMime`, `assertPathWithinRoots`,
700
+ `extensionForMime`, `isSafeExtension`.
700
701
 
701
702
  The binary-output kit (hoisted from gemini + flightaware) is the fleet
702
703
  convention for tools that generate bytes: `resolveOutputDir(perCall,
@@ -711,6 +712,16 @@ Each name is claimed with an exclusive, no-follow create
711
712
  (`O_CREAT | O_EXCL | O_NOFOLLOW`), so two writers can't pick the same name and
712
713
  a symlink planted at the name is skipped, never written through.
713
714
 
715
+ **Extensions.** `extensionForMime(mime, { url?, fallback? })` is the one
716
+ MIME → extension table (`image/jpeg` → `jpg`, `video/quicktime` → `mov`,
717
+ `audio/mpeg` → `mp3`, …; parameters and case ignored), falling back to a plain
718
+ 1–5 character subtype, then the URL path's extension, then `'bin'` — so gemini,
719
+ concur and splitwise need not each hand-roll one. Its result always passes
720
+ `isSafeExtension` (1–16 of `A-Z a-z 0-9 . _ -`, starting alphanumeric), which
721
+ `writeUniqueFile`, `writeBinaryOutput` and `uniquePath` now enforce with a
722
+ `TypeError`: the stem was always sanitised, but an extension such as
723
+ `/../../x` was joined verbatim and wrote outside `dir` (fleet-audit#1303).
724
+
714
725
  **Safe writes** (from accessoticketing's `wx` writer and infinitecampus's
715
726
  `writeConfined`): `writeFileSafe(path, bytes, { overwrite?, mode?, allowedRoots? })`
716
727
  is one `open(O_NOFOLLOW | O_EXCL)` — it refuses an existing file (unless
@@ -786,8 +797,15 @@ The fleet CI enforces the opt-in: `scripts/audit-fs-confinement.mjs` (run by
786
797
  chrischall/workflows' `reusable-mcp-ci.yml`) fails a server whose source calls
787
798
  one of these three helpers, imported from this package, without `allowedRoots`
788
799
  in the call's own arguments. `resolveOutputDir(undefined, …)` is exempt (no
789
- per-call path). The scripts are not in the npm package, so run it from a
790
- clone of this repo: `node scripts/audit-fs-confinement.mjs ../your-mcp`.
800
+ per-call path). It also **warns** — without failing, unless `--strict` is
801
+ passed — on two shapes the rule cannot prove safe: an `allowedRoots` that
802
+ appears only inside a conditional spread (`...(roots ? { allowedRoots: roots }
803
+ : {})`, unconfined whenever the condition is falsy), and a raw `node:fs` write
804
+ / append / mkdir / `createWriteStream` whose path is not a literal (use
805
+ `writeFileSafe` / `writeUniqueFile` with `allowedRoots` when any part of it can
806
+ come from a tool argument). The scripts are not in the npm package, so run it
807
+ from a clone of this repo: `node scripts/audit-fs-confinement.mjs ../your-mcp
808
+ [--strict]`.
791
809
 
792
810
  ### `http` — bearer API-client kit
793
811
 
@@ -940,8 +958,14 @@ const api = createApiClient({ baseUrl, getToken, maxResponseBytes: 5 * 1024 * 10
940
958
  const receipt = await api.fetchRaw('GET', apiPath`/receipts/${id}`, { maxBytes: 25 * 1024 * 1024 });
941
959
  ```
942
960
 
943
- Redirects: by default `createApiClient` leaves `fetch` to follow them, which
944
- re-sends the bearer wherever they point. Pass `redirect: 'same-origin'` to have
961
+ Redirects: by default `createApiClient` leaves `fetch` to follow them. `fetch`
962
+ strips `Authorization` on a cross-origin hop, but re-sends every other header —
963
+ so a credential in a custom `tokenHeader` (`x-api-key`, `x-goog-api-key`, …)
964
+ would follow the `Location` to any host. A client with `tokenHeader` and no
965
+ `redirect` option therefore follows redirects itself (like `fetch`, up to 20
966
+ hops, 303 / POST-after-301/302 becoming a GET) and drops the `tokenHeader`,
967
+ `Authorization`, `Cookie` and `Proxy-Authorization` headers from the first hop
968
+ that leaves the base origin onward. Pass `redirect: 'same-origin'` to have
945
969
  the client follow them itself: each `Location` is checked against the base
946
970
  origin before anything is re-sent, and a hop to another origin, a scheme
947
971
  downgrade or a hop that adds userinfo throws `RedirectRefusedError`.
@@ -1401,7 +1425,11 @@ const data = JSON.parse(stripJsonGuard(body)); // )]}' while(1); for(;;);
1401
1425
 
1402
1426
  `isCloudflareChallenge` matches the DEFINITIVE interstitial markers only
1403
1427
  (`_cf_chl_opt`, `<title>Just a moment`) — never `cdn-cgi/challenge-platform`,
1404
- which Cloudflare inlines on cleared pages too. `decodeHtmlEntities` decodes
1428
+ which Cloudflare inlines on cleared pages too. It, `stripHtml`, and the deep
1429
+ walkers are linear on hostile input and safe to run on a whole upstream body:
1430
+ the tag scans are single forward passes (fleet-audit#1197) and
1431
+ `deepFindObject` / `deepCollectArrays` use an explicit stack, so a blob nested
1432
+ 50 000 deep does not overflow the call stack (fleet-audit#1296). `decodeHtmlEntities` decodes
1405
1433
  `&amp;` LAST so attribute-escaped JSON survives one level, and leaves a numeric
1406
1434
  reference that is not a character — out of range, or a lone surrogate
1407
1435
  (U+D800–U+DFFF) — verbatim, so it neither throws nor emits an unpaired UTF-16
@@ -1705,6 +1733,9 @@ turned up behaviour the first cut did not have:
1705
1733
  and for anything serving several users from one process, where a
1706
1734
  single-record file would hand one user's token to the next. Keys normalize
1707
1735
  trim+lowercase by default, because they are account identities, not origins.
1736
+ A file that does not parse to an object is moved to `<file>.corrupt` (warned
1737
+ on stderr) before the store starts empty, as `SessionStore` does — so one
1738
+ account's next save cannot erase every other account's record.
1708
1739
  Writes are whole-file read-modify-write, so two processes saving different
1709
1740
  keys at the same instant can drop one update — the loser re-authenticates
1710
1741
  rather than reading anything wrong, which is the right trade for a credential
@@ -2185,6 +2216,8 @@ maps every outcome onto the package's existing error types:
2185
2216
  | non-JSON 4xx/5xx | `UpstreamHttpError` (redacted `formatApiError` excerpt) |
2186
2217
  | non-JSON or empty 2xx, or no `data` | `GraphqlResponseError` ("usually a challenge or error page") |
2187
2218
  | timeout (default 30 s, body read included) / dropped connection | `GraphqlTransportError` — `.timedOut`, `.outcomeUnknown` |
2219
+ | body over `maxResponseBytes` (default 16 MiB, `GRAPHQL_DEFAULT_MAX_RESPONSE_BYTES`; `Infinity` = off) | `ResponseTooLargeError` (`kind: 'too_large'`) — refused on `Content-Length` or cancelled mid-stream |
2220
+ | the `headers()` hook throws (a token refresh fails) | that error, untouched — nothing was sent, so it is never a transport error or outcome-unknown |
2188
2221
 
2189
2222
  `mapError` claims a failure first (e.g. "FORBIDDEN is a permission denial");
2190
2223
  `execute()` returns the envelope instead of throwing on `errors[]`, for raw
@@ -2229,9 +2262,20 @@ walks the DOM: block boundaries (`<p>`, `<li>`, `<td>`, `<br>`, …) become word
2229
2262
  breaks, inline markup stays joined (`<b>F</b>ree` → `Free`), `<script>` /
2230
2263
  `<style>` / JSON-LD / `<noscript>` / `<template>` / `<iframe>` / `<svg>` content
2231
2264
  is dropped, and every named entity decodes — use it for article, post and
2232
- message bodies. `extractPlainTextFromHtml` is the older dependency-free regex
2233
- pass (every tag becomes a space, so `<b>F</b>ree` → `F ree`; a short entity
2234
- table); it is unchanged so existing callers' output does not shift.
2265
+ message bodies. `extractPlainTextFromHtml` is the older dependency-free pass
2266
+ (every tag becomes a space, so `<b>F</b>ree` → `F ree`; entities through
2267
+ `decodeHtmlEntities`, the same table as `scrape`); its output is unchanged for
2268
+ existing callers.
2269
+
2270
+ Both are linear on hostile input. `extractPlainTextFromHtml` strips tags with a
2271
+ forward scan, not `/<[^>]+>/g` (quadratic on a withheld `>`: 14 s on 200 KB).
2272
+ The DOM helpers (`htmlToReadableText`, `parsePropertyTable`,
2273
+ `findLinksUnderHeading`) bound node-html-parser's unclosed-tag repair, which is
2274
+ superlinear (8000 unclosed `<div>` took 23 s): past
2275
+ `HTML_UNCLOSED_REPAIR_MAX` (500) never-closed elements, those opening tags are
2276
+ cut from the source first — the same tree the parser's repair would build, in
2277
+ one linear pass (fleet-audit#1197). There is no size cap; a 2 MB well-formed
2278
+ page parses in well under 100 ms.
2235
2279
 
2236
2280
  ### `netguard` — SSRF guard for third-party URLs *(subpath, optional peer)*
2237
2281
 
@@ -2345,10 +2389,39 @@ exit code unless you pass `--strict`**:
2345
2389
  (`server.mcp_config.env` + `user_config`), `server.json`
2346
2390
  (`packages[].environmentVariables`) and `.mcp.json`: undeclared reads, dead
2347
2391
  declarations, a var marked required that the code only reads optionally, a
2348
- `user_config` entry nothing passes to the server, and a cwd-relative script
2349
- path in `.mcp.json` (anchor it with `${CLAUDE_PLUGIN_ROOT}`). `MCP_*` keys
2350
- (this library's own knobs) and runtime vars (`NODE_ENV`, `HOME`, …) are
2351
- ignored. A key built at runtime (`` readEnvVar(`${P}_TOKEN`) ``) is invisible.
2392
+ `user_config` entry nothing passes to the server, and the
2393
+ `${CLAUDE_PLUGIN_ROOT}` rule below. `MCP_*` keys (this library's own knobs)
2394
+ and runtime vars (`NODE_ENV`, `HOME`, …) are ignored. A key built at runtime
2395
+ (`` readEnvVar(`${P}_TOKEN`) ``) is invisible.
2396
+
2397
+ The `${CLAUDE_PLUGIN_ROOT}` rule follows the MCP config the **plugin actually
2398
+ uses**, because Claude Code defines `CLAUDE_PLUGIN_ROOT` only for a plugin
2399
+ install: a project-scoped `.mcp.json` that uses it launches `node /dist/…`
2400
+ and the server dies at startup (office-outlook-mcp; tempo-api-mcp regressed by
2401
+ following an earlier version of this lint). `.claude-plugin/plugin.json`
2402
+ `mcpServers` is resolved against the plugin root (the directory holding
2403
+ `.claude-plugin/`):
2404
+
2405
+ | `mcpServers` | Plugin config | Root `.mcp.json` | Warns on |
2406
+ | --- | --- | --- | --- |
2407
+ | `"./.mcp.json"` | the root `.mcp.json` | plugin config | a cwd-relative path in it |
2408
+ | absent | the root `.mcp.json` (Claude Code's default) | plugin config | a cwd-relative path in it |
2409
+ | another path, e.g. `"./.claude-plugin/mcp.json"` | that file | project-scoped | a cwd-relative path in that file; `${CLAUDE_PLUGIN_ROOT}` in the root file; a path that does not exist |
2410
+ | inline object (or an array mixing shapes) | the inline servers (and any named files) | project-scoped unless the array names it | a cwd-relative path inline; `${CLAUDE_PLUGIN_ROOT}` in the root file |
2411
+ | `mcp` instead (any value) | ignored by Claude Code, so the root `.mcp.json` | resolved as if `mcpServers` held the same value | always `plugin-json-mcp-ignored`: softer for `"./.mcp.json"`, stronger for any other path |
2412
+
2413
+ `mcp` is not a key Claude Code reads (`claude plugin validate`: "Unknown field
2414
+ 'mcp'"), so every `mcp` key is reported as `plugin-json-mcp-ignored` (a
2415
+ warning; an error only under `--strict`). `"mcp": "./.mcp.json"` names the
2416
+ default anyway, so its message says it is harmless today but should be
2417
+ renamed to `mcpServers` — copies of the key with other paths broke plugin
2418
+ installs. Any other `mcp` value is resolved as the author meant (so the root
2419
+ file is not told to use the variable) and reported more strongly, because a
2420
+ plugin install really loads the root `.mcp.json`. `.mcpb`/`.dxt` bundles and URLs are skipped. One
2421
+ case is not checked: Claude Code loads the root `.mcp.json` first and merges
2422
+ the declared config over it, so a project-scoped root server whose name the
2423
+ plugin config does not replace also starts in a plugin install whose source
2424
+ ships that file.
2352
2425
 
2353
2426
  The env check reads every `.js`/`.mjs`/`.cjs` under the entry's directory,
2354
2427
  skipping `node_modules`, dot-directories, `test`/`tests`/`__tests__`,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
@@ -321,7 +321,11 @@ const GOOGLE_OAUTH_TOKEN_RE = /(?<![A-Za-z0-9+/])(?:ya29\.|1\/\/)[A-Za-z0-9._-]{
321
321
  // A PKCE `code_verifier` (and Canvas's bare `?verifier=` file capability) is a
322
322
  // bearer secret: whoever holds it can complete the exchange or fetch the file
323
323
  // (fleet audit library-candidates §16 — canvas-parent #380 quoted one in a 404).
324
- const QUERY_SECRET_RE = new RegExp(`([?&](?:(?:access|refresh|id|auth|session|csrf|xsrf)[_-]?token|client[_-]?secret|api[_-]?secret|api[_-]?key|password|passwd|signature|token|key|sig|(?:code[_-]?)?verifier|(?:php|j)?sess(?:ion)?[_-]?id|sid|x[-_]${HEADER_NAME_RUN}?(?:api[-_]?key|token|secret|auth)${HEADER_NAME_RUN})=)[^&#\\s"'<>\`]+`, 'gi');
324
+ // The anchor also takes `#` and `;`: an OAuth implicit-grant redirect carries
325
+ // its token in the FRAGMENT (`…/cb#access_token=…`), and `;name=value` path
326
+ // params carry them too; `api_token` (Pipedrive/Todoist-style), bare `secret`
327
+ // and bare `auth` are credential params as well (fleet-audit#1297).
328
+ const QUERY_SECRET_RE = new RegExp(`([?&#;](?:(?:access|refresh|id|auth|session|csrf|xsrf|api)[_-]?token|client[_-]?secret|api[_-]?secret|api[_-]?key|password|passwd|signature|secret|token|auth|key|sig|(?:code[_-]?)?verifier|(?:php|j)?sess(?:ion)?[_-]?id|sid|x[-_]${HEADER_NAME_RUN}?(?:api[-_]?key|token|secret|auth)${HEADER_NAME_RUN})=)[^&#\\s"'<>\`]+`, 'gi');
325
329
  // An OAuth authorization code (`?code=…` on a redirect). Only values of 16+
326
330
  // characters: real authorization codes are long opaque strings, while a short
327
331
  // `code=E123` is an error/status code worth keeping for diagnosis.
@@ -373,6 +377,7 @@ const JSON_SECRET_KEYS = [
373
377
  'api[_-]?secret',
374
378
  '(?:x[_-])?api[_-]?key',
375
379
  'private[_-]?key',
380
+ 'aws[_-]?secret[_-]?access[_-]?key', // fleet-audit#1297
376
381
  'code[_-]?verifier', // PKCE; a bare `verifier` key is too generic for JSON
377
382
  `x[_-]${HEADER_NAME_RUN}?(?:api[_-]?key|token|secret|auth)${HEADER_NAME_RUN}`, // bounded like HEADER_SECRET_RE
378
383
  '(?:proxy-)?authorization',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,6 @@ export declare function readFileHead(path: string, bytes: number, opts?: ReadFil
41
41
  export * from './output.js';
42
42
  export { assertPathWithinRoots } from './confine.js';
43
43
  export { bytesMatchMime, sniffMimeBytes } from './magic.js';
44
- export { FileWriteRefusedError, writeFileSafe, writeUniqueFile, type FileWriteRefusal, type WriteFileSafeOptions, type WriteUniqueFileOptions, } from './write.js';
44
+ export { FileWriteRefusedError, isSafeExtension, writeFileSafe, writeUniqueFile, type FileWriteRefusal, type WriteFileSafeOptions, type WriteUniqueFileOptions, } from './write.js';
45
45
  export { UploadRefusedError, vetUploadFile, type UploadRefusal, type VetUploadOptions, type VettedUpload, } from './upload-guard.js';
46
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fs/index.ts"],"names":[],"mappings":"AAgBA,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CActF;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB/G;AAED,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fs/index.ts"],"names":[],"mappings":"AAgBA,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CActF;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB/G;AAED,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC"}
package/dist/fs/index.js CHANGED
@@ -68,6 +68,6 @@ export async function readFileHead(path, bytes, opts = {}) {
68
68
  export * from './output.js';
69
69
  export { assertPathWithinRoots } from './confine.js';
70
70
  export { bytesMatchMime, sniffMimeBytes } from './magic.js';
71
- export { FileWriteRefusedError, writeFileSafe, writeUniqueFile, } from './write.js';
71
+ export { FileWriteRefusedError, isSafeExtension, writeFileSafe, writeUniqueFile, } from './write.js';
72
72
  export { UploadRefusedError, vetUploadFile, } from './upload-guard.js';
73
73
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fs/index.ts"],"names":[],"mappings":"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"}
@@ -45,7 +45,8 @@ export declare function resolveOutputDir(perCall: string | undefined, envVar: st
45
45
  /**
46
46
  * A non-overwriting path for `base.ext` in `dir`: the bare name when free,
47
47
  * else `base-2.ext`, `base-3.ext`, … (gemini's numbering). `ext` is passed
48
- * without the dot. `base` is sanitized to a single path component so a `../…`
48
+ * without the dot and must pass {@link isSafeExtension} (a `TypeError`
49
+ * otherwise). `base` is sanitized to a single path component so a `../…`
49
50
  * stem can't write outside `dir`.
50
51
  *
51
52
  * Check-then-use: the name can be taken (or a symlink planted there) between
@@ -53,6 +54,26 @@ export declare function resolveOutputDir(perCall: string | undefined, envVar: st
53
54
  * {@link writeBinaryOutput}, which claim the name with an exclusive create.
54
55
  */
55
56
  export declare function uniquePath(dir: string, base: string, ext: string): string;
57
+ /** Options for {@link extensionForMime}. */
58
+ export interface ExtensionForMimeOptions {
59
+ /** The URL the bytes came from; its path's extension is the second fallback. */
60
+ url?: string;
61
+ /** What to return when nothing else fits. Default `'bin'`. Must pass {@link isSafeExtension}. */
62
+ fallback?: string;
63
+ }
64
+ /**
65
+ * The file extension (no dot) for a MIME type: the known-type table (`image/
66
+ * jpeg` → `jpg`, `video/quicktime` → `mov`, …; parameters and case ignored),
67
+ * else the subtype when it is a plain 1–5 character `[a-z0-9]` word (an `x-`
68
+ * prefix dropped: `image/x-icon` → `icon`), else the extension of `opts.url`'s
69
+ * path when it has a plain one, else `opts.fallback` (`'bin'`). The result
70
+ * always passes {@link isSafeExtension}, so it can go straight to
71
+ * `writeUniqueFile` / `writeBinaryOutput` — whatever the upstream's
72
+ * Content-Type said (fleet-audit#1301, #1303).
73
+ *
74
+ * @throws {TypeError} when `opts.fallback` is not a safe extension.
75
+ */
76
+ export declare function extensionForMime(mime: string | null | undefined, opts?: ExtensionForMimeOptions): string;
56
77
  /** Options for {@link writeBinaryOutput}. */
57
78
  export interface WriteBinaryOutputOptions {
58
79
  /** Directory to write into (already resolved — see {@link resolveOutputDir}). */
@@ -63,14 +84,16 @@ export interface WriteBinaryOutputOptions {
63
84
  base64: string;
64
85
  /** MIME type used to derive the extension when `extension` is not given. */
65
86
  mimeType?: string;
66
- /** Explicit extension (no dot); overrides the MIME lookup. */
87
+ /** Explicit extension (no dot); overrides the MIME lookup. Must pass {@link isSafeExtension}. */
67
88
  extension?: string;
68
89
  /** File mode for the new file (before umask), e.g. `0o600`. Default `0o666`. */
69
90
  mode?: number;
70
91
  }
71
92
  /**
72
93
  * Decode `base64` and write it to a **non-overwriting** file in `dir`, deriving
73
- * the extension from `extension` → the MIME type → `'bin'`. Returns the
94
+ * the extension from `extension` (which must pass {@link isSafeExtension}; a
95
+ * `TypeError` otherwise) → {@link extensionForMime} of the MIME type (→
96
+ * `'bin'`). Returns the
74
97
  * absolute path written. The caller returns that path from the tool result
75
98
  * (with an `inline` flag for base64 via `imageResult` when the user asks).
76
99
  *
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/fs/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAK5E,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,8DAA8D;IAC9D,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,iEAAiE;IACjE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,uBAA4B,GACjC,MAAM,CAaR;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQzE;AAkBD,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAGxE"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/fs/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAK5E,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,8DAA8D;IAC9D,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,iEAAiE;IACjE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,uBAA4B,GACjC,MAAM,CAaR;AAiBD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASzE;AA6CD,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,uBAA4B,GAAG,MAAM,CAkB5G;AAED,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAGxE"}
package/dist/fs/output.js CHANGED
@@ -17,7 +17,7 @@ import { join } from 'node:path';
17
17
  import { expandPath, readEnvVar } from '../config/index.js';
18
18
  import { McpToolError } from '../errors/index.js';
19
19
  import { assertPathWithinRoots } from './confine.js';
20
- import { sanitizeBaseName, writeUniqueFileSync } from './write.js';
20
+ import { assertSafeExtension, isSafeExtension, sanitizeBaseName, writeUniqueFileSync } from './write.js';
21
21
  /**
22
22
  * Resolve the directory a binary-output tool should write into:
23
23
  * the per-call argument → the named env var → `~/Downloads/<name>` (when
@@ -65,7 +65,8 @@ function defaultOutputDir(envVar, name) {
65
65
  /**
66
66
  * A non-overwriting path for `base.ext` in `dir`: the bare name when free,
67
67
  * else `base-2.ext`, `base-3.ext`, … (gemini's numbering). `ext` is passed
68
- * without the dot. `base` is sanitized to a single path component so a `../…`
68
+ * without the dot and must pass {@link isSafeExtension} (a `TypeError`
69
+ * otherwise). `base` is sanitized to a single path component so a `../…`
69
70
  * stem can't write outside `dir`.
70
71
  *
71
72
  * Check-then-use: the name can be taken (or a symlink planted there) between
@@ -73,6 +74,7 @@ function defaultOutputDir(envVar, name) {
73
74
  * {@link writeBinaryOutput}, which claim the name with an exclusive create.
74
75
  */
75
76
  export function uniquePath(dir, base, ext) {
77
+ assertSafeExtension(ext, 'uniquePath');
76
78
  const safe = sanitizeBaseName(base);
77
79
  const first = join(dir, `${safe}.${ext}`);
78
80
  if (!existsSync(first))
@@ -83,24 +85,87 @@ export function uniquePath(dir, base, ext) {
83
85
  return candidate;
84
86
  }
85
87
  }
86
- /** Extensions for the MIME types the fleet's binary tools emit. */
88
+ /**
89
+ * Extensions for the MIME types the fleet's binary tools emit — the union of
90
+ * mcp-utils' own table and the ones gemini-mcp (`mediaExt`), concur-mcp
91
+ * (`extensionForMime`) and splitwise-mcp (`extensionFor`) hand-rolled.
92
+ */
87
93
  const MIME_EXT = {
88
94
  'image/png': 'png',
89
95
  'image/jpeg': 'jpg',
96
+ 'image/jpg': 'jpg',
97
+ 'image/pjpeg': 'jpg',
90
98
  'image/webp': 'webp',
91
99
  'image/gif': 'gif',
92
100
  'image/heic': 'heic',
101
+ 'image/heif': 'heif',
93
102
  'image/avif': 'avif',
103
+ 'image/tiff': 'tif',
104
+ 'image/bmp': 'bmp',
105
+ 'image/svg+xml': 'svg',
94
106
  'application/pdf': 'pdf',
95
107
  'application/json': 'json',
96
108
  'application/zip': 'zip',
109
+ 'application/gzip': 'gz',
110
+ 'text/plain': 'txt',
111
+ 'text/csv': 'csv',
112
+ 'text/html': 'html',
113
+ 'text/calendar': 'ics',
97
114
  'audio/midi': 'mid',
115
+ 'audio/mpeg': 'mp3',
116
+ 'audio/mp3': 'mp3',
117
+ 'audio/wav': 'wav',
118
+ 'audio/wave': 'wav',
119
+ 'audio/x-wav': 'wav',
120
+ 'audio/ogg': 'ogg',
121
+ 'audio/webm': 'webm',
122
+ 'audio/mp4': 'm4a',
98
123
  'video/mp4': 'mp4',
99
124
  'video/quicktime': 'mov',
125
+ 'video/webm': 'webm',
100
126
  };
127
+ /** A MIME subtype or URL extension short and plain enough to use as-is. */
128
+ const PLAIN_EXT = /^[a-z0-9]{1,5}$/;
129
+ /**
130
+ * The file extension (no dot) for a MIME type: the known-type table (`image/
131
+ * jpeg` → `jpg`, `video/quicktime` → `mov`, …; parameters and case ignored),
132
+ * else the subtype when it is a plain 1–5 character `[a-z0-9]` word (an `x-`
133
+ * prefix dropped: `image/x-icon` → `icon`), else the extension of `opts.url`'s
134
+ * path when it has a plain one, else `opts.fallback` (`'bin'`). The result
135
+ * always passes {@link isSafeExtension}, so it can go straight to
136
+ * `writeUniqueFile` / `writeBinaryOutput` — whatever the upstream's
137
+ * Content-Type said (fleet-audit#1301, #1303).
138
+ *
139
+ * @throws {TypeError} when `opts.fallback` is not a safe extension.
140
+ */
141
+ export function extensionForMime(mime, opts = {}) {
142
+ const fallback = opts.fallback ?? 'bin';
143
+ assertSafeExtension(fallback, 'extensionForMime');
144
+ const type = (mime ?? '').split(';', 1)[0].trim().toLowerCase();
145
+ const known = MIME_EXT[type];
146
+ if (known !== undefined)
147
+ return known;
148
+ const slash = type.indexOf('/');
149
+ const subtype = slash > 0 && type.indexOf('/', slash + 1) < 0 ? type.slice(slash + 1).replace(/^x-/, '') : '';
150
+ if (PLAIN_EXT.test(subtype))
151
+ return subtype;
152
+ if (opts.url !== undefined) {
153
+ try {
154
+ const fromUrl = /\.([a-z0-9]{1,5})$/i.exec(new URL(opts.url).pathname)?.[1]?.toLowerCase();
155
+ if (fromUrl !== undefined && isSafeExtension(fromUrl))
156
+ return fromUrl;
157
+ }
158
+ catch {
159
+ // Not a URL: no extension to read from it.
160
+ }
161
+ }
162
+ return fallback;
163
+ }
101
164
  /**
102
165
  * Decode `base64` and write it to a **non-overwriting** file in `dir`, deriving
103
- * the extension from `extension` → the MIME type → `'bin'`. Returns the
166
+ * the extension from `extension` (which must pass {@link isSafeExtension}; a
167
+ * `TypeError` otherwise) → {@link extensionForMime} of the MIME type (→
168
+ * `'bin'`). Returns the
104
169
  * absolute path written. The caller returns that path from the tool result
105
170
  * (with an `inline` flag for base64 via `imageResult` when the user asks).
106
171
  *
@@ -111,7 +176,7 @@ const MIME_EXT = {
111
176
  * write created its target outside `dir`.
112
177
  */
113
178
  export function writeBinaryOutput(opts) {
114
- const ext = opts.extension ?? (opts.mimeType ? MIME_EXT[opts.mimeType] : undefined) ?? 'bin';
179
+ const ext = opts.extension ?? extensionForMime(opts.mimeType);
115
180
  return writeUniqueFileSync(opts.dir, opts.baseName, ext, Buffer.from(opts.base64, 'base64'), opts.mode);
116
181
  }
117
182
  //# sourceMappingURL=output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/fs/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/fs/output.ts"],"names":[],"mappings":"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"}
@@ -65,13 +65,31 @@ export declare function writeFileSafe(path: string, bytes: Uint8Array, opts?: Wr
65
65
  * output directory. A stem that sanitizes away entirely falls back to `'file'`.
66
66
  */
67
67
  export declare function sanitizeBaseName(base: string): string;
68
+ /**
69
+ * Whether `ext` (no leading dot) is safe to append to a filename: 1–16
70
+ * characters of `A-Z a-z 0-9 . _ -`, starting with a letter or digit — so no
71
+ * path separator, no leading dot, no `..` component, no control or reserved
72
+ * character. Multi-part extensions (`tar.gz`) pass.
73
+ */
74
+ export declare function isSafeExtension(ext: string): boolean;
75
+ /**
76
+ * Throw a `TypeError` unless {@link isSafeExtension}. The stem is sanitised,
77
+ * but an extension such as `/../../elsewhere/x` would otherwise be joined
78
+ * verbatim and write outside `dir` — past `allowedRoots` too, which confines
79
+ * only `dir` (fleet-audit#1303).
80
+ */
81
+ export declare function assertSafeExtension(ext: string, caller: string): void;
68
82
  /** Options for {@link writeUniqueFile}. */
69
83
  export interface WriteUniqueFileOptions {
70
84
  /** Directory to write into; created (recursively) if missing. */
71
85
  dir: string;
72
86
  /** Filename stem (no extension); sanitized to one path component. */
73
87
  baseName: string;
74
- /** Extension, without the dot. */
88
+ /**
89
+ * Extension, without the dot. Must pass {@link isSafeExtension} (a
90
+ * `TypeError` otherwise); derive one from a MIME type with
91
+ * `extensionForMime`.
92
+ */
75
93
  extension: string;
76
94
  bytes: Uint8Array;
77
95
  /** As {@link WriteFileSafeOptions.mode}. */
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/fs/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAWjD;CACF;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAkDD;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBrH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAUD,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBnF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBxH"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/fs/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAWjD;CACF;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAkDD;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBrH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMrE;AAUD,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBnF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBxH"}
package/dist/fs/write.js CHANGED
@@ -139,6 +139,27 @@ export function sanitizeBaseName(base) {
139
139
  .trim();
140
140
  return safe.length > 0 ? safe : 'file';
141
141
  }
142
+ const SAFE_EXTENSION = /^[A-Za-z0-9][A-Za-z0-9._-]{0,15}$/;
143
+ /**
144
+ * Whether `ext` (no leading dot) is safe to append to a filename: 1–16
145
+ * characters of `A-Z a-z 0-9 . _ -`, starting with a letter or digit — so no
146
+ * path separator, no leading dot, no `..` component, no control or reserved
147
+ * character. Multi-part extensions (`tar.gz`) pass.
148
+ */
149
+ export function isSafeExtension(ext) {
150
+ return SAFE_EXTENSION.test(ext);
151
+ }
152
+ /**
153
+ * Throw a `TypeError` unless {@link isSafeExtension}. The stem is sanitised,
154
+ * but an extension such as `/../../elsewhere/x` would otherwise be joined
155
+ * verbatim and write outside `dir` — past `allowedRoots` too, which confines
156
+ * only `dir` (fleet-audit#1303).
157
+ */
158
+ export function assertSafeExtension(ext, caller) {
159
+ if (!isSafeExtension(ext)) {
160
+ throw new TypeError(`${caller}: extension must be 1-16 characters of A-Z a-z 0-9 . _ - starting with a letter or digit, got ${JSON.stringify(ext)}.`);
161
+ }
162
+ }
142
163
  /** The n-th candidate name: `base.ext`, then `base-2.ext`, `base-3.ext`, … */
143
164
  function candidate(dir, safeBase, ext, n) {
144
165
  return join(dir, n === 1 ? `${safeBase}.${ext}` : `${safeBase}-${n}.${ext}`);
@@ -156,6 +177,7 @@ const DEFAULT_MAX_ATTEMPTS = 1000;
156
177
  * `allowedRoots`; `exists` after `maxAttempts` taken names.
157
178
  */
158
179
  export async function writeUniqueFile(opts) {
180
+ assertSafeExtension(opts.extension, 'writeUniqueFile');
159
181
  const dir = confine(opts.dir, opts.allowedRoots);
160
182
  await mkdir(dir, { recursive: true });
161
183
  // Re-check now it exists, in case a component was swapped for a symlink.
@@ -180,6 +202,7 @@ export async function writeUniqueFile(opts) {
180
202
  * `writeBinaryOutput`. Not exported from the package.
181
203
  */
182
204
  export function writeUniqueFileSync(dir, baseName, ext, bytes, mode) {
205
+ assertSafeExtension(ext, 'writeBinaryOutput');
183
206
  mkdirSync(dir, { recursive: true });
184
207
  const safe = sanitizeBaseName(baseName);
185
208
  for (let n = 1;; n++) {