# MOEX Client ## Overview `MoexClientService` (`apps/backend/src/modules/moex-client/moex-client.service.ts`) — HTTP-клиент для MOEX ISS API. ## Rate Limiting Использует `p-queue`: ```typescript this.queue = new PQueue({ interval: 1000, intervalCap: rateLimit, // 10 по умолчанию }); ``` Все запросы к MOEX проходят через очередь — не более `MOEX_RATE_LIMIT` запросов в секунду. ## Circuit Breaker Состояние: закрыт → открыт → полуоткрыт (через таймаут). ```typescript private circuitOpen = false; private circuitErrorCount = 0; ``` - После `MOEX_CIRCUIT_BREAKER_THRESHOLD` (5) последовательных ошибок — открывается - В открытом состоянии все запросы мгновенно падают с ошибкой `"Circuit breaker is open"` - Через `MOEX_CIRCUIT_BREAKER_RESET_SECONDS` (30) автоматически сбрасывается ## Request Method ```typescript private async request(path: string, params?: Record): Promise ``` - Добавляет `.json` к пути (MOEX JSON API) - Устанавливает `iss.meta=off` (отключает метаданные) - Таймаут: 10s ## Response Parsing MOEX возвращает данные в табличном формате: ```json { "securities": { "columns": ["secid", "isin", "name", ...], "data": [["SBER", "RU0009029540", "Сбербанк", ...]] } } ``` Метод `extractTable` преобразует это в массив объектов по колонкам. ## Available MOEX Methods | Method | MOEX Path | Description | |---|---|---| | `searchSecurities` | `/securities?q=` | Поиск инструментов | | `getSecurityDescription` | `/securities/{secid}` | Спецификация | | `getShareMarketData` | `/engines/stock/markets/shares/securities/{secid}` | Рыночные данные акции (board: TQBR) | | `getBondData` | `/engines/stock/markets/bonds/securities/{secid}` | Данные облигации (board: TQCB) | | `getBondMarketData` | `/engines/stock/markets/bonds/securities/{secid}` | Рыночные данные облигации | | `getDividends` | `/securities/{secid}/dividends` | Дивиденды | | `getCandles` | `/engines/{engine}/markets/{market}/securities/{secid}/candles` | Свечи | | `getHistory` | `/engines/stock/markets/shares/securities/{secid}` | История акций | | `getBondHistory` | `/engines/stock/markets/bonds/securities/{secid}` | История облигаций | ## MOEX ISS Types Все MOEX-типы описаны в `apps/backend/src/modules/moex-client/moex-client.types.ts`: - `MoexSecurityDescription` — описание инструмента - `MoexShareMarketData` — рыночные данные акции - `MoexBondData` — данные облигации - `MoexBondMarketData` — рыночные данные облигации - `MoexDividend` — дивиденд - `MoexCandle` — свеча (OHLCV) - `MoexHistoryEntry` — запись истории акции - `MoexBondHistoryEntry` — запись истории облигации - `MoexBoard` — торговая доска