Files
admin/.wiki/concepts/sched-ozon-creds-stub-contract.md

4.1 KiB
Raw Blame History

title: sched-ozon-creds-stub-contract type: concept status: live tags: [books, sched, ozon, creds, tenant-split, anti-leak] related: books-vds, portainer-stack-management-books-vds

Sched Ozon creds stub contract (slovo/bookva)

Контракт кредов Ozon между двумя тенантами books на books VDS. Каждый стек ходит в Ozon только своими кредами: Slovo — client_id 94191, Bookva — client_id 50542. Мисматч-пары (client_id ↔ чужой ключ) в обеих БД — намеренные заглушки, НЕ баги и НЕ артефакты копирования. Зафиксировано владельцем 2026-08-23 после того, как .admin «починил» заглушку и вызвал инцидент.

Почему заглушки

Tenant-split (volume-copy) оставил ОБОИХ sellers в обеих БД. Если бы в каждой БД лежали рабочие ключи обоих кабинетов — любой стек мог бы ходить в Ozon под чужим кабинетом (утечка/перекос данных). Заглушка делает чужой кабинет недостижимым: Ozon отвечает Invalid Api-Key (code 5) на мисматч-пару.

Матрица (актуально 2026-08-23)

БД id_seller client_id api_key статус
slovo (books-db) 1 50542 968302d1-… (slovo-ключ) заглушка (мисматч)
slovo (books-db) 2 94191 968302d1-… (slovo-ключ) рабочий
bookva (bookva-db) 1 50542 ddc24146-… (bookva-ключ) рабочий
bookva (bookva-db) 2 94191 ddc24146-… (bookva-ключ) заглушка (мисматч)

Хэши SHA2 (проверка целостности): slovo-ключ = d6227b…, bookva-ключ = f700f3…. Оба ключа — штатные креды, живут в git (.slovo.cmd/.bookva.cmd обёртки packages/tools), не выдуманы.

Проверка Ozon API (2026-08-23): 94191 + slovo-ключ → 200 OK; 50542 + slovo-ключ → Invalid; 50542 + bookva-ключ → 200 OK.

Как это безопасно

  • Код-фикс 2a38fb5 (break в outer catch ozonFbsPostingsSyncronization.js) — задеплоен на оба task-runner 2026-08-23. all-sellers диспатч (data:null), упёршийся в заглушку → Invalid Api-Keybreak → фейл-фаст, БЕЗ спина (до фикса — бесконечный while(true) ~75 req/сек, инцидент 2026-08-23).
  • Расписания с корректным data.idSeller (slovo=2, bookva=1) заглушек вообще не касаются — ходят только своим продавцом.

Verify (если кто-то засомневается)

-- slovo: seller 1 должен быть 50542 + 968302d1 (заглушка)
SELECT id_seller, client_id, LEFT(api_key,8) FROM sellers ORDER BY id_seller;
-- bookva: seller 2 должен быть 94191 + ddc24146 (заглушка)

НЕ делать (guards)

  • НЕ «чинить» мисматч-пары — это контракт. «Починил» → slovo-стек начинает ходить в Ozon как Bookva → утечка.
  • Не трогать bookva-БД seller 1 (рабочий) и slovo-БД seller 2 (рабочий).
  • Изменение ключей — только через владельца кабинета (Ozon) + письмо books.

Инцидент-ссылка

2026-08-23: спин ozonFbsPostingsSyncronization (невалидный ключ + no-break код) → полный разбор в переписке books/.agents/inbox/ (отчёты .admin 10:22→12:50Z) и тасках books #974/#975/#977/#990/#991. Фоллоу-ап: документация runtime-контракта sched-тасок (file-managed перевод slovo сделан 12:50Z, коммит 887bbae).