Record outdated-deps and security-audit findings for the fork as of 2026-06-20 (pnpm outdated -r + pnpm audit --prod): 162 outdated entries, 50 major-behind, 51 vulnerabilities (16 high). Key finding: pnpm.overrides pin several packages to versions flagged by the audit (ws, undici, tmp, hono, protobufjs, dompurify) — cheapest fix is bumping the pins. Also flags direct-dep highs (@nestjs/platform-fastify auth middleware bypass, nodemailer, form-data, react-router-dom), risky majors to schedule separately (Mantine9/React19, Hocuspocus 4, CASL 7, TypeScript 6, zod 4, stripe), the deprecated @types/form-data, and @types/node drift across the workspace.
9.1 KiB
Обновление зависимостей: устаревшие версии и аудит безопасности
Статус: зафиксировано в беклоге, зависимости не менялись. Это снимок состояния
на дату проверки — список задач на обновление, а не баг. Бо́льшая часть версий
унаследована от upstream docmost/main, поэтому массовые бампы разумно делать
вместе с ребейзом на upstream, а мажорные апгрейды — отдельными задачами.
Методика
- Дата проверки: 2026-06-20, ветка форка
feat/ai-agent-roles. pnpm outdated -r(рекурсивно по воркспейсу: rootdocmost,server,client,@docmost/mcp,@docmost/editor-ext).pnpm audit --prod(+--json) — только прод-зависимости.- Итог: 162 устаревших записи, из них 50 отстают на мажор и больше; 51 уязвимость (16 high / 26 moderate / 8 low).
1. Безопасность — приоритет (51 уязвимость)
1.1. Самый дешёвый фикс: pnpm.overrides пинят УЯЗВИМЫЕ версии
В корневом package.json секция pnpm.overrides фиксирует ряд пакетов ровно на тех
версиях, на которые ругается pnpm audit. Достаточно поднять пины — код не трогаем.
| override (текущий пин) | advisory | severity | поднять до |
|---|---|---|---|
ws: 8.20.1 |
DoS из мелких фрагментов (<8.21.0) |
high | 8.21.0+ |
undici: 7.24.0 |
обход проверки TLS-сертификата (<7.28.0) |
high | 7.28.0+ |
tmp: 0.2.6 |
path traversal, обход _assertPath (<0.2.7) |
high | 0.2.7+ |
hono: 4.12.18 |
CORS отражает любой Origin с credentials (<4.12.25) |
high | 4.12.25+ |
protobufjs: 7.5.8 |
DoS через unbounded Any (<=7.6.0) |
high | 7.6.3+ |
dompurify: 3.4.1 |
мутация allowedTags в хуке (<3.4.7) |
moderate | 3.4.11 |
Важно:
dompurify— наш XSS-санитайзер, а override держит его на 3.4.1 (уязвимой), хотя в реестре уже 3.4.11. Это сводит на нет смысл санитайзера в части кейсов.
1.2. Прямые зависимости — фикс бампом версии
| пакет | у нас | где | advisory | severity | фикс |
|---|---|---|---|---|---|
@nestjs/platform-fastify |
^11.1.19 (резолв 11.1.19) |
server | обход middleware через trailing slash (<=11.1.23) |
high | поднять lockfile до 11.1.27 |
nodemailer |
^8.0.5 |
server | raw-опция обходит disableFileAccess (<=9.0.0) |
high | мажор 9.0.1 |
form-data |
^4.0.0 (резолв 4.0.5) |
@docmost/mcp | CRLF-инъекция (<4.0.6) |
high | обновить lockfile до 4.0.6 |
react-router-dom |
7.13.1 |
client | произвольный контент через turbo-stream (<=7.14.1); CSRF на PUT/PATCH/DELETE (<7.15.1) |
high + low | 7.15.1+ |
@nestjs/platform-fastify: middleware-bypass напрямую касается auth-цепочки — это самый «горящий» из прямых. Caret^11.1.19уже разрешает11.1.27, нужен только пересбор lockfile.
1.3. Транзитивные (через зависимости) — фикс через override или бамп родителя
fast-uri <=3.1.0(high, path traversal) — черезfastify.- Прочие moderate, всплывающие транзитивно:
markdown-it <=14.1.1(DoS),qs(DoS),uuid(bounds check),nanoid@^3(предсказуемость),@opentelemetry/core(unbounded memory),undici(cross-user disclosure),esbuild/@babel/core(low, только dev-сервер/сборка).
2. Очень старые — отставание на мажор (тех-долг)
2.1. Рискованные мажоры — каждый отдельной задачей с тестированием
| пакет | у нас | latest | замечание |
|---|---|---|---|
@mantine/* 8 → 9 + react/react-dom 18 → 19 + @types/react 18 → 19 |
8.3.18 / 18.3.1 | 9.3.2 / 19.2.7 | Это апгрейд из upstream PR #2293 (chore: migrate to Mantine 9 and React 19). Делать как у них: бамп + 3 паттерна (useRef(undefined), обёртка onChange, шим v8CssVariablesResolver). Затрагивает в т.ч. EE-компоненты. |
@hocuspocus/{provider,server,transformer} |
3.4.4 | 4.3.0 | Realtime-collab. Связано с y-prosemirror/yjs (на yjs уже есть патч patches/yjs@13.6.30.patch — учесть при бампе). upstream main тоже ещё на 3.x — координировать. |
@casl/ability 6 → 7, @casl/react 5 → 7 |
6.8.0 / 5.0.1 | 7.0.0 | Библиотека прав доступа (авторизация) — мажор требует аккуратной проверки правил CASL. |
typescript 5 → 6 |
5.9.3 | 6.0.3 | Мажор TS — глобально по трём пакетам, возможны новые ошибки типов. |
zod 3 → 4 |
3.25.76 | 4.4.3 | В @docmost/mcp; zod 4 ломающий. Критично, т.к. zod описывает схемы инструментов AI/MCP (см. бэклог ai-chat-tool-definitions-duplicated.md). |
stripe 17 → 22 |
17.7.0 | 22.2.2 | +5 мажоров (EE-биллинг). Если биллинг не используется — низкий приоритет, но разрыв самый большой. |
2.2. Тулинг и прочие мажоры (рутинно, пачкой)
eslint 9→10 + @eslint/js 9→10, nx/@nx/js 22→23, i18next 25→26 +
react-i18next 16→17 + i18next-http-backend 3→4, undici 7→8 (само приложение;
для security достаточно 7.28, мажор 8 — отдельно), nodemailer 8→9 (см. §1.2),
marked 17→18, msgpackr 1→2, diff 8→9, concurrently 9→10,
@atlaskit/pragmatic-drag-and-drop* 1→2/3 (DnD дерева), react-clear-modal 2→3,
jsdom 25/27→29 (dev/тесты), @casl (см. §2.1), плюс dev-types:
@types/node, @types/nodemailer 7→8, @types/supertest 6→7, @types/yauzl 2→3.
3. Deprecated и несогласованность
@types/form-data(2.5.2) — DEPRECATED. Пакетform-dataтеперь поставляет собственные типы. Зависимость в@docmost/mcpнужно удалить, а не обновлять.@types/nodeрассинхронизирован по воркспейсу:@docmost/mcp— 20.19,client— 22.19,server— 25.5 (latest 26). Привести к единой мажорной линии (по фактической версии Node в рантайме/Docker; вpackage.jsonполеenginesне задано — стоит зафиксировать).
4. Рекомендованный порядок работ
- Security-патч одной задачей (низкий риск): поднять пины в
pnpm.overrides(§1.1) + пересобрать lockfile для caret-зависимостей (§1.2: fastify-platform, form-data) +react-router-dom→ 7.15.1 +nodemailer→ 9. Прогнатьpnpm audit --prodдо нуля high/critical. Убрать@types/form-data. - Рутинные минор/патч-бампы (большинство из 162) — пачкой вместе с
ближайшим ребейзом на upstream
docmost/main. - Мажоры из §2.1 — каждый отдельной веткой/задачей с ручным тестом соответствующей подсистемы (редактор, collab, права, i18n, AI-схемы).
- Перепроверить, не конфликтуют ли бампы с локальными патчами
patches/yjs@13.6.30.patchиpatches/scimmy@1.3.5.patch— при смене версии путь патча (yjs@13.6.30) перестанет совпадать иpnpm installупадёт.
Оговорки
- Снимок версий быстро устаревает — перед работой повторить
pnpm outdated -rиpnpm audit --prod. - Многие «текущие» версии унаследованы от upstream; часть мажоров (Mantine9/React19, Hocuspocus 4) upstream ещё не сделал — есть смысл дождаться/подсмотреть их подход, чтобы не расходиться с веткой обновлений.