Skip to content

API-аудит 2026-08-06 и вход в CLI через браузер - #275

Merged
lookinway merged 1 commit into
mainfrom
cli-oauth-login
Aug 7, 2026
Merged

API-аудит 2026-08-06 и вход в CLI через браузер#275
lookinway merged 1 commit into
mainfrom
cli-oauth-login

Conversation

@lookinway

@lookinway lookinway commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Аудит API за 2026-08-05/06 и вход в CLI через браузер — одним релизом.

Аудит API

  • GET /chats — параметр archived и поле archived в объекте чата: архивные чаты стали доступны через API
  • POST /messages — неизвестное значение entity_type отвечает ошибкой валидации вместо отправки в случайный чат; регистр значения не учитывается
  • group_tags:read и user_status:read — права открыты сотрудникам и ботам
  • Журнал аудита: ключи bot_oauth_client_updated, oauth_authorization_granted, oauth_authorization_revoked и три модели деталей

oauth_client у ботов в спеку не едет, хотя живёт в проде. Задать параметры OAuth-клиента имеет смысл только чтобы построить «Вход через Пачку», а стороннему разработчику это недоступно: нет управления приложениями, нет списка выданных авторизаций, и сами ручки флоу мы по той же причине не документируем. Возвращается вместе с задачей [П1] этапа 2, когда контракт ботов переделывается целиком. Записано в PENDING_DOC_FIXES.

Вход в CLI

  • pachca auth login — вход через браузер по коду устройства; --token и PACHCA_TOKEN остаются для CI
  • Часовой токен продлевается сам, при параллельных процессах обновляет только один
  • auth logout гасит токен на сервере, а не только удаляет профиль
  • auth status — способ входа, остаток срока, выданные права и где лежит токен; --remote спрашивает права у сервера
  • auth login --token - читает токен из потока ввода, не оставляя секрет в истории оболочки
  • auth switch сразу говорит, если секрет не читается или срок истёк
  • doctor — отдельная проверка хранилища ключей; ни заблокированная связка, ни истёкший обновляемый токен больше не выдаются за недействительный
  • Отказ по правам объясняет причину: право отсутствует у токена либо его не даёт текущая роль

Хранение токена

Токен уходит в хранилище ключей ОС — Keychain, Secret Service, Диспетчер учётных данных. В файле конфигурации остаются только имя, почта и права. Касается обоих способов входа: вставленный токен хранится там же, и для него это важнее — он бессрочный.

Прав 600 на файле недостаточно: они закрывают доступ другим пользователям машины, но не коду, работающему от вашего имени, а сегодня это обычное дело — postinstall-скрипты, расширения редактора, агенты. Разбор рынка и обоснование — в бенчмарке проекта.

Нативный модуль подключён как optionalDependencies и загружается через createRequire: где хранилища нет (headless, контейнер, минимальный образ), CLI сохраняет токен в файл и говорит об этом при входе. Отказаться вручную — --insecure-storage или PACHCA_SECRET_STORE=file.

Приведение к clig.dev

Прошёл руководство целиком и починил, что расходилось:

  • Битая ссылка — подсказка «токен не найден» вела на несуществующую /guides/authorization, в трёх местах.
  • --help не вёл на документацию — добавлен футер со ссылкой и с pachca guide, после списка команд.
  • Не было раздела про удаление — написан, с неочевидным: npm uninstall не гасит токены и не чистит хранилище ключей, поэтому auth logout нужен до удаления пакета.
  • Две переменные окружения не документированыPACHCA_API_URL не упоминалась нигде, PACHCA_SECRET_STORE только вскользь.
  • Формат ошибок — выровнена финальная пунктуация; сообщения, где точку ставит сервер, оставлены как есть.
  • Оформление примеров — команда и её вывод в одном блоке, как в остальных гайдах CLI. У примеров с отказом по правам появилась команда, которая отказ вызывает.
  • Секрет флагом — в гайде первым идёт передача токена потоком ввода, аргумент показан следом, с оговоркой про историю оболочки.

Попутные починки

  • Гейт на список команд. Страница /guides/cli/commands теряла флаги, переопределяющие глобальные: auth login --token и --profile в неё не попадали. Фильтр исправлен, добавлен check-commands-coverage.mjs — сверяет манифест CLI со страницей в обе стороны, подключён в turbo check.
  • Правило разворачивания тела запроса жило в трёх копиях — генераторы CLI, n8n и примеров на странице метода. Синхронизированы; расхождение схлопывало пример bots create в один JSON-флаг.
  • Подписи в CHANGELOG CLI. Тип - подписывался как «Удалено», хотя в репозитории он означает исправление.
  • doctor проверял api.pachca.com вместо адреса из настроек.
  • Опрос токена переживает обрыв связи: чтение тела ответа не было обёрнуто, и сетевая икота убивала вход.
  • Гонка при продлении токена — потерянная гонка больше не выглядит как истёкшая сессия.

Версии

sdk 1.2.0, cli 2026.8.1, n8n 2.0.18.

Проверки

turbo build, turbo check, check-generated-sync, check-changelog-sync — зелёные. Отдельно прогнана сборка всех шести SDK (Go, Python, TypeScript, Kotlin, C#, Swift): turbo check её не покрывает, а мы трогали модели и union.

Тестов 2227.

Живьём на проде: вход через браузер, продление токена с сохранением прав, отзыв при выходе (тот же токен 200 до и 401 после), создание бота обеими формами тела, архивные чаты, отказ по правам на токене с ограниченным набором.

Три бэкендных бага, найденных по ходу и уже закрытых: BAK-3033 (продление выдавало токен без прав), BAK-3031 (самоотзыв отвечал 403), BAK-3037 (публичный /bots перестал принимать тело без обёртки).

@cursor

cursor Bot commented Aug 5, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@lookinway
lookinway force-pushed the cli-oauth-login branch 5 times, most recently from d230f9d to 45f7add Compare August 6, 2026 10:17
@lookinway lookinway changed the title CLI: вход подтверждением в браузере API-аудит 2026-08-05 и вход в CLI подтверждением в браузере Aug 6, 2026
@lookinway
lookinway force-pushed the cli-oauth-login branch 21 times, most recently from 26a53b6 to 7612115 Compare August 7, 2026 19:14
@lookinway lookinway changed the title API-аудит 2026-08-05 и вход в CLI подтверждением в браузере API-аудит 2026-08-06 и вход в CLI через браузер Aug 7, 2026
@lookinway
lookinway merged commit d1156c7 into main Aug 7, 2026
12 checks passed
@lookinway
lookinway deleted the cli-oauth-login branch August 7, 2026 19:22
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