fix: translate permanent invalid-token errors on online entrypoints (WealthLedger/backend#59) #110

Merged
codex-bot merged 1 commits from fix/59-online-invalid-token-translation into develop 2026-10-16 23:23:12 +03:00
Owner

Refs WealthLedger/backend#59

Что

Первый upstream UNAUTHENTICATED/PERMISSION_DENIED на online search/detail/ticker/company/screener теперь возвращает 400 / INVALID_TBANK_TOKEN вместо 500. Временная недоступность остаётся 503 / TBANK_UNAVAILABLE.

TbankAccessService.onlineToken и current заменены одним online(userId, run): он берёт токен и выполняет run внутри существующего translateInvalidToken. Токен вне замыкания получить нельзя, поэтому новый online-вызов не сможет обойти перевод. Новых классов ошибок и зависимостей нет.

Не затронуто

  • Durable-ветки (tokenForAttempt, rejectMembershipToken, их catches) и attempt-aware invalidation.
  • Current-revision isolation: revision по-прежнему приходит из того же чтения connection.
  • Online-отказ ничего не пишет в БД: invalidToken и revision остаются прежними.

Тесты

Новый describe в test/stocks.e2e-spec.ts и test/bonds.e2e-spec.ts (хелпер test/online-upstream.ts). Реальные сервисы и SQLite, подменён только gRPC-транспорт, поэтому статус проходит через настоящий маппинг TbankClient.

  • Share: 5 entrypoints x {UNAUTHENTICATED, PERMISSION_DENIED} x {первый RPC, поздний RPC} + UNAVAILABLE.
  • Bond: search/detail/ticker (company и screener у bond нет).
  • Тело ответа строго {code, status}: без raw-текста ошибки и токена; invalidToken=false, revision не изменился.

Мутации: без translateInvalidToken в online падают 20 из 48 кейсов stocks; обход перевода в screener роняет ровно 4 screener-кейса.

Gates

  • npm run verify: exit 0, 40 suites, 288 tests.
  • npm run test:e2e: exit 0, все 22 suites PASS.
  • openapi:check не запускался: wire contract и Swagger не менялись.

Consumer proof (frontend GET не ретраит 400/INVALID_TBANK_TOKEN) вынесен в отдельный frontend PR.

Refs WealthLedger/backend#59 ## Что Первый upstream `UNAUTHENTICATED`/`PERMISSION_DENIED` на online search/detail/ticker/company/screener теперь возвращает `400 / INVALID_TBANK_TOKEN` вместо `500`. Временная недоступность остаётся `503 / TBANK_UNAVAILABLE`. `TbankAccessService.onlineToken` и `current` заменены одним `online(userId, run)`: он берёт токен и выполняет `run` внутри существующего `translateInvalidToken`. Токен вне замыкания получить нельзя, поэтому новый online-вызов не сможет обойти перевод. Новых классов ошибок и зависимостей нет. ## Не затронуто - Durable-ветки (`tokenForAttempt`, `rejectMembershipToken`, их catches) и attempt-aware invalidation. - Current-revision isolation: `revision` по-прежнему приходит из того же чтения connection. - Online-отказ ничего не пишет в БД: `invalidToken` и `revision` остаются прежними. ## Тесты Новый `describe` в `test/stocks.e2e-spec.ts` и `test/bonds.e2e-spec.ts` (хелпер `test/online-upstream.ts`). Реальные сервисы и SQLite, подменён только gRPC-транспорт, поэтому статус проходит через настоящий маппинг `TbankClient`. - Share: 5 entrypoints x {UNAUTHENTICATED, PERMISSION_DENIED} x {первый RPC, поздний RPC} + UNAVAILABLE. - Bond: search/detail/ticker (company и screener у bond нет). - Тело ответа строго `{code, status}`: без raw-текста ошибки и токена; `invalidToken=false`, `revision` не изменился. Мутации: без `translateInvalidToken` в `online` падают 20 из 48 кейсов stocks; обход перевода в screener роняет ровно 4 screener-кейса. ## Gates - `npm run verify`: exit 0, 40 suites, 288 tests. - `npm run test:e2e`: exit 0, все 22 suites PASS. - `openapi:check` не запускался: wire contract и Swagger не менялись. Consumer proof (frontend GET не ретраит 400/`INVALID_TBANK_TOKEN`) вынесен в отдельный frontend PR.
codex-bot added 1 commit 2026-10-16 22:54:03 +03:00
fix: translate permanent invalid-token errors on online entrypoints (WealthLedger/backend#59)
Backend verify / commits (pull_request) Successful in 31s
Backend verify / security (pull_request) Successful in 13s
Backend verify / verify (pull_request) Successful in 5m21s
c18e2b9d92
codex-bot merged commit 8a6f60d965 into develop 2026-10-16 23:23:12 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#110