|
|
|
@ -166,11 +166,42 @@ export class ManualService implements DataProviderInterface {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const symbolProfilesWithScraperConfigurationAndInstantMode =
|
|
|
|
|
symbolProfiles.filter(({ scraperConfiguration }) => {
|
|
|
|
|
return scraperConfiguration?.mode === 'instant';
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const scraperResultPromises =
|
|
|
|
|
symbolProfilesWithScraperConfigurationAndInstantMode.map(
|
|
|
|
|
async ({ scraperConfiguration, symbol }) => {
|
|
|
|
|
try {
|
|
|
|
|
const marketPrice = await this.scrape(scraperConfiguration);
|
|
|
|
|
return { marketPrice, symbol };
|
|
|
|
|
} catch (error) {
|
|
|
|
|
Logger.error(
|
|
|
|
|
`Could not get quote for ${symbol} (${this.getName()}): [${error.name}] ${error.message}`,
|
|
|
|
|
'ManualService'
|
|
|
|
|
);
|
|
|
|
|
return { symbol, marketPrice: undefined };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Wait for all scraping requests to complete concurrently
|
|
|
|
|
const scraperResults = await Promise.all(scraperResultPromises);
|
|
|
|
|
|
|
|
|
|
for (const { currency, symbol } of symbolProfiles) {
|
|
|
|
|
let marketPrice =
|
|
|
|
|
let { marketPrice } =
|
|
|
|
|
scraperResults.find((result) => {
|
|
|
|
|
return result.symbol === symbol;
|
|
|
|
|
}) ?? {};
|
|
|
|
|
|
|
|
|
|
marketPrice =
|
|
|
|
|
marketPrice ??
|
|
|
|
|
marketData.find((marketDataItem) => {
|
|
|
|
|
return marketDataItem.symbol === symbol;
|
|
|
|
|
})?.marketPrice ?? 0;
|
|
|
|
|
})?.marketPrice ??
|
|
|
|
|
0;
|
|
|
|
|
|
|
|
|
|
response[symbol] = {
|
|
|
|
|
currency,
|
|
|
|
|