{"version":3,"sources":["../../src/sdk/dataUtils.ts"],"sourcesContent":["import \"reflect-metadata\";\nimport { AccountBalances, AdvanceRoutesLiFi, Token, TransactionStatus, DataModule, ExchangeOffer, NftList, PaginatedTokens, RateData, StepTransactions, TokenList, TokenListToken, Transaction, Transactions, QuoteTransactionsResponse } from \"./data\";\nimport { FetchExchangeRatesDto, GetAccountBalancesDto, GetAdvanceRoutesLiFiDto, GetSupportedAssetsDto, GetTransactionStatusDto, GetExchangeOffersDto, GetExchangeSupportedAssetsDto, GetNftListDto, GetStepTransactionsLiFiDto, GetTokenListDto, GetTokenListsDto, GetTransactionDto, GetTransactionsDto, GetQuotesDto, validateDto } from \"./dto\";\nimport { BigNumber } from \"./common\";\n\nexport class DataUtils {\n  private dataModule: DataModule;\n  private readonly defaultDataApiKey = 'eyJvcmciOiI2NTIzZjY5MzUwOTBmNzAwMDFiYjJkZWIiLCJpZCI6IjI4ZWJiMGQ5YTMxYjQ3MmY4NmU4MWY2YTVhYzBhMzE1IiwiaCI6Im11cm11cjEyOCJ9';\n  constructor(apiKey?: string) {\n    this.dataModule = new DataModule(apiKey || this.defaultDataApiKey);\n  }\n\n  /**\n  * gets account balances\n  * @param dto\n  * @return Promise<AccountBalances>\n  */\n  async getAccountBalances(dto: GetAccountBalancesDto): Promise<AccountBalances> {\n    const { account, tokens, chainId, provider } = await validateDto(dto, GetAccountBalancesDto, {\n      addressKeys: ['account', 'tokens'],\n    });\n\n    return this.dataModule.getAccountBalances(\n      account,\n      chainId,\n      tokens,\n      provider,\n    );\n  }\n\n  /**\n  * gets transaction\n  * @param dto\n  * @return Promise<Transaction>\n  */\n  async getTransaction(dto: GetTransactionDto): Promise<Transaction> {\n    const { hash, chainId } = await validateDto(dto, GetTransactionDto);\n\n    return this.dataModule.getTransaction(hash, chainId);\n  }\n\n  /**\n  * gets transactions\n  * @param dto\n  * @return Promise<Transactions>\n  */\n  async getTransactions(dto: GetTransactionsDto): Promise<Transactions> {\n    const { account, chainId, page, limit } = await validateDto(dto, GetTransactionsDto, {\n      addressKeys: ['account'],\n    });\n\n    return this.dataModule.getTransactions(\n      account,\n      chainId,\n      page,\n      limit,\n    );\n  }\n\n  /**\n  * gets NFT list belonging to account\n  * @param dto\n  * @return Promise<NftList>\n  */\n  async getNftList(dto: GetNftListDto): Promise<NftList> {\n    const { account, chainId } = await validateDto(dto, GetNftListDto, {\n      addressKeys: ['account'],\n    });\n\n    return this.dataModule.getNftList(\n      account,\n      chainId,\n    );\n  }\n\n  /**\n  * gets advance routes from LIFI\n  * @param dto\n  * @return Promise<AdvanceRoutesLiFi>\n  */\n  async getAdvanceRoutesLiFi(dto: GetAdvanceRoutesLiFiDto): Promise<AdvanceRoutesLiFi> {\n    const {\n      fromChainId,\n      toChainId,\n      fromTokenAddress,\n      toTokenAddress,\n      fromAmount,\n      allowSwitchChain,\n      showZeroUsd,\n      fromAddress,\n    } = await validateDto(dto, GetAdvanceRoutesLiFiDto, {\n      addressKeys: ['fromTokenAddress', 'toTokenAddress', 'fromAddress'],\n    });\n\n    let { toAddress } = dto;\n\n    if (!toAddress) toAddress = fromAddress;\n\n    const data = await this.dataModule.getAdvanceRoutesLiFi(\n      fromTokenAddress,\n      toTokenAddress,\n      fromChainId,\n      toChainId,\n      fromAmount,\n      toAddress,\n      allowSwitchChain,\n      fromAddress,\n      showZeroUsd,\n    );\n\n    return data;\n  }\n\n  /**\n  * gets step transactions from LIFI\n  * @param dto\n  * @return Promise<StepTransactions>\n  */\n  async getStepTransaction(dto: GetStepTransactionsLiFiDto): Promise<StepTransactions> {\n    const { route, account } = await validateDto(dto, GetStepTransactionsLiFiDto, {\n      addressKeys: ['account']\n    })\n\n    return this.dataModule.getStepTransaction(route, account);\n  }\n\n  /**\n  * gets exchange supported tokens\n  * @param dto\n  * @return Promise<PaginatedTokens>\n  */\n  async getExchangeSupportedAssets(dto: GetExchangeSupportedAssetsDto): Promise<PaginatedTokens> {\n    const { page, limit, chainId, account } = await validateDto(dto, GetExchangeSupportedAssetsDto, {\n      addressKeys: ['account']\n    });\n\n    return this.dataModule.getExchangeSupportedAssets(page, limit, chainId, account);\n  }\n\n  /**\n  * gets exchange offers\n  * @param dto\n  * @return Promise<ExchangeOffer[]>\n  */\n  async getExchangeOffers(dto: GetExchangeOffersDto): Promise<ExchangeOffer[]> {\n    const { fromTokenAddress, toTokenAddress, fromAmount, fromChainId, showZeroUsd, fromAddress } = await validateDto(dto, GetExchangeOffersDto, {\n      addressKeys: ['fromTokenAddress', 'toTokenAddress', 'fromAddress'],\n    });\n\n    let { toAddress } = dto;\n\n    if (!toAddress) toAddress = fromAddress;\n\n    return this.dataModule.getExchangeOffers(\n      fromTokenAddress,\n      toTokenAddress,\n      BigNumber.from(fromAmount),\n      fromChainId,\n      fromAddress,\n      toAddress,\n      showZeroUsd,\n    );\n  }\n\n  /**\n  * gets token lists\n  * @param dto\n  * @return Promise<TokenList[]>\n  */\n  async getTokenLists(dto: GetTokenListsDto): Promise<TokenList[]> {\n    const { chainId } = await validateDto(dto, GetTokenListsDto);\n\n    return this.dataModule.getTokenLists(chainId);\n  }\n\n  /**\n  * gets token list tokens\n  * @param dto\n  * @return Promise<TokenListToken[]>\n  */\n  async getTokenListTokens(dto: GetTokenListDto): Promise<TokenListToken[]> {\n    const { chainId, name } = await validateDto(dto, GetTokenListDto);\n\n    return this.dataModule.getTokenListTokens(chainId, name);\n  }\n\n  /**\n  * fetch exchange rates of tokens\n  * @param dto\n  * @return Promise<RateData>\n  */\n  async fetchExchangeRates(dto: FetchExchangeRatesDto): Promise<RateData> {\n    const { tokens, chainId } = dto;\n    let data: RateData;\n    const promises = [];\n\n    // Create a batch of 50\n    const batches = [...Array(Math.ceil(tokens.length / 50))].map(() => tokens.splice(0, 50));\n    batches.forEach((batch) => {\n      promises.push(this.dataModule.fetchExchangeRates(batch, chainId));\n    });\n\n    // Fetch succeded results and merge\n    await (Promise as any)\n      .allSettled(promises)\n      .then((response) =>\n        response?.forEach((result) => {\n          if (result?.status === 'fulfilled') {\n            !data\n              ? (data = result.value ? result.value : {})\n              : (data.items = result?.value?.items ? [...data.items, ...result.value.items] : [...data.items]);\n          }\n        }),\n      );\n\n    // Return Unique tokens\n    if (data && data.items && data.items.length) {\n      data.error = ''\n      data.errored = false\n      data.items = [...new Map(data.items.map(item => [item['address'], item])).values()];\n    } else {\n      data.items = [];\n    }\n\n    return data;\n  }\n\n  /**\n  * gets supported tokens\n  * @param dto\n  * @return Promise<Token[]>\n  */\n  async getSupportedAssets(dto: GetSupportedAssetsDto): Promise<Token[]> {\n    const { chainId, provider } = await validateDto(dto, GetSupportedAssetsDto);\n\n    return this.dataModule.getSupportedAssets(chainId, provider);\n  }\n\n  /**\n  * gets quote transactions\n  * @param dto\n  * @return Promise<Quote[]>\n  */\n  async getQuotes(dto: GetQuotesDto): Promise<QuoteTransactionsResponse> {\n    const {\n      fromAddress,\n      toAddress,\n      fromChainId,\n      toChainId,\n      fromToken,\n      fromAmount,\n      slippage,\n      provider\n    } = await validateDto(dto, GetQuotesDto, {\n      addressKeys: ['fromAddress', 'toAddress', 'fromToken'],\n    });\n\n    return this.dataModule.getQuotes(\n      fromAddress,\n      toAddress,\n      fromChainId,\n      toChainId,\n      fromToken,\n      BigNumber.from(fromAmount),\n      slippage,\n      provider\n    );\n  }\n\n  /**\n  * gets transaction status\n  * @param dto\n  * @return Promise<TransactionStatus>\n  */\n  async getTransactionStatus(dto: GetTransactionStatusDto): Promise<TransactionStatus> {\n    const { fromChainId, toChainId, transactionHash, provider } = await validateDto(dto, GetTransactionStatusDto);\n\n    return this.dataModule.getTransactionStatus(fromChainId, toChainId, transactionHash, provider);\n  }\n}\n"],"mappings":"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","names":[]}