Skip to content

v0.6.3

Choose a tag to compare

@github-actions github-actions released this 14 Aug 15:32
· 3 commits to main since this release
7d0d286

What's Changed

  • fix(config): сериализовать чтение-изменение-запись конфига by @RoboNET in #33
  • fix(config): переживать преходящий отказ переименования на Windows by @RoboNET in #36
  • fix(auth): сохранять ротированный refresh-токен by @RoboNET in #35
  • chore: release v0.6.3 by @github-actions[bot] in #37

Full Changelog: v0.6.2...v0.6.3


Что заметит скрипт

Номер версии патчевый, но наблюдаемое поведение в двух местах изменилось — если вы разбираете вывод yt строгой схемой, прочитайте это.

Появился новый отказ. Запись конфига теперь идёт под файловым локом (config.json.lock). Если лок занят другим процессом yt дольше таймаута, команда завершится с config_error (exit 9) там, где раньше запись всегда удавалась. Таймаут — 10 секунд, для записи после интерактивного входа — 60, для сохранения ротированного refresh-токена — 20.

Появилось новое предупреждение в stderr. Если ротированный refresh-токен не удалось сохранить, команда всё равно завершается успешно (access-токен уже получен), но в stderr печатается строка вида {"warning":{"code":"refresh_token_not_saved",...}}. Отличайте warning от error по корневому ключу: наличие такой строки не означает неуспех команды.

Зачем это всё

Три правки, все про креденшелы:

  • Конфиг больше не теряет параллельные правки. Читался целиком, менялся и писался целиком, без сериализации между процессами. У авто-перелогина окно равно длительности браузерного флоу — минуты, — и в него попадали в том числе ужесточения политик профиля: пользователь сузил права, а профиль возвращался к более широким, без единого сообщения.
  • Ротированный refresh-токен сохраняется. Раньше он подхватывался только на ветке перелогина, а на обычном обновлении отбрасывался. Если федерация ротирует токены при каждом обмене, сохранённый умирал после первого же обновления, и вместо тихого продления пользователь получал браузер.
  • Запись переживает преходящий отказ на Windows. Замена файла там конфликтует, если кто-то на мгновение держит его открытым — антивирус, индексатор, чужой процесс.

Попутно закрыты две вещи, каждая тяжелее исходной: общее фиксированное имя временного файла (две одновременные записи могли обрезать конфиг друг друга — порча креденшелов всех профилей; то же было в кеше токенов) и запись без сброса на диск.