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

69 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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-Key`**break → фейл-фаст, БЕЗ спина**
(до фикса — бесконечный while(true) ~75 req/сек, инцидент 2026-08-23).
- Расписания с корректным `data.idSeller` (slovo=2, bookva=1) заглушек вообще не
касаются — ходят только своим продавцом.
## Verify (если кто-то засомневается)
```sql
-- 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).