feat: add tbank tokens
This commit is contained in:
@@ -0,0 +1,38 @@
|
|||||||
|
# Подключение T-Bank
|
||||||
|
|
||||||
|
Авторизованный пользователь управляет одним подключением к T-Bank Invest в настройках. Токен вводится только в поле пароля, отправляется в backend для проверки и больше не отображается.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant F as Frontend
|
||||||
|
participant B as Backend
|
||||||
|
participant T as T-Bank gRPC
|
||||||
|
participant D as SQLite
|
||||||
|
F->>B: PUT /api/v1/tbank-connection (Bearer, token)
|
||||||
|
B->>T: GetAccounts(OPEN) over TLS
|
||||||
|
T-->>B: счета или ошибка проверки
|
||||||
|
B->>D: сохранить шифротекст AES-256-GCM
|
||||||
|
B-->>F: { connected, connectedAt }
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
- `GET /api/v1/tbank-connection` возвращает `{ connected: false, connectedAt: null }` или статус подключенного аккаунта.
|
||||||
|
- `PUT /api/v1/tbank-connection` принимает `{ token }`, проверяет его через `GetAccounts` и создает или заменяет подключение.
|
||||||
|
- `DELETE /api/v1/tbank-connection` идемпотентен и возвращает `204`.
|
||||||
|
- `connectedAt` - метка времени RFC 3339 в UTC. Ответы и ошибки API никогда не содержат токен.
|
||||||
|
|
||||||
|
`INVALID_TBANK_TOKEN` означает, что T-Bank отклонил аутентификацию или права доступа. `TBANK_UNAVAILABLE` означает временную ошибку, превышение лимита, ожидание в очереди или другую ошибку внешнего сервиса.
|
||||||
|
|
||||||
|
## Configuration and limits
|
||||||
|
|
||||||
|
- `TOKEN_ENCRYPTION_KEY` - закодированный в base64 32-байтный ключ AES-256-GCM; обязателен при запуске.
|
||||||
|
- `TBANK_GRPC_ENDPOINT` по умолчанию имеет значение `invest-public-api.tbank.ru:443`.
|
||||||
|
- `TBANK_RATE_LIMIT_PER_SECOND` по умолчанию имеет значение `5`.
|
||||||
|
- `TBANK_CA_CERT_PATH` - необязательный путь к корневому CA-сертификату PEM для сетей с TLS-инспекцией; проверка TLS остается включенной.
|
||||||
|
|
||||||
|
FIFO-ограничитель на экземпляр запускает не более 5 запросов в секунду и принимает не более 50 ожидающих вызовов. Для `UNAVAILABLE`, `DEADLINE_EXCEEDED` и `RESOURCE_EXHAUSTED` выполняется одна повторная попытка через секунду. Deadline каждой попытки - 10 секунд.
|
||||||
|
|
||||||
|
## MVP limits
|
||||||
|
|
||||||
|
Реализована только проверка токена. Счета, портфели, кэш метаданных инструментов, ротация ключа, распределенное ограничение запросов и сериализация параллельного обновления подключения отложены. Вендорные protobuf-контракты взяты из `references/moex-vibe`; при необходимости обновляйте их вручную по официальной документации T-Bank Invest API.
|
||||||
Reference in New Issue
Block a user