|
|
|
|
@ -373,26 +373,42 @@ export class FinancialModelingPrepService implements DataProviderInterface {
|
|
|
|
|
{
|
|
|
|
|
signal: AbortSignal.timeout(requestTimeout)
|
|
|
|
|
}
|
|
|
|
|
).then((res) => res.json())
|
|
|
|
|
).then(
|
|
|
|
|
(res) => res.json() as unknown as { price: number; symbol: string }[]
|
|
|
|
|
)
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
if (assetProfileResolutions.length === symbols.length) {
|
|
|
|
|
for (const { currency, symbolTarget } of assetProfileResolutions) {
|
|
|
|
|
currencyBySymbolMap[symbolTarget] = { currency };
|
|
|
|
|
for (const { currency, symbolTarget } of assetProfileResolutions) {
|
|
|
|
|
currencyBySymbolMap[symbolTarget] = { currency };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const resolvedSymbols = assetProfileResolutions.map(
|
|
|
|
|
({ symbolTarget }) => {
|
|
|
|
|
return symbolTarget;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const symbolsToFetch = quotes
|
|
|
|
|
.map(({ symbol }) => {
|
|
|
|
|
return symbol;
|
|
|
|
|
})
|
|
|
|
|
.filter((symbol) => {
|
|
|
|
|
return !resolvedSymbols.includes(symbol);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (symbolsToFetch.length > 0) {
|
|
|
|
|
await Promise.all(
|
|
|
|
|
quotes.map(({ symbol }) => {
|
|
|
|
|
return this.getAssetProfile({
|
|
|
|
|
symbolsToFetch.map(async (symbol) => {
|
|
|
|
|
const assetProfile = await this.getAssetProfile({
|
|
|
|
|
requestTimeout,
|
|
|
|
|
symbol
|
|
|
|
|
}).then((assetProfile) => {
|
|
|
|
|
if (assetProfile?.currency) {
|
|
|
|
|
currencyBySymbolMap[symbol] = {
|
|
|
|
|
currency: assetProfile.currency
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (assetProfile?.currency) {
|
|
|
|
|
currencyBySymbolMap[symbol] = {
|
|
|
|
|
currency: assetProfile.currency
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|