fix: resolve MOEX quotes by ISIN search

This commit is contained in:
admin committed 2026-08-28 08:25:06 +03:00
1 parent c2e515ba8d
commit 58a4663aaf
1 file changed
+11 -2
+11 -2
View File
@@ -24,8 +24,17 @@ function numberValue(value: unknown): number | null {
export async function getMoexQuote(isin: string): Promise<MarketQuote | null> {
if (!/^RU[A-Z0-9]{10}$/.test(isin)) return null;
try {
const info = await getJson(`${BASE_URL}/securities/${encodeURIComponent(isin)}.json?iss.meta=off&iss.only=boards&boards.columns=engine,market,boardid,secid`);
const boards = rows(info.boards).filter((item) => typeof item.engine === 'string' && typeof item.market === 'string' && typeof item.boardid === 'string' && typeof item.secid === 'string');
let info = await getJson(`${BASE_URL}/securities/${encodeURIComponent(isin)}.json?iss.meta=off&iss.only=boards&boards.columns=engine,market,boardid,secid`);
let boards = rows(info.boards);
if (boards.length === 0) {
const search = await getJson(`${BASE_URL}/securities.json?q=${encodeURIComponent(isin)}&iss.meta=off&iss.only=securities&securities.columns=secid,isin`);
const match = rows(search.securities).find((item) => String(item.isin ?? '').toUpperCase() === isin);
if (typeof match?.secid === 'string') {
info = await getJson(`${BASE_URL}/securities/${encodeURIComponent(match.secid)}.json?iss.meta=off&iss.only=boards&boards.columns=engine,market,boardid,secid`);
boards = rows(info.boards);
}
}
boards = boards.filter((item) => typeof item.engine === 'string' && typeof item.market === 'string' && typeof item.boardid === 'string' && typeof item.secid === 'string');
for (const board of boards) {
try {
const quote = await getJson(`${BASE_URL}/engines/${board.engine}/markets/${board.market}/boards/${board.boardid}/securities/${encodeURIComponent(String(board.secid))}.json?iss.meta=off&iss.only=marketdata&marketdata.columns=LAST,LCURRENTPRICE,WAPRICE,UPDATETIME`);