| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -20,10 +20,7 @@ import Big from 'big.js'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { countries } from 'countries-list'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { addDays, format, isSameDay } from 'date-fns'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import yahooFinance from 'yahoo-finance2'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import type { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  Price, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  QuoteSummaryResult | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} from 'yahoo-finance2/dist/esm/src/modules/quoteSummary-iface'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import type { Price } from 'yahoo-finance2/dist/esm/src/modules/quoteSummary-iface'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					@Injectable() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -92,7 +89,12 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      response.assetSubClass = assetSubClass; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      response.currency = assetProfile.price.currency; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      response.dataSource = this.getName(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      response.name = this.formatName(assetProfile); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      response.name = this.formatName({ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        longName: assetProfile.price.longName, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        quoteType: assetProfile.price.quoteType, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        shortName: assetProfile.price.shortName, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        symbol: assetProfile.price.symbol | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      response.symbol = aSymbol; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if ( | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -247,7 +249,7 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const quotes = searchResult.quotes | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .filter((quote) => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          // filter out undefined symbols
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          // Filter out undefined symbols
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          return quote.symbol; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .filter(({ quoteType, symbol }) => { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -256,7 +258,7 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              this.cryptocurrencyService.isCryptocurrency( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                symbol.replace(new RegExp(`-${baseCurrency}$`), baseCurrency) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              )) || | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ['EQUITY', 'ETF', 'MUTUALFUND'].includes(quoteType) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ['EQUITY', 'ETF', 'FUTURE', 'MUTUALFUND'].includes(quoteType) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        .filter(({ quoteType, symbol }) => { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -264,6 +266,9 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // Only allow cryptocurrencies in base currency to avoid having redundancy in the database.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // Transactions need to be converted manually to the base currency before
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return symbol.includes(baseCurrency); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } else if (quoteType === 'FUTURE') { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // Allow GC=F, but not MGC=F
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return symbol.length === 4; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          return true; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -288,7 +293,12 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          symbol, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          currency: marketDataItem.currency, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          dataSource: this.getName(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          name: quote?.longname || quote?.shortname || symbol | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          name: this.formatName({ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            longName: quote.longname, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            quoteType: quote.quoteType, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            shortName: quote.shortname, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            symbol: quote.symbol | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (error) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -298,8 +308,18 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return { items }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  private formatName(aAssetProfile: QuoteSummaryResult) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    let name = aAssetProfile.price.longName; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  private formatName({ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    longName, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    quoteType, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    shortName, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    symbol | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }: { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    longName: Price['longName']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    quoteType: Price['quoteType']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    shortName: Price['shortName']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    symbol: Price['symbol']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    let name = longName; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (name) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      name = name.replace('iShares ETF (CH) - ', ''); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -314,7 +334,12 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      name = name.replace('Xtrackers (IE) Plc - ', ''); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return name || aAssetProfile.price.shortName || aAssetProfile.price.symbol; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (quoteType === 'FUTURE') { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // "Gold Jun 22" -> "Gold"
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      name = shortName?.slice(0, -6); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return name || shortName || symbol; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  private parseAssetClass(aPrice: Price): { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -337,6 +362,10 @@ export class YahooFinanceService implements DataProviderInterface { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        assetClass = AssetClass.EQUITY; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        assetSubClass = AssetSubClass.ETF; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      case 'future': | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        assetClass = AssetClass.COMMODITY; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        assetSubClass = AssetSubClass.COMMODITY; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      case 'mutualfund': | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        assetClass = AssetClass.EQUITY; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        assetSubClass = AssetSubClass.MUTUALFUND; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |