npm Dependency Cooldown Calculator
Проверьте, прошло ли достаточно времени с релиза npm-пакета, чтобы безопасно его обновлять — по дефолтной модели cooldown из GitHub Dependabot.
Как это работает
Атаки на npm-экосистему в 2026 году (Shai-Hulud, компрометация Mastra AI, AsyncAPI) показали одну и ту же схему: злоумышленник получает доступ к аккаунту мейнтейнера и публикует вредоносную версию пакета, которая расходится по проектам за считаные минуты — просто потому, что автообновления подхватывают новый релиз мгновенно. GitHub отреагировал на это изменением поведения Dependabot: с июля 2026 года version updates по умолчанию ждут минимум 3 дня с момента релиза пакета, прежде чем открыть PR на обновление. Это окно называется cooldown.
Идея простая: большинство вредоносных релизов обнаруживают и снимают с регистрации в течение первых часов-дней после публикации — исследователи безопасности, автоматические сканеры реестра (Socket, Aikido и другие) и сообщество быстро находят подозрительную активность. Если вы не бросаетесь обновляться в первую минуту, вы с высокой вероятностью успеваете пропустить волну до того, как вредоносный код попадёт в ваш билд.
Этот калькулятор не обращается к npm registry и не проверяет реальные даты релизов автоматически — он считает разницу между указанной вами датой релиза и текущей датой, сравнивает с заданным окном cooldown (по умолчанию 3 дня, как у Dependabot) и говорит, безопасно ли обновляться прямо сейчас или стоит подождать. Обработка полностью в браузере — ни списки пакетов, ни версии никуда не отправляются.
Частые вопросы
Почему именно 3 дня, а не 7 или 14?
3 дня — это дефолт, который выбрал GitHub для Dependabot version updates с июля 2026 года. Некоторые security-исследователи (например, William Woodruff) рекомендуют более консервативное окно 7-14 дней для критичных зависимостей — калькулятор позволяет задать любое значение через поле cooldownDays.
Это защищает от всех supply chain атак?
Нет. Cooldown снижает риск от атак, которые полагаются на скорость распространения (типичная схема Shai-Hulud и подобных worm-кампаний), но не защищает от таргетированных атак на конкретный проект, от компрометации через install-скрипты у пакетов, которые уже прошли cooldown, или от атак на CI/CD пайплайн напрямую. Это один слой защиты, а не единственный.
Где взять дату релиза пакета?
На странице пакета на npmjs.com во вкладке Versions, или через npm view <пакет> time --json в терминале, который вернёт даты публикации всех версий.
Чем это отличается от --ignore-scripts или allowScripts?
Это разные, дополняющие друг друга механизмы. allowScripts и --ignore-scripts контролируют, какой код выполняется при установке пакета. Cooldown контролирует, когда вы вообще берёте новую версию пакета — независимо от того, есть ли в ней install-скрипты.