All checks were successful
- Create apps/docs/ with Docusaurus 3.7.0 - Add documentation: architecture, backend, frontend, infrastructure, development, ADR - Include 5 Mermaid diagrams (system architecture, request flow, modules, caching, deployment) - Configure as npm workspace with dev:docs/build:docs scripts - Copy existing ADR documents from docs/architecture/adr/
3.3 KiB
3.3 KiB
MOEX Client
Overview
MoexClientService (apps/backend/src/modules/moex-client/moex-client.service.ts) — HTTP-клиент для MOEX ISS API.
Rate Limiting
Использует p-queue:
this.queue = new PQueue({
interval: 1000,
intervalCap: rateLimit, // 10 по умолчанию
});
Все запросы к MOEX проходят через очередь — не более MOEX_RATE_LIMIT запросов в секунду.
Circuit Breaker
Состояние: закрыт → открыт → полуоткрыт (через таймаут).
private circuitOpen = false;
private circuitErrorCount = 0;
- После
MOEX_CIRCUIT_BREAKER_THRESHOLD(5) последовательных ошибок — открывается - В открытом состоянии все запросы мгновенно падают с ошибкой
"Circuit breaker is open" - Через
MOEX_CIRCUIT_BREAKER_RESET_SECONDS(30) автоматически сбрасывается
Request Method
private async request<T>(path: string, params?: Record<string, string>): Promise<T>
- Добавляет
.jsonк пути (MOEX JSON API) - Устанавливает
iss.meta=off(отключает метаданные) - Таймаут: 10s
Response Parsing
MOEX возвращает данные в табличном формате:
{
"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— торговая доска