Skip to content

build: upgrade bcrypt to v6 - #105

Closed
agentHits wants to merge 1 commit into
AgentHits-Devfrom
build/bcrypt-v6
Closed

agentHits wants to merge 1 commit into
AgentHits-Devfrom
build/bcrypt-v6

Conversation

@agentHits

Copy link
Copy Markdown
Collaborator

Зачем

Мажорное обновление bcrypt 5.1.1 → 6.0.0 (релиз 2025-05-11) и @types/bcrypt 5.0.2 → 6.0.0 (2025-07-19), часть второй волны мажорных обновлений.

По release notes в bcrypt 6:

  • node-pre-gyp, который скачивал бинарник при установке, заменён готовыми N-API сборками внутри пакета (prebuilds/: linux x64/arm64/arm в вариантах glibc и musl, darwin, win32). Их загружает node-gyp-build.
  • Поддержка старых версий Node прекращена.

Вместе с node-pre-gyp из дерева уходит старая цепочка npmlog, gauge, rimraf@3, glob@7, tar@6.

Что изменилось

  • apps/dokploy/package.json, packages/server/package.json: bcrypt 6.0.0 и @types/bcrypt 6.0.0, точные версии, одинаковые в обоих пакетах.
  • bun.lock: убрано дерево @mapbox/node-pre-gyp. node-addon-api теперь одной версии 8.9.2 (раньше 5.1.0 и вложенные 8.9.2).
  • Новый тест apps/dokploy/__test__/security/bcrypt-hash-compat.test.ts:
    • compare и compareSync в v6 принимают хэши, созданные bcrypt 5.1.1: $2b$ cost 10 (пароль входа), $2b$ cost 12 (супер-пароль) и $2a$.
    • hash по-прежнему выдаёт $2b$. Этот формат понимает basic auth Traefik.
  • Код приложения не менялся: API hash, compare, hashSync и compareSync прежний.
  • Dockerfile не менялся. Нативный модуль загружается в образе так:
    • стадия prod-deps ставит hoisted node_modules вместе с prebuilds/;
    • скрипт install (node-gyp-build) только находит готовую сборку, ему не нужны ни сеть, ни компилятор;
    • bcrypt входит в список пакетов, которым bun по умолчанию доверяет скрипты, поэтому trustedDependencies не нужен. В bun pm untrusted его нет;
    • Next держит bcrypt внешним пакетом (встроенный список serverExternalPackages), а esbuild-конфиги используют packages: "external". Поэтому поиск prebuilds через __dirname не ломается при сборке.

Проверки

  • bun install --frozen-lockfile до и после обновления.
  • bun run typecheck: все 4 пакета без ошибок.
  • __test__/security: 350/350. Первый прогон дал один таймаут под нагрузкой, два повторных прошли чисто.
  • Полный набор vitest: 4289 пройдено. backups/backup-files.test.ts упал один раз под нагрузкой, отдельно проходит 14/14. С bcrypt этот тест не связан.
  • bunx biome check по изменённым файлам.
  • bun audit --audit-level=moderate: уязвимостей нет.
  • Биндинг загружается под Node 24.22.1 локально (darwin-arm64), hashSync/compareSync работают.
  • next build и сборка образа локально не запускались. Их проверят CI-джобы, включая main-image-smoke.

Что проверить вручную на dev

  • Вход в панель существующим пользователем с паролем.
  • Ввод супер-пароля для защищённого действия.
  • Сервис с basic auth (Security в настройках приложения) по-прежнему пускает по своему логину и паролю. Добавить новое правило basic auth и проверить, что оно тоже работает.
  • В логах контейнера при старте нет ошибок загрузки bcrypt.node.

🤖 Generated with Claude Code

Что: bcrypt 5.1.1 -> 6.0.0 и @types/bcrypt 5.0.2 -> 6.0.0 (точные версии)
в apps/dokploy и packages/server. Из lock ушло дерево @mapbox/node-pre-gyp,
node-addon-api свёлся к одной версии 8.9.2. Добавлен тест
__test__/security/bcrypt-hash-compat.test.ts с хэшами, сделанными bcrypt 5.1.1.

Зачем: bcrypt 6 больше не скачивает бинарник через node-pre-gyp при
установке, а поставляет готовые N-API сборки внутри пакета (prebuilds/,
включая linux-x64 glibc) и грузит их через node-gyp-build. Минус
устаревшая цепочка зависимостей (npmlog, gauge, rimraf 3, glob 7, tar 6).

Риски: нативный модуль. Скрипт install (node-gyp-build) только находит
готовую сборку, сеть и компилятор не нужны; bcrypt есть в списке пакетов,
которым bun доверяет по умолчанию. Next держит bcrypt внешним пакетом,
esbuild-конфиги собирают с packages: external, поэтому поиск prebuilds
через __dirname не ломается. Dockerfile не менялся: prod-deps ставит
hoisted node_modules вместе с prebuilds. Формат хэшей прежний ($2b$).

Проверки: bun install --frozen-lockfile, bun run typecheck, тесты
__test__/security (350/350), полный набор (один нестабильный тест
backups/backup-files под нагрузкой, отдельно проходит), biome check,
bun audit --audit-level=moderate. Загрузка биндинга под Node 24.22.1
локально (darwin-arm64). Образ проверит main-image-smoke в CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@agentHits

Copy link
Copy Markdown
Collaborator Author

Влито в составе #108 одним PR, чтобы вся вторая волна вышла одной версией. Этот PR закрываю без слияния, его коммит есть в #108.

@agentHits agentHits closed this Oct 27, 2026
@agentHits
agentHits deleted the build/bcrypt-v6 branch October 27, 2026 18:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant