@covalenthq/client-sdk 2.3.3 → 2.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/utils/functions/bigIntParser.ts","../src/utils/functions/endpointGenerator.ts","../src/services/AllChainsService.ts","../src/utils/functions/paginateEndpoint.ts","../src/services/BalanceService.ts","../src/services/BaseService.ts","../src/utils/types/Generic.types.ts","../src/services/BitcoinService.ts","../src/services/NftService.ts","../src/services/PricingService.ts","../src/services/SecurityService.ts","../node_modules/.pnpm/graphql-ws@6.0.5_graphql@16.11.0_ws@8.18.2/node_modules/graphql-ws/dist/common-CGW11Fyb.js","../node_modules/.pnpm/graphql-ws@6.0.5_graphql@16.11.0_ws@8.18.2/node_modules/graphql-ws/dist/client.js","../src/services/StreamingService.ts","../src/services/TransactionService.ts","../src/utils/functions/debugOutput.ts","../node_modules/.pnpm/yocto-queue@0.1.0/node_modules/yocto-queue/index.js","../node_modules/.pnpm/p-limit@3.1.0/node_modules/p-limit/index.js","../src/utils/functions/execution.ts","../src/utils/functions/isValidApiKey.ts","../src/GoldRushClient.ts","../node_modules/.pnpm/big.js@6.2.2/node_modules/big.js/big.mjs","../src/utils/functions/calculatePrettyBalance.ts","../src/utils/functions/prettifyCurrency.ts","../src/utils/functions/timestamp-parser.ts","../src/utils/types/StreamingService.types.ts"],"sourcesContent":["export const bigIntParser = (\n val: null | undefined | string | number | bigint\n): bigint | null => {\n if (val === null || val === undefined) {\n return null;\n }\n\n return BigInt(val);\n};\n","const baseUrl: string = \"https://api.covalenthq.com/v1\";\r\n\r\nexport const endpointGenerator = (\r\n extension: string = \"\",\r\n params: {\r\n key: string;\r\n value: boolean | null | string | string[] | number | undefined;\r\n }[] = []\r\n): URL => {\r\n extension = extension.replace(baseUrl, \"\");\r\n if (extension.startsWith(\"/\")) {\r\n extension = extension.slice(1);\r\n }\r\n if (!extension.endsWith(\"/\")) {\r\n extension = `${extension}/`;\r\n }\r\n\r\n const urlParams = new URLSearchParams();\r\n\r\n params.forEach((param) => {\r\n if (param.value !== undefined && param.value !== null) {\r\n urlParams.append(param.key, param.value.toString());\r\n }\r\n });\r\n\r\n return new URL(`${baseUrl}/${extension}?${urlParams}`);\r\n};\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport {\r\n type ChainActivityResponse,\r\n type GetAddressActivityQueryParamOpts,\r\n type GetMultiChainBalanceQueryParamOpts,\r\n type GetMultiChainMultiAddressTransactionsParamOtps,\r\n type MultiChainBalanceResponse,\r\n type MultiChainMultiAddressTransactionsResponse,\r\n} from \"../utils/types/AllChainService.types\";\r\nimport { type GoldRushResponse } from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Cross Chain API\r\n *\r\n */\r\nexport class AllChainsService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to locate chains which an address is active on with a single API call.\r\n *\r\n * @param {string} walletAddress - The requested wallet address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAddressActivityQueryParamOpts} queryParamOpts\r\n * - `testnets`: Set to true to include testnets with activity in the response. By default, it's set to `false` and only returns mainnet activity.\r\n *\r\n */\r\n public async getAddressActivity(\r\n walletAddress: string,\r\n queryParamOpts?: GetAddressActivityQueryParamOpts\r\n ): Promise<GoldRushResponse<ChainActivityResponse>> {\r\n const endpoint = endpointGenerator(`address/${walletAddress}/activity`, [\r\n {\r\n key: \"testnets\",\r\n value: queryParamOpts?.testnets,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainActivityResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((activityItem) => ({\r\n ...activityItem,\r\n last_seen_at: activityItem.last_seen_at\r\n ? new Date(activityItem.last_seen_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ChainActivityResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get transactions cross chains and addresses.\r\n *\r\n * @param {Chain[]} chains - An array of the chain names or IDs to retrieve transactions from. Defaults to all foundational chains.\r\n * @param {string[]} addresses - An array of addresses for which transactions are fetched. Does not support name resolution.\r\n * @param {number} limit - Number of transactions to return per page, up to the default max of 100 items.\r\n * @param {string} before - Pagination cursor pointing to fetch transactions before a certain point.\r\n * @param {string} after - Pagination cursor pointing to fetch transactions after a certain point.\r\n * @param {boolean} withLogs - Whether to include raw logs in the response.\r\n * @param {boolean} withDecodedLogs - Whether to include decoded logs in the response.\r\n * @param {Quote | CryptocurrencyQuote} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC` and `ETH`.\r\n *\r\n */\r\n public async getMultiChainMultiAddressTransactions(\r\n queryParamOpts?: GetMultiChainMultiAddressTransactionsParamOtps\r\n ): Promise<GoldRushResponse<MultiChainMultiAddressTransactionsResponse>> {\r\n const endpoint = endpointGenerator(`allchains/transactions`, [\r\n {\r\n key: \"chains\",\r\n value: queryParamOpts?.chains as string[],\r\n },\r\n {\r\n key: \"addresses\",\r\n value: queryParamOpts?.addresses,\r\n },\r\n {\r\n key: \"limit\",\r\n value: queryParamOpts?.limit,\r\n },\r\n {\r\n key: \"before\",\r\n value: queryParamOpts?.before,\r\n },\r\n {\r\n key: \"after\",\r\n value: queryParamOpts?.after,\r\n },\r\n {\r\n key: \"with-logs\",\r\n value: queryParamOpts?.withLogs,\r\n },\r\n {\r\n key: \"with-decoded-logs\",\r\n value: queryParamOpts?.withDecodedLogs,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]);\r\n\r\n const parseData = (\r\n data: GoldRushResponse<MultiChainMultiAddressTransactionsResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<MultiChainMultiAddressTransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n * @deprecated This method is deprecated and will be removed in the upcoming versions. Please use `AllChainsService.getMultiChainMultiAddressTransactions` instead.\r\n *\r\n * Commonly used to get transactions cross chains and addresses.\r\n *\r\n * @param {Chain[]} chains - An array of the chain names or IDs to retrieve transactions from. Defaults to all foundational chains.\r\n * @param {string[]} addresses - An array of addresses for which transactions are fetched. Does not support name resolution.\r\n * @param {number} limit - Number of transactions to return per page, up to the default max of 100 items.\r\n * @param {string} before - Pagination cursor pointing to fetch transactions before a certain point.\r\n * @param {string} after - Pagination cursor pointing to fetch transactions after a certain point.\r\n * @param {boolean} withLogs - Whether to include raw logs in the response.\r\n * @param {boolean} withDecodedLogs - Whether to include decoded logs in the response.\r\n * @param {Quote | CryptocurrencyQuote} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC` and `ETH`.\r\n *\r\n */\r\n public async getMultiChainAndMultiAddressTransactions(\r\n queryParamOpts?: GetMultiChainMultiAddressTransactionsParamOtps\r\n ): Promise<GoldRushResponse<MultiChainMultiAddressTransactionsResponse>> {\r\n return await this.getMultiChainMultiAddressTransactions(queryParamOpts);\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} walletAddress - The requested wallet Address.\r\n * @param {GetMultiChainBalanceQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC`, and `ETH`.\r\n * - `chains`: Array chain ids or chain names to query. Limited to 10 chains.\r\n * - `limit`: The number of items to return. Default is 100.\r\n * - `timestamp`: The timestamp to query balances at. If omitted, the latest balances are returned.\r\n * - `cursorBefore`: The cursor of previous page.\r\n */\r\n public async getMultiChainBalances(\r\n walletAddress: string,\r\n queryParamOpts?: GetMultiChainBalanceQueryParamOpts\r\n ): Promise<GoldRushResponse<MultiChainBalanceResponse>> {\r\n const endpoint = endpointGenerator(\r\n `allchains/address/${walletAddress}/balances`,\r\n [\r\n {\r\n key: \"chains\",\r\n value: queryParamOpts?.chains as string[],\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"limit\",\r\n value: queryParamOpts?.limit,\r\n },\r\n {\r\n key: \"cutoff-timestamp\",\r\n value: queryParamOpts?.cutoffTimestamp,\r\n },\r\n {\r\n key: \"before\",\r\n value: queryParamOpts?.before,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<MultiChainBalanceResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<MultiChainBalanceResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import {\n type GoldRushResponse,\n type Nullable,\n type Pagination,\n type PaginationLinks,\n} from \"../types/Generic.types\";\nimport { type Execution } from \"./execution\";\n\nexport async function* paginateEndpoint<\n T extends\n | Nullable<{ pagination: Pagination }>\n | Nullable<{ links: PaginationLinks }>\n | null,\n>(\n endpoint: URL,\n execution: Execution,\n parseData: (data: GoldRushResponse<T>) => GoldRushResponse<T>,\n implementation: \"pagination\" | \"links\"\n): AsyncIterable<GoldRushResponse<T>> {\n let _endpoint: URL = new URL(endpoint);\n let hasMore: boolean = true;\n let page_number: number = +(_endpoint.searchParams.get(\"page-number\") ?? 0);\n\n while (hasMore) {\n try {\n if (implementation === \"pagination\") {\n _endpoint.searchParams.set(\"page-number\", page_number.toString());\n\n const parsedData = await execution.execute<T>(_endpoint, parseData);\n\n if (parsedData.error) {\n throw parsedData;\n }\n\n if (\n !(\n parsedData.data as {\n pagination: Pagination;\n }\n )?.pagination?.has_more\n ) {\n hasMore = false;\n } else {\n page_number++;\n }\n\n yield parsedData as GoldRushResponse<T>;\n } else if (implementation === \"links\") {\n const parsedData = await execution.execute<T>(_endpoint, parseData);\n const prevLink: string | null =\n (\n parsedData.data as {\n links: PaginationLinks;\n }\n )?.links?.prev || null;\n\n if (!prevLink) {\n hasMore = false;\n } else {\n _endpoint = new URL(`${prevLink}?${_endpoint.searchParams}`);\n }\n\n yield parsedData as GoldRushResponse<T>;\n }\n } catch (error: any) {\n hasMore = false;\n yield {\n data: null,\n error: true,\n error_code: error?.cause?.code || error?.error_code || 500,\n error_message:\n error?.cause?.message ||\n error?.error_message ||\n \"Internal server error\",\n };\n }\n }\n}\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport {\r\n type BalancesResponse,\r\n type Erc20TransfersResponse,\r\n type GetErc20TransfersForWalletAddressQueryParamOpts,\r\n type GetHistoricalPortfolioForWalletAddressQueryParamOpts,\r\n type GetHistoricalTokenBalancesForWalletAddressQueryParamOpts,\r\n type GetNativeTokenBalanceQueryParamOpts,\r\n type GetTokenBalancesForWalletAddressQueryParamOpts,\r\n type GetTokenHoldersV2ForTokenAddressQueryParamOpts,\r\n type HistoricalBalancesResponse,\r\n type PortfolioResponse,\r\n type TokenBalanceNativeResponse,\r\n type TokenHoldersResponse,\r\n} from \"../utils/types/BalanceService.types\";\r\nimport {\r\n type Chain,\r\n type GoldRushResponse,\r\n} from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Balances APIs\r\n *\r\n */\r\nexport class BalanceService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the native, fungible (ERC20), and non-fungible (ERC721 & ERC1155) tokens held by an address. Response includes spot prices and other metadata.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenBalancesForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `nft`: If `true`, NFTs will be included in the response.\r\n * - `noNftFetch`: If `true`, only NFTs that have been cached will be included in the response. Helpful for faster response times.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n * - `noNftAssetMetadata`: If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.\r\n *\r\n */\r\n public async getTokenBalancesForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetTokenBalancesForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<BalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/balances_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"nft\",\r\n value: queryParamOpts?.nft,\r\n },\r\n {\r\n key: \"no-nft-fetch\",\r\n value: queryParamOpts?.noNftFetch,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n {\r\n key: \"no-nft-asset-metadata\",\r\n value: queryParamOpts?.noNftAssetMetadata,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BalancesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n token_balance: bigIntParser(nftItem.token_balance),\r\n token_price_wei: bigIntParser(nftItem.token_price_wei),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BalancesResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render a daily portfolio balance for an address broken down by the token. The timeframe is user-configurable, defaults to 30 days.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetHistoricalPortfolioForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalPortfolioForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetHistoricalPortfolioForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<PortfolioResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/portfolio_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<PortfolioResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items =\r\n data.data.items?.map((portfolioItem) => ({\r\n ...portfolioItem,\r\n holdings:\r\n portfolioItem.holdings?.map((holdingItem) => ({\r\n ...holdingItem,\r\n timestamp: holdingItem.timestamp\r\n ? new Date(holdingItem.timestamp)\r\n : null,\r\n close: {\r\n ...holdingItem.close!,\r\n balance: bigIntParser(holdingItem.close?.balance),\r\n },\r\n high: {\r\n ...holdingItem.high!,\r\n balance: bigIntParser(holdingItem.high?.balance),\r\n },\r\n low: {\r\n ...holdingItem.low!,\r\n balance: bigIntParser(holdingItem.low?.balance),\r\n },\r\n open: {\r\n ...holdingItem.open!,\r\n balance: bigIntParser(holdingItem.open?.balance),\r\n },\r\n })) || null,\r\n })) || null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<PortfolioResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render the transfer-in and transfer-out of a token along with historical prices from an address.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetErc20TransfersForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `contractAddress`: The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * - `startingBlock`: The block height to start from, defaults to `0`.\r\n * - `endingBlock`: The block height to end at, defaults to current block height.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getErc20TransfersForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts: GetErc20TransfersForWalletAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<Erc20TransfersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transfers_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"contract-address\",\r\n value: queryParamOpts?.contractAddress,\r\n },\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<Erc20TransfersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((ercItem) => ({\r\n ...ercItem,\r\n block_signed_at: ercItem.block_signed_at\r\n ? new Date(ercItem.block_signed_at)\r\n : null,\r\n value: bigIntParser(ercItem.value),\r\n fees_paid: bigIntParser(ercItem.fees_paid),\r\n transfers: ercItem.transfers\r\n ? ercItem.transfers.map((transferItem) => ({\r\n ...transferItem,\r\n balance: bigIntParser(transferItem.balance),\r\n block_signed_at: transferItem.block_signed_at\r\n ? new Date(transferItem.block_signed_at)\r\n : null,\r\n delta: bigIntParser(transferItem.delta),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<Erc20TransfersResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render the transfer-in and transfer-out of a token along with historical prices from an address.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetErc20TransfersForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `contractAddress`: The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * - `startingBlock`: The block height to start from, defaults to `0`.\r\n * - `endingBlock`: The block height to end at, defaults to current block height.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getErc20TransfersForWalletAddressByPage(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts: GetErc20TransfersForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<Erc20TransfersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transfers_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"contract-address\",\r\n value: queryParamOpts?.contractAddress,\r\n },\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<Erc20TransfersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockTxItem) => ({\r\n ...blockTxItem,\r\n block_signed_at: blockTxItem.block_signed_at\r\n ? new Date(blockTxItem.block_signed_at)\r\n : null,\r\n fees_paid: bigIntParser(blockTxItem.fees_paid),\r\n transfers:\r\n blockTxItem.transfers?.map((transferItem) => ({\r\n ...transferItem,\r\n balance: bigIntParser(transferItem.balance),\r\n block_signed_at: transferItem.block_signed_at\r\n ? new Date(transferItem.block_signed_at)\r\n : null,\r\n delta: bigIntParser(transferItem.delta),\r\n })) || null,\r\n value: bigIntParser(blockTxItem.value),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<Erc20TransfersResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get a list of all the token holders for a specified ERC20 or ERC721 token. Returns historic token holders when block-height is set (defaults to `latest`). Useful for building pie charts of token holders.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenHoldersV2ForTokenAddressQueryParamOpts} queryParamOpts\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n * - `pageSize`: Number of items per page. Note: Currently, only values of `100` and `1000` are supported. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `date`: Ending date to define a block range (YYYY-MM-DD). Omitting this parameter defaults to the current date.\r\n *\r\n */\r\n public async *getTokenHoldersV2ForTokenAddress(\r\n chainName: Chain,\r\n tokenAddress: string,\r\n queryParamOpts?: GetTokenHoldersV2ForTokenAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<TokenHoldersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/tokens/${tokenAddress}/token_holders_v2`,\r\n [\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"date\",\r\n value: queryParamOpts?.date,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenHoldersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n balance: bigIntParser(tokenItem.balance),\r\n total_supply: bigIntParser(tokenItem.total_supply),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<TokenHoldersResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get a list of all the token holders for a specified ERC20 or ERC721 token. Returns historic token holders when block-height is set (defaults to `latest`). Useful for building pie charts of token holders.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenHoldersV2ForTokenAddressQueryParamOpts} queryParamOpts\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n * - `pageSize`: Number of items per page. Note: Currently, only values of `100` and `1000` are supported. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `date`: Ending date to define a block range (YYYY-MM-DD). Omitting this parameter defaults to the current date.\r\n *\r\n */\r\n public async getTokenHoldersV2ForTokenAddressByPage(\r\n chainName: Chain,\r\n tokenAddress: string,\r\n queryParamOpts?: GetTokenHoldersV2ForTokenAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TokenHoldersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/tokens/${tokenAddress}/token_holders_v2`,\r\n [\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"date\",\r\n value: queryParamOpts?.date,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenHoldersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n total_supply: bigIntParser(balanceItem.total_supply),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TokenHoldersResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the historical native, fungible (ERC20), and non-fungible (ERC721 & ERC1155) tokens held by an address at a given block height or date. Response includes daily prices and other metadata.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetHistoricalTokenBalancesForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `nft`: If `true`, NFTs will be included in the response.\r\n * - `noNftFetch`: If `true`, only NFTs that have been cached will be included in the response. Helpful for faster response times.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n * - `noNftAssetMetadata`: If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n * - `date`: Ending date to define a block range (YYYY-MM-DD). Omitting this parameter defaults to the current date.\r\n *\r\n */\r\n public async getHistoricalTokenBalancesForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetHistoricalTokenBalancesForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<HistoricalBalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/historical_balances`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"nft\",\r\n value: queryParamOpts?.nft,\r\n },\r\n {\r\n key: \"no-nft-fetch\",\r\n value: queryParamOpts?.noNftFetch,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n {\r\n key: \"no-nft-asset-metadata\",\r\n value: queryParamOpts?.noNftAssetMetadata,\r\n },\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n {\r\n key: \"date\",\r\n value: queryParamOpts?.date,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<HistoricalBalancesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n token_balance: bigIntParser(nftItem.token_balance),\r\n token_price_wei: bigIntParser(nftItem.token_price_wei),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<HistoricalBalancesResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetNativeTokenBalanceQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n *\r\n */\r\n public async getNativeTokenBalance(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetNativeTokenBalanceQueryParamOpts\r\n ): Promise<GoldRushResponse<TokenBalanceNativeResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/balances_native`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenBalanceNativeResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TokenBalanceNativeResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport {\r\n type ChainActivityResponse,\r\n type GetAddressActivityQueryParamOpts,\r\n} from \"../utils/types/AllChainService.types\";\r\nimport {\r\n type AllChainsResponse,\r\n type AllChainsStatusResponse,\r\n type BlockHeightsResponse,\r\n type BlockResponse,\r\n type GasPricesResponse,\r\n type GetBlockHeightsQueryParamOpts,\r\n type GetGasPricesQueryParamOpts,\r\n type GetLogEventsByAddressQueryParamOpts,\r\n type GetLogEventsByTopicHashQueryParamOpts,\r\n type GetLogsQueryParamOpts,\r\n type GetLogsResponse,\r\n type LogEventsByAddressResponse,\r\n type LogEventsByTopicHashResponse,\r\n type ResolvedAddress,\r\n} from \"../utils/types/BaseService.types\";\r\nimport {\r\n type Chain,\r\n type GoldRushResponse,\r\n} from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Base API\r\n *\r\n */\r\nexport class BaseService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render a single block for a block explorer.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} blockHeight - The block height or `latest` for the latest block available.\r\n *\r\n */\r\n public async getBlock(\r\n chainName: Chain,\r\n blockHeight: string\r\n ): Promise<GoldRushResponse<BlockResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_v2/${blockHeight}`,\r\n []\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BlockHeightsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockItem) => ({\r\n ...blockItem,\r\n signed_at: blockItem.signed_at\r\n ? new Date(blockItem.signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BlockHeightsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to resolve ENS, RNS and Unstoppable Domains addresses.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n *\r\n */\r\n public async getResolvedAddress(\r\n chainName: Chain,\r\n walletAddress: string\r\n ): Promise<GoldRushResponse<ResolvedAddress>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/resolve_address`,\r\n []\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<ResolvedAddress>) => {\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ResolvedAddress>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the block heights within a particular date range. Useful for rendering a display where you sort blocks by day.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} startDate - The start date in YYYY-MM-DD format.\r\n * @param {string | \"latest\"} endDate - The end date in YYYY-MM-DD format. Also accepts \"latest\" for the latest block height\r\n * @param {GetBlockHeightsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getBlockHeights(\r\n chainName: Chain,\r\n startDate: string,\r\n endDate: string | \"latest\",\r\n queryParamOpts?: GetBlockHeightsQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<BlockHeightsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_v2/${startDate}/${endDate}`,\r\n [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BlockHeightsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockItem) => ({\r\n ...blockItem,\r\n signed_at: blockItem.signed_at\r\n ? new Date(blockItem.signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<BlockHeightsResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the block heights within a particular date range. Useful for rendering a display where you sort blocks by day.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} startDate - The start date in YYYY-MM-DD format.\r\n * @param {string | \"latest\"} endDate - The end date in YYYY-MM-DD format. Also accepts \"latest\" for the latest block height\r\n * @param {GetBlockHeightsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getBlockHeightsByPage(\r\n chainName: Chain,\r\n startDate: string,\r\n endDate: string | \"latest\",\r\n queryParamOpts?: GetBlockHeightsQueryParamOpts\r\n ): Promise<GoldRushResponse<BlockHeightsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_v2/${startDate}/${endDate}`,\r\n [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BlockHeightsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockItem) => ({\r\n ...blockItem,\r\n signed_at: blockItem.signed_at\r\n ? new Date(blockItem.signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BlockHeightsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the event logs of the latest block, or for a range of blocks. Includes sender contract metadata as well as decoded logs.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {GetLogsQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `address`: The address of the log events sender contract.\r\n * - `topics`: The topic hash(es) to retrieve logs with.\r\n * - `blockHash`: The block hash to retrieve logs for.\r\n * - `skipDecode`: Omit decoded log events.\r\n *\r\n */\r\n public async getLogs(\r\n chainName: Chain,\r\n queryParamOpts?: GetLogsQueryParamOpts\r\n ): Promise<GoldRushResponse<GetLogsResponse>> {\r\n const endpoint = endpointGenerator(`${chainName}/events`, [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"address\",\r\n value: queryParamOpts?.address,\r\n },\r\n {\r\n key: \"topics\",\r\n value: queryParamOpts?.topics,\r\n },\r\n {\r\n key: \"block-hash\",\r\n value: queryParamOpts?.blockHash,\r\n },\r\n {\r\n key: \"skip-decode\",\r\n value: queryParamOpts?.skipDecode,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<GetLogsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<GetLogsResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the event logs emitted from a particular contract address. Useful for building dashboards that examine on-chain interactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetLogEventsByAddressQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getLogEventsByAddress(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetLogEventsByAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<LogEventsByAddressResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/address/${contractAddress}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<LogEventsByAddressResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<LogEventsByAddressResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the event logs emitted from a particular contract address. Useful for building dashboards that examine on-chain interactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetLogEventsByAddressQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getLogEventsByAddressByPage(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetLogEventsByAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<LogEventsByAddressResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/address/${contractAddress}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<LogEventsByAddressResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<LogEventsByAddressResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all event logs of the same topic hash across all contracts within a particular chain. Useful for cross-sectional analysis of event logs that are emitted on-chain.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} topicHash - The endpoint will return event logs that contain this topic hash.\r\n * @param {GetLogEventsByTopicHashQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `secondaryTopics`: Additional topic hash(es) to filter on - padded & unpadded address fields are supported. Separate multiple topics with a comma.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getLogEventsByTopicHash(\r\n chainName: Chain,\r\n topicHash: string,\r\n queryParamOpts?: GetLogEventsByTopicHashQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<LogEventsByTopicHashResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/topics/${topicHash}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"secondary-topics\",\r\n value: queryParamOpts?.secondaryTopics,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<LogEventsByTopicHashResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<LogEventsByTopicHashResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all event logs of the same topic hash across all contracts within a particular chain. Useful for cross-sectional analysis of event logs that are emitted on-chain.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} topicHash - The endpoint will return event logs that contain this topic hash.\r\n * @param {GetLogEventsByTopicHashQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `secondaryTopics`: Additional topic hash(es) to filter on - padded & unpadded address fields are supported. Separate multiple topics with a comma.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getLogEventsByTopicHashByPage(\r\n chainName: Chain,\r\n topicHash: string,\r\n queryParamOpts?: GetLogEventsByTopicHashQueryParamOpts\r\n ): Promise<GoldRushResponse<LogEventsByTopicHashResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/topics/${topicHash}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"secondary-topics\",\r\n value: queryParamOpts?.secondaryTopics,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<LogEventsByTopicHashResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<LogEventsByTopicHashResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build internal dashboards for all supported chains on Covalent.\r\n *\r\n *\r\n */\r\n public async getAllChains(): Promise<GoldRushResponse<AllChainsResponse>> {\r\n const endpoint = endpointGenerator(`chains`);\r\n\r\n const parseData = (data: GoldRushResponse<AllChainsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((chainItem) => ({\r\n ...chainItem,\r\n chain_id: chainItem.chain_id ? +chainItem.chain_id : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<AllChainsResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build internal status dashboards of all supported chains.\r\n *\r\n *\r\n */\r\n public async getAllChainStatus(): Promise<\r\n GoldRushResponse<AllChainsStatusResponse>\r\n > {\r\n const endpoint = endpointGenerator(`chains/status`);\r\n\r\n const parseData = (data: GoldRushResponse<AllChainsStatusResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((chainItem) => ({\r\n ...chainItem,\r\n chain_id: chainItem.chain_id ? +chainItem.chain_id : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<AllChainsStatusResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n * @deprecated This method is deprecated and will be removed in the upcoming versions. Please use `AllChainsService.getAddressActivity` instead.\r\n *\r\n * Commonly used to locate chains which an address is active on with a single API call.\r\n *\r\n * @param {string} walletAddress - The requested wallet address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAddressActivityQueryParamOpts} queryParamOpts\r\n * - `testnets`: Set to true to include testnets with activity in the response. By default, it's set to `false` and only returns mainnet activity.\r\n *\r\n */\r\n public async getAddressActivity(\r\n walletAddress: string,\r\n queryParamOpts?: GetAddressActivityQueryParamOpts\r\n ): Promise<GoldRushResponse<ChainActivityResponse>> {\r\n const endpoint = endpointGenerator(`address/${walletAddress}/activity`, [\r\n {\r\n key: \"testnets\",\r\n value: queryParamOpts?.testnets,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainActivityResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((activityItem) => ({\r\n ...activityItem,\r\n last_seen_at: activityItem.last_seen_at\r\n ? new Date(activityItem.last_seen_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ChainActivityResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} eventType - The desired event type to retrieve gas prices for. Supports `erc20` transfer events, `uniswapv3` swap events and `nativetokens` transfers.\r\n * @param {GetGasPricesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n *\r\n */\r\n public async getGasPrices(\r\n chainName: Chain,\r\n eventType: \"erc20\" | \"nativetokens\" | \"uniswapv3\",\r\n queryParamOpts?: GetGasPricesQueryParamOpts\r\n ): Promise<GoldRushResponse<GasPricesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/event/${eventType}/gas_prices`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<GasPricesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.base_fee = bigIntParser(data.data.base_fee);\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<GasPricesResponse>(endpoint, parseData);\r\n }\r\n}\r\n","export enum ChainName {\r\n ETH_MAINNET = \"eth-mainnet\",\r\n ETH_SEPOLIA = \"eth-sepolia\",\r\n ETH_HOLESKY = \"eth-holesky\",\r\n MATIC_MAINNET = \"matic-mainnet\",\r\n AVALANCHE_MAINNET = \"avalanche-mainnet\",\r\n AVALANCHE_TESTNET = \"avalanche-testnet\",\r\n BSC_MAINNET = \"bsc-mainnet\",\r\n BSC_TESTNET = \"bsc-testnet\",\r\n MOONBEAM_MAINNET = \"moonbeam-mainnet\",\r\n MOONBEAM_MOONBASE_ALPHA = \"moonbeam-moonbase-alpha\",\r\n MOONBEAM_MOONRIVER = \"moonbeam-moonriver\",\r\n ARBITRUM_MAINNET = \"arbitrum-mainnet\",\r\n ARBITRUM_NOVA_MAINNET = \"arbitrum-nova-mainnet\",\r\n FANTOM_MAINNET = \"fantom-mainnet\",\r\n FANTOM_TESTNET = \"fantom-testnet\",\r\n PALM_MAINNET = \"palm-mainnet\",\r\n PALM_TESTNET = \"palm-testnet\",\r\n BTC_MAINNET = \"btc-mainnet\",\r\n SOLANA_MAINNET = \"solana-mainnet\",\r\n AXIE_MAINNET = \"axie-mainnet\",\r\n OPTIMISM_MAINNET = \"optimism-mainnet\",\r\n OPTIMISM_SEPOLIA = \"optimism-sepolia\",\r\n CRONOS_ZKEVM_TESTNET = \"cronos-zkevm-testnet\",\r\n CRONOS_ZKEVM_MAINNET = \"cronos-zkevm-mainnet\",\r\n AURORA_MAINNET = \"aurora-mainnet\",\r\n AURORA_TESTNET = \"aurora-testnet\",\r\n EMERALD_PARATIME_MAINNET = \"emerald-paratime-mainnet\",\r\n DEFI_KINGDOMS_MAINNET = \"defi-kingdoms-mainnet\",\r\n DEFI_KINGDOMS_TESTNET = \"defi-kingdoms-testnet\",\r\n BOBA_MAINNET = \"boba-mainnet\",\r\n BOBA_BNB_MAINNET = \"boba-bnb-mainnet\",\r\n BOBA_BNB_TESTNET = \"boba-bnb-testnet\",\r\n SCROLL_SEPOLIA_TESTNET = \"scroll-sepolia-testnet\",\r\n METIS_MAINNET = \"metis-mainnet\",\r\n AVALANCHE_DEXALOT_MAINNET = \"avalanche-dexalot-mainnet\",\r\n AVALANCHE_DEXALOT_TESTNET = \"avalanche-dexalot-testnet\",\r\n AVALANCHE_SHRAPNEL_MAINNET = \"avalanche-shrapnel-mainnet\",\r\n AVALANCHE_NUMBERS = \"avalanche-numbers\",\r\n AVALANCHE_XANACHAIN = \"avalanche-xanachain\",\r\n AVALANCHE_STEP_NETWORK = \"avalanche-step-network\",\r\n AVALANCHE_SHRAPNEL_TESTNET = \"avalanche-shrapnel-testnet\",\r\n AVALANCHE_BEAM_TESTNET = \"avalanche-beam-testnet\",\r\n AVALANCHE_BLITZ_TESTNET = \"avalanche-blitz-testnet\",\r\n AVALANCHE_UPTN = \"avalanche-uptn\",\r\n AVALANCHE_BEAM_MAINNET = \"avalanche-beam-mainnet\",\r\n AVALANCHE_MIRAI_TESTNET = \"avalanche-mirai-testnet\",\r\n BERACHAIN_MAINNET = \"berachain-mainnet\",\r\n UNICHAIN_MAINNET = \"unichain-mainnet\",\r\n CANTO_MAINNET = \"canto-mainnet\",\r\n FLARENETWORKS_FLARE_MAINNET = \"flarenetworks-flare-mainnet\",\r\n FLARENETWORKS_FLARE_TESTNET = \"flarenetworks-flare-testnet\",\r\n LINEA_MAINNET = \"linea-mainnet\",\r\n POLYGON_ZKEVM_MAINNET = \"polygon-zkevm-mainnet\",\r\n LINEA_SEPOLIA_TESTNET = \"linea-sepolia-testnet\",\r\n POLYGON_ZKEVM_TESTNET = \"polygon-zkevm-testnet\",\r\n POLYGON_AMOY_TESTNET = \"polygon-amoy-testnet\",\r\n MANTLE_MAINNET = \"mantle-mainnet\",\r\n POLYGON_ZKEVM_CARDONA_TESTNET = \"polygon-zkevm-cardona-testnet\",\r\n MANTLE_SEPOLIA_TESTNET = \"mantle-sepolia-testnet\",\r\n BASE_MAINNET = \"base-mainnet\",\r\n BASE_SEPOLIA_TESTNET = \"base-sepolia-testnet\",\r\n OASIS_SAPPHIRE_MAINNET = \"oasis-sapphire-mainnet\",\r\n SYNDR_TESTNET = \"syndr-testnet\",\r\n OASIS_SAPPHIRE_TESTNET = \"oasis-sapphire-testnet\",\r\n CELO_MAINNET = \"celo-mainnet\",\r\n X1_MAINNET = \"x1-mainnet\",\r\n HYPEREVM_MAINNET = \"hyperevm-mainnet\",\r\n HORIZEN_EON_MAINNET = \"horizen-eon-mainnet\",\r\n HORIZEN_GOBI_TESTNET = \"horizen-gobi-testnet\",\r\n FRAXTAL_MAINNET = \"fraxtal-mainnet\",\r\n APECHAIN_TESTNET = \"apechain-testnet\",\r\n REDSTONE_MAINNET = \"redstone-mainnet\",\r\n SEI_MAINNET = \"sei-mainnet\",\r\n APECHAIN_MAINNET = \"apechain-mainnet\",\r\n UNICHAIN_SEPOLIA_TESTNET = \"unichain-sepolia-testnet\",\r\n WORLD_MAINNET = \"world-mainnet\",\r\n WORLD_SEPOLIA_TESTNET = \"world-sepolia-testnet\",\r\n LENS_SEPOLIA_TESTNET = \"lens-sepolia-testnet\",\r\n INK_SEPOLIA_TESTNET = \"ink-sepolia-testnet\",\r\n INK_MAINNET = \"ink-mainnet\",\r\n LENS_MAINNET = \"lens-mainnet\",\r\n AVALANCHE_MELD_TESTNET = \"avalanche-meld-testnet\",\r\n AVALANCHE_MELD_MAINNET = \"avalanche-meld-mainnet\",\r\n GUNZILLA_TESTNET = \"gunzilla-testnet\",\r\n ZORA_MAINNET = \"zora-mainnet\",\r\n ZORA_SEPOLIA_TESTNET = \"zora-sepolia-testnet\",\r\n ZKSYNC_MAINNET = \"zksync-mainnet\",\r\n ZKSYNC_SEPOLIA_TESTNET = \"zksync-sepolia-testnet\",\r\n BNB_OPBNB_TESTNET = \"bnb-opbnb-testnet\",\r\n BNB_OPBNB_MAINNET = \"bnb-opbnb-mainnet\",\r\n ZETACHAIN_TESTNET = \"zetachain-testnet\",\r\n ZETACHAIN_MAINNET = \"zetachain-mainnet\",\r\n KINTO_TESTNET = \"kinto-testnet\",\r\n GNOSIS_MAINNET = \"gnosis-mainnet\",\r\n GNOSIS_TESTNET = \"gnosis-testnet\",\r\n VICTION_MAINNET = \"viction-mainnet\",\r\n VICTION_TESTNET = \"viction-testnet\",\r\n TAIKO_MAINNET = \"taiko-mainnet\",\r\n TAIKO_HEKLA_TESTNET = \"taiko-hekla-testnet\",\r\n MERLIN_MAINNET = \"merlin-mainnet\",\r\n MERLIN_TESTNET = \"merlin-testnet\",\r\n MOVEMENT_MEVM_TESTNET = \"movement-mevm-testnet\",\r\n BLAST_MAINNET = \"blast-mainnet\",\r\n SCROLL_MAINNET = \"scroll-mainnet\",\r\n}\r\n\r\nexport enum ChainID {\r\n ETH_MAINNET = 1,\r\n ETH_SEPOLIA = 11155111,\r\n ETH_HOLESKY = 17000,\r\n MATIC_MAINNET = 137,\r\n AVALANCHE_MAINNET = 43114,\r\n AVALANCHE_TESTNET = 43113,\r\n BSC_MAINNET = 56,\r\n BSC_TESTNET = 97,\r\n MOONBEAM_MAINNET = 1284,\r\n MOONBEAM_MOONBASE_ALPHA = 1287,\r\n MOONBEAM_MOONRIVER = 1285,\r\n ARBITRUM_MAINNET = 42161,\r\n ARBITRUM_NOVA_MAINNET = 42170,\r\n FANTOM_MAINNET = 250,\r\n FANTOM_TESTNET = 4002,\r\n PALM_MAINNET = 11297108109,\r\n PALM_TESTNET = 11297108099,\r\n BTC_MAINNET = 20090103,\r\n SOLANA_MAINNET = 1399811149,\r\n AXIE_MAINNET = 2020,\r\n OPTIMISM_MAINNET = 10,\r\n OPTIMISM_SEPOLIA = 11155420,\r\n CRONOS_ZKEVM_TESTNET = 282,\r\n CRONOS_ZKEVM_MAINNET = 388,\r\n AURORA_MAINNET = 1313161554,\r\n AURORA_TESTNET = 1313161555,\r\n EMERALD_PARATIME_MAINNET = 42262,\r\n DEFI_KINGDOMS_MAINNET = 53935,\r\n DEFI_KINGDOMS_TESTNET = 335,\r\n BOBA_MAINNET = 288,\r\n BOBA_BNB_MAINNET = 56288,\r\n BOBA_BNB_TESTNET = 9728,\r\n SCROLL_SEPOLIA_TESTNET = 534351,\r\n METIS_MAINNET = 1088,\r\n AVALANCHE_DEXALOT_MAINNET = 432204,\r\n AVALANCHE_DEXALOT_TESTNET = 432201,\r\n AVALANCHE_SHRAPNEL_MAINNET = 2044,\r\n AVALANCHE_NUMBERS = 10507,\r\n AVALANCHE_XANACHAIN = 8888,\r\n AVALANCHE_STEP_NETWORK = 1234,\r\n AVALANCHE_SHRAPNEL_TESTNET = 2038,\r\n AVALANCHE_BEAM_TESTNET = 13337,\r\n AVALANCHE_BLITZ_TESTNET = 1343,\r\n AVALANCHE_UPTN = 6119,\r\n AVALANCHE_BEAM_MAINNET = 4337,\r\n AVALANCHE_MIRAI_TESTNET = 2195,\r\n BERACHAIN_MAINNET = 80094,\r\n UNICHAIN_MAINNET = 130,\r\n CANTO_MAINNET = 7700,\r\n FLARENETWORKS_FLARE_MAINNET = 14,\r\n FLARENETWORKS_FLARE_TESTNET = 114,\r\n LINEA_MAINNET = 59144,\r\n POLYGON_ZKEVM_MAINNET = 1101,\r\n LINEA_SEPOLIA_TESTNET = 59141,\r\n POLYGON_ZKEVM_TESTNET = 1422,\r\n POLYGON_AMOY_TESTNET = 80002,\r\n MANTLE_MAINNET = 5000,\r\n POLYGON_ZKEVM_CARDONA_TESTNET = 2442,\r\n MANTLE_SEPOLIA_TESTNET = 5003,\r\n BASE_MAINNET = 8453,\r\n BASE_SEPOLIA_TESTNET = 84532,\r\n OASIS_SAPPHIRE_MAINNET = 23294,\r\n SYNDR_TESTNET = 412346,\r\n OASIS_SAPPHIRE_TESTNET = 23295,\r\n CELO_MAINNET = 42220,\r\n X1_MAINNET = 196,\r\n HYPEREVM_MAINNET = 999,\r\n HORIZEN_EON_MAINNET = 7332,\r\n HORIZEN_GOBI_TESTNET = 1663,\r\n FRAXTAL_MAINNET = 252,\r\n APECHAIN_TESTNET = 1798,\r\n REDSTONE_MAINNET = 690,\r\n SEI_MAINNET = 1329,\r\n APECHAIN_MAINNET = 33139,\r\n UNICHAIN_SEPOLIA_TESTNET = 1301,\r\n WORLD_MAINNET = 480,\r\n WORLD_SEPOLIA_TESTNET = 4801,\r\n LENS_SEPOLIA_TESTNET = 37111,\r\n INK_SEPOLIA_TESTNET = 763373,\r\n INK_MAINNET = 57073,\r\n LENS_MAINNET = 232,\r\n AVALANCHE_MELD_TESTNET = 222000222,\r\n AVALANCHE_MELD_MAINNET = 333000333,\r\n GUNZILLA_TESTNET = 49321,\r\n ZORA_MAINNET = 7777777,\r\n ZORA_SEPOLIA_TESTNET = 999999999,\r\n ZKSYNC_MAINNET = 324,\r\n ZKSYNC_SEPOLIA_TESTNET = 300,\r\n BNB_OPBNB_TESTNET = 5611,\r\n BNB_OPBNB_MAINNET = 204,\r\n ZETACHAIN_TESTNET = 7001,\r\n ZETACHAIN_MAINNET = 7000,\r\n KINTO_TESTNET = 42888,\r\n GNOSIS_MAINNET = 100,\r\n GNOSIS_TESTNET = 10200,\r\n VICTION_MAINNET = 88,\r\n VICTION_TESTNET = 89,\r\n TAIKO_MAINNET = 167000,\r\n TAIKO_HEKLA_TESTNET = 167009,\r\n MERLIN_MAINNET = 4200,\r\n MERLIN_TESTNET = 686868,\r\n MOVEMENT_MEVM_TESTNET = 336,\r\n BLAST_MAINNET = 81457,\r\n SCROLL_MAINNET = 534352,\r\n}\r\n\r\nexport type Chain = ChainID | ChainName | `${ChainName}` | `${ChainID}`;\r\n\r\nexport type Source = \"Ponder\" | \"GoldRush\" | \"Viem\";\r\n\r\nexport type Quote =\r\n | \"USD\"\r\n | \"CAD\"\r\n | \"EUR\"\r\n | \"SGD\"\r\n | \"INR\"\r\n | \"JPY\"\r\n | \"VND\"\r\n | \"CNY\"\r\n | \"KRW\"\r\n | \"RUB\"\r\n | \"TRY\"\r\n | \"NGN\"\r\n | \"ARS\"\r\n | \"AUD\"\r\n | \"CHF\"\r\n | \"GBP\";\r\n\r\nexport type CryptocurrencyQuote = \"ETH\" | \"BTC\";\r\n\r\nexport type ChainLabel = \"Foundational\" | \"Frontier\" | \"Community\";\r\n\r\nexport interface Pagination {\r\n /** * True is there is another page. */\r\n has_more: boolean;\r\n /** * The requested page number. */\r\n page_number: number;\r\n /** * The requested number of items on the current page. */\r\n page_size: number;\r\n /** * The total number of items across all pages for this request. */\r\n total_count: number;\r\n}\r\n\r\nexport interface PaginationLinks {\r\n /** * URL link to the next page. */\r\n prev: string;\r\n /** * URL link to the previous page. */\r\n next: string;\r\n}\r\n\r\nexport interface NftCollectionAttribute {\r\n trait_type: string;\r\n value: string;\r\n}\r\n\r\nexport type NftData = Nullable<{\r\n /** * The token's id. */\r\n token_id: bigint;\r\n token_url: string;\r\n /** * The original minter. */\r\n original_owner: string;\r\n /** * The current holder of this NFT. */\r\n current_owner: string;\r\n external_data: NftExternalData;\r\n /** * If `true`, the asset data is available from the Covalent CDN. */\r\n asset_cached: boolean;\r\n /** * If `true`, the image data is available from the Covalent CDN. */\r\n image_cached: boolean;\r\n}>;\r\n\r\nexport interface NftExternalData {\r\n name: string;\r\n description: string;\r\n asset_url: string;\r\n asset_file_extension: string;\r\n asset_mime_type: string;\r\n asset_size_bytes: string;\r\n image: string;\r\n image_256: string;\r\n image_512: string;\r\n image_1024: string;\r\n animation_url: string;\r\n external_url: string;\r\n attributes: NftCollectionAttribute[];\r\n thumbnails: NFTThumbnails;\r\n}\r\n\r\nexport interface NFTThumbnails {\r\n image256: string;\r\n image512: string;\r\n image1024: string;\r\n image_opengraph_url: string;\r\n thumbhash: string;\r\n}\r\n\r\nexport interface DecodedItem {\r\n name: string;\r\n signature: string;\r\n params: Param[];\r\n}\r\n\r\nexport interface Param {\r\n name: string;\r\n type: string;\r\n indexed: boolean;\r\n decoded: boolean;\r\n value: string;\r\n}\r\n\r\nexport type LogEvent = Nullable<{\r\n /** * The block signed timestamp in UTC. */\r\n block_signed_at: Date;\r\n /** * The height of the block. */\r\n block_height: number;\r\n /** * The offset is the position of the tx in the block. */\r\n tx_offset: number;\r\n /** * The offset is the position of the log entry within an event log. */\r\n log_offset: number;\r\n /** * The requested transaction hash. */\r\n tx_hash: string;\r\n /** * The log topics in raw data. */\r\n raw_log_topics: string[];\r\n /** * Use contract decimals to format the token balance for display purposes - divide the balance by `10^{contract_decimals}`. */\r\n sender_contract_decimals: number;\r\n /** * The name of the sender. */\r\n sender_name: string;\r\n sender_contract_ticker_symbol: string;\r\n /** * The address of the sender. */\r\n sender_address: string;\r\n /** * The label of the sender address. */\r\n sender_address_label: string;\r\n /** * The contract logo URL. */\r\n sender_logo_url: string;\r\n /** * A list of supported standard ERC interfaces, eg: `ERC20` and `ERC721`. */\r\n supports_erc: string[];\r\n /** * The address of the deployed UniswapV2 like factory contract for this DEX. */\r\n sender_factory_address: string;\r\n /** * The log events in raw. */\r\n raw_log_data: string;\r\n /** * The decoded item. */\r\n decoded: DecodedItem;\r\n}>;\r\n\r\nexport interface ContractMetadata {\r\n /** * Use contract decimals to format the token balance for display purposes - divide the balance by `10^{contract_decimals}`. */\r\n contract_decimals: number;\r\n /** * The string returned by the `name()` method. */\r\n contract_name: string;\r\n /** * The ticker symbol for this contract. This field is set by a developer and non-unique across a network. */\r\n contract_ticker_symbol: string;\r\n /** * Use the relevant `contract_address` to lookup prices, logos, token transfers, etc. */\r\n contract_address: string;\r\n /** * A list of supported standard ERC interfaces, eg: `ERC20` and `ERC721`. */\r\n supports_erc: string[];\r\n /** * The contract logo URL. */\r\n logo_url: string;\r\n}\r\n\r\nexport interface Explorer {\r\n /** * The name of the explorer. */\r\n label: string;\r\n /** * The URL of the explorer. */\r\n url: string;\r\n}\r\n\r\nexport interface LogoUrls {\r\n /** * The token logo URL. */\r\n token_logo_url: string;\r\n /** * The protocol logo URL. */\r\n protocol_logo_url: string;\r\n /** * The chain logo URL. */\r\n chain_logo_url: string;\r\n}\r\n\r\nexport type GoldRushResponse<T> =\r\n | {\r\n data: T;\r\n error: false | null;\r\n error_code: null;\r\n error_message: null;\r\n }\r\n | {\r\n data: null;\r\n error: true;\r\n error_code: number;\r\n error_message: string;\r\n };\r\n\r\nexport interface GoldRushClientSettings {\r\n /** * Toggle to analyze the execution of each api request. */\r\n debug?: boolean;\r\n /** * The number of concurrent requests allowed. */\r\n threadCount?: number;\r\n /** Toggle to turn on and off retry logic */\r\n enableRetry?: boolean;\r\n /** Set the retry logic count */\r\n maxRetries?: number;\r\n /** Set the retry delay in ms */\r\n retryDelay?: number;\r\n /** Set the source of the usage */\r\n source?: Source | string;\r\n}\r\n\r\nexport type Nullable<T> = {\r\n [P in keyof T]: T[P] | null;\r\n};\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { type BalancesResponse } from \"../utils/types/BalanceService.types\";\r\nimport {\r\n type BitcoinHdWalletBalancesResponse,\r\n type BitcoinTransactionResponse,\r\n type GetBitcoinHdWalletBalancesQueryParamOpts,\r\n type GetBitcoinNonHdWalletBalancesQueryParamOpts,\r\n type GetTransactionsForBitcoinAddressParamOpts,\r\n} from \"../utils/types/BitcoinService.types\";\r\nimport { ChainName, type GoldRushResponse } from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Bitcoin APIs\r\n *\r\n */\r\nexport class BitcoinService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * @param {string} walletAddress - The requested Bitcoin HD address.\r\n * @param {GetBitcoinHdWalletBalancesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n *\r\n */\r\n public async getBitcoinHdWalletBalances(\r\n walletAddress: string,\r\n queryParamOpts?: GetBitcoinHdWalletBalancesQueryParamOpts\r\n ): Promise<GoldRushResponse<BitcoinHdWalletBalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${ChainName.BTC_MAINNET}/address/${walletAddress}/hd_wallets`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<BitcoinHdWalletBalancesResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BitcoinHdWalletBalancesResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Used to fetch the full transaction history of a Bitcoin wallet.\r\n *\r\n * @param {GetTransactionsForBitcoinAddressParamOpts} queryParamOpts\r\n * - `address`: The bitcoin address to query.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n */\r\n public async getTransactionsForBtcAddress(\r\n queryParamOpts?: GetTransactionsForBitcoinAddressParamOpts\r\n ): Promise<GoldRushResponse<BitcoinTransactionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `cq/covalent/app/bitcoin/transactions/`,\r\n [\r\n {\r\n key: \"address\",\r\n value: queryParamOpts?.address,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BitcoinTransactionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BitcoinTransactionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the tokens held by an address. Response includes spot prices and other metadata.\r\n *\r\n * @param {string} walletAddress - The requested Bitcoin Non HD address.\r\n * @param {GetBitcoinNonHdWalletBalancesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n *\r\n */\r\n public async getBitcoinNonHdWalletBalances(\r\n walletAddress: string,\r\n queryParamOpts?: GetBitcoinNonHdWalletBalancesQueryParamOpts\r\n ): Promise<GoldRushResponse<BalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${ChainName.BTC_MAINNET}/address/${walletAddress}/balances_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BalancesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n token_balance: bigIntParser(nftItem.token_balance),\r\n token_price_wei: bigIntParser(nftItem.token_price_wei),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BalancesResponse>(endpoint, parseData);\r\n }\r\n}\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport {\r\n type Chain,\r\n type GoldRushResponse,\r\n} from \"../utils/types/Generic.types\";\r\nimport {\r\n type ChainCollectionResponse,\r\n type CheckOwnershipInNftQueryParamOpts,\r\n type GetChainCollectionsQueryParamOpts,\r\n type GetCollectionMarketDataQueryParamOpts,\r\n type GetNftMetadataForGivenTokenIdForContractQueryParamOpts,\r\n type GetNftTransactionsForContractTokenIdQueryParamOpts,\r\n type GetNftsForAddressQueryParamOpts,\r\n type GetTokenIdsForContractWithMetadataQueryParamOpts,\r\n type NftAddressBalanceNftResponse,\r\n type NftCollectionAttributesForTraitResponse,\r\n type NftCollectionFloorPriceResponse,\r\n type NftCollectionSalesCountResponse,\r\n type NftCollectionTraitsResponse,\r\n type NftCollectionTraitsSummaryResponse,\r\n type NftCollectionVolumeResponse,\r\n type NftMetadataResponse,\r\n type NftOwnershipForCollectionResponse,\r\n type NftTransactionsResponse,\r\n} from \"../utils/types/NftService.types\";\r\n\r\n/**\r\n * NFTs API\r\n *\r\n */\r\nexport class NftService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the list of NFT collections with downloaded and cached off chain data like token metadata and asset files.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {GetChainCollectionsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n *\r\n */\r\n public async *getChainCollections(\r\n chainName: Chain,\r\n queryParamOpts?: GetChainCollectionsQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<ChainCollectionResponse>> {\r\n const endpoint = endpointGenerator(`${chainName}/nft/collections`, [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainCollectionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((collectionItem) => ({\r\n ...collectionItem,\r\n last_scraped_at: collectionItem.last_scraped_at\r\n ? new Date(collectionItem.last_scraped_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<ChainCollectionResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the list of NFT collections with downloaded and cached off chain data like token metadata and asset files.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {GetChainCollectionsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n *\r\n */\r\n public async getChainCollectionsByPage(\r\n chainName: Chain,\r\n queryParamOpts?: GetChainCollectionsQueryParamOpts\r\n ): Promise<GoldRushResponse<ChainCollectionResponse>> {\r\n const endpoint = endpointGenerator(`${chainName}/nft/collections`, [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainCollectionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((collectionItem) => ({\r\n ...collectionItem,\r\n last_scraped_at: collectionItem.last_scraped_at\r\n ? new Date(collectionItem.last_scraped_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ChainCollectionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render the NFTs (including ERC721 and ERC1155) held by an address.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n * - `noNftAssetMetadata`: If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async getNftsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetNftsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<NftAddressBalanceNftResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/balances_nft`,\r\n [\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n {\r\n key: \"no-nft-asset-metadata\",\r\n value: queryParamOpts?.noNftAssetMetadata,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftAddressBalanceNftResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftAddressBalanceNftResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get NFT token IDs with metadata from a collection. Useful for building NFT card displays.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenIdsForContractWithMetadataQueryParamOpts} queryParamOpts\r\n * - `noMetadata`: Omit metadata.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `traitsFilter`: Filters NFTs based on a specific trait. If this filter is used, the API will return all NFTs with the specified trait. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `valuesFilter`: Filters NFTs based on a specific trait value. If this filter is used, the API will return all NFTs with the specified trait value. If used with \"traits-filter\", only NFTs matching both filters will be returned. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async *getTokenIdsForContractWithMetadata(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetTokenIdsForContractWithMetadataQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<NftMetadataResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${contractAddress}/metadata`,\r\n [\r\n {\r\n key: \"no-metadata\",\r\n value: queryParamOpts?.noMetadata,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"traits-filter\",\r\n value: queryParamOpts?.traitsFilter,\r\n },\r\n {\r\n key: \"values-filter\",\r\n value: queryParamOpts?.valuesFilter,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftMetadataResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n nft_data: {\r\n ...tokenItem.nft_data!,\r\n token_id: bigIntParser(tokenItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<NftMetadataResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get NFT token IDs with metadata from a collection. Useful for building NFT card displays.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenIdsForContractWithMetadataQueryParamOpts} queryParamOpts\r\n * - `noMetadata`: Omit metadata.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `traitsFilter`: Filters NFTs based on a specific trait. If this filter is used, the API will return all NFTs with the specified trait. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `valuesFilter`: Filters NFTs based on a specific trait value. If this filter is used, the API will return all NFTs with the specified trait value. If used with \"traits-filter\", only NFTs matching both filters will be returned. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async getTokenIdsForContractWithMetadataByPage(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetTokenIdsForContractWithMetadataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftMetadataResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${contractAddress}/metadata`,\r\n [\r\n {\r\n key: \"no-metadata\",\r\n value: queryParamOpts?.noMetadata,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"traits-filter\",\r\n value: queryParamOpts?.traitsFilter,\r\n },\r\n {\r\n key: \"values-filter\",\r\n value: queryParamOpts?.valuesFilter,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftMetadataResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n nft_data: {\r\n ...tokenItem.nft_data!,\r\n token_id: bigIntParser(tokenItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftMetadataResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get a single NFT metadata by token ID from a collection. Useful for building NFT card displays.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} tokenId - The requested token ID.\r\n * @param {GetNftMetadataForGivenTokenIdForContractQueryParamOpts} queryParamOpts\r\n * - `noMetadata`: Omit metadata.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async getNftMetadataForGivenTokenIdForContract(\r\n chainName: Chain,\r\n contractAddress: string,\r\n tokenId: string,\r\n queryParamOpts?: GetNftMetadataForGivenTokenIdForContractQueryParamOpts\r\n ): Promise<GoldRushResponse<NftMetadataResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${contractAddress}/metadata/${tokenId}`,\r\n [\r\n {\r\n key: \"no-metadata\",\r\n value: queryParamOpts?.noMetadata,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftMetadataResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n nft_data: {\r\n ...tokenItem.nft_data!,\r\n token_id: bigIntParser(tokenItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftMetadataResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all transactions of an NFT token. Useful for building a transaction history table or price chart.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} tokenId - The requested token ID.\r\n * @param {GetNftTransactionsForContractTokenIdQueryParamOpts} queryParamOpts\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n *\r\n */\r\n public async getNftTransactionsForContractTokenId(\r\n chainName: Chain,\r\n contractAddress: string,\r\n tokenId: string,\r\n queryParamOpts?: GetNftTransactionsForContractTokenIdQueryParamOpts\r\n ): Promise<GoldRushResponse<NftTransactionsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/tokens/${contractAddress}/nft_transactions/${tokenId}`,\r\n [\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftTransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((nftItem) => ({\r\n ...nftItem,\r\n nft_transactions: nftItem.nft_transactions\r\n ? nftItem.nft_transactions.map((txItem) => ({\r\n ...txItem,\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftTransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the traits of a collection as seen in rarity calculators.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n *\r\n */\r\n public async getTraitsForCollection(\r\n chainName: Chain,\r\n collectionContract: string\r\n ): Promise<GoldRushResponse<NftCollectionTraitsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${collectionContract}/traits`,\r\n []\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftCollectionTraitsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionTraitsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get the count of unique values for traits within an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} trait - The requested trait.\r\n *\r\n */\r\n public async getAttributesForTraitInCollection(\r\n chainName: Chain,\r\n collectionContract: string,\r\n trait: string\r\n ): Promise<GoldRushResponse<NftCollectionAttributesForTraitResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${collectionContract}/traits/${trait}/attributes`,\r\n []\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionAttributesForTraitResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionAttributesForTraitResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to calculate rarity scores for a collection based on its traits.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n *\r\n */\r\n public async getCollectionTraitsSummary(\r\n chainName: Chain,\r\n collectionContract: string\r\n ): Promise<GoldRushResponse<NftCollectionTraitsSummaryResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${collectionContract}/traits_summary`,\r\n []\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionTraitsSummaryResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionTraitsSummaryResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render a price floor chart for an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionAddress - The requested address.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalFloorPricesForCollection(\r\n chainName: Chain,\r\n collectionAddress: string,\r\n queryParamOpts?: GetCollectionMarketDataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftCollectionFloorPriceResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft_market/${collectionAddress}/floor_price`,\r\n [\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quote_currency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionFloorPriceResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((floorPriceItem) => ({\r\n ...floorPriceItem,\r\n date: floorPriceItem.date ? new Date(floorPriceItem.date) : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionFloorPriceResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build a time-series chart of the transaction volume of an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionAddress - The requested address.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalVolumeForCollection(\r\n chainName: Chain,\r\n collectionAddress: string,\r\n queryParamOpts?: GetCollectionMarketDataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftCollectionVolumeResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft_market/${collectionAddress}/volume`,\r\n [\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quote_currency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftCollectionVolumeResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((floorPriceItem) => ({\r\n ...floorPriceItem,\r\n date: floorPriceItem.date ? new Date(floorPriceItem.date) : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionVolumeResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build a time-series chart of the sales count of an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionAddress - The requested address.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalSalesCountForCollection(\r\n chainName: Chain,\r\n collectionAddress: string,\r\n queryParamOpts?: GetCollectionMarketDataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftCollectionSalesCountResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft_market/${collectionAddress}/sale_count`,\r\n [\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quote_currency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionSalesCountResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((floorPriceItem) => ({\r\n ...floorPriceItem,\r\n date: floorPriceItem.date ? new Date(floorPriceItem.date) : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionSalesCountResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to verify ownership of NFTs (including ERC-721 and ERC-1155) within a collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} collectionContract - The requested collection address.\r\n * @param {CheckOwnershipInNftQueryParamOpts} queryParamOpts\r\n * - `traitsFilter`: Filters NFTs based on a specific trait. If this filter is used, the API will return all NFTs with the specified trait. Must be used with \"values-filter\", is case-sensitive, and requires proper URL encoding.\r\n * - `valuesFilter`: Filters NFTs based on a specific trait value. If this filter is used, the API will return all NFTs with the specified trait value. Must be used with \"traits-filter\", is case-sensitive, and requires proper URL encoding.\r\n *\r\n */\r\n public async checkOwnershipInNft(\r\n chainName: Chain,\r\n walletAddress: string,\r\n collectionContract: string,\r\n queryParamOpts?: CheckOwnershipInNftQueryParamOpts\r\n ): Promise<GoldRushResponse<NftOwnershipForCollectionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/collection/${collectionContract}`,\r\n [\r\n {\r\n key: \"traits-filter\",\r\n value: queryParamOpts?.traitsFilter,\r\n },\r\n {\r\n key: \"values-filter\",\r\n value: queryParamOpts?.valuesFilter,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftOwnershipForCollectionResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((nftItem) => ({\r\n ...nftItem,\r\n balance: bigIntParser(nftItem.balance),\r\n balance_24h: bigIntParser(nftItem.balance_24h),\r\n token_id: bigIntParser(nftItem.token_id),\r\n nft_data: {\r\n ...nftItem.nft_data!,\r\n token_id: bigIntParser(nftItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftOwnershipForCollectionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to verify ownership of a specific token (ERC-721 or ERC-1155) within a collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} tokenId - The requested token ID.\r\n *\r\n */\r\n public async checkOwnershipInNftForSpecificTokenId(\r\n chainName: Chain,\r\n walletAddress: string,\r\n collectionContract: string,\r\n tokenId: string\r\n ): Promise<GoldRushResponse<NftOwnershipForCollectionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/collection/${collectionContract}/token/${tokenId}`,\r\n []\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftOwnershipForCollectionResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n token_id: bigIntParser(balanceItem.token_id),\r\n last_transfered_at: balanceItem.last_transfered_at\r\n ? new Date(balanceItem.last_transfered_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftOwnershipForCollectionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport type {\r\n Chain,\r\n GoldRushResponse,\r\n Quote,\r\n} from \"../utils/types/Generic.types\";\r\nimport type {\r\n GetTokenPricesQueryParamOpts,\r\n PoolSpotPriceQueryParamsOpts,\r\n PoolSpotPricesResponse,\r\n TokenPricesResponse,\r\n} from \"../utils/types/PricingService.types\";\r\n\r\n/**\r\n * Pricing API\r\n *\r\n */\r\nexport class PricingService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to get historic prices of a token between date ranges. Supports native tokens.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * @param {string} contractAddress - Contract address for the token. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically. Supports multiple contract addresses separated by commas.\r\n * @param {GetTokenPricesQueryParamOpts} queryParamOpts\r\n * - `from`: The start day of the historical price range (YYYY-MM-DD).\r\n * - `to`: The end day of the historical price range (YYYY-MM-DD).\r\n * - `pricesAtAsc`: Sort the prices in chronological ascending order. By default, it's set to `false` and returns prices in chronological descending order.\r\n *\r\n */\r\n public async getTokenPrices(\r\n chainName: Chain,\r\n quoteCurrency: Quote,\r\n contractAddress: string,\r\n queryParamOpts?: GetTokenPricesQueryParamOpts\r\n ): Promise<GoldRushResponse<TokenPricesResponse[]>> {\r\n const endpoint = endpointGenerator(\r\n `pricing/historical_by_addresses_v2/${chainName}/${quoteCurrency}/${contractAddress}`,\r\n [\r\n {\r\n key: \"from\",\r\n value: queryParamOpts?.from,\r\n },\r\n {\r\n key: \"to\",\r\n value: queryParamOpts?.to,\r\n },\r\n {\r\n key: \"prices-at-asc\",\r\n value: queryParamOpts?.pricesAtAsc,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenPricesResponse[]>) => {\r\n if (data.data) {\r\n data.data.forEach((dataItem) => {\r\n dataItem.update_at = dataItem.update_at\r\n ? new Date(dataItem.update_at)\r\n : null;\r\n dataItem.items = dataItem.items\r\n ? dataItem.items.map((priceItem) => ({\r\n ...priceItem,\r\n date: priceItem.date ? new Date(priceItem.date) : null,\r\n }))\r\n : null;\r\n });\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TokenPricesResponse[]>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Get the spot token pair prices for a specified pool contract address. Supports pools on Uniswap V2, V3 and their forks.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} contractAddress - The pool contract address.\r\n * @param {GetTokenPricesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC` and `ETH`.\r\n *\r\n */\r\n public async getPoolSpotPrices(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: PoolSpotPriceQueryParamsOpts\r\n ): Promise<GoldRushResponse<PoolSpotPricesResponse[]>> {\r\n const endpoint = endpointGenerator(\r\n `pricing/spot_prices/${chainName}/pools/${contractAddress}`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<PoolSpotPricesResponse[]>) => {\r\n if (data.data) {\r\n data.data.forEach((dataItem) => {\r\n dataItem.updated_at = dataItem.updated_at\r\n ? new Date(dataItem.updated_at)\r\n : null;\r\n });\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<PoolSpotPricesResponse[]>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\nimport { type Execution } from \"../utils/functions/execution\";\nimport {\n type Chain,\n type GoldRushResponse,\n} from \"../utils/types/Generic.types\";\nimport {\n type ApprovalsResponse,\n type NftApprovalsResponse,\n} from \"../utils/types/SecurityService.types\";\n\n/**\n * Approvals API\n *\n */\nexport class SecurityService {\n constructor(private execution: Execution) {}\n\n /**\n *\n * Commonly used to get a list of approvals across all token contracts categorized by spenders for a wallet’s assets.\n *\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\n *\n */\n public async getApprovals(\n chainName: Chain,\n walletAddress: string\n ): Promise<GoldRushResponse<ApprovalsResponse>> {\n const endpoint = endpointGenerator(\n `${chainName}/approvals/${walletAddress}`,\n []\n );\n\n const parseData = (data: GoldRushResponse<ApprovalsResponse>) => {\n if (data.data) {\n data.data.updated_at = data.data.updated_at\n ? new Date(data.data.updated_at)\n : null;\n data.data.items = data.data.items\n ? data.data.items.map((approvalItem) => ({\n ...approvalItem,\n balance: bigIntParser(approvalItem.balance),\n spenders: approvalItem.spenders\n ? approvalItem.spenders.map((spenderItem) => ({\n ...spenderItem,\n block_signed_at: spenderItem.block_signed_at\n ? new Date(spenderItem.block_signed_at)\n : null,\n }))\n : null,\n }))\n : null;\n }\n\n return data;\n };\n\n return await this.execution.execute<ApprovalsResponse>(endpoint, parseData);\n }\n\n /**\n *\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\n \n *\n */\n public async getNftApprovals(\n chainName: Chain,\n walletAddress: string\n ): Promise<GoldRushResponse<NftApprovalsResponse>> {\n const endpoint = endpointGenerator(\n `${chainName}/nft/approvals/${walletAddress}`,\n []\n );\n\n const parseData = (data: GoldRushResponse<NftApprovalsResponse>) => {\n if (data.data) {\n data.data.updated_at = data.data.updated_at\n ? new Date(data.data.updated_at)\n : null;\n data.data.items = data.data.items\n ? data.data.items.map((approvalItem) => ({\n ...approvalItem,\n token_balances: approvalItem.token_balances\n ? approvalItem.token_balances.map((balanceItem) => ({\n ...balanceItem,\n token_balance: bigIntParser(balanceItem.token_balance),\n token_id: bigIntParser(balanceItem.token_id),\n }))\n : null,\n }))\n : null;\n }\n\n return data;\n };\n\n return await this.execution.execute<NftApprovalsResponse>(\n endpoint,\n parseData\n );\n }\n}\n","function extendedTypeof(val) {\n if (val === null) {\n return \"null\";\n }\n if (Array.isArray(val)) {\n return \"array\";\n }\n return typeof val;\n}\nfunction isObject(val) {\n return extendedTypeof(val) === \"object\";\n}\nfunction isAsyncIterable(val) {\n return typeof Object(val)[Symbol.asyncIterator] === \"function\";\n}\nfunction isAsyncGenerator(val) {\n return isObject(val) && typeof Object(val)[Symbol.asyncIterator] === \"function\" && typeof val.return === \"function\";\n}\nfunction areGraphQLFormattedErrors(obj) {\n return Array.isArray(obj) && // must be at least one error\n obj.length > 0 && // error has at least a message\n obj.every((ob) => \"message\" in ob);\n}\nfunction limitCloseReason(reason, whenTooLong) {\n return reason.length < 124 ? reason : whenTooLong;\n}\n\nconst GRAPHQL_TRANSPORT_WS_PROTOCOL = \"graphql-transport-ws\";\nconst DEPRECATED_GRAPHQL_WS_PROTOCOL = \"graphql-ws\";\nvar CloseCode = /* @__PURE__ */ ((CloseCode2) => {\n CloseCode2[CloseCode2[\"InternalServerError\"] = 4500] = \"InternalServerError\";\n CloseCode2[CloseCode2[\"InternalClientError\"] = 4005] = \"InternalClientError\";\n CloseCode2[CloseCode2[\"BadRequest\"] = 4400] = \"BadRequest\";\n CloseCode2[CloseCode2[\"BadResponse\"] = 4004] = \"BadResponse\";\n CloseCode2[CloseCode2[\"Unauthorized\"] = 4401] = \"Unauthorized\";\n CloseCode2[CloseCode2[\"Forbidden\"] = 4403] = \"Forbidden\";\n CloseCode2[CloseCode2[\"SubprotocolNotAcceptable\"] = 4406] = \"SubprotocolNotAcceptable\";\n CloseCode2[CloseCode2[\"ConnectionInitialisationTimeout\"] = 4408] = \"ConnectionInitialisationTimeout\";\n CloseCode2[CloseCode2[\"ConnectionAcknowledgementTimeout\"] = 4504] = \"ConnectionAcknowledgementTimeout\";\n CloseCode2[CloseCode2[\"SubscriberAlreadyExists\"] = 4409] = \"SubscriberAlreadyExists\";\n CloseCode2[CloseCode2[\"TooManyInitialisationRequests\"] = 4429] = \"TooManyInitialisationRequests\";\n return CloseCode2;\n})(CloseCode || {});\nvar MessageType = /* @__PURE__ */ ((MessageType2) => {\n MessageType2[\"ConnectionInit\"] = \"connection_init\";\n MessageType2[\"ConnectionAck\"] = \"connection_ack\";\n MessageType2[\"Ping\"] = \"ping\";\n MessageType2[\"Pong\"] = \"pong\";\n MessageType2[\"Subscribe\"] = \"subscribe\";\n MessageType2[\"Next\"] = \"next\";\n MessageType2[\"Error\"] = \"error\";\n MessageType2[\"Complete\"] = \"complete\";\n return MessageType2;\n})(MessageType || {});\nfunction validateMessage(val) {\n if (!isObject(val)) {\n throw new Error(\n `Message is expected to be an object, but got ${extendedTypeof(val)}`\n );\n }\n if (!val.type) {\n throw new Error(`Message is missing the 'type' property`);\n }\n if (typeof val.type !== \"string\") {\n throw new Error(\n `Message is expects the 'type' property to be a string, but got ${extendedTypeof(\n val.type\n )}`\n );\n }\n switch (val.type) {\n case \"connection_init\" /* ConnectionInit */:\n case \"connection_ack\" /* ConnectionAck */:\n case \"ping\" /* Ping */:\n case \"pong\" /* Pong */: {\n if (val.payload != null && !isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object or nullish or missing, but got \"${val.payload}\"`\n );\n }\n break;\n }\n case \"subscribe\" /* Subscribe */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n if (typeof val.payload.query !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'query' property to be a string, but got ${extendedTypeof(\n val.payload.query\n )}`\n );\n }\n if (val.payload.variables != null && !isObject(val.payload.variables)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'variables' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.variables\n )}`\n );\n }\n if (val.payload.operationName != null && extendedTypeof(val.payload.operationName) !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'operationName' property to be a string or nullish or missing, but got ${extendedTypeof(\n val.payload.operationName\n )}`\n );\n }\n if (val.payload.extensions != null && !isObject(val.payload.extensions)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'extensions' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.extensions\n )}`\n );\n }\n break;\n }\n case \"next\" /* Next */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"error\" /* Error */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!areGraphQLFormattedErrors(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an array of GraphQL errors, but got ${JSON.stringify(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"complete\" /* Complete */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n break;\n }\n default:\n throw new Error(`Invalid message 'type' property \"${val.type}\"`);\n }\n return val;\n}\nfunction parseMessage(data, reviver) {\n return validateMessage(\n typeof data === \"string\" ? JSON.parse(data, reviver) : data\n );\n}\nfunction stringifyMessage(msg, replacer) {\n validateMessage(msg);\n return JSON.stringify(msg, replacer);\n}\n\nexport { CloseCode as C, DEPRECATED_GRAPHQL_WS_PROTOCOL as D, GRAPHQL_TRANSPORT_WS_PROTOCOL as G, MessageType as M, isAsyncGenerator as a, isAsyncIterable as b, isObject as i, limitCloseReason as l, parseMessage as p, stringifyMessage as s, validateMessage as v };\n","import { G as GRAPHQL_TRANSPORT_WS_PROTOCOL, s as stringifyMessage, M as MessageType, C as CloseCode, l as limitCloseReason, p as parseMessage, i as isObject } from './common-CGW11Fyb.js';\nexport { D as DEPRECATED_GRAPHQL_WS_PROTOCOL, v as validateMessage } from './common-CGW11Fyb.js';\n\nfunction createClient(options) {\n const {\n url,\n connectionParams,\n lazy = true,\n onNonLazyError = console.error,\n lazyCloseTimeout: lazyCloseTimeoutMs = 0,\n keepAlive = 0,\n disablePong,\n connectionAckWaitTimeout = 0,\n retryAttempts = 5,\n retryWait = async function randomisedExponentialBackoff(retries2) {\n const retryDelaySeconds = Math.pow(2, retries2);\n await new Promise(\n (resolve) => setTimeout(\n resolve,\n retryDelaySeconds * 1e3 + // add random timeout from 300ms to 3s\n Math.floor(Math.random() * (3e3 - 300) + 300)\n )\n );\n },\n shouldRetry = isLikeCloseEvent,\n on,\n webSocketImpl,\n /**\n * Generates a v4 UUID to be used as the ID using `Math`\n * as the random number generator. Supply your own generator\n * in case you need more uniqueness.\n *\n * Reference: https://gist.github.com/jed/982883\n */\n generateID = function generateUUID() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n },\n jsonMessageReplacer: replacer,\n jsonMessageReviver: reviver\n } = options;\n let ws;\n if (webSocketImpl) {\n if (!isWebSocket(webSocketImpl)) {\n throw new Error(\"Invalid WebSocket implementation provided\");\n }\n ws = webSocketImpl;\n } else if (typeof WebSocket !== \"undefined\") {\n ws = WebSocket;\n } else if (typeof global !== \"undefined\") {\n ws = global.WebSocket || // @ts-expect-error: Support more browsers\n global.MozWebSocket;\n } else if (typeof window !== \"undefined\") {\n ws = window.WebSocket || // @ts-expect-error: Support more browsers\n window.MozWebSocket;\n }\n if (!ws)\n throw new Error(\n \"WebSocket implementation missing; on Node you can `import WebSocket from 'ws';` and pass `webSocketImpl: WebSocket` to `createClient`\"\n );\n const WebSocketImpl = ws;\n const emitter = (() => {\n const message = /* @__PURE__ */ (() => {\n const listeners2 = {};\n return {\n on(id, listener) {\n listeners2[id] = listener;\n return () => {\n delete listeners2[id];\n };\n },\n emit(message2) {\n if (\"id\" in message2) listeners2[message2.id]?.(message2);\n }\n };\n })();\n const listeners = {\n connecting: on?.connecting ? [on.connecting] : [],\n opened: on?.opened ? [on.opened] : [],\n connected: on?.connected ? [on.connected] : [],\n ping: on?.ping ? [on.ping] : [],\n pong: on?.pong ? [on.pong] : [],\n message: on?.message ? [message.emit, on.message] : [message.emit],\n closed: on?.closed ? [on.closed] : [],\n error: on?.error ? [on.error] : []\n };\n return {\n onMessage: message.on,\n on(event, listener) {\n const l = listeners[event];\n l.push(listener);\n return () => {\n l.splice(l.indexOf(listener), 1);\n };\n },\n emit(event, ...args) {\n for (const listener of [...listeners[event]]) {\n listener(...args);\n }\n }\n };\n })();\n function errorOrClosed(cb) {\n const listening = [\n // errors are fatal and more critical than close events, throw them first\n emitter.on(\"error\", (err) => {\n listening.forEach((unlisten) => unlisten());\n cb(err);\n }),\n // closes can be graceful and not fatal, throw them second (if error didnt throw)\n emitter.on(\"closed\", (event) => {\n listening.forEach((unlisten) => unlisten());\n cb(event);\n })\n ];\n }\n let connecting, locks = 0, lazyCloseTimeout, retrying = false, retries = 0, disposed = false;\n async function connect() {\n clearTimeout(lazyCloseTimeout);\n const [socket, throwOnClose] = await (connecting ?? (connecting = new Promise(\n (connected, denied) => (async () => {\n if (retrying) {\n await retryWait(retries);\n if (!locks) {\n connecting = undefined;\n return denied({ code: 1e3, reason: \"All Subscriptions Gone\" });\n }\n retries++;\n }\n emitter.emit(\"connecting\", retrying);\n const socket2 = new WebSocketImpl(\n typeof url === \"function\" ? await url() : url,\n GRAPHQL_TRANSPORT_WS_PROTOCOL\n );\n let connectionAckTimeout, queuedPing;\n function enqueuePing() {\n if (isFinite(keepAlive) && keepAlive > 0) {\n clearTimeout(queuedPing);\n queuedPing = setTimeout(() => {\n if (socket2.readyState === WebSocketImpl.OPEN) {\n socket2.send(stringifyMessage({ type: MessageType.Ping }));\n emitter.emit(\"ping\", false, undefined);\n }\n }, keepAlive);\n }\n }\n errorOrClosed((errOrEvent) => {\n connecting = undefined;\n clearTimeout(connectionAckTimeout);\n clearTimeout(queuedPing);\n denied(errOrEvent);\n if (errOrEvent instanceof TerminatedCloseEvent) {\n socket2.close(4499, \"Terminated\");\n socket2.onerror = null;\n socket2.onclose = null;\n }\n });\n socket2.onerror = (err) => emitter.emit(\"error\", err);\n socket2.onclose = (event) => emitter.emit(\"closed\", event);\n socket2.onopen = async () => {\n try {\n emitter.emit(\"opened\", socket2);\n const payload = typeof connectionParams === \"function\" ? await connectionParams() : connectionParams;\n if (socket2.readyState !== WebSocketImpl.OPEN) return;\n socket2.send(\n stringifyMessage(\n payload ? {\n type: MessageType.ConnectionInit,\n payload\n } : {\n type: MessageType.ConnectionInit\n // payload is completely absent if not provided\n },\n replacer\n )\n );\n if (isFinite(connectionAckWaitTimeout) && connectionAckWaitTimeout > 0) {\n connectionAckTimeout = setTimeout(() => {\n socket2.close(\n CloseCode.ConnectionAcknowledgementTimeout,\n \"Connection acknowledgement timeout\"\n );\n }, connectionAckWaitTimeout);\n }\n enqueuePing();\n } catch (err) {\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.InternalClientError,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Internal client error\"\n )\n );\n }\n };\n let acknowledged = false;\n socket2.onmessage = ({ data }) => {\n try {\n const message = parseMessage(data, reviver);\n emitter.emit(\"message\", message);\n if (message.type === \"ping\" || message.type === \"pong\") {\n emitter.emit(message.type, true, message.payload);\n if (message.type === \"pong\") {\n enqueuePing();\n } else if (!disablePong) {\n socket2.send(\n stringifyMessage(\n message.payload ? {\n type: MessageType.Pong,\n payload: message.payload\n } : {\n type: MessageType.Pong\n // payload is completely absent if not provided\n }\n )\n );\n emitter.emit(\"pong\", false, message.payload);\n }\n return;\n }\n if (acknowledged) return;\n if (message.type !== MessageType.ConnectionAck)\n throw new Error(\n `First message cannot be of type ${message.type}`\n );\n clearTimeout(connectionAckTimeout);\n acknowledged = true;\n emitter.emit(\"connected\", socket2, message.payload, retrying);\n retrying = false;\n retries = 0;\n connected([\n socket2,\n new Promise((_, reject) => errorOrClosed(reject))\n ]);\n } catch (err) {\n socket2.onmessage = null;\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.BadResponse,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Bad response\"\n )\n );\n }\n };\n })()\n )));\n if (socket.readyState === WebSocketImpl.CLOSING) await throwOnClose;\n let release = () => {\n };\n const released = new Promise((resolve) => release = resolve);\n return [\n socket,\n release,\n Promise.race([\n // wait for\n released.then(() => {\n if (!locks) {\n const complete = () => socket.close(1e3, \"Normal Closure\");\n if (isFinite(lazyCloseTimeoutMs) && lazyCloseTimeoutMs > 0) {\n lazyCloseTimeout = setTimeout(() => {\n if (socket.readyState === WebSocketImpl.OPEN) complete();\n }, lazyCloseTimeoutMs);\n } else {\n complete();\n }\n }\n }),\n // or\n throwOnClose\n ])\n ];\n }\n function shouldRetryConnectOrThrow(errOrCloseEvent) {\n if (isLikeCloseEvent(errOrCloseEvent) && (isFatalInternalCloseCode(errOrCloseEvent.code) || [\n CloseCode.InternalServerError,\n CloseCode.InternalClientError,\n CloseCode.BadRequest,\n CloseCode.BadResponse,\n CloseCode.Unauthorized,\n // CloseCode.Forbidden, might grant access out after retry\n CloseCode.SubprotocolNotAcceptable,\n // CloseCode.ConnectionInitialisationTimeout, might not time out after retry\n // CloseCode.ConnectionAcknowledgementTimeout, might not time out after retry\n CloseCode.SubscriberAlreadyExists,\n CloseCode.TooManyInitialisationRequests\n // 4499, // Terminated, probably because the socket froze, we want to retry\n ].includes(errOrCloseEvent.code)))\n throw errOrCloseEvent;\n if (disposed) return false;\n if (isLikeCloseEvent(errOrCloseEvent) && errOrCloseEvent.code === 1e3)\n return locks > 0;\n if (!retryAttempts || retries >= retryAttempts) throw errOrCloseEvent;\n if (!shouldRetry(errOrCloseEvent)) throw errOrCloseEvent;\n return retrying = true;\n }\n if (!lazy) {\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [, , throwOnClose] = await connect();\n await throwOnClose;\n } catch (errOrCloseEvent) {\n try {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n } catch (errOrCloseEvent2) {\n return onNonLazyError?.(errOrCloseEvent2);\n }\n }\n }\n })();\n }\n function subscribe(payload, sink) {\n const id = generateID(payload);\n let done = false, errored = false, releaser = () => {\n locks--;\n done = true;\n };\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [socket, release, waitForReleaseOrThrowOnClose] = await connect();\n if (done) return release();\n const unlisten = emitter.onMessage(id, (message) => {\n switch (message.type) {\n case MessageType.Next: {\n sink.next(message.payload);\n return;\n }\n case MessageType.Error: {\n errored = true, done = true;\n sink.error(message.payload);\n releaser();\n return;\n }\n case MessageType.Complete: {\n done = true;\n releaser();\n return;\n }\n }\n });\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Subscribe,\n payload\n },\n replacer\n )\n );\n releaser = () => {\n if (!done && socket.readyState === WebSocketImpl.OPEN)\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Complete\n },\n replacer\n )\n );\n locks--;\n done = true;\n release();\n };\n await waitForReleaseOrThrowOnClose.finally(unlisten);\n return;\n } catch (errOrCloseEvent) {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n }\n }\n })().then(() => {\n if (!errored) sink.complete();\n }).catch((err) => {\n sink.error(err);\n });\n return () => {\n if (!done) releaser();\n };\n }\n return {\n on: emitter.on,\n subscribe,\n iterate(request) {\n const pending = [];\n const deferred = {\n done: false,\n error: null,\n resolve: () => {\n }\n };\n const dispose = subscribe(request, {\n next(val) {\n pending.push(val);\n deferred.resolve();\n },\n error(err) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n },\n complete() {\n deferred.done = true;\n deferred.resolve();\n }\n });\n const iterator = async function* iterator2() {\n for (; ; ) {\n if (!pending.length) {\n await new Promise((resolve) => deferred.resolve = resolve);\n }\n while (pending.length) {\n yield pending.shift();\n }\n if (deferred.error) {\n throw deferred.error;\n }\n if (deferred.done) {\n return;\n }\n }\n }();\n iterator.throw = async (err) => {\n if (!deferred.done) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n }\n return { done: true, value: undefined };\n };\n iterator.return = async () => {\n dispose();\n return { done: true, value: undefined };\n };\n return iterator;\n },\n async dispose() {\n disposed = true;\n if (connecting) {\n const [socket] = await connecting;\n socket.close(1e3, \"Normal Closure\");\n }\n },\n terminate() {\n if (connecting) {\n emitter.emit(\"closed\", new TerminatedCloseEvent());\n }\n }\n };\n}\nclass TerminatedCloseEvent extends Error {\n name = \"TerminatedCloseEvent\";\n message = \"4499: Terminated\";\n code = 4499;\n reason = \"Terminated\";\n wasClean = false;\n}\nfunction isLikeCloseEvent(val) {\n return isObject(val) && \"code\" in val && \"reason\" in val;\n}\nfunction isFatalInternalCloseCode(code) {\n if ([\n 1e3,\n // Normal Closure is not an erroneous close code\n 1001,\n // Going Away\n 1006,\n // Abnormal Closure\n 1005,\n // No Status Received\n 1012,\n // Service Restart\n 1013,\n // Try Again Later\n 1014\n // Bad Gateway\n ].includes(code))\n return false;\n return code >= 1e3 && code <= 1999;\n}\nfunction isWebSocket(val) {\n return typeof val === \"function\" && \"constructor\" in val && \"CLOSED\" in val && \"CLOSING\" in val && \"CONNECTING\" in val && \"OPEN\" in val;\n}\n\nexport { CloseCode, GRAPHQL_TRANSPORT_WS_PROTOCOL, MessageType, TerminatedCloseEvent, createClient, parseMessage, stringifyMessage };\n","import {\n type NewPairsStreamParams,\n type NewPairsStreamResponse,\n type OHLCVPairsStreamParams,\n type OHLCVPairsStreamResponse,\n type OHLCVTokensStreamParams,\n type OHLCVTokensStreamResponse,\n type StreamingServiceConfig,\n type StreamSubscriptionOptions,\n type TokenBalancesStreamParams,\n type TokenBalancesStreamResponse,\n type UnsubscribeFunction,\n type UpdatePairsStreamParams,\n type UpdatePairsStreamResponse,\n type WalletActivityStreamParams,\n type WalletActivityStreamResponse,\n} from \"../utils/types/StreamingService.types\";\nimport { createClient, type Client } from \"graphql-ws\";\n\n/**\n * Streaming API Service\n *\n */\nexport class StreamingService {\n private defaultConfig: Required<StreamingServiceConfig> = {\n shouldRetry: (retries) => retries < 5,\n maxReconnectAttempts: 5,\n onConnecting: () => {\n console.info(\"StreamingService Connection Connecting...\");\n },\n onOpened: () => {\n console.info(\"StreamingService Connection Established Successfully!\");\n },\n onClosed: () => {\n console.info(\"StreamingService Connection Closed\");\n },\n onError: (err) => {\n console.error(\"StreamingService Connection Error:\", err);\n },\n };\n\n constructor(apiKey: string, config?: StreamingServiceConfig) {\n StreamingWebSocketClient.configure(apiKey, {\n ...this.defaultConfig,\n ...config,\n });\n StreamingWebSocketClient.getInstance();\n }\n\n /**\n * Initialize the streaming connection\n */\n public getClient(): Client {\n return StreamingWebSocketClient.getClient();\n }\n\n /**\n * Disconnect from the streaming service\n */\n public async disconnect(): Promise<void> {\n await StreamingWebSocketClient.disconnect();\n }\n\n /**\n * Check if the client is connected\n */\n public get isConnected(): boolean {\n return StreamingWebSocketClient.isConnected;\n }\n\n /**\n * Subscribe to a custom GraphQL subscription\n * This allows for advanced usage and future extensibility\n *\n * @param query - GraphQL subscription query\n * @param variables - Query variables\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n */\n public rawQuery<T = Array<object>>(\n query: string,\n variables: Record<string, unknown>,\n callbacks: StreamSubscriptionOptions<T>\n ): UnsubscribeFunction {\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe(\n {\n query,\n variables,\n },\n {\n next: (data) => callbacks.next(data as T),\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to OHLCV data for specific pairs\n *\n * @param params - Parameters for the OHLCV pairs stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToOHLCVPairs(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * pair_addresses: [\"0x9c087Eb773291e50CF6c6a90ef0F4500e349B903\"],\n * interval: StreamingInterval.ONE_MINUTE,\n * timeframe: StreamingTimeframe.ONE_HOUR\n * },\n * {\n * next: (data) => console.log(\"OHLCV Data:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToOHLCVPairs(\n params: OHLCVPairsStreamParams,\n callbacks: StreamSubscriptionOptions<OHLCVPairsStreamResponse[]>\n ): UnsubscribeFunction {\n // Format the pair addresses array for the query\n const pairAddressesString = params.pair_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n ohlcvCandlesForPair(\n chain_name: ${params.chain_name}\n pair_addresses: [${pairAddressesString}]\n interval: ${params.interval}\n timeframe: ${params.timeframe}\n ${params.limit ? `limit: ${params.limit}` : \"\"}\n ) {\n open\n high\n low\n close\n volume\n price_usd\n volume_usd\n chain_name\n pair_address\n interval\n timeframe\n timestamp\n base_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n quote_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n ohlcvCandlesForPair: OHLCVPairsStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const ohlcvData = data.data.ohlcvCandlesForPair;\n if (ohlcvData) {\n callbacks.next(ohlcvData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to OHLCV data for specific tokens\n *\n * @param params - Parameters for the OHLCV tokens stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToOHLCVTokens(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * token_addresses: [\"0x4B6104755AfB5Da4581B81C552DA3A25608c73B8\"],\n * interval: StreamingInterval.ONE_MINUTE,\n * timeframe: StreamingTimeframe.ONE_HOUR\n * },\n * {\n * next: (data) => console.log(\"OHLCV Token Data:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToOHLCVTokens(\n params: OHLCVTokensStreamParams,\n callbacks: StreamSubscriptionOptions<OHLCVTokensStreamResponse[]>\n ): UnsubscribeFunction {\n // Format the token addresses array for the query\n const tokenAddressesString = params.token_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n ohlcvCandlesForToken(\n chain_name: ${params.chain_name}\n token_addresses: [${tokenAddressesString}]\n interval: ${params.interval}\n timeframe: ${params.timeframe}\n ${params.limit ? `limit: ${params.limit}` : \"\"}\n ) {\n chain_name\n pair_address\n interval\n timeframe\n timestamp\n open\n high\n low\n close\n volume\n volume_usd\n quote_rate\n quote_rate_usd\n base_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n quote_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n ohlcvCandlesForToken: OHLCVTokensStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const ohlcvData = data.data.ohlcvCandlesForToken;\n if (ohlcvData) {\n callbacks.next(ohlcvData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to new DEX pairs created on supported decentralized exchanges\n *\n * @param params - Parameters for the new pairs stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToNewPairs(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * protocols: [StreamingProtocol.UNISWAP_V2, StreamingProtocol.UNISWAP_V3]\n * },\n * {\n * next: (data) => console.log(\"New Pairs:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToNewPairs(\n params: NewPairsStreamParams,\n callbacks: StreamSubscriptionOptions<NewPairsStreamResponse[]>\n ): UnsubscribeFunction {\n const query = `\n subscription {\n newPairs(\n chain_name: ${params.chain_name},\n protocols: [${params.protocols.join(\", \")}]\n ) {\n chain_name\n protocol\n protocol_version\n pair_address\n deployer_address\n tx_hash\n block_signed_at\n liquidity\n supply\n market_cap\n event_name\n quote_rate\n quote_rate_usd\n base_token_metadata {\n contract_address\n contract_decimals\n contract_name\n contract_ticker_symbol\n }\n pair_metadata {\n contract_address\n contract_decimals\n contract_name\n contract_ticker_symbol\n }\n quote_token_metadata {\n contract_address\n contract_decimals\n contract_name\n contract_ticker_symbol\n }\n prices {\n last_5m\n last_1hr\n last_6hr\n last_24hr\n }\n swaps {\n last_5m\n last_1hr\n last_6hr\n last_24hr\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n newPairs: NewPairsStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const newPairsData = data.data.newPairs;\n if (newPairsData) {\n callbacks.next(newPairsData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to real-time updates for specific trading pairs including price, volume, and liquidity data\n *\n * @param params - Parameters for the update pairs stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToUpdatePairs(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * pair_addresses: [\n * \"0x3f0296BF652e19bca772EC3dF08b32732F93014A\"\n * ]\n * },\n * {\n * next: (data) => console.log(\"Pair Updates:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToUpdatePairs(\n params: UpdatePairsStreamParams,\n callbacks: StreamSubscriptionOptions<UpdatePairsStreamResponse>\n ): UnsubscribeFunction {\n const pairAddressesString = params.pair_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n updatePairs(\n chain_name: ${params.chain_name}\n pair_addresses: [${pairAddressesString}]\n ) {\n chain_name\n pair_address\n timestamp\n price\n price_usd\n volume\n volume_usd\n base_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n quote_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n updatePairs: UpdatePairsStreamResponse;\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const updatePairsData = data.data.updatePairs;\n if (updatePairsData) {\n callbacks.next(updatePairsData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to real-time token balance updates for a specific wallet address\n *\n * @param params - Parameters for the token balances stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToTokenBalances(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * wallet_address: \"0x198ef79f1f515f02dfe9e3115ed9fc07183f02fc\"\n * },\n * {\n * next: (data) => console.log(\"Token Balances:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToTokenBalances(\n params: TokenBalancesStreamParams,\n callbacks: StreamSubscriptionOptions<TokenBalancesStreamResponse>\n ): UnsubscribeFunction {\n const query = `\n subscription {\n tokenBalancesForWalletAddress(\n chain_name: ${params.chain_name},\n wallet_address: \"${params.wallet_address}\"\n ) {\n wallet_address\n chain_name\n last_block\n items {\n balance\n balance_pretty\n quote_rate_usd\n quote_usd\n metadata {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n is_native\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n tokenBalancesForWalletAddress: TokenBalancesStreamResponse;\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const tokenBalancesData = data.data.tokenBalancesForWalletAddress;\n if (tokenBalancesData) {\n callbacks.next(tokenBalancesData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to real-time wallet activity including transactions, token transfers, and smart contract interactions\n *\n * @param params - Parameters for the wallet activity stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToWalletActivity(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * wallet_addresses: [\"0x198ef79f1f515f02dfe9e3115ed9fc07183f02fc\"]\n * },\n * {\n * next: (data) => console.log(\"Wallet Activity:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToWalletActivity(\n params: WalletActivityStreamParams,\n callbacks: StreamSubscriptionOptions<WalletActivityStreamResponse[]>\n ): UnsubscribeFunction {\n // Format the wallet addresses array for the query\n const walletAddressesString = params.wallet_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n walletTxs(\n chain_name: ${params.chain_name},\n wallet_addresses: [${walletAddressesString}]\n ) {\n tx_hash\n from_address\n to_address\n value\n chain_name\n block_signed_at\n block_height\n block_hash\n miner_address\n gas_used\n tx_offset\n successful\n decoded_type\n logs {\n emitter_address\n log_offset\n data\n topics\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n walletTxs: WalletActivityStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const walletActivityData = data.data.walletTxs;\n if (walletActivityData) {\n callbacks.next(walletActivityData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n}\n\n/**\n * Singleton WebSocket Client for GoldRush Streaming\n *\n */\nclass StreamingWebSocketClient {\n private static apiKey: string;\n private static instance: StreamingWebSocketClient | null = null;\n private static client: Client | null = null;\n private static connected = false;\n private static reconnectAttempts = 0;\n private static config: Required<StreamingServiceConfig>;\n\n private constructor() {}\n\n public static getInstance(): StreamingWebSocketClient {\n if (!StreamingWebSocketClient.instance) {\n StreamingWebSocketClient.instance = new StreamingWebSocketClient();\n }\n return StreamingWebSocketClient.instance;\n }\n\n public static configure(\n apiKey: string,\n config: Required<StreamingServiceConfig>\n ): void {\n StreamingWebSocketClient.apiKey = apiKey;\n StreamingWebSocketClient.config = config;\n }\n\n public static getClient(): Client {\n if (\n !StreamingWebSocketClient.client ||\n !StreamingWebSocketClient.connected\n ) {\n StreamingWebSocketClient.connect();\n }\n return StreamingWebSocketClient.client!;\n }\n\n private static connect(): void {\n if (StreamingWebSocketClient.client) return;\n\n StreamingWebSocketClient.client = createClient({\n url: \"wss://gr-staging-v2.streaming.covalenthq.com/graphql\",\n connectionParams: {\n GOLDRUSH_API_KEY: StreamingWebSocketClient.apiKey,\n },\n shouldRetry: () =>\n StreamingWebSocketClient.config.shouldRetry(\n StreamingWebSocketClient.reconnectAttempts\n ),\n on: {\n connecting: () => {\n StreamingWebSocketClient.config.onConnecting();\n },\n opened: () => {\n StreamingWebSocketClient.config.onOpened();\n StreamingWebSocketClient.reconnectAttempts = 0;\n StreamingWebSocketClient.connected = true;\n },\n closed: () => {\n StreamingWebSocketClient.config.onClosed();\n StreamingWebSocketClient.connected = false;\n },\n error: (err) => {\n StreamingWebSocketClient.config.onError(err);\n StreamingWebSocketClient.connected = false;\n },\n },\n });\n }\n\n public static get isConnected(): boolean {\n return StreamingWebSocketClient.connected;\n }\n\n public static async disconnect(): Promise<void> {\n if (!StreamingWebSocketClient.client) return;\n if (!StreamingWebSocketClient.connected) return;\n\n // * INFO: Is a fire & forget\n await StreamingWebSocketClient.client.dispose();\n StreamingWebSocketClient.client = null;\n StreamingWebSocketClient.connected = false;\n // * INFO: Wait for the client to disconnect\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n}\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport type { Chain, GoldRushResponse } from \"../utils/types/Generic.types\";\r\nimport type {\r\n EarliestTransactionsForAddressResponse,\r\n GetAllTransactionsForAddressQueryParamOpts,\r\n GetEarliestTransactionsForAddressQueryParamOpts,\r\n getPaginatedTransactionsForAddressQueryParamOpts,\r\n GetTimeBucketTransactionsForAddressQueryParamOpts,\r\n GetTransactionQueryParamOpts,\r\n getTransactionsForBlockByPageQueryParamOpts,\r\n GetTransactionSummaryQueryParamOpts,\r\n RecentTransactionsResponse,\r\n TransactionResponse,\r\n TransactionsBlockResponse,\r\n TransactionsForBlockResponse,\r\n TransactionsResponse,\r\n TransactionsSummaryResponse,\r\n TransactionsTimeBucketResponse,\r\n} from \"../utils/types/TransactionService.types\";\r\n\r\n/**\r\n * Transactions API\r\n *\r\n */\r\nexport class TransactionService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render a single transaction including its decoded log events.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} txHash - The transaction hash.\r\n * @param {GetTransactionQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `withInternal`: Include internal transfers/transactions.\r\n * - `withState`: Include all transaction state changes with before and after values.\r\n * - `withInputData`: Include the transaction's input data such as the Method ID.\r\n *\r\n */\r\n public async getTransaction(\r\n chainName: Chain,\r\n txHash: string,\r\n queryParamOpts?: GetTransactionQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/transaction_v2/${txHash}`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"with-internal\",\r\n value: queryParamOpts?.withInternal,\r\n },\r\n {\r\n key: \"with-state\",\r\n value: queryParamOpts?.withState,\r\n },\r\n {\r\n key: \"with-input-data\",\r\n value: queryParamOpts?.withInputData,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the earliest and latest transactions, and the transaction count for a wallet. Calculate the age of the wallet and the time it has been idle and quickly gain insights into their engagement with web3.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTransactionSummaryQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `withGas`: Include gas summary details. Additional charge of 1 credit when true. Response times may be impacted for wallets with millions of transactions.\r\n *\r\n */\r\n public async getTransactionSummary(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetTransactionSummaryQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsSummaryResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_summary`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"with-gas\",\r\n value: queryParamOpts?.withGas,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionsSummaryResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txsItem) => ({\r\n ...txsItem,\r\n earliest_transaction: {\r\n ...txsItem.earliest_transaction!,\r\n block_signed_at: txsItem?.earliest_transaction?.block_signed_at\r\n ? new Date(txsItem.earliest_transaction.block_signed_at)\r\n : null,\r\n },\r\n latest_transaction: {\r\n ...txsItem.latest_transaction!,\r\n block_signed_at: txsItem?.latest_transaction?.block_signed_at\r\n ? new Date(txsItem?.latest_transaction?.block_signed_at)\r\n : null,\r\n },\r\n // ? API vs docs non-consistent\r\n // gas_summary: {\r\n // ...txsItem.gas_summary,\r\n // total_fees_paid: bigIntParser(\r\n // txsItem.gas_summary.total_fees_paid\r\n // ),\r\n // },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsSummaryResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the earliest transactions involving an address. Frequently seen in wallet applications.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetEarliestTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getEarliestTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetEarliestTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<EarliestTransactionsForAddressResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n\r\n const endpoint = endpointGenerator(\r\n `${chainName}/bulk/transactions/${walletAddress}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<EarliestTransactionsForAddressResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<EarliestTransactionsForAddressResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<EarliestTransactionsForAddressResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<EarliestTransactionsForAddressResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the most recent transactions involving an address. Frequently seen in wallet applications.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAllTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `blockSignedAtAsc`: Sort the transactions in ascending chronological order. By default, it's set to `false` and returns transactions in descending chronological order.\r\n * - `withInternal`: Include internal transfers/transactions.\r\n * - `withState`: Include all transaction state changes with before and after values.\r\n * - `withInputData`: Include the transaction's input data such as the Method ID.\r\n *\r\n */\r\n public async *getAllTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetAllTransactionsForAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<RecentTransactionsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_v3`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"block-signed-at-asc\",\r\n value: queryParamOpts?.blockSignedAtAsc,\r\n },\r\n {\r\n key: \"with-internal\",\r\n value: queryParamOpts?.withInternal,\r\n },\r\n {\r\n key: \"with-state\",\r\n value: queryParamOpts?.withState,\r\n },\r\n {\r\n key: \"with-input-data\",\r\n value: queryParamOpts?.withInputData,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<RecentTransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<RecentTransactionsResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"links\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the most recent transactions involving an address. Frequently seen in wallet applications.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAllTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `blockSignedAtAsc`: Sort the transactions in ascending chronological order. By default, it's set to `false` and returns transactions in descending chronological order.\r\n * - `withInternal`: Include internal transfers/transactions.\r\n * - `withState`: Include all transaction state changes with before and after values.\r\n * - `withInputData`: Include the transaction's input data such as the Method ID.\r\n *\r\n */\r\n public async getAllTransactionsForAddressByPage(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetAllTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<RecentTransactionsResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"block-signed-at-asc\",\r\n value: queryParamOpts?.blockSignedAtAsc,\r\n },\r\n {\r\n key: \"with-internal\",\r\n value: queryParamOpts?.withInternal,\r\n },\r\n {\r\n key: \"with-state\",\r\n value: queryParamOpts?.withState,\r\n },\r\n {\r\n key: \"with-input-data\",\r\n value: queryParamOpts?.withInputData,\r\n },\r\n ];\r\n\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_v3`,\r\n searchParams\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<RecentTransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<RecentTransactionsResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<RecentTransactionsResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<RecentTransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {number} page - The requested page, 0-indexed.\r\n * @param {getPaginatedTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `blockSignedAtAsc`: Sort the transactions in ascending chronological order. By default, it's set to `false` and returns transactions in descending chronological order.\r\n *\r\n */\r\n public async getPaginatedTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n page: number,\r\n queryParamOpts?: getPaginatedTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"block-signed-at-asc\",\r\n value: queryParamOpts?.blockSignedAtAsc,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_v3/page/${page}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<TransactionsResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<TransactionsResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {number} timeBucket - The 0-indexed 15-minute time bucket. E.g. 27 Feb 2023 05:23 GMT = 1677475383 (Unix time). 1677475383/900=1863861 timeBucket.\r\n * @param {GetTimeBucketTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getTimeBucketTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n timeBucket: number,\r\n queryParamOpts?: GetTimeBucketTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsTimeBucketResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/bulk/transactions/${walletAddress}/${timeBucket}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<TransactionsTimeBucketResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<TransactionsTimeBucketResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<TransactionsTimeBucketResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsTimeBucketResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch all transactions including their decoded log events in a block and further flag interesting wallets or transactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {number} blockHeight - The requested block height.\r\n * @param {number} page - The requested page, 0-indexed.\r\n * @param {getTransactionsForBlockByPageQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getTransactionsForBlockByPage(\r\n chainName: Chain,\r\n blockHeight: number | string | \"latest\",\r\n page: number,\r\n queryParamOpts?: getTransactionsForBlockByPageQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsBlockResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block/${blockHeight}/transactions_v3/page/${page}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionsBlockResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<TransactionsBlockResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<TransactionsBlockResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsBlockResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch all transactions including their decoded log events in a block and further flag interesting wallets or transactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} blockHash - The requested block hash.\r\n * @param {getTransactionsForBlockByPageQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getTransactionsForBlock(\r\n chainName: Chain,\r\n blockHash: string,\r\n queryParamOpts?: getTransactionsForBlockByPageQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsForBlockResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_hash/${blockHash}/transactions_v3`,\r\n searchParams\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<TransactionsForBlockResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsForBlockResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n * @deprecated This method has been deprecated and will be removed in future releases. Use `getPaginatedTransactionsForAddress` instead.\r\n */\r\n public async getTransactionsForAddressV3(\r\n chainName: Chain,\r\n walletAddress: string,\r\n page: number,\r\n queryParamOpts?: getPaginatedTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsResponse>> {\r\n return this.getPaginatedTransactionsForAddress(\r\n chainName,\r\n walletAddress,\r\n page,\r\n queryParamOpts\r\n );\r\n }\r\n}\r\n","import { type GoldRushClientSettings } from \"../types/Generic.types\";\n\nexport async function debugOutput(\n settings: GoldRushClientSettings,\n ...content: unknown[]\n) {\n if (settings.debug) {\n content.forEach((c) => {\n console.info(\"[DEBUG] |\", c);\n });\n }\n}\n","class Node {\n\t/// value;\n\t/// next;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\n\t\t// TODO: Remove this when targeting Node.js 12.\n\t\tthis.next = undefined;\n\t}\n}\n\nclass Queue {\n\t// TODO: Use private class fields when targeting Node.js 12.\n\t// #_head;\n\t// #_tail;\n\t// #_size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this._head) {\n\t\t\tthis._tail.next = node;\n\t\t\tthis._tail = node;\n\t\t} else {\n\t\t\tthis._head = node;\n\t\t\tthis._tail = node;\n\t\t}\n\n\t\tthis._size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this._head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._head = this._head.next;\n\t\tthis._size--;\n\t\treturn current.value;\n\t}\n\n\tclear() {\n\t\tthis._head = undefined;\n\t\tthis._tail = undefined;\n\t\tthis._size = 0;\n\t}\n\n\tget size() {\n\t\treturn this._size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this._head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n\nmodule.exports = Queue;\n","'use strict';\nconst Queue = require('yocto-queue');\n\nconst pLimit = concurrency => {\n\tif (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, ...args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, ...args) => {\n\t\tqueue.enqueue(run.bind(null, fn, resolve, ...args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, ...args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t}\n\t\t}\n\t});\n\n\treturn generator;\n};\n\nmodule.exports = pLimit;\n","import {\n type GoldRushClientSettings,\n type GoldRushResponse,\n} from \"../types/Generic.types\";\nimport { debugOutput } from \"./debugOutput\";\nimport pLimit from \"p-limit\";\n\nexport class Execution {\n private maxRetries: number;\n private retryDelay: number;\n private enableRetry: boolean;\n private processes: pLimit.Limit;\n\n constructor(\n private settings: GoldRushClientSettings,\n private headers: Record<string, string>\n ) {\n this.processes = pLimit(this.settings.threadCount ?? 2);\n this.maxRetries = settings.maxRetries ?? 2;\n this.retryDelay = settings.retryDelay ?? 1500;\n this.enableRetry = settings.enableRetry ?? true;\n }\n\n async execute<T>(\n endpoint: URL,\n parseData: (data: GoldRushResponse<T>) => GoldRushResponse<T>\n ): Promise<GoldRushResponse<T>> {\n let retryCount: number = 0;\n let completed: boolean = false;\n\n while (!completed) {\n try {\n const startTime: Date = new Date();\n\n const response = await this.processes(() =>\n fetch(endpoint, {\n headers: this.headers,\n })\n );\n\n debugOutput(\n this.settings,\n `Request URL: ${\n response ? new URL(response.url) : endpoint\n } | Response code: ${\n response ? response.status : 429\n } | Response time: ${(\n new Date().getTime() - startTime.getTime()\n ).toFixed(2)}ms`\n );\n\n if (response.status === null || response.status === 429) {\n throw new Error(`Received status code: ${response.status ?? 429}`);\n }\n\n const data = (await response.json()) as GoldRushResponse<T>;\n\n if (data.error) {\n throw data;\n }\n\n const parsedData = parseData(data);\n completed = true;\n\n return {\n data: parsedData.data as T,\n error: false,\n error_code: null,\n error_message: null,\n };\n } catch (error: any) {\n debugOutput(\n this.settings,\n `Request URL: ${endpoint} | Retry Enabled: ${this.enableRetry} | Retry Count: ${retryCount} | Max Retries: ${this.maxRetries} | Retry Delay: ${this.retryDelay}ms`,\n error\n );\n\n if (\n this.enableRetry &&\n (error?.error_code === 429 || error?.cause?.code === 429)\n ) {\n if (retryCount >= this.maxRetries) {\n completed = true;\n return {\n data: null,\n error: true,\n error_code: 429,\n error_message: `${this.maxRetries} retries exceeded`,\n };\n } else {\n retryCount++;\n await new Promise((resolve) =>\n setTimeout(resolve, this.retryDelay)\n );\n completed = false;\n }\n } else {\n completed = true;\n return {\n data: null,\n error: true,\n error_code: error?.cause?.code || error?.error_code || 500,\n error_message:\n error?.cause?.message ||\n error?.error_message ||\n \"Internal server error\",\n };\n }\n }\n }\n\n return {\n data: null,\n error: true,\n error_code: 500,\n error_message: \"Internal server error\",\n };\n }\n}\n","const _apiKeyV1Pattern: RegExp = /^ckey_([a-f0-9]{27})$/;\nconst _apiKeyV2Pattern: RegExp =\n /^cqt_(wF|rQ)([bcdfghjkmpqrtvwxyBCDFGHJKMPQRTVWXY346789]{26})$/;\n\nexport const isValidApiKey = (apiKey: string): boolean => {\n return _apiKeyV1Pattern.test(apiKey) || _apiKeyV2Pattern.test(apiKey);\n};\n","import { version } from \"../package.json\";\nimport { AllChainsService } from \"./services/AllChainsService\";\nimport { BalanceService } from \"./services/BalanceService\";\nimport { BaseService } from \"./services/BaseService\";\nimport { BitcoinService } from \"./services/BitcoinService\";\nimport { NftService } from \"./services/NftService\";\nimport { PricingService } from \"./services/PricingService\";\nimport { SecurityService } from \"./services/SecurityService\";\nimport { StreamingService } from \"./services/StreamingService\";\nimport { TransactionService } from \"./services/TransactionService\";\nimport { Execution } from \"./utils/functions/execution\";\nimport { isValidApiKey } from \"./utils/functions/isValidApiKey\";\nimport {\n type GoldRushClientSettings,\n type GoldRushResponse,\n} from \"./utils/types/Generic.types\";\nimport { type StreamingServiceConfig } from \"./utils/types/StreamingService.types\";\n\n/**\n * GoldRushClient Class\n */\nexport class GoldRushClient {\n private readonly userAgent: string = `com.covalenthq.sdk.typescript/${version}`;\n\n public AllChainsService: AllChainsService;\n public BalanceService: BalanceService;\n public BaseService: BaseService;\n public BitcoinService: BitcoinService;\n public NftService: NftService;\n public PricingService: PricingService;\n public SecurityService: SecurityService;\n public StreamingService: StreamingService;\n public TransactionService: TransactionService;\n\n constructor(\n apiKey: string,\n settings: GoldRushClientSettings = {},\n streamingConfig: StreamingServiceConfig = {}\n ) {\n const validKey: boolean = isValidApiKey(apiKey);\n\n if (!validKey) {\n throw {\n data: null,\n error: true,\n error_code: 401,\n error_message:\n \"Invalid or missing API key (sign up at https://goldrush.dev/platform/apikey)\",\n } as GoldRushResponse<null>;\n }\n\n const execution: Execution = new Execution(settings, {\n Authorization: `Bearer ${apiKey}`,\n \"X-Requested-With\": settings.source\n ? `${settings.source} (${this.userAgent})`\n : this.userAgent,\n });\n\n this.AllChainsService = new AllChainsService(execution);\n this.BalanceService = new BalanceService(execution);\n this.BaseService = new BaseService(execution);\n this.BitcoinService = new BitcoinService(execution);\n this.NftService = new NftService(execution);\n this.PricingService = new PricingService(execution);\n this.SecurityService = new SecurityService(execution);\n this.TransactionService = new TransactionService(execution);\n\n this.StreamingService = new StreamingService(apiKey, streamingConfig);\n }\n}\n","/*\r\n * big.js v6.2.2\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2024 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(+stringify(x, true, true));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n var n = +stringify(this, true, true);\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","import Big from \"big.js\";\n\nexport const calculatePrettyBalance = (\n value: number | bigint,\n decimals: number = 18,\n roundOff: boolean = true,\n precision: number = 0\n): string => {\n const bigDecimalValue = new Big(value.toString());\n const bigDecimalExpo = new Big(Math.pow(10, decimals).toString());\n const calculated = bigDecimalValue.div(bigDecimalExpo);\n\n if (decimals === 0 || !roundOff) {\n return calculated.toString();\n }\n\n const decimalFixed = precision || (calculated.lt(100) ? 6 : 2);\n return calculated.toFixed(decimalFixed);\n};\n","import { type Quote } from \"../types/Generic.types\";\n\nconst LESS_THAN_ZERO: string = \"0.01\";\nconst ZERO: string = \"0.00\";\n\nconst currencyMap: Record<Quote, string> = {\n USD: \"$\",\n CAD: \"CA$\",\n EUR: \"€\",\n SGD: \"S$\",\n INR: \"₹\",\n JPY: \"¥\",\n VND: \"₫\",\n CNY: \"CN¥\",\n KRW: \"₩\",\n RUB: \"₽\",\n TRY: \"₺\",\n NGN: \"₦\",\n ARS: \"ARS\",\n AUD: \"A$\",\n CHF: \"CHF\",\n GBP: \"£\",\n};\n\nexport const prettifyCurrency = (\n value: number | bigint | string,\n decimals = 2,\n currency: Quote = \"USD\",\n ignoreSmallValue = false,\n ignoreMinus = true,\n ignoreZero = false\n): string => {\n let numValue = Number(value);\n let minus = \"\";\n let currencySuffix = \"\";\n\n if (!ignoreMinus && numValue < 0) {\n numValue = Math.abs(numValue);\n minus = \"-\";\n }\n\n const currencySymbol = currencyMap[currency] ?? \"$\";\n\n if (numValue === 0 || isNaN(numValue)) {\n return ignoreZero\n ? `<${currencySymbol}${LESS_THAN_ZERO}`\n : `${currencySymbol}${ZERO}`;\n }\n\n if (numValue < 0.01 && ignoreSmallValue) {\n return `<${currencySymbol}${LESS_THAN_ZERO}`;\n }\n\n if (numValue > 999999999) {\n numValue /= 1000000000;\n currencySuffix = \"B\";\n } else if (numValue > 999999) {\n numValue /= 1000000;\n currencySuffix = \"M\";\n }\n\n const factor = Math.pow(10, decimals);\n numValue = Math.floor(numValue * factor) / factor;\n\n const formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: currency,\n maximumFractionDigits: decimals,\n currencyDisplay: \"symbol\",\n });\n\n const formattedValue = formatter\n .format(numValue)\n .replace(new RegExp(`${currency}\\\\s?`), currencySymbol);\n\n return minus + formattedValue + currencySuffix;\n};\n","const months: string[] = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const timestampParser = (\n timestamp: string | Date,\n type: \"descriptive\" | \"DD MMM YY\" | \"relative\" | \"YYYY-MM-DD\"\n): string => {\n const _unix: Date = new Date(timestamp);\n\n switch (type) {\n case \"descriptive\": {\n const _minutes = _unix.getMinutes();\n const _hours = _unix.getHours();\n const _seconds = _unix.getSeconds();\n const _parsedSeconds: string = `${_seconds <= 9 ? \"0\" : \"\"}${_seconds}`;\n const _parsedMinutes: string = `${_minutes <= 9 ? \"0\" : \"\"}${_minutes}`;\n const _parsedHours: string = `${_hours <= 9 ? \"0\" : \"\"}${_hours}`;\n\n return `${\n months[_unix.getMonth()]\n } ${_unix.getDate()} ${_unix.getFullYear()} at ${_parsedHours}:${_parsedMinutes}:${_parsedSeconds}`;\n }\n\n case \"DD MMM YY\": {\n const day = _unix.getDate().toString().padStart(2, \"0\");\n const month = months[_unix.getMonth()].substring(0, 3);\n const year = _unix.getFullYear();\n return `${day} ${month} ${year}`;\n }\n\n case \"relative\": {\n const currentTime = new Date();\n const unixTime = new Date(_unix);\n\n const timeDifference = currentTime.getTime() - unixTime.getTime();\n\n const secondsDifference = Math.floor(timeDifference / 1000);\n const minutesDifference = Math.floor(secondsDifference / 60);\n const hoursDifference = Math.floor(minutesDifference / 60);\n const daysDifference = Math.floor(hoursDifference / 24);\n const monthsDifference = Math.floor(daysDifference / 30);\n const yearsDifference = Math.floor(daysDifference / 365);\n\n if (yearsDifference > 0) {\n return `${yearsDifference} year${yearsDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (monthsDifference > 0) {\n return `${monthsDifference} month${monthsDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (daysDifference > 0) {\n return `${daysDifference} day${daysDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (hoursDifference > 0) {\n return `${hoursDifference} hour${hoursDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (minutesDifference > 0) {\n return `${minutesDifference} minute${minutesDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (secondsDifference > 0) {\n return `${secondsDifference} second${secondsDifference > 1 ? \"s\" : \"\"} ago`;\n } else {\n return `just now`;\n }\n }\n\n case \"YYYY-MM-DD\": {\n const offsetMinutes = _unix.getTimezoneOffset();\n const offsetMilliseconds = offsetMinutes * 60 * 1000;\n const utcTime = _unix.getTime() + offsetMilliseconds;\n const _utc_unix: Date = new Date(utcTime);\n\n const year = _utc_unix.getFullYear();\n const month = String(_utc_unix.getMonth() + 1).padStart(2, \"0\");\n const day = String(_utc_unix.getDate()).padStart(2, \"0\");\n\n return `${year}-${month}-${day}`;\n }\n\n default: {\n return _unix.toISOString();\n }\n }\n};\n","import type { ContractMetadata } from \"./Generic.types\";\n\n/**\n * Common enums and types for Streaming API\n */\nexport enum StreamingChain {\n BASE_MAINNET = \"BASE_MAINNET\",\n ETH_MAINNET = \"ETH_MAINNET\",\n BSC_MAINNET = \"BSC_MAINNET\",\n}\n\nexport enum StreamingInterval {\n FIFTEEN_SECONDS = \"FIFTEEN_SECONDS\",\n THIRTY_SECONDS = \"THIRTY_SECONDS\",\n ONE_MINUTE = \"ONE_MINUTE\",\n FIVE_MINUTES = \"FIVE_MINUTES\",\n FIFTEEN_MINUTES = \"FIFTEEN_MINUTES\",\n THIRTY_MINUTES = \"THIRTY_MINUTES\",\n ONE_HOUR = \"ONE_HOUR\",\n FOUR_HOURS = \"FOUR_HOURS\",\n ONE_DAY = \"ONE_DAY\",\n}\n\nexport enum StreamingTimeframe {\n ONE_MINUTE = \"ONE_MINUTE\",\n FIVE_MINUTES = \"FIVE_MINUTES\",\n FIFTEEN_MINUTES = \"FIFTEEN_MINUTES\",\n THIRTY_MINUTES = \"THIRTY_MINUTES\",\n ONE_HOUR = \"ONE_HOUR\",\n FOUR_HOURS = \"FOUR_HOURS\",\n ONE_DAY = \"ONE_DAY\",\n ONE_WEEK = \"ONE_WEEK\",\n ONE_MONTH = \"ONE_MONTH\",\n}\n\nexport enum StreamingProtocol {\n UNISWAP_V2 = \"UNISWAP_V2\",\n UNISWAP_V3 = \"UNISWAP_V3\",\n UNISWAP_V4 = \"UNISWAP_V4\",\n}\n\n/**\n * OHLCV Pairs Stream Types\n */\nexport interface OHLCVPairsStreamParams {\n chain_name: StreamingChain;\n pair_addresses: string[];\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n limit?: number;\n}\n\nexport interface OHLCVPairsStreamResponse {\n chain_name: StreamingChain;\n pair_address: string;\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n timestamp: string;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n price_usd: number;\n volume_usd: number;\n base_token: ContractMetadata;\n quote_token: ContractMetadata;\n}\n\n/**\n * OHLCV Tokens Stream Types\n */\nexport interface OHLCVTokensStreamParams {\n chain_name: StreamingChain;\n token_addresses: string[];\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n limit?: number;\n}\n\nexport interface OHLCVTokensStreamResponse {\n chain_name: StreamingChain;\n pair_address: string;\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n timestamp: string;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n volume_usd: number;\n quote_rate: number;\n quote_rate_usd: number;\n base_token: ContractMetadata;\n quote_token: ContractMetadata;\n}\n\n/**\n * New DEX Pairs Stream Types\n */\nexport interface NewPairsStreamParams {\n chain_name: StreamingChain;\n protocols: StreamingProtocol[];\n}\n\nexport interface PriceMetrics {\n last_5m: number;\n last_1hr: number;\n last_6hr: number;\n last_24hr: number;\n}\n\nexport interface SwapMetrics {\n last_5m: number;\n last_1hr: number;\n last_6hr: number;\n last_24hr: number;\n}\n\nexport interface NewPairsStreamResponse {\n chain_name: string;\n protocol: string;\n protocol_version: string;\n pair_address: string;\n deployer_address: string;\n tx_hash: string;\n block_signed_at: string;\n liquidity: number;\n supply: number;\n market_cap: number;\n event_name: string;\n quote_rate: number;\n quote_rate_usd: number;\n base_token_metadata: ContractMetadata;\n quote_token_metadata: ContractMetadata;\n pair_metadata: ContractMetadata;\n prices: PriceMetrics;\n swaps: SwapMetrics;\n}\n\n/**\n * Token Balances Stream Types\n */\nexport interface TokenBalancesStreamParams {\n chain_name: StreamingChain;\n wallet_address: string;\n}\n\nexport interface TokenBalanceItem {\n balance: string;\n balance_pretty: number;\n quote_rate_usd: number;\n quote_usd: number;\n metadata: ContractMetadata;\n is_native: boolean;\n}\n\nexport interface TokenBalancesStreamResponse {\n wallet_address: string;\n chain_name: string;\n last_block: number;\n items: TokenBalanceItem[];\n}\n\n/**\n * Update Pairs Stream Types\n */\nexport interface UpdatePairsStreamParams {\n chain_name: StreamingChain;\n pair_addresses: string[];\n}\n\nexport interface UpdatePairsStreamResponse {\n chain_name: string;\n pair_address: string;\n timestamp: string;\n price: number;\n price_usd: number;\n volume: number;\n volume_usd: number;\n market_cap: number;\n liquidity: number;\n base_token: ContractMetadata;\n quote_token: ContractMetadata;\n}\n\n/**\n * Wallet Activity Stream Types\n */\nexport interface WalletActivityStreamParams {\n chain_name: StreamingChain;\n wallet_addresses: string[];\n}\n\nexport interface WalletActivityLogItem {\n emitter_address: string;\n log_offset: number;\n data: string;\n topics: string[];\n}\n\nexport interface WalletActivityStreamResponse {\n tx_hash: string;\n from_address: string;\n to_address: string;\n value: number;\n chain_name: string;\n block_signed_at: string;\n block_height: number;\n block_hash: string;\n miner_address: string;\n gas_used: number;\n tx_offset: number;\n successful: boolean;\n decoded_type: string;\n decoded_details?: object; // Union type for different decoded transaction types\n logs: WalletActivityLogItem[];\n}\n\n/**\n * Streaming service configuration\n */\nexport interface StreamingServiceConfig {\n shouldRetry?: (retries: number) => boolean;\n maxReconnectAttempts?: number;\n onConnecting?: () => void;\n onOpened?: () => void;\n onClosed?: () => void;\n onError?: (error: any) => void;\n}\n\n/**\n * Stream subscription options\n */\nexport interface StreamSubscriptionOptions<T = Array<object>> {\n next: (payload: T) => void;\n error?: (error: any) => void;\n complete?: () => void;\n}\n\n/**\n * Unsubscribe function type\n */\nexport type UnsubscribeFunction = () => void;\n"],"names":["ChainName","ChainID","Queue","require$$0","pLimit","StreamingChain","StreamingInterval","StreamingTimeframe","StreamingProtocol"],"mappings":"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","x_google_ignoreList":[11,12,16,17,21]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/functions/bigIntParser.ts","../src/utils/functions/endpointGenerator.ts","../src/services/AllChainsService.ts","../src/utils/functions/paginateEndpoint.ts","../src/services/BalanceService.ts","../src/services/BaseService.ts","../src/utils/types/Generic.types.ts","../src/services/BitcoinService.ts","../src/services/NftService.ts","../src/services/PricingService.ts","../src/services/SecurityService.ts","../node_modules/.pnpm/graphql-ws@6.0.5_graphql@16.11.0_ws@8.18.2/node_modules/graphql-ws/dist/common-CGW11Fyb.js","../node_modules/.pnpm/graphql-ws@6.0.5_graphql@16.11.0_ws@8.18.2/node_modules/graphql-ws/dist/client.js","../src/services/StreamingService.ts","../src/services/TransactionService.ts","../src/utils/functions/debugOutput.ts","../node_modules/.pnpm/yocto-queue@0.1.0/node_modules/yocto-queue/index.js","../node_modules/.pnpm/p-limit@3.1.0/node_modules/p-limit/index.js","../src/utils/functions/execution.ts","../src/utils/functions/isValidApiKey.ts","../src/GoldRushClient.ts","../node_modules/.pnpm/big.js@6.2.2/node_modules/big.js/big.mjs","../src/utils/functions/calculatePrettyBalance.ts","../src/utils/functions/prettifyCurrency.ts","../src/utils/functions/timestamp-parser.ts","../src/utils/types/StreamingService.types.ts"],"sourcesContent":["export const bigIntParser = (\n val: null | undefined | string | number | bigint\n): bigint | null => {\n if (val === null || val === undefined) {\n return null;\n }\n\n return BigInt(val);\n};\n","const baseUrl: string = \"https://api.covalenthq.com/v1\";\r\n\r\nexport const endpointGenerator = (\r\n extension: string = \"\",\r\n params: {\r\n key: string;\r\n value: boolean | null | string | string[] | number | undefined;\r\n }[] = []\r\n): URL => {\r\n extension = extension.replace(baseUrl, \"\");\r\n if (extension.startsWith(\"/\")) {\r\n extension = extension.slice(1);\r\n }\r\n if (!extension.endsWith(\"/\")) {\r\n extension = `${extension}/`;\r\n }\r\n\r\n const urlParams = new URLSearchParams();\r\n\r\n params.forEach((param) => {\r\n if (param.value !== undefined && param.value !== null) {\r\n urlParams.append(param.key, param.value.toString());\r\n }\r\n });\r\n\r\n return new URL(`${baseUrl}/${extension}?${urlParams}`);\r\n};\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport {\r\n type ChainActivityResponse,\r\n type GetAddressActivityQueryParamOpts,\r\n type GetMultiChainBalanceQueryParamOpts,\r\n type GetMultiChainMultiAddressTransactionsParamOtps,\r\n type MultiChainBalanceResponse,\r\n type MultiChainMultiAddressTransactionsResponse,\r\n} from \"../utils/types/AllChainService.types\";\r\nimport { type GoldRushResponse } from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Cross Chain API\r\n *\r\n */\r\nexport class AllChainsService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to locate chains which an address is active on with a single API call.\r\n *\r\n * @param {string} walletAddress - The requested wallet address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAddressActivityQueryParamOpts} queryParamOpts\r\n * - `testnets`: Set to true to include testnets with activity in the response. By default, it's set to `false` and only returns mainnet activity.\r\n *\r\n */\r\n public async getAddressActivity(\r\n walletAddress: string,\r\n queryParamOpts?: GetAddressActivityQueryParamOpts\r\n ): Promise<GoldRushResponse<ChainActivityResponse>> {\r\n const endpoint = endpointGenerator(`address/${walletAddress}/activity`, [\r\n {\r\n key: \"testnets\",\r\n value: queryParamOpts?.testnets,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainActivityResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((activityItem) => ({\r\n ...activityItem,\r\n last_seen_at: activityItem.last_seen_at\r\n ? new Date(activityItem.last_seen_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ChainActivityResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get transactions cross chains and addresses.\r\n *\r\n * @param {Chain[]} chains - An array of the chain names or IDs to retrieve transactions from. Defaults to all foundational chains.\r\n * @param {string[]} addresses - An array of addresses for which transactions are fetched. Does not support name resolution.\r\n * @param {number} limit - Number of transactions to return per page, up to the default max of 100 items.\r\n * @param {string} before - Pagination cursor pointing to fetch transactions before a certain point.\r\n * @param {string} after - Pagination cursor pointing to fetch transactions after a certain point.\r\n * @param {boolean} withLogs - Whether to include raw logs in the response.\r\n * @param {boolean} withDecodedLogs - Whether to include decoded logs in the response.\r\n * @param {Quote | CryptocurrencyQuote} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC` and `ETH`.\r\n *\r\n */\r\n public async getMultiChainMultiAddressTransactions(\r\n queryParamOpts?: GetMultiChainMultiAddressTransactionsParamOtps\r\n ): Promise<GoldRushResponse<MultiChainMultiAddressTransactionsResponse>> {\r\n const endpoint = endpointGenerator(`allchains/transactions`, [\r\n {\r\n key: \"chains\",\r\n value: queryParamOpts?.chains as string[],\r\n },\r\n {\r\n key: \"addresses\",\r\n value: queryParamOpts?.addresses,\r\n },\r\n {\r\n key: \"limit\",\r\n value: queryParamOpts?.limit,\r\n },\r\n {\r\n key: \"before\",\r\n value: queryParamOpts?.before,\r\n },\r\n {\r\n key: \"after\",\r\n value: queryParamOpts?.after,\r\n },\r\n {\r\n key: \"with-logs\",\r\n value: queryParamOpts?.withLogs,\r\n },\r\n {\r\n key: \"with-decoded-logs\",\r\n value: queryParamOpts?.withDecodedLogs,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]);\r\n\r\n const parseData = (\r\n data: GoldRushResponse<MultiChainMultiAddressTransactionsResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<MultiChainMultiAddressTransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n * @deprecated This method is deprecated and will be removed in the upcoming versions. Please use `AllChainsService.getMultiChainMultiAddressTransactions` instead.\r\n *\r\n * Commonly used to get transactions cross chains and addresses.\r\n *\r\n * @param {Chain[]} chains - An array of the chain names or IDs to retrieve transactions from. Defaults to all foundational chains.\r\n * @param {string[]} addresses - An array of addresses for which transactions are fetched. Does not support name resolution.\r\n * @param {number} limit - Number of transactions to return per page, up to the default max of 100 items.\r\n * @param {string} before - Pagination cursor pointing to fetch transactions before a certain point.\r\n * @param {string} after - Pagination cursor pointing to fetch transactions after a certain point.\r\n * @param {boolean} withLogs - Whether to include raw logs in the response.\r\n * @param {boolean} withDecodedLogs - Whether to include decoded logs in the response.\r\n * @param {Quote | CryptocurrencyQuote} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC` and `ETH`.\r\n *\r\n */\r\n public async getMultiChainAndMultiAddressTransactions(\r\n queryParamOpts?: GetMultiChainMultiAddressTransactionsParamOtps\r\n ): Promise<GoldRushResponse<MultiChainMultiAddressTransactionsResponse>> {\r\n return await this.getMultiChainMultiAddressTransactions(queryParamOpts);\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} walletAddress - The requested wallet Address.\r\n * @param {GetMultiChainBalanceQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC`, and `ETH`.\r\n * - `chains`: Array chain ids or chain names to query. Limited to 10 chains.\r\n * - `limit`: The number of items to return. Default is 100.\r\n * - `timestamp`: The timestamp to query balances at. If omitted, the latest balances are returned.\r\n * - `cursorBefore`: The cursor of previous page.\r\n */\r\n public async getMultiChainBalances(\r\n walletAddress: string,\r\n queryParamOpts?: GetMultiChainBalanceQueryParamOpts\r\n ): Promise<GoldRushResponse<MultiChainBalanceResponse>> {\r\n const endpoint = endpointGenerator(\r\n `allchains/address/${walletAddress}/balances`,\r\n [\r\n {\r\n key: \"chains\",\r\n value: queryParamOpts?.chains as string[],\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"limit\",\r\n value: queryParamOpts?.limit,\r\n },\r\n {\r\n key: \"cutoff-timestamp\",\r\n value: queryParamOpts?.cutoffTimestamp,\r\n },\r\n {\r\n key: \"before\",\r\n value: queryParamOpts?.before,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<MultiChainBalanceResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<MultiChainBalanceResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import {\n type GoldRushResponse,\n type Nullable,\n type Pagination,\n type PaginationLinks,\n} from \"../types/Generic.types\";\nimport { type Execution } from \"./execution\";\n\nexport async function* paginateEndpoint<\n T extends\n | Nullable<{ pagination: Pagination }>\n | Nullable<{ links: PaginationLinks }>\n | null,\n>(\n endpoint: URL,\n execution: Execution,\n parseData: (data: GoldRushResponse<T>) => GoldRushResponse<T>,\n implementation: \"pagination\" | \"links\"\n): AsyncIterable<GoldRushResponse<T>> {\n let _endpoint: URL = new URL(endpoint);\n let hasMore: boolean = true;\n let page_number: number = +(_endpoint.searchParams.get(\"page-number\") ?? 0);\n\n while (hasMore) {\n try {\n if (implementation === \"pagination\") {\n _endpoint.searchParams.set(\"page-number\", page_number.toString());\n\n const parsedData = await execution.execute<T>(_endpoint, parseData);\n\n if (parsedData.error) {\n throw parsedData;\n }\n\n if (\n !(\n parsedData.data as {\n pagination: Pagination;\n }\n )?.pagination?.has_more\n ) {\n hasMore = false;\n } else {\n page_number++;\n }\n\n yield parsedData as GoldRushResponse<T>;\n } else if (implementation === \"links\") {\n const parsedData = await execution.execute<T>(_endpoint, parseData);\n const prevLink: string | null =\n (\n parsedData.data as {\n links: PaginationLinks;\n }\n )?.links?.prev || null;\n\n if (!prevLink) {\n hasMore = false;\n } else {\n _endpoint = new URL(`${prevLink}?${_endpoint.searchParams}`);\n }\n\n yield parsedData as GoldRushResponse<T>;\n }\n } catch (error: any) {\n hasMore = false;\n yield {\n data: null,\n error: true,\n error_code: error?.cause?.code || error?.error_code || 500,\n error_message:\n error?.cause?.message ||\n error?.error_message ||\n \"Internal server error\",\n };\n }\n }\n}\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport {\r\n type BalancesResponse,\r\n type Erc20TransfersResponse,\r\n type GetErc20TransfersForWalletAddressQueryParamOpts,\r\n type GetHistoricalPortfolioForWalletAddressQueryParamOpts,\r\n type GetHistoricalTokenBalancesForWalletAddressQueryParamOpts,\r\n type GetNativeTokenBalanceQueryParamOpts,\r\n type GetTokenBalancesForWalletAddressQueryParamOpts,\r\n type GetTokenHoldersV2ForTokenAddressQueryParamOpts,\r\n type HistoricalBalancesResponse,\r\n type PortfolioResponse,\r\n type TokenBalanceNativeResponse,\r\n type TokenHoldersResponse,\r\n} from \"../utils/types/BalanceService.types\";\r\nimport {\r\n type Chain,\r\n type GoldRushResponse,\r\n} from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Balances APIs\r\n *\r\n */\r\nexport class BalanceService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the native, fungible (ERC20), and non-fungible (ERC721 & ERC1155) tokens held by an address. Response includes spot prices and other metadata.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenBalancesForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `nft`: If `true`, NFTs will be included in the response.\r\n * - `noNftFetch`: If `true`, only NFTs that have been cached will be included in the response. Helpful for faster response times.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n * - `noNftAssetMetadata`: If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.\r\n *\r\n */\r\n public async getTokenBalancesForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetTokenBalancesForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<BalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/balances_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"nft\",\r\n value: queryParamOpts?.nft,\r\n },\r\n {\r\n key: \"no-nft-fetch\",\r\n value: queryParamOpts?.noNftFetch,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n {\r\n key: \"no-nft-asset-metadata\",\r\n value: queryParamOpts?.noNftAssetMetadata,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BalancesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n token_balance: bigIntParser(nftItem.token_balance),\r\n token_price_wei: bigIntParser(nftItem.token_price_wei),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BalancesResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render a daily portfolio balance for an address broken down by the token. The timeframe is user-configurable, defaults to 30 days.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetHistoricalPortfolioForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalPortfolioForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetHistoricalPortfolioForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<PortfolioResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/portfolio_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<PortfolioResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items =\r\n data.data.items?.map((portfolioItem) => ({\r\n ...portfolioItem,\r\n holdings:\r\n portfolioItem.holdings?.map((holdingItem) => ({\r\n ...holdingItem,\r\n timestamp: holdingItem.timestamp\r\n ? new Date(holdingItem.timestamp)\r\n : null,\r\n close: {\r\n ...holdingItem.close!,\r\n balance: bigIntParser(holdingItem.close?.balance),\r\n },\r\n high: {\r\n ...holdingItem.high!,\r\n balance: bigIntParser(holdingItem.high?.balance),\r\n },\r\n low: {\r\n ...holdingItem.low!,\r\n balance: bigIntParser(holdingItem.low?.balance),\r\n },\r\n open: {\r\n ...holdingItem.open!,\r\n balance: bigIntParser(holdingItem.open?.balance),\r\n },\r\n })) || null,\r\n })) || null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<PortfolioResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render the transfer-in and transfer-out of a token along with historical prices from an address.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetErc20TransfersForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `contractAddress`: The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * - `startingBlock`: The block height to start from, defaults to `0`.\r\n * - `endingBlock`: The block height to end at, defaults to current block height.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getErc20TransfersForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts: GetErc20TransfersForWalletAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<Erc20TransfersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transfers_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"contract-address\",\r\n value: queryParamOpts?.contractAddress,\r\n },\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<Erc20TransfersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((ercItem) => ({\r\n ...ercItem,\r\n block_signed_at: ercItem.block_signed_at\r\n ? new Date(ercItem.block_signed_at)\r\n : null,\r\n value: bigIntParser(ercItem.value),\r\n fees_paid: bigIntParser(ercItem.fees_paid),\r\n transfers: ercItem.transfers\r\n ? ercItem.transfers.map((transferItem) => ({\r\n ...transferItem,\r\n balance: bigIntParser(transferItem.balance),\r\n block_signed_at: transferItem.block_signed_at\r\n ? new Date(transferItem.block_signed_at)\r\n : null,\r\n delta: bigIntParser(transferItem.delta),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<Erc20TransfersResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render the transfer-in and transfer-out of a token along with historical prices from an address.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetErc20TransfersForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `contractAddress`: The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * - `startingBlock`: The block height to start from, defaults to `0`.\r\n * - `endingBlock`: The block height to end at, defaults to current block height.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getErc20TransfersForWalletAddressByPage(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts: GetErc20TransfersForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<Erc20TransfersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transfers_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"contract-address\",\r\n value: queryParamOpts?.contractAddress,\r\n },\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<Erc20TransfersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockTxItem) => ({\r\n ...blockTxItem,\r\n block_signed_at: blockTxItem.block_signed_at\r\n ? new Date(blockTxItem.block_signed_at)\r\n : null,\r\n fees_paid: bigIntParser(blockTxItem.fees_paid),\r\n transfers:\r\n blockTxItem.transfers?.map((transferItem) => ({\r\n ...transferItem,\r\n balance: bigIntParser(transferItem.balance),\r\n block_signed_at: transferItem.block_signed_at\r\n ? new Date(transferItem.block_signed_at)\r\n : null,\r\n delta: bigIntParser(transferItem.delta),\r\n })) || null,\r\n value: bigIntParser(blockTxItem.value),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<Erc20TransfersResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get a list of all the token holders for a specified ERC20 or ERC721 token. Returns historic token holders when block-height is set (defaults to `latest`). Useful for building pie charts of token holders.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenHoldersV2ForTokenAddressQueryParamOpts} queryParamOpts\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n * - `pageSize`: Number of items per page. Note: Currently, only values of `100` and `1000` are supported. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `date`: Ending date to define a block range (YYYY-MM-DD). Omitting this parameter defaults to the current date.\r\n *\r\n */\r\n public async *getTokenHoldersV2ForTokenAddress(\r\n chainName: Chain,\r\n tokenAddress: string,\r\n queryParamOpts?: GetTokenHoldersV2ForTokenAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<TokenHoldersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/tokens/${tokenAddress}/token_holders_v2`,\r\n [\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"date\",\r\n value: queryParamOpts?.date,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenHoldersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n balance: bigIntParser(tokenItem.balance),\r\n total_supply: bigIntParser(tokenItem.total_supply),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<TokenHoldersResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get a list of all the token holders for a specified ERC20 or ERC721 token. Returns historic token holders when block-height is set (defaults to `latest`). Useful for building pie charts of token holders.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenHoldersV2ForTokenAddressQueryParamOpts} queryParamOpts\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n * - `pageSize`: Number of items per page. Note: Currently, only values of `100` and `1000` are supported. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `date`: Ending date to define a block range (YYYY-MM-DD). Omitting this parameter defaults to the current date.\r\n *\r\n */\r\n public async getTokenHoldersV2ForTokenAddressByPage(\r\n chainName: Chain,\r\n tokenAddress: string,\r\n queryParamOpts?: GetTokenHoldersV2ForTokenAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TokenHoldersResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/tokens/${tokenAddress}/token_holders_v2`,\r\n [\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"date\",\r\n value: queryParamOpts?.date,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenHoldersResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n total_supply: bigIntParser(balanceItem.total_supply),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TokenHoldersResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the historical native, fungible (ERC20), and non-fungible (ERC721 & ERC1155) tokens held by an address at a given block height or date. Response includes daily prices and other metadata.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetHistoricalTokenBalancesForWalletAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `nft`: If `true`, NFTs will be included in the response.\r\n * - `noNftFetch`: If `true`, only NFTs that have been cached will be included in the response. Helpful for faster response times.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n * - `noNftAssetMetadata`: If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n * - `date`: Ending date to define a block range (YYYY-MM-DD). Omitting this parameter defaults to the current date.\r\n *\r\n */\r\n public async getHistoricalTokenBalancesForWalletAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetHistoricalTokenBalancesForWalletAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<HistoricalBalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/historical_balances`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"nft\",\r\n value: queryParamOpts?.nft,\r\n },\r\n {\r\n key: \"no-nft-fetch\",\r\n value: queryParamOpts?.noNftFetch,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n {\r\n key: \"no-nft-asset-metadata\",\r\n value: queryParamOpts?.noNftAssetMetadata,\r\n },\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n {\r\n key: \"date\",\r\n value: queryParamOpts?.date,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<HistoricalBalancesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n token_balance: bigIntParser(nftItem.token_balance),\r\n token_price_wei: bigIntParser(nftItem.token_price_wei),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<HistoricalBalancesResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetNativeTokenBalanceQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.\r\n *\r\n */\r\n public async getNativeTokenBalance(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetNativeTokenBalanceQueryParamOpts\r\n ): Promise<GoldRushResponse<TokenBalanceNativeResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/balances_native`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"block-height\",\r\n value: queryParamOpts?.blockHeight,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenBalanceNativeResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TokenBalanceNativeResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport {\r\n type ChainActivityResponse,\r\n type GetAddressActivityQueryParamOpts,\r\n} from \"../utils/types/AllChainService.types\";\r\nimport {\r\n type AllChainsResponse,\r\n type AllChainsStatusResponse,\r\n type BlockHeightsResponse,\r\n type BlockResponse,\r\n type GasPricesResponse,\r\n type GetBlockHeightsQueryParamOpts,\r\n type GetGasPricesQueryParamOpts,\r\n type GetLogEventsByAddressQueryParamOpts,\r\n type GetLogEventsByTopicHashQueryParamOpts,\r\n type GetLogsQueryParamOpts,\r\n type GetLogsResponse,\r\n type LogEventsByAddressResponse,\r\n type LogEventsByTopicHashResponse,\r\n type ResolvedAddress,\r\n} from \"../utils/types/BaseService.types\";\r\nimport {\r\n type Chain,\r\n type GoldRushResponse,\r\n} from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Base API\r\n *\r\n */\r\nexport class BaseService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render a single block for a block explorer.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} blockHeight - The block height or `latest` for the latest block available.\r\n *\r\n */\r\n public async getBlock(\r\n chainName: Chain,\r\n blockHeight: string\r\n ): Promise<GoldRushResponse<BlockResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_v2/${blockHeight}`,\r\n []\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BlockHeightsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockItem) => ({\r\n ...blockItem,\r\n signed_at: blockItem.signed_at\r\n ? new Date(blockItem.signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BlockHeightsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to resolve ENS, RNS and Unstoppable Domains addresses.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n *\r\n */\r\n public async getResolvedAddress(\r\n chainName: Chain,\r\n walletAddress: string\r\n ): Promise<GoldRushResponse<ResolvedAddress>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/resolve_address`,\r\n []\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<ResolvedAddress>) => {\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ResolvedAddress>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the block heights within a particular date range. Useful for rendering a display where you sort blocks by day.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} startDate - The start date in YYYY-MM-DD format.\r\n * @param {string | \"latest\"} endDate - The end date in YYYY-MM-DD format. Also accepts \"latest\" for the latest block height\r\n * @param {GetBlockHeightsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getBlockHeights(\r\n chainName: Chain,\r\n startDate: string,\r\n endDate: string | \"latest\",\r\n queryParamOpts?: GetBlockHeightsQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<BlockHeightsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_v2/${startDate}/${endDate}`,\r\n [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BlockHeightsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockItem) => ({\r\n ...blockItem,\r\n signed_at: blockItem.signed_at\r\n ? new Date(blockItem.signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<BlockHeightsResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the block heights within a particular date range. Useful for rendering a display where you sort blocks by day.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} startDate - The start date in YYYY-MM-DD format.\r\n * @param {string | \"latest\"} endDate - The end date in YYYY-MM-DD format. Also accepts \"latest\" for the latest block height\r\n * @param {GetBlockHeightsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getBlockHeightsByPage(\r\n chainName: Chain,\r\n startDate: string,\r\n endDate: string | \"latest\",\r\n queryParamOpts?: GetBlockHeightsQueryParamOpts\r\n ): Promise<GoldRushResponse<BlockHeightsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_v2/${startDate}/${endDate}`,\r\n [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BlockHeightsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((blockItem) => ({\r\n ...blockItem,\r\n signed_at: blockItem.signed_at\r\n ? new Date(blockItem.signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BlockHeightsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the event logs of the latest block, or for a range of blocks. Includes sender contract metadata as well as decoded logs.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {GetLogsQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `address`: The address of the log events sender contract.\r\n * - `topics`: The topic hash(es) to retrieve logs with.\r\n * - `blockHash`: The block hash to retrieve logs for.\r\n * - `skipDecode`: Omit decoded log events.\r\n *\r\n */\r\n public async getLogs(\r\n chainName: Chain,\r\n queryParamOpts?: GetLogsQueryParamOpts\r\n ): Promise<GoldRushResponse<GetLogsResponse>> {\r\n const endpoint = endpointGenerator(`${chainName}/events`, [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"address\",\r\n value: queryParamOpts?.address,\r\n },\r\n {\r\n key: \"topics\",\r\n value: queryParamOpts?.topics,\r\n },\r\n {\r\n key: \"block-hash\",\r\n value: queryParamOpts?.blockHash,\r\n },\r\n {\r\n key: \"skip-decode\",\r\n value: queryParamOpts?.skipDecode,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<GetLogsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<GetLogsResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the event logs emitted from a particular contract address. Useful for building dashboards that examine on-chain interactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetLogEventsByAddressQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getLogEventsByAddress(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetLogEventsByAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<LogEventsByAddressResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/address/${contractAddress}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<LogEventsByAddressResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<LogEventsByAddressResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all the event logs emitted from a particular contract address. Useful for building dashboards that examine on-chain interactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetLogEventsByAddressQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getLogEventsByAddressByPage(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetLogEventsByAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<LogEventsByAddressResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/address/${contractAddress}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<LogEventsByAddressResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<LogEventsByAddressResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all event logs of the same topic hash across all contracts within a particular chain. Useful for cross-sectional analysis of event logs that are emitted on-chain.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} topicHash - The endpoint will return event logs that contain this topic hash.\r\n * @param {GetLogEventsByTopicHashQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `secondaryTopics`: Additional topic hash(es) to filter on - padded & unpadded address fields are supported. Separate multiple topics with a comma.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async *getLogEventsByTopicHash(\r\n chainName: Chain,\r\n topicHash: string,\r\n queryParamOpts?: GetLogEventsByTopicHashQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<LogEventsByTopicHashResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/topics/${topicHash}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"secondary-topics\",\r\n value: queryParamOpts?.secondaryTopics,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<LogEventsByTopicHashResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<LogEventsByTopicHashResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all event logs of the same topic hash across all contracts within a particular chain. Useful for cross-sectional analysis of event logs that are emitted on-chain.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} topicHash - The endpoint will return event logs that contain this topic hash.\r\n * @param {GetLogEventsByTopicHashQueryParamOpts} queryParamOpts\r\n * - `startingBlock`: The first block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `endingBlock`: The last block to retrieve log events with. Accepts decimals, hexadecimals, or the strings `earliest` and `latest`.\r\n * - `secondaryTopics`: Additional topic hash(es) to filter on - padded & unpadded address fields are supported. Separate multiple topics with a comma.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n *\r\n */\r\n public async getLogEventsByTopicHashByPage(\r\n chainName: Chain,\r\n topicHash: string,\r\n queryParamOpts?: GetLogEventsByTopicHashQueryParamOpts\r\n ): Promise<GoldRushResponse<LogEventsByTopicHashResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/events/topics/${topicHash}`,\r\n [\r\n {\r\n key: \"starting-block\",\r\n value: queryParamOpts?.startingBlock,\r\n },\r\n {\r\n key: \"ending-block\",\r\n value: queryParamOpts?.endingBlock,\r\n },\r\n {\r\n key: \"secondary-topics\",\r\n value: queryParamOpts?.secondaryTopics,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<LogEventsByTopicHashResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<LogEventsByTopicHashResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build internal dashboards for all supported chains on Covalent.\r\n *\r\n *\r\n */\r\n public async getAllChains(): Promise<GoldRushResponse<AllChainsResponse>> {\r\n const endpoint = endpointGenerator(`chains`);\r\n\r\n const parseData = (data: GoldRushResponse<AllChainsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((chainItem) => ({\r\n ...chainItem,\r\n chain_id: chainItem.chain_id ? +chainItem.chain_id : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<AllChainsResponse>(endpoint, parseData);\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build internal status dashboards of all supported chains.\r\n *\r\n *\r\n */\r\n public async getAllChainStatus(): Promise<\r\n GoldRushResponse<AllChainsStatusResponse>\r\n > {\r\n const endpoint = endpointGenerator(`chains/status`);\r\n\r\n const parseData = (data: GoldRushResponse<AllChainsStatusResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((chainItem) => ({\r\n ...chainItem,\r\n chain_id: chainItem.chain_id ? +chainItem.chain_id : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<AllChainsStatusResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n * @deprecated This method is deprecated and will be removed in the upcoming versions. Please use `AllChainsService.getAddressActivity` instead.\r\n *\r\n * Commonly used to locate chains which an address is active on with a single API call.\r\n *\r\n * @param {string} walletAddress - The requested wallet address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAddressActivityQueryParamOpts} queryParamOpts\r\n * - `testnets`: Set to true to include testnets with activity in the response. By default, it's set to `false` and only returns mainnet activity.\r\n *\r\n */\r\n public async getAddressActivity(\r\n walletAddress: string,\r\n queryParamOpts?: GetAddressActivityQueryParamOpts\r\n ): Promise<GoldRushResponse<ChainActivityResponse>> {\r\n const endpoint = endpointGenerator(`address/${walletAddress}/activity`, [\r\n {\r\n key: \"testnets\",\r\n value: queryParamOpts?.testnets,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainActivityResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((activityItem) => ({\r\n ...activityItem,\r\n last_seen_at: activityItem.last_seen_at\r\n ? new Date(activityItem.last_seen_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ChainActivityResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} eventType - The desired event type to retrieve gas prices for. Supports `erc20` transfer events, `uniswapv3` swap events and `nativetokens` transfers.\r\n * @param {GetGasPricesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n *\r\n */\r\n public async getGasPrices(\r\n chainName: Chain,\r\n eventType: \"erc20\" | \"nativetokens\" | \"uniswapv3\",\r\n queryParamOpts?: GetGasPricesQueryParamOpts\r\n ): Promise<GoldRushResponse<GasPricesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/event/${eventType}/gas_prices`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<GasPricesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.base_fee = bigIntParser(data.data.base_fee);\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<GasPricesResponse>(endpoint, parseData);\r\n }\r\n}\r\n","export enum ChainName {\r\n ETH_MAINNET = \"eth-mainnet\",\r\n ETH_SEPOLIA = \"eth-sepolia\",\r\n ETH_HOLESKY = \"eth-holesky\",\r\n MATIC_MAINNET = \"matic-mainnet\",\r\n AVALANCHE_MAINNET = \"avalanche-mainnet\",\r\n AVALANCHE_TESTNET = \"avalanche-testnet\",\r\n BSC_MAINNET = \"bsc-mainnet\",\r\n BSC_TESTNET = \"bsc-testnet\",\r\n MOONBEAM_MAINNET = \"moonbeam-mainnet\",\r\n MOONBEAM_MOONBASE_ALPHA = \"moonbeam-moonbase-alpha\",\r\n MOONBEAM_MOONRIVER = \"moonbeam-moonriver\",\r\n ARBITRUM_MAINNET = \"arbitrum-mainnet\",\r\n ARBITRUM_NOVA_MAINNET = \"arbitrum-nova-mainnet\",\r\n FANTOM_MAINNET = \"fantom-mainnet\",\r\n FANTOM_TESTNET = \"fantom-testnet\",\r\n PALM_MAINNET = \"palm-mainnet\",\r\n PALM_TESTNET = \"palm-testnet\",\r\n BTC_MAINNET = \"btc-mainnet\",\r\n SOLANA_MAINNET = \"solana-mainnet\",\r\n AXIE_MAINNET = \"axie-mainnet\",\r\n OPTIMISM_MAINNET = \"optimism-mainnet\",\r\n OPTIMISM_SEPOLIA = \"optimism-sepolia\",\r\n CRONOS_ZKEVM_TESTNET = \"cronos-zkevm-testnet\",\r\n CRONOS_ZKEVM_MAINNET = \"cronos-zkevm-mainnet\",\r\n AURORA_MAINNET = \"aurora-mainnet\",\r\n AURORA_TESTNET = \"aurora-testnet\",\r\n EMERALD_PARATIME_MAINNET = \"emerald-paratime-mainnet\",\r\n DEFI_KINGDOMS_MAINNET = \"defi-kingdoms-mainnet\",\r\n DEFI_KINGDOMS_TESTNET = \"defi-kingdoms-testnet\",\r\n BOBA_MAINNET = \"boba-mainnet\",\r\n BOBA_BNB_MAINNET = \"boba-bnb-mainnet\",\r\n BOBA_BNB_TESTNET = \"boba-bnb-testnet\",\r\n SCROLL_SEPOLIA_TESTNET = \"scroll-sepolia-testnet\",\r\n METIS_MAINNET = \"metis-mainnet\",\r\n AVALANCHE_DEXALOT_MAINNET = \"avalanche-dexalot-mainnet\",\r\n AVALANCHE_DEXALOT_TESTNET = \"avalanche-dexalot-testnet\",\r\n AVALANCHE_SHRAPNEL_MAINNET = \"avalanche-shrapnel-mainnet\",\r\n AVALANCHE_NUMBERS = \"avalanche-numbers\",\r\n AVALANCHE_XANACHAIN = \"avalanche-xanachain\",\r\n AVALANCHE_STEP_NETWORK = \"avalanche-step-network\",\r\n AVALANCHE_SHRAPNEL_TESTNET = \"avalanche-shrapnel-testnet\",\r\n AVALANCHE_BEAM_TESTNET = \"avalanche-beam-testnet\",\r\n AVALANCHE_BLITZ_TESTNET = \"avalanche-blitz-testnet\",\r\n AVALANCHE_UPTN = \"avalanche-uptn\",\r\n AVALANCHE_BEAM_MAINNET = \"avalanche-beam-mainnet\",\r\n AVALANCHE_MIRAI_TESTNET = \"avalanche-mirai-testnet\",\r\n BERACHAIN_MAINNET = \"berachain-mainnet\",\r\n UNICHAIN_MAINNET = \"unichain-mainnet\",\r\n CANTO_MAINNET = \"canto-mainnet\",\r\n FLARENETWORKS_FLARE_MAINNET = \"flarenetworks-flare-mainnet\",\r\n FLARENETWORKS_FLARE_TESTNET = \"flarenetworks-flare-testnet\",\r\n LINEA_MAINNET = \"linea-mainnet\",\r\n POLYGON_ZKEVM_MAINNET = \"polygon-zkevm-mainnet\",\r\n LINEA_SEPOLIA_TESTNET = \"linea-sepolia-testnet\",\r\n POLYGON_ZKEVM_TESTNET = \"polygon-zkevm-testnet\",\r\n POLYGON_AMOY_TESTNET = \"polygon-amoy-testnet\",\r\n MANTLE_MAINNET = \"mantle-mainnet\",\r\n POLYGON_ZKEVM_CARDONA_TESTNET = \"polygon-zkevm-cardona-testnet\",\r\n MANTLE_SEPOLIA_TESTNET = \"mantle-sepolia-testnet\",\r\n BASE_MAINNET = \"base-mainnet\",\r\n BASE_SEPOLIA_TESTNET = \"base-sepolia-testnet\",\r\n OASIS_SAPPHIRE_MAINNET = \"oasis-sapphire-mainnet\",\r\n SYNDR_TESTNET = \"syndr-testnet\",\r\n OASIS_SAPPHIRE_TESTNET = \"oasis-sapphire-testnet\",\r\n CELO_MAINNET = \"celo-mainnet\",\r\n X1_MAINNET = \"x1-mainnet\",\r\n HYPEREVM_MAINNET = \"hyperevm-mainnet\",\r\n HORIZEN_EON_MAINNET = \"horizen-eon-mainnet\",\r\n HORIZEN_GOBI_TESTNET = \"horizen-gobi-testnet\",\r\n FRAXTAL_MAINNET = \"fraxtal-mainnet\",\r\n APECHAIN_TESTNET = \"apechain-testnet\",\r\n REDSTONE_MAINNET = \"redstone-mainnet\",\r\n SEI_MAINNET = \"sei-mainnet\",\r\n APECHAIN_MAINNET = \"apechain-mainnet\",\r\n UNICHAIN_SEPOLIA_TESTNET = \"unichain-sepolia-testnet\",\r\n WORLD_MAINNET = \"world-mainnet\",\r\n WORLD_SEPOLIA_TESTNET = \"world-sepolia-testnet\",\r\n LENS_SEPOLIA_TESTNET = \"lens-sepolia-testnet\",\r\n INK_SEPOLIA_TESTNET = \"ink-sepolia-testnet\",\r\n INK_MAINNET = \"ink-mainnet\",\r\n LENS_MAINNET = \"lens-mainnet\",\r\n AVALANCHE_MELD_TESTNET = \"avalanche-meld-testnet\",\r\n AVALANCHE_MELD_MAINNET = \"avalanche-meld-mainnet\",\r\n GUNZILLA_TESTNET = \"gunzilla-testnet\",\r\n ZORA_MAINNET = \"zora-mainnet\",\r\n ZORA_SEPOLIA_TESTNET = \"zora-sepolia-testnet\",\r\n ZKSYNC_MAINNET = \"zksync-mainnet\",\r\n ZKSYNC_SEPOLIA_TESTNET = \"zksync-sepolia-testnet\",\r\n BNB_OPBNB_TESTNET = \"bnb-opbnb-testnet\",\r\n BNB_OPBNB_MAINNET = \"bnb-opbnb-mainnet\",\r\n ZETACHAIN_TESTNET = \"zetachain-testnet\",\r\n ZETACHAIN_MAINNET = \"zetachain-mainnet\",\r\n KINTO_TESTNET = \"kinto-testnet\",\r\n GNOSIS_MAINNET = \"gnosis-mainnet\",\r\n GNOSIS_TESTNET = \"gnosis-testnet\",\r\n VICTION_MAINNET = \"viction-mainnet\",\r\n VICTION_TESTNET = \"viction-testnet\",\r\n TAIKO_MAINNET = \"taiko-mainnet\",\r\n TAIKO_HEKLA_TESTNET = \"taiko-hekla-testnet\",\r\n MERLIN_MAINNET = \"merlin-mainnet\",\r\n MERLIN_TESTNET = \"merlin-testnet\",\r\n MOVEMENT_MEVM_TESTNET = \"movement-mevm-testnet\",\r\n BLAST_MAINNET = \"blast-mainnet\",\r\n SCROLL_MAINNET = \"scroll-mainnet\",\r\n}\r\n\r\nexport enum ChainID {\r\n ETH_MAINNET = 1,\r\n ETH_SEPOLIA = 11155111,\r\n ETH_HOLESKY = 17000,\r\n MATIC_MAINNET = 137,\r\n AVALANCHE_MAINNET = 43114,\r\n AVALANCHE_TESTNET = 43113,\r\n BSC_MAINNET = 56,\r\n BSC_TESTNET = 97,\r\n MOONBEAM_MAINNET = 1284,\r\n MOONBEAM_MOONBASE_ALPHA = 1287,\r\n MOONBEAM_MOONRIVER = 1285,\r\n ARBITRUM_MAINNET = 42161,\r\n ARBITRUM_NOVA_MAINNET = 42170,\r\n FANTOM_MAINNET = 250,\r\n FANTOM_TESTNET = 4002,\r\n PALM_MAINNET = 11297108109,\r\n PALM_TESTNET = 11297108099,\r\n BTC_MAINNET = 20090103,\r\n SOLANA_MAINNET = 1399811149,\r\n AXIE_MAINNET = 2020,\r\n OPTIMISM_MAINNET = 10,\r\n OPTIMISM_SEPOLIA = 11155420,\r\n CRONOS_ZKEVM_TESTNET = 282,\r\n CRONOS_ZKEVM_MAINNET = 388,\r\n AURORA_MAINNET = 1313161554,\r\n AURORA_TESTNET = 1313161555,\r\n EMERALD_PARATIME_MAINNET = 42262,\r\n DEFI_KINGDOMS_MAINNET = 53935,\r\n DEFI_KINGDOMS_TESTNET = 335,\r\n BOBA_MAINNET = 288,\r\n BOBA_BNB_MAINNET = 56288,\r\n BOBA_BNB_TESTNET = 9728,\r\n SCROLL_SEPOLIA_TESTNET = 534351,\r\n METIS_MAINNET = 1088,\r\n AVALANCHE_DEXALOT_MAINNET = 432204,\r\n AVALANCHE_DEXALOT_TESTNET = 432201,\r\n AVALANCHE_SHRAPNEL_MAINNET = 2044,\r\n AVALANCHE_NUMBERS = 10507,\r\n AVALANCHE_XANACHAIN = 8888,\r\n AVALANCHE_STEP_NETWORK = 1234,\r\n AVALANCHE_SHRAPNEL_TESTNET = 2038,\r\n AVALANCHE_BEAM_TESTNET = 13337,\r\n AVALANCHE_BLITZ_TESTNET = 1343,\r\n AVALANCHE_UPTN = 6119,\r\n AVALANCHE_BEAM_MAINNET = 4337,\r\n AVALANCHE_MIRAI_TESTNET = 2195,\r\n BERACHAIN_MAINNET = 80094,\r\n UNICHAIN_MAINNET = 130,\r\n CANTO_MAINNET = 7700,\r\n FLARENETWORKS_FLARE_MAINNET = 14,\r\n FLARENETWORKS_FLARE_TESTNET = 114,\r\n LINEA_MAINNET = 59144,\r\n POLYGON_ZKEVM_MAINNET = 1101,\r\n LINEA_SEPOLIA_TESTNET = 59141,\r\n POLYGON_ZKEVM_TESTNET = 1422,\r\n POLYGON_AMOY_TESTNET = 80002,\r\n MANTLE_MAINNET = 5000,\r\n POLYGON_ZKEVM_CARDONA_TESTNET = 2442,\r\n MANTLE_SEPOLIA_TESTNET = 5003,\r\n BASE_MAINNET = 8453,\r\n BASE_SEPOLIA_TESTNET = 84532,\r\n OASIS_SAPPHIRE_MAINNET = 23294,\r\n SYNDR_TESTNET = 412346,\r\n OASIS_SAPPHIRE_TESTNET = 23295,\r\n CELO_MAINNET = 42220,\r\n X1_MAINNET = 196,\r\n HYPEREVM_MAINNET = 999,\r\n HORIZEN_EON_MAINNET = 7332,\r\n HORIZEN_GOBI_TESTNET = 1663,\r\n FRAXTAL_MAINNET = 252,\r\n APECHAIN_TESTNET = 1798,\r\n REDSTONE_MAINNET = 690,\r\n SEI_MAINNET = 1329,\r\n APECHAIN_MAINNET = 33139,\r\n UNICHAIN_SEPOLIA_TESTNET = 1301,\r\n WORLD_MAINNET = 480,\r\n WORLD_SEPOLIA_TESTNET = 4801,\r\n LENS_SEPOLIA_TESTNET = 37111,\r\n INK_SEPOLIA_TESTNET = 763373,\r\n INK_MAINNET = 57073,\r\n LENS_MAINNET = 232,\r\n AVALANCHE_MELD_TESTNET = 222000222,\r\n AVALANCHE_MELD_MAINNET = 333000333,\r\n GUNZILLA_TESTNET = 49321,\r\n ZORA_MAINNET = 7777777,\r\n ZORA_SEPOLIA_TESTNET = 999999999,\r\n ZKSYNC_MAINNET = 324,\r\n ZKSYNC_SEPOLIA_TESTNET = 300,\r\n BNB_OPBNB_TESTNET = 5611,\r\n BNB_OPBNB_MAINNET = 204,\r\n ZETACHAIN_TESTNET = 7001,\r\n ZETACHAIN_MAINNET = 7000,\r\n KINTO_TESTNET = 42888,\r\n GNOSIS_MAINNET = 100,\r\n GNOSIS_TESTNET = 10200,\r\n VICTION_MAINNET = 88,\r\n VICTION_TESTNET = 89,\r\n TAIKO_MAINNET = 167000,\r\n TAIKO_HEKLA_TESTNET = 167009,\r\n MERLIN_MAINNET = 4200,\r\n MERLIN_TESTNET = 686868,\r\n MOVEMENT_MEVM_TESTNET = 336,\r\n BLAST_MAINNET = 81457,\r\n SCROLL_MAINNET = 534352,\r\n}\r\n\r\nexport type Chain = ChainID | ChainName | `${ChainName}` | `${ChainID}`;\r\n\r\nexport type Source = \"Ponder\" | \"GoldRush\" | \"Viem\";\r\n\r\nexport type Quote =\r\n | \"USD\"\r\n | \"CAD\"\r\n | \"EUR\"\r\n | \"SGD\"\r\n | \"INR\"\r\n | \"JPY\"\r\n | \"VND\"\r\n | \"CNY\"\r\n | \"KRW\"\r\n | \"RUB\"\r\n | \"TRY\"\r\n | \"NGN\"\r\n | \"ARS\"\r\n | \"AUD\"\r\n | \"CHF\"\r\n | \"GBP\";\r\n\r\nexport type CryptocurrencyQuote = \"ETH\" | \"BTC\";\r\n\r\nexport type ChainLabel = \"Foundational\" | \"Frontier\" | \"Community\";\r\n\r\nexport interface Pagination {\r\n /** * True is there is another page. */\r\n has_more: boolean;\r\n /** * The requested page number. */\r\n page_number: number;\r\n /** * The requested number of items on the current page. */\r\n page_size: number;\r\n /** * The total number of items across all pages for this request. */\r\n total_count: number;\r\n}\r\n\r\nexport interface PaginationLinks {\r\n /** * URL link to the next page. */\r\n prev: string;\r\n /** * URL link to the previous page. */\r\n next: string;\r\n}\r\n\r\nexport interface NftCollectionAttribute {\r\n trait_type: string;\r\n value: string;\r\n}\r\n\r\nexport type NftData = Nullable<{\r\n /** * The token's id. */\r\n token_id: bigint;\r\n token_url: string;\r\n /** * The original minter. */\r\n original_owner: string;\r\n /** * The current holder of this NFT. */\r\n current_owner: string;\r\n external_data: NftExternalData;\r\n /** * If `true`, the asset data is available from the Covalent CDN. */\r\n asset_cached: boolean;\r\n /** * If `true`, the image data is available from the Covalent CDN. */\r\n image_cached: boolean;\r\n}>;\r\n\r\nexport interface NftExternalData {\r\n name: string;\r\n description: string;\r\n asset_url: string;\r\n asset_file_extension: string;\r\n asset_mime_type: string;\r\n asset_size_bytes: string;\r\n image: string;\r\n image_256: string;\r\n image_512: string;\r\n image_1024: string;\r\n animation_url: string;\r\n external_url: string;\r\n attributes: NftCollectionAttribute[];\r\n thumbnails: NFTThumbnails;\r\n}\r\n\r\nexport interface NFTThumbnails {\r\n image256: string;\r\n image512: string;\r\n image1024: string;\r\n image_opengraph_url: string;\r\n thumbhash: string;\r\n}\r\n\r\nexport interface DecodedItem {\r\n name: string;\r\n signature: string;\r\n params: Param[];\r\n}\r\n\r\nexport interface Param {\r\n name: string;\r\n type: string;\r\n indexed: boolean;\r\n decoded: boolean;\r\n value: string;\r\n}\r\n\r\nexport type LogEvent = Nullable<{\r\n /** * The block signed timestamp in UTC. */\r\n block_signed_at: Date;\r\n /** * The height of the block. */\r\n block_height: number;\r\n /** * The offset is the position of the tx in the block. */\r\n tx_offset: number;\r\n /** * The offset is the position of the log entry within an event log. */\r\n log_offset: number;\r\n /** * The requested transaction hash. */\r\n tx_hash: string;\r\n /** * The log topics in raw data. */\r\n raw_log_topics: string[];\r\n /** * Use contract decimals to format the token balance for display purposes - divide the balance by `10^{contract_decimals}`. */\r\n sender_contract_decimals: number;\r\n /** * The name of the sender. */\r\n sender_name: string;\r\n sender_contract_ticker_symbol: string;\r\n /** * The address of the sender. */\r\n sender_address: string;\r\n /** * The label of the sender address. */\r\n sender_address_label: string;\r\n /** * The contract logo URL. */\r\n sender_logo_url: string;\r\n /** * A list of supported standard ERC interfaces, eg: `ERC20` and `ERC721`. */\r\n supports_erc: string[];\r\n /** * The address of the deployed UniswapV2 like factory contract for this DEX. */\r\n sender_factory_address: string;\r\n /** * The log events in raw. */\r\n raw_log_data: string;\r\n /** * The decoded item. */\r\n decoded: DecodedItem;\r\n}>;\r\n\r\nexport interface ContractMetadata {\r\n /** * Use contract decimals to format the token balance for display purposes - divide the balance by `10^{contract_decimals}`. */\r\n contract_decimals: number;\r\n /** * The string returned by the `name()` method. */\r\n contract_name: string;\r\n /** * The ticker symbol for this contract. This field is set by a developer and non-unique across a network. */\r\n contract_ticker_symbol: string;\r\n /** * Use the relevant `contract_address` to lookup prices, logos, token transfers, etc. */\r\n contract_address: string;\r\n /** * A list of supported standard ERC interfaces, eg: `ERC20` and `ERC721`. */\r\n supports_erc: string[];\r\n /** * The contract logo URL. */\r\n logo_url: string;\r\n}\r\n\r\nexport interface Explorer {\r\n /** * The name of the explorer. */\r\n label: string;\r\n /** * The URL of the explorer. */\r\n url: string;\r\n}\r\n\r\nexport interface LogoUrls {\r\n /** * The token logo URL. */\r\n token_logo_url: string;\r\n /** * The protocol logo URL. */\r\n protocol_logo_url: string;\r\n /** * The chain logo URL. */\r\n chain_logo_url: string;\r\n}\r\n\r\nexport type GoldRushResponse<T> =\r\n | {\r\n data: T;\r\n error: false | null;\r\n error_code: null;\r\n error_message: null;\r\n }\r\n | {\r\n data: null;\r\n error: true;\r\n error_code: number;\r\n error_message: string;\r\n };\r\n\r\nexport interface GoldRushClientSettings {\r\n /** * Toggle to analyze the execution of each api request. */\r\n debug?: boolean;\r\n /** * The number of concurrent requests allowed. */\r\n threadCount?: number;\r\n /** Toggle to turn on and off retry logic */\r\n enableRetry?: boolean;\r\n /** Set the retry logic count */\r\n maxRetries?: number;\r\n /** Set the retry delay in ms */\r\n retryDelay?: number;\r\n /** Set the source of the usage */\r\n source?: Source | string;\r\n}\r\n\r\nexport type Nullable<T> = {\r\n [P in keyof T]: T[P] | null;\r\n};\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { type BalancesResponse } from \"../utils/types/BalanceService.types\";\r\nimport {\r\n type BitcoinHdWalletBalancesResponse,\r\n type BitcoinTransactionResponse,\r\n type GetBitcoinHdWalletBalancesQueryParamOpts,\r\n type GetBitcoinNonHdWalletBalancesQueryParamOpts,\r\n type GetTransactionsForBitcoinAddressParamOpts,\r\n} from \"../utils/types/BitcoinService.types\";\r\nimport { ChainName, type GoldRushResponse } from \"../utils/types/Generic.types\";\r\n\r\n/**\r\n * Bitcoin APIs\r\n *\r\n */\r\nexport class BitcoinService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * @param {string} walletAddress - The requested Bitcoin HD address.\r\n * @param {GetBitcoinHdWalletBalancesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n *\r\n */\r\n public async getBitcoinHdWalletBalances(\r\n walletAddress: string,\r\n queryParamOpts?: GetBitcoinHdWalletBalancesQueryParamOpts\r\n ): Promise<GoldRushResponse<BitcoinHdWalletBalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${ChainName.BTC_MAINNET}/address/${walletAddress}/hd_wallets`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<BitcoinHdWalletBalancesResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BitcoinHdWalletBalancesResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Used to fetch the full transaction history of a Bitcoin wallet.\r\n *\r\n * @param {GetTransactionsForBitcoinAddressParamOpts} queryParamOpts\r\n * - `address`: The bitcoin address to query.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n */\r\n public async getTransactionsForBtcAddress(\r\n queryParamOpts?: GetTransactionsForBitcoinAddressParamOpts\r\n ): Promise<GoldRushResponse<BitcoinTransactionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `cq/covalent/app/bitcoin/transactions/`,\r\n [\r\n {\r\n key: \"address\",\r\n value: queryParamOpts?.address,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BitcoinTransactionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BitcoinTransactionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the tokens held by an address. Response includes spot prices and other metadata.\r\n *\r\n * @param {string} walletAddress - The requested Bitcoin Non HD address.\r\n * @param {GetBitcoinNonHdWalletBalancesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n *\r\n */\r\n public async getBitcoinNonHdWalletBalances(\r\n walletAddress: string,\r\n queryParamOpts?: GetBitcoinNonHdWalletBalancesQueryParamOpts\r\n ): Promise<GoldRushResponse<BalancesResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${ChainName.BTC_MAINNET}/address/${walletAddress}/balances_v2`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<BalancesResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n last_transferred_at: balanceItem.last_transferred_at\r\n ? new Date(balanceItem.last_transferred_at)\r\n : null,\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n token_balance: bigIntParser(nftItem.token_balance),\r\n token_price_wei: bigIntParser(nftItem.token_price_wei),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<BalancesResponse>(endpoint, parseData);\r\n }\r\n}\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport {\r\n type Chain,\r\n type GoldRushResponse,\r\n} from \"../utils/types/Generic.types\";\r\nimport {\r\n type ChainCollectionResponse,\r\n type CheckOwnershipInNftQueryParamOpts,\r\n type GetChainCollectionsQueryParamOpts,\r\n type GetCollectionMarketDataQueryParamOpts,\r\n type GetNftMetadataForGivenTokenIdForContractQueryParamOpts,\r\n type GetNftTransactionsForContractTokenIdQueryParamOpts,\r\n type GetNftsForAddressQueryParamOpts,\r\n type GetTokenIdsForContractWithMetadataQueryParamOpts,\r\n type NftAddressBalanceNftResponse,\r\n type NftCollectionAttributesForTraitResponse,\r\n type NftCollectionFloorPriceResponse,\r\n type NftCollectionSalesCountResponse,\r\n type NftCollectionTraitsResponse,\r\n type NftCollectionTraitsSummaryResponse,\r\n type NftCollectionVolumeResponse,\r\n type NftMetadataResponse,\r\n type NftOwnershipForCollectionResponse,\r\n type NftTransactionsResponse,\r\n} from \"../utils/types/NftService.types\";\r\n\r\n/**\r\n * NFTs API\r\n *\r\n */\r\nexport class NftService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the list of NFT collections with downloaded and cached off chain data like token metadata and asset files.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {GetChainCollectionsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n *\r\n */\r\n public async *getChainCollections(\r\n chainName: Chain,\r\n queryParamOpts?: GetChainCollectionsQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<ChainCollectionResponse>> {\r\n const endpoint = endpointGenerator(`${chainName}/nft/collections`, [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainCollectionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((collectionItem) => ({\r\n ...collectionItem,\r\n last_scraped_at: collectionItem.last_scraped_at\r\n ? new Date(collectionItem.last_scraped_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<ChainCollectionResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the list of NFT collections with downloaded and cached off chain data like token metadata and asset files.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {GetChainCollectionsQueryParamOpts} queryParamOpts\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n *\r\n */\r\n public async getChainCollectionsByPage(\r\n chainName: Chain,\r\n queryParamOpts?: GetChainCollectionsQueryParamOpts\r\n ): Promise<GoldRushResponse<ChainCollectionResponse>> {\r\n const endpoint = endpointGenerator(`${chainName}/nft/collections`, [\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n ]);\r\n\r\n const parseData = (data: GoldRushResponse<ChainCollectionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((collectionItem) => ({\r\n ...collectionItem,\r\n last_scraped_at: collectionItem.last_scraped_at\r\n ? new Date(collectionItem.last_scraped_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<ChainCollectionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render the NFTs (including ERC721 and ERC1155) held by an address.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n * - `noNftAssetMetadata`: If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async getNftsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetNftsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<NftAddressBalanceNftResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/balances_nft`,\r\n [\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n {\r\n key: \"no-nft-asset-metadata\",\r\n value: queryParamOpts?.noNftAssetMetadata,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftAddressBalanceNftResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n nft_data: balanceItem.nft_data\r\n ? balanceItem.nft_data.map((nftItem) => ({\r\n ...nftItem,\r\n token_id: bigIntParser(nftItem.token_id),\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftAddressBalanceNftResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get NFT token IDs with metadata from a collection. Useful for building NFT card displays.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenIdsForContractWithMetadataQueryParamOpts} queryParamOpts\r\n * - `noMetadata`: Omit metadata.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `traitsFilter`: Filters NFTs based on a specific trait. If this filter is used, the API will return all NFTs with the specified trait. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `valuesFilter`: Filters NFTs based on a specific trait value. If this filter is used, the API will return all NFTs with the specified trait value. If used with \"traits-filter\", only NFTs matching both filters will be returned. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async *getTokenIdsForContractWithMetadata(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetTokenIdsForContractWithMetadataQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<NftMetadataResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${contractAddress}/metadata`,\r\n [\r\n {\r\n key: \"no-metadata\",\r\n value: queryParamOpts?.noMetadata,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"traits-filter\",\r\n value: queryParamOpts?.traitsFilter,\r\n },\r\n {\r\n key: \"values-filter\",\r\n value: queryParamOpts?.valuesFilter,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftMetadataResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n nft_data: {\r\n ...tokenItem.nft_data!,\r\n token_id: bigIntParser(tokenItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<NftMetadataResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"pagination\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get NFT token IDs with metadata from a collection. Useful for building NFT card displays.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTokenIdsForContractWithMetadataQueryParamOpts} queryParamOpts\r\n * - `noMetadata`: Omit metadata.\r\n * - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.\r\n * - `pageNumber`: 0-indexed page number to begin pagination.\r\n * - `traitsFilter`: Filters NFTs based on a specific trait. If this filter is used, the API will return all NFTs with the specified trait. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `valuesFilter`: Filters NFTs based on a specific trait value. If this filter is used, the API will return all NFTs with the specified trait value. If used with \"traits-filter\", only NFTs matching both filters will be returned. Accepts comma-separated values, is case-sensitive, and requires proper URL encoding.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async getTokenIdsForContractWithMetadataByPage(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: GetTokenIdsForContractWithMetadataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftMetadataResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${contractAddress}/metadata`,\r\n [\r\n {\r\n key: \"no-metadata\",\r\n value: queryParamOpts?.noMetadata,\r\n },\r\n {\r\n key: \"page-size\",\r\n value: queryParamOpts?.pageSize,\r\n },\r\n {\r\n key: \"page-number\",\r\n value: queryParamOpts?.pageNumber,\r\n },\r\n {\r\n key: \"traits-filter\",\r\n value: queryParamOpts?.traitsFilter,\r\n },\r\n {\r\n key: \"values-filter\",\r\n value: queryParamOpts?.valuesFilter,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftMetadataResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n nft_data: {\r\n ...tokenItem.nft_data!,\r\n token_id: bigIntParser(tokenItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftMetadataResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get a single NFT metadata by token ID from a collection. Useful for building NFT card displays.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} tokenId - The requested token ID.\r\n * @param {GetNftMetadataForGivenTokenIdForContractQueryParamOpts} queryParamOpts\r\n * - `noMetadata`: Omit metadata.\r\n * - `withUncached`: By default, this endpoint only works on chains where we've cached the assets and the metadata. When set to `true`, the API will fetch metadata from upstream servers even if it's not cached - the downside being that the upstream server can block or rate limit the call and therefore resulting in time outs or slow response times on the Covalent side.\r\n *\r\n */\r\n public async getNftMetadataForGivenTokenIdForContract(\r\n chainName: Chain,\r\n contractAddress: string,\r\n tokenId: string,\r\n queryParamOpts?: GetNftMetadataForGivenTokenIdForContractQueryParamOpts\r\n ): Promise<GoldRushResponse<NftMetadataResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${contractAddress}/metadata/${tokenId}`,\r\n [\r\n {\r\n key: \"no-metadata\",\r\n value: queryParamOpts?.noMetadata,\r\n },\r\n {\r\n key: \"with-uncached\",\r\n value: queryParamOpts?.withUncached,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftMetadataResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((tokenItem) => ({\r\n ...tokenItem,\r\n nft_data: {\r\n ...tokenItem.nft_data!,\r\n token_id: bigIntParser(tokenItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftMetadataResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get all transactions of an NFT token. Useful for building a transaction history table or price chart.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} tokenId - The requested token ID.\r\n * @param {GetNftTransactionsForContractTokenIdQueryParamOpts} queryParamOpts\r\n * - `noSpam`: If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.\r\n *\r\n */\r\n public async getNftTransactionsForContractTokenId(\r\n chainName: Chain,\r\n contractAddress: string,\r\n tokenId: string,\r\n queryParamOpts?: GetNftTransactionsForContractTokenIdQueryParamOpts\r\n ): Promise<GoldRushResponse<NftTransactionsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/tokens/${contractAddress}/nft_transactions/${tokenId}`,\r\n [\r\n {\r\n key: \"no-spam\",\r\n value: queryParamOpts?.noSpam,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftTransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((nftItem) => ({\r\n ...nftItem,\r\n nft_transactions: nftItem.nft_transactions\r\n ? nftItem.nft_transactions.map((txItem) => ({\r\n ...txItem,\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftTransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the traits of a collection as seen in rarity calculators.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n *\r\n */\r\n public async getTraitsForCollection(\r\n chainName: Chain,\r\n collectionContract: string\r\n ): Promise<GoldRushResponse<NftCollectionTraitsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${collectionContract}/traits`,\r\n []\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftCollectionTraitsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionTraitsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to get the count of unique values for traits within an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} trait - The requested trait.\r\n *\r\n */\r\n public async getAttributesForTraitInCollection(\r\n chainName: Chain,\r\n collectionContract: string,\r\n trait: string\r\n ): Promise<GoldRushResponse<NftCollectionAttributesForTraitResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${collectionContract}/traits/${trait}/attributes`,\r\n []\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionAttributesForTraitResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionAttributesForTraitResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to calculate rarity scores for a collection based on its traits.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n *\r\n */\r\n public async getCollectionTraitsSummary(\r\n chainName: Chain,\r\n collectionContract: string\r\n ): Promise<GoldRushResponse<NftCollectionTraitsSummaryResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft/${collectionContract}/traits_summary`,\r\n []\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionTraitsSummaryResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionTraitsSummaryResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to render a price floor chart for an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionAddress - The requested address.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalFloorPricesForCollection(\r\n chainName: Chain,\r\n collectionAddress: string,\r\n queryParamOpts?: GetCollectionMarketDataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftCollectionFloorPriceResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft_market/${collectionAddress}/floor_price`,\r\n [\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quote_currency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionFloorPriceResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((floorPriceItem) => ({\r\n ...floorPriceItem,\r\n date: floorPriceItem.date ? new Date(floorPriceItem.date) : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionFloorPriceResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build a time-series chart of the transaction volume of an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionAddress - The requested address.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalVolumeForCollection(\r\n chainName: Chain,\r\n collectionAddress: string,\r\n queryParamOpts?: GetCollectionMarketDataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftCollectionVolumeResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft_market/${collectionAddress}/volume`,\r\n [\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quote_currency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<NftCollectionVolumeResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((floorPriceItem) => ({\r\n ...floorPriceItem,\r\n date: floorPriceItem.date ? new Date(floorPriceItem.date) : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionVolumeResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to build a time-series chart of the sales count of an NFT collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} collectionAddress - The requested address.\r\n * @param {GetNftsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.\r\n *\r\n */\r\n public async getHistoricalSalesCountForCollection(\r\n chainName: Chain,\r\n collectionAddress: string,\r\n queryParamOpts?: GetCollectionMarketDataQueryParamOpts\r\n ): Promise<GoldRushResponse<NftCollectionSalesCountResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/nft_market/${collectionAddress}/sale_count`,\r\n [\r\n {\r\n key: \"days\",\r\n value: queryParamOpts?.days,\r\n },\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quote_currency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftCollectionSalesCountResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((floorPriceItem) => ({\r\n ...floorPriceItem,\r\n date: floorPriceItem.date ? new Date(floorPriceItem.date) : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftCollectionSalesCountResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to verify ownership of NFTs (including ERC-721 and ERC-1155) within a collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} collectionContract - The requested collection address.\r\n * @param {CheckOwnershipInNftQueryParamOpts} queryParamOpts\r\n * - `traitsFilter`: Filters NFTs based on a specific trait. If this filter is used, the API will return all NFTs with the specified trait. Must be used with \"values-filter\", is case-sensitive, and requires proper URL encoding.\r\n * - `valuesFilter`: Filters NFTs based on a specific trait value. If this filter is used, the API will return all NFTs with the specified trait value. Must be used with \"traits-filter\", is case-sensitive, and requires proper URL encoding.\r\n *\r\n */\r\n public async checkOwnershipInNft(\r\n chainName: Chain,\r\n walletAddress: string,\r\n collectionContract: string,\r\n queryParamOpts?: CheckOwnershipInNftQueryParamOpts\r\n ): Promise<GoldRushResponse<NftOwnershipForCollectionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/collection/${collectionContract}`,\r\n [\r\n {\r\n key: \"traits-filter\",\r\n value: queryParamOpts?.traitsFilter,\r\n },\r\n {\r\n key: \"values-filter\",\r\n value: queryParamOpts?.valuesFilter,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftOwnershipForCollectionResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((nftItem) => ({\r\n ...nftItem,\r\n balance: bigIntParser(nftItem.balance),\r\n balance_24h: bigIntParser(nftItem.balance_24h),\r\n token_id: bigIntParser(nftItem.token_id),\r\n nft_data: {\r\n ...nftItem.nft_data!,\r\n token_id: bigIntParser(nftItem.nft_data?.token_id),\r\n },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftOwnershipForCollectionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to verify ownership of a specific token (ERC-721 or ERC-1155) within a collection.\r\n *\r\n * @param {string} chainName - The chain name eg: `eth-mainnet`.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} collectionContract - The requested collection address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {string} tokenId - The requested token ID.\r\n *\r\n */\r\n public async checkOwnershipInNftForSpecificTokenId(\r\n chainName: Chain,\r\n walletAddress: string,\r\n collectionContract: string,\r\n tokenId: string\r\n ): Promise<GoldRushResponse<NftOwnershipForCollectionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/collection/${collectionContract}/token/${tokenId}`,\r\n []\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<NftOwnershipForCollectionResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((balanceItem) => ({\r\n ...balanceItem,\r\n balance: bigIntParser(balanceItem.balance),\r\n balance_24h: bigIntParser(balanceItem.balance_24h),\r\n token_id: bigIntParser(balanceItem.token_id),\r\n last_transfered_at: balanceItem.last_transfered_at\r\n ? new Date(balanceItem.last_transfered_at)\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<NftOwnershipForCollectionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport type {\r\n Chain,\r\n GoldRushResponse,\r\n Quote,\r\n} from \"../utils/types/Generic.types\";\r\nimport type {\r\n GetTokenPricesQueryParamOpts,\r\n PoolSpotPriceQueryParamsOpts,\r\n PoolSpotPricesResponse,\r\n TokenPricesResponse,\r\n} from \"../utils/types/PricingService.types\";\r\n\r\n/**\r\n * Pricing API\r\n *\r\n */\r\nexport class PricingService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to get historic prices of a token between date ranges. Supports native tokens.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * @param {string} contractAddress - Contract address for the token. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically. Supports multiple contract addresses separated by commas.\r\n * @param {GetTokenPricesQueryParamOpts} queryParamOpts\r\n * - `from`: The start day of the historical price range (YYYY-MM-DD).\r\n * - `to`: The end day of the historical price range (YYYY-MM-DD).\r\n * - `pricesAtAsc`: Sort the prices in chronological ascending order. By default, it's set to `false` and returns prices in chronological descending order.\r\n *\r\n */\r\n public async getTokenPrices(\r\n chainName: Chain,\r\n quoteCurrency: Quote,\r\n contractAddress: string,\r\n queryParamOpts?: GetTokenPricesQueryParamOpts\r\n ): Promise<GoldRushResponse<TokenPricesResponse[]>> {\r\n const endpoint = endpointGenerator(\r\n `pricing/historical_by_addresses_v2/${chainName}/${quoteCurrency}/${contractAddress}`,\r\n [\r\n {\r\n key: \"from\",\r\n value: queryParamOpts?.from,\r\n },\r\n {\r\n key: \"to\",\r\n value: queryParamOpts?.to,\r\n },\r\n {\r\n key: \"prices-at-asc\",\r\n value: queryParamOpts?.pricesAtAsc,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TokenPricesResponse[]>) => {\r\n if (data.data) {\r\n data.data.forEach((dataItem) => {\r\n dataItem.update_at = dataItem.update_at\r\n ? new Date(dataItem.update_at)\r\n : null;\r\n dataItem.items = dataItem.items\r\n ? dataItem.items.map((priceItem) => ({\r\n ...priceItem,\r\n date: priceItem.date ? new Date(priceItem.date) : null,\r\n }))\r\n : null;\r\n });\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TokenPricesResponse[]>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Get the spot token pair prices for a specified pool contract address. Supports pools on Uniswap V2, V3 and their forks.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} contractAddress - The pool contract address.\r\n * @param {GetTokenPricesQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, `GBP`, `BTC` and `ETH`.\r\n *\r\n */\r\n public async getPoolSpotPrices(\r\n chainName: Chain,\r\n contractAddress: string,\r\n queryParamOpts?: PoolSpotPriceQueryParamsOpts\r\n ): Promise<GoldRushResponse<PoolSpotPricesResponse[]>> {\r\n const endpoint = endpointGenerator(\r\n `pricing/spot_prices/${chainName}/pools/${contractAddress}`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<PoolSpotPricesResponse[]>) => {\r\n if (data.data) {\r\n data.data.forEach((dataItem) => {\r\n dataItem.updated_at = dataItem.updated_at\r\n ? new Date(dataItem.updated_at)\r\n : null;\r\n });\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<PoolSpotPricesResponse[]>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n}\r\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\nimport { type Execution } from \"../utils/functions/execution\";\nimport {\n type Chain,\n type GoldRushResponse,\n} from \"../utils/types/Generic.types\";\nimport {\n type ApprovalsResponse,\n type NftApprovalsResponse,\n} from \"../utils/types/SecurityService.types\";\n\n/**\n * Approvals API\n *\n */\nexport class SecurityService {\n constructor(private execution: Execution) {}\n\n /**\n *\n * Commonly used to get a list of approvals across all token contracts categorized by spenders for a wallet’s assets.\n *\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\n *\n */\n public async getApprovals(\n chainName: Chain,\n walletAddress: string\n ): Promise<GoldRushResponse<ApprovalsResponse>> {\n const endpoint = endpointGenerator(\n `${chainName}/approvals/${walletAddress}`,\n []\n );\n\n const parseData = (data: GoldRushResponse<ApprovalsResponse>) => {\n if (data.data) {\n data.data.updated_at = data.data.updated_at\n ? new Date(data.data.updated_at)\n : null;\n data.data.items = data.data.items\n ? data.data.items.map((approvalItem) => ({\n ...approvalItem,\n balance: bigIntParser(approvalItem.balance),\n spenders: approvalItem.spenders\n ? approvalItem.spenders.map((spenderItem) => ({\n ...spenderItem,\n block_signed_at: spenderItem.block_signed_at\n ? new Date(spenderItem.block_signed_at)\n : null,\n }))\n : null,\n }))\n : null;\n }\n\n return data;\n };\n\n return await this.execution.execute<ApprovalsResponse>(endpoint, parseData);\n }\n\n /**\n *\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\n \n *\n */\n public async getNftApprovals(\n chainName: Chain,\n walletAddress: string\n ): Promise<GoldRushResponse<NftApprovalsResponse>> {\n const endpoint = endpointGenerator(\n `${chainName}/nft/approvals/${walletAddress}`,\n []\n );\n\n const parseData = (data: GoldRushResponse<NftApprovalsResponse>) => {\n if (data.data) {\n data.data.updated_at = data.data.updated_at\n ? new Date(data.data.updated_at)\n : null;\n data.data.items = data.data.items\n ? data.data.items.map((approvalItem) => ({\n ...approvalItem,\n token_balances: approvalItem.token_balances\n ? approvalItem.token_balances.map((balanceItem) => ({\n ...balanceItem,\n token_balance: bigIntParser(balanceItem.token_balance),\n token_id: bigIntParser(balanceItem.token_id),\n }))\n : null,\n }))\n : null;\n }\n\n return data;\n };\n\n return await this.execution.execute<NftApprovalsResponse>(\n endpoint,\n parseData\n );\n }\n}\n","function extendedTypeof(val) {\n if (val === null) {\n return \"null\";\n }\n if (Array.isArray(val)) {\n return \"array\";\n }\n return typeof val;\n}\nfunction isObject(val) {\n return extendedTypeof(val) === \"object\";\n}\nfunction isAsyncIterable(val) {\n return typeof Object(val)[Symbol.asyncIterator] === \"function\";\n}\nfunction isAsyncGenerator(val) {\n return isObject(val) && typeof Object(val)[Symbol.asyncIterator] === \"function\" && typeof val.return === \"function\";\n}\nfunction areGraphQLFormattedErrors(obj) {\n return Array.isArray(obj) && // must be at least one error\n obj.length > 0 && // error has at least a message\n obj.every((ob) => \"message\" in ob);\n}\nfunction limitCloseReason(reason, whenTooLong) {\n return reason.length < 124 ? reason : whenTooLong;\n}\n\nconst GRAPHQL_TRANSPORT_WS_PROTOCOL = \"graphql-transport-ws\";\nconst DEPRECATED_GRAPHQL_WS_PROTOCOL = \"graphql-ws\";\nvar CloseCode = /* @__PURE__ */ ((CloseCode2) => {\n CloseCode2[CloseCode2[\"InternalServerError\"] = 4500] = \"InternalServerError\";\n CloseCode2[CloseCode2[\"InternalClientError\"] = 4005] = \"InternalClientError\";\n CloseCode2[CloseCode2[\"BadRequest\"] = 4400] = \"BadRequest\";\n CloseCode2[CloseCode2[\"BadResponse\"] = 4004] = \"BadResponse\";\n CloseCode2[CloseCode2[\"Unauthorized\"] = 4401] = \"Unauthorized\";\n CloseCode2[CloseCode2[\"Forbidden\"] = 4403] = \"Forbidden\";\n CloseCode2[CloseCode2[\"SubprotocolNotAcceptable\"] = 4406] = \"SubprotocolNotAcceptable\";\n CloseCode2[CloseCode2[\"ConnectionInitialisationTimeout\"] = 4408] = \"ConnectionInitialisationTimeout\";\n CloseCode2[CloseCode2[\"ConnectionAcknowledgementTimeout\"] = 4504] = \"ConnectionAcknowledgementTimeout\";\n CloseCode2[CloseCode2[\"SubscriberAlreadyExists\"] = 4409] = \"SubscriberAlreadyExists\";\n CloseCode2[CloseCode2[\"TooManyInitialisationRequests\"] = 4429] = \"TooManyInitialisationRequests\";\n return CloseCode2;\n})(CloseCode || {});\nvar MessageType = /* @__PURE__ */ ((MessageType2) => {\n MessageType2[\"ConnectionInit\"] = \"connection_init\";\n MessageType2[\"ConnectionAck\"] = \"connection_ack\";\n MessageType2[\"Ping\"] = \"ping\";\n MessageType2[\"Pong\"] = \"pong\";\n MessageType2[\"Subscribe\"] = \"subscribe\";\n MessageType2[\"Next\"] = \"next\";\n MessageType2[\"Error\"] = \"error\";\n MessageType2[\"Complete\"] = \"complete\";\n return MessageType2;\n})(MessageType || {});\nfunction validateMessage(val) {\n if (!isObject(val)) {\n throw new Error(\n `Message is expected to be an object, but got ${extendedTypeof(val)}`\n );\n }\n if (!val.type) {\n throw new Error(`Message is missing the 'type' property`);\n }\n if (typeof val.type !== \"string\") {\n throw new Error(\n `Message is expects the 'type' property to be a string, but got ${extendedTypeof(\n val.type\n )}`\n );\n }\n switch (val.type) {\n case \"connection_init\" /* ConnectionInit */:\n case \"connection_ack\" /* ConnectionAck */:\n case \"ping\" /* Ping */:\n case \"pong\" /* Pong */: {\n if (val.payload != null && !isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object or nullish or missing, but got \"${val.payload}\"`\n );\n }\n break;\n }\n case \"subscribe\" /* Subscribe */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n if (typeof val.payload.query !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'query' property to be a string, but got ${extendedTypeof(\n val.payload.query\n )}`\n );\n }\n if (val.payload.variables != null && !isObject(val.payload.variables)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'variables' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.variables\n )}`\n );\n }\n if (val.payload.operationName != null && extendedTypeof(val.payload.operationName) !== \"string\") {\n throw new Error(\n `\"${val.type}\" message payload expects the 'operationName' property to be a string or nullish or missing, but got ${extendedTypeof(\n val.payload.operationName\n )}`\n );\n }\n if (val.payload.extensions != null && !isObject(val.payload.extensions)) {\n throw new Error(\n `\"${val.type}\" message payload expects the 'extensions' property to be a an object or nullish or missing, but got ${extendedTypeof(\n val.payload.extensions\n )}`\n );\n }\n break;\n }\n case \"next\" /* Next */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!isObject(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an object, but got ${extendedTypeof(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"error\" /* Error */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n if (!areGraphQLFormattedErrors(val.payload)) {\n throw new Error(\n `\"${val.type}\" message expects the 'payload' property to be an array of GraphQL errors, but got ${JSON.stringify(\n val.payload\n )}`\n );\n }\n break;\n }\n case \"complete\" /* Complete */: {\n if (typeof val.id !== \"string\") {\n throw new Error(\n `\"${val.type}\" message expects the 'id' property to be a string, but got ${extendedTypeof(\n val.id\n )}`\n );\n }\n if (!val.id) {\n throw new Error(\n `\"${val.type}\" message requires a non-empty 'id' property`\n );\n }\n break;\n }\n default:\n throw new Error(`Invalid message 'type' property \"${val.type}\"`);\n }\n return val;\n}\nfunction parseMessage(data, reviver) {\n return validateMessage(\n typeof data === \"string\" ? JSON.parse(data, reviver) : data\n );\n}\nfunction stringifyMessage(msg, replacer) {\n validateMessage(msg);\n return JSON.stringify(msg, replacer);\n}\n\nexport { CloseCode as C, DEPRECATED_GRAPHQL_WS_PROTOCOL as D, GRAPHQL_TRANSPORT_WS_PROTOCOL as G, MessageType as M, isAsyncGenerator as a, isAsyncIterable as b, isObject as i, limitCloseReason as l, parseMessage as p, stringifyMessage as s, validateMessage as v };\n","import { G as GRAPHQL_TRANSPORT_WS_PROTOCOL, s as stringifyMessage, M as MessageType, C as CloseCode, l as limitCloseReason, p as parseMessage, i as isObject } from './common-CGW11Fyb.js';\nexport { D as DEPRECATED_GRAPHQL_WS_PROTOCOL, v as validateMessage } from './common-CGW11Fyb.js';\n\nfunction createClient(options) {\n const {\n url,\n connectionParams,\n lazy = true,\n onNonLazyError = console.error,\n lazyCloseTimeout: lazyCloseTimeoutMs = 0,\n keepAlive = 0,\n disablePong,\n connectionAckWaitTimeout = 0,\n retryAttempts = 5,\n retryWait = async function randomisedExponentialBackoff(retries2) {\n const retryDelaySeconds = Math.pow(2, retries2);\n await new Promise(\n (resolve) => setTimeout(\n resolve,\n retryDelaySeconds * 1e3 + // add random timeout from 300ms to 3s\n Math.floor(Math.random() * (3e3 - 300) + 300)\n )\n );\n },\n shouldRetry = isLikeCloseEvent,\n on,\n webSocketImpl,\n /**\n * Generates a v4 UUID to be used as the ID using `Math`\n * as the random number generator. Supply your own generator\n * in case you need more uniqueness.\n *\n * Reference: https://gist.github.com/jed/982883\n */\n generateID = function generateUUID() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n },\n jsonMessageReplacer: replacer,\n jsonMessageReviver: reviver\n } = options;\n let ws;\n if (webSocketImpl) {\n if (!isWebSocket(webSocketImpl)) {\n throw new Error(\"Invalid WebSocket implementation provided\");\n }\n ws = webSocketImpl;\n } else if (typeof WebSocket !== \"undefined\") {\n ws = WebSocket;\n } else if (typeof global !== \"undefined\") {\n ws = global.WebSocket || // @ts-expect-error: Support more browsers\n global.MozWebSocket;\n } else if (typeof window !== \"undefined\") {\n ws = window.WebSocket || // @ts-expect-error: Support more browsers\n window.MozWebSocket;\n }\n if (!ws)\n throw new Error(\n \"WebSocket implementation missing; on Node you can `import WebSocket from 'ws';` and pass `webSocketImpl: WebSocket` to `createClient`\"\n );\n const WebSocketImpl = ws;\n const emitter = (() => {\n const message = /* @__PURE__ */ (() => {\n const listeners2 = {};\n return {\n on(id, listener) {\n listeners2[id] = listener;\n return () => {\n delete listeners2[id];\n };\n },\n emit(message2) {\n if (\"id\" in message2) listeners2[message2.id]?.(message2);\n }\n };\n })();\n const listeners = {\n connecting: on?.connecting ? [on.connecting] : [],\n opened: on?.opened ? [on.opened] : [],\n connected: on?.connected ? [on.connected] : [],\n ping: on?.ping ? [on.ping] : [],\n pong: on?.pong ? [on.pong] : [],\n message: on?.message ? [message.emit, on.message] : [message.emit],\n closed: on?.closed ? [on.closed] : [],\n error: on?.error ? [on.error] : []\n };\n return {\n onMessage: message.on,\n on(event, listener) {\n const l = listeners[event];\n l.push(listener);\n return () => {\n l.splice(l.indexOf(listener), 1);\n };\n },\n emit(event, ...args) {\n for (const listener of [...listeners[event]]) {\n listener(...args);\n }\n }\n };\n })();\n function errorOrClosed(cb) {\n const listening = [\n // errors are fatal and more critical than close events, throw them first\n emitter.on(\"error\", (err) => {\n listening.forEach((unlisten) => unlisten());\n cb(err);\n }),\n // closes can be graceful and not fatal, throw them second (if error didnt throw)\n emitter.on(\"closed\", (event) => {\n listening.forEach((unlisten) => unlisten());\n cb(event);\n })\n ];\n }\n let connecting, locks = 0, lazyCloseTimeout, retrying = false, retries = 0, disposed = false;\n async function connect() {\n clearTimeout(lazyCloseTimeout);\n const [socket, throwOnClose] = await (connecting ?? (connecting = new Promise(\n (connected, denied) => (async () => {\n if (retrying) {\n await retryWait(retries);\n if (!locks) {\n connecting = undefined;\n return denied({ code: 1e3, reason: \"All Subscriptions Gone\" });\n }\n retries++;\n }\n emitter.emit(\"connecting\", retrying);\n const socket2 = new WebSocketImpl(\n typeof url === \"function\" ? await url() : url,\n GRAPHQL_TRANSPORT_WS_PROTOCOL\n );\n let connectionAckTimeout, queuedPing;\n function enqueuePing() {\n if (isFinite(keepAlive) && keepAlive > 0) {\n clearTimeout(queuedPing);\n queuedPing = setTimeout(() => {\n if (socket2.readyState === WebSocketImpl.OPEN) {\n socket2.send(stringifyMessage({ type: MessageType.Ping }));\n emitter.emit(\"ping\", false, undefined);\n }\n }, keepAlive);\n }\n }\n errorOrClosed((errOrEvent) => {\n connecting = undefined;\n clearTimeout(connectionAckTimeout);\n clearTimeout(queuedPing);\n denied(errOrEvent);\n if (errOrEvent instanceof TerminatedCloseEvent) {\n socket2.close(4499, \"Terminated\");\n socket2.onerror = null;\n socket2.onclose = null;\n }\n });\n socket2.onerror = (err) => emitter.emit(\"error\", err);\n socket2.onclose = (event) => emitter.emit(\"closed\", event);\n socket2.onopen = async () => {\n try {\n emitter.emit(\"opened\", socket2);\n const payload = typeof connectionParams === \"function\" ? await connectionParams() : connectionParams;\n if (socket2.readyState !== WebSocketImpl.OPEN) return;\n socket2.send(\n stringifyMessage(\n payload ? {\n type: MessageType.ConnectionInit,\n payload\n } : {\n type: MessageType.ConnectionInit\n // payload is completely absent if not provided\n },\n replacer\n )\n );\n if (isFinite(connectionAckWaitTimeout) && connectionAckWaitTimeout > 0) {\n connectionAckTimeout = setTimeout(() => {\n socket2.close(\n CloseCode.ConnectionAcknowledgementTimeout,\n \"Connection acknowledgement timeout\"\n );\n }, connectionAckWaitTimeout);\n }\n enqueuePing();\n } catch (err) {\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.InternalClientError,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Internal client error\"\n )\n );\n }\n };\n let acknowledged = false;\n socket2.onmessage = ({ data }) => {\n try {\n const message = parseMessage(data, reviver);\n emitter.emit(\"message\", message);\n if (message.type === \"ping\" || message.type === \"pong\") {\n emitter.emit(message.type, true, message.payload);\n if (message.type === \"pong\") {\n enqueuePing();\n } else if (!disablePong) {\n socket2.send(\n stringifyMessage(\n message.payload ? {\n type: MessageType.Pong,\n payload: message.payload\n } : {\n type: MessageType.Pong\n // payload is completely absent if not provided\n }\n )\n );\n emitter.emit(\"pong\", false, message.payload);\n }\n return;\n }\n if (acknowledged) return;\n if (message.type !== MessageType.ConnectionAck)\n throw new Error(\n `First message cannot be of type ${message.type}`\n );\n clearTimeout(connectionAckTimeout);\n acknowledged = true;\n emitter.emit(\"connected\", socket2, message.payload, retrying);\n retrying = false;\n retries = 0;\n connected([\n socket2,\n new Promise((_, reject) => errorOrClosed(reject))\n ]);\n } catch (err) {\n socket2.onmessage = null;\n emitter.emit(\"error\", err);\n socket2.close(\n CloseCode.BadResponse,\n limitCloseReason(\n err instanceof Error ? err.message : String(err),\n \"Bad response\"\n )\n );\n }\n };\n })()\n )));\n if (socket.readyState === WebSocketImpl.CLOSING) await throwOnClose;\n let release = () => {\n };\n const released = new Promise((resolve) => release = resolve);\n return [\n socket,\n release,\n Promise.race([\n // wait for\n released.then(() => {\n if (!locks) {\n const complete = () => socket.close(1e3, \"Normal Closure\");\n if (isFinite(lazyCloseTimeoutMs) && lazyCloseTimeoutMs > 0) {\n lazyCloseTimeout = setTimeout(() => {\n if (socket.readyState === WebSocketImpl.OPEN) complete();\n }, lazyCloseTimeoutMs);\n } else {\n complete();\n }\n }\n }),\n // or\n throwOnClose\n ])\n ];\n }\n function shouldRetryConnectOrThrow(errOrCloseEvent) {\n if (isLikeCloseEvent(errOrCloseEvent) && (isFatalInternalCloseCode(errOrCloseEvent.code) || [\n CloseCode.InternalServerError,\n CloseCode.InternalClientError,\n CloseCode.BadRequest,\n CloseCode.BadResponse,\n CloseCode.Unauthorized,\n // CloseCode.Forbidden, might grant access out after retry\n CloseCode.SubprotocolNotAcceptable,\n // CloseCode.ConnectionInitialisationTimeout, might not time out after retry\n // CloseCode.ConnectionAcknowledgementTimeout, might not time out after retry\n CloseCode.SubscriberAlreadyExists,\n CloseCode.TooManyInitialisationRequests\n // 4499, // Terminated, probably because the socket froze, we want to retry\n ].includes(errOrCloseEvent.code)))\n throw errOrCloseEvent;\n if (disposed) return false;\n if (isLikeCloseEvent(errOrCloseEvent) && errOrCloseEvent.code === 1e3)\n return locks > 0;\n if (!retryAttempts || retries >= retryAttempts) throw errOrCloseEvent;\n if (!shouldRetry(errOrCloseEvent)) throw errOrCloseEvent;\n return retrying = true;\n }\n if (!lazy) {\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [, , throwOnClose] = await connect();\n await throwOnClose;\n } catch (errOrCloseEvent) {\n try {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n } catch (errOrCloseEvent2) {\n return onNonLazyError?.(errOrCloseEvent2);\n }\n }\n }\n })();\n }\n function subscribe(payload, sink) {\n const id = generateID(payload);\n let done = false, errored = false, releaser = () => {\n locks--;\n done = true;\n };\n (async () => {\n locks++;\n for (; ; ) {\n try {\n const [socket, release, waitForReleaseOrThrowOnClose] = await connect();\n if (done) return release();\n const unlisten = emitter.onMessage(id, (message) => {\n switch (message.type) {\n case MessageType.Next: {\n sink.next(message.payload);\n return;\n }\n case MessageType.Error: {\n errored = true, done = true;\n sink.error(message.payload);\n releaser();\n return;\n }\n case MessageType.Complete: {\n done = true;\n releaser();\n return;\n }\n }\n });\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Subscribe,\n payload\n },\n replacer\n )\n );\n releaser = () => {\n if (!done && socket.readyState === WebSocketImpl.OPEN)\n socket.send(\n stringifyMessage(\n {\n id,\n type: MessageType.Complete\n },\n replacer\n )\n );\n locks--;\n done = true;\n release();\n };\n await waitForReleaseOrThrowOnClose.finally(unlisten);\n return;\n } catch (errOrCloseEvent) {\n if (!shouldRetryConnectOrThrow(errOrCloseEvent)) return;\n }\n }\n })().then(() => {\n if (!errored) sink.complete();\n }).catch((err) => {\n sink.error(err);\n });\n return () => {\n if (!done) releaser();\n };\n }\n return {\n on: emitter.on,\n subscribe,\n iterate(request) {\n const pending = [];\n const deferred = {\n done: false,\n error: null,\n resolve: () => {\n }\n };\n const dispose = subscribe(request, {\n next(val) {\n pending.push(val);\n deferred.resolve();\n },\n error(err) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n },\n complete() {\n deferred.done = true;\n deferred.resolve();\n }\n });\n const iterator = async function* iterator2() {\n for (; ; ) {\n if (!pending.length) {\n await new Promise((resolve) => deferred.resolve = resolve);\n }\n while (pending.length) {\n yield pending.shift();\n }\n if (deferred.error) {\n throw deferred.error;\n }\n if (deferred.done) {\n return;\n }\n }\n }();\n iterator.throw = async (err) => {\n if (!deferred.done) {\n deferred.done = true;\n deferred.error = err;\n deferred.resolve();\n }\n return { done: true, value: undefined };\n };\n iterator.return = async () => {\n dispose();\n return { done: true, value: undefined };\n };\n return iterator;\n },\n async dispose() {\n disposed = true;\n if (connecting) {\n const [socket] = await connecting;\n socket.close(1e3, \"Normal Closure\");\n }\n },\n terminate() {\n if (connecting) {\n emitter.emit(\"closed\", new TerminatedCloseEvent());\n }\n }\n };\n}\nclass TerminatedCloseEvent extends Error {\n name = \"TerminatedCloseEvent\";\n message = \"4499: Terminated\";\n code = 4499;\n reason = \"Terminated\";\n wasClean = false;\n}\nfunction isLikeCloseEvent(val) {\n return isObject(val) && \"code\" in val && \"reason\" in val;\n}\nfunction isFatalInternalCloseCode(code) {\n if ([\n 1e3,\n // Normal Closure is not an erroneous close code\n 1001,\n // Going Away\n 1006,\n // Abnormal Closure\n 1005,\n // No Status Received\n 1012,\n // Service Restart\n 1013,\n // Try Again Later\n 1014\n // Bad Gateway\n ].includes(code))\n return false;\n return code >= 1e3 && code <= 1999;\n}\nfunction isWebSocket(val) {\n return typeof val === \"function\" && \"constructor\" in val && \"CLOSED\" in val && \"CLOSING\" in val && \"CONNECTING\" in val && \"OPEN\" in val;\n}\n\nexport { CloseCode, GRAPHQL_TRANSPORT_WS_PROTOCOL, MessageType, TerminatedCloseEvent, createClient, parseMessage, stringifyMessage };\n","import {\n type NewPairsStreamParams,\n type NewPairsStreamResponse,\n type OHLCVPairsStreamParams,\n type OHLCVPairsStreamResponse,\n type OHLCVTokensStreamParams,\n type OHLCVTokensStreamResponse,\n type StreamingServiceConfig,\n type StreamSubscriptionOptions,\n type TokenBalancesStreamParams,\n type TokenBalancesStreamResponse,\n type UnsubscribeFunction,\n type UpdatePairsStreamParams,\n type UpdatePairsStreamResponse,\n type WalletActivityStreamParams,\n type WalletActivityStreamResponse,\n} from \"../utils/types/StreamingService.types\";\nimport { createClient, type Client } from \"graphql-ws\";\n\n/**\n * Streaming API Service\n *\n */\nexport class StreamingService {\n private defaultConfig: Required<StreamingServiceConfig> = {\n shouldRetry: (retries) => retries < 5,\n maxReconnectAttempts: 5,\n onConnecting: () => {\n console.info(\"StreamingService Connection Connecting...\");\n },\n onOpened: () => {\n console.info(\"StreamingService Connection Established Successfully!\");\n },\n onClosed: () => {\n console.info(\"StreamingService Connection Closed\");\n },\n onError: (err) => {\n console.error(\"StreamingService Connection Error:\", err);\n },\n };\n\n constructor(apiKey: string, config?: StreamingServiceConfig) {\n StreamingWebSocketClient.configure(apiKey, {\n ...this.defaultConfig,\n ...config,\n });\n StreamingWebSocketClient.getInstance();\n }\n\n /**\n * Initialize the streaming connection\n */\n public getClient(): Client {\n return StreamingWebSocketClient.getClient();\n }\n\n /**\n * Disconnect from the streaming service\n */\n public async disconnect(): Promise<void> {\n await StreamingWebSocketClient.disconnect();\n }\n\n /**\n * Check if the client is connected\n */\n public get isConnected(): boolean {\n return StreamingWebSocketClient.isConnected;\n }\n\n /**\n * Subscribe to a custom GraphQL subscription\n * This allows for advanced usage and future extensibility\n *\n * @param query - GraphQL subscription query\n * @param variables - Query variables\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n */\n public rawQuery<T = Array<object>>(\n query: string,\n variables: Record<string, unknown>,\n callbacks: StreamSubscriptionOptions<T>\n ): UnsubscribeFunction {\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe(\n {\n query,\n variables,\n },\n {\n next: (data) => callbacks.next(data as T),\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to OHLCV data for specific pairs\n *\n * @param params - Parameters for the OHLCV pairs stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToOHLCVPairs(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * pair_addresses: [\"0x9c087Eb773291e50CF6c6a90ef0F4500e349B903\"],\n * interval: StreamingInterval.ONE_MINUTE,\n * timeframe: StreamingTimeframe.ONE_HOUR\n * },\n * {\n * next: (data) => console.log(\"OHLCV Data:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToOHLCVPairs(\n params: OHLCVPairsStreamParams,\n callbacks: StreamSubscriptionOptions<OHLCVPairsStreamResponse[]>\n ): UnsubscribeFunction {\n // Format the pair addresses array for the query\n const pairAddressesString = params.pair_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n ohlcvCandlesForPair(\n chain_name: ${params.chain_name}\n pair_addresses: [${pairAddressesString}]\n interval: ${params.interval}\n timeframe: ${params.timeframe}\n ${params.limit ? `limit: ${params.limit}` : \"\"}\n ) {\n open\n high\n low\n close\n volume\n price_usd\n volume_usd\n chain_name\n pair_address\n interval\n timeframe\n timestamp\n base_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n quote_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n ohlcvCandlesForPair: OHLCVPairsStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const ohlcvData = data.data.ohlcvCandlesForPair;\n if (ohlcvData) {\n callbacks.next(ohlcvData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to OHLCV data for specific tokens\n *\n * @param params - Parameters for the OHLCV tokens stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToOHLCVTokens(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * token_addresses: [\"0x4B6104755AfB5Da4581B81C552DA3A25608c73B8\"],\n * interval: StreamingInterval.ONE_MINUTE,\n * timeframe: StreamingTimeframe.ONE_HOUR\n * },\n * {\n * next: (data) => console.log(\"OHLCV Token Data:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToOHLCVTokens(\n params: OHLCVTokensStreamParams,\n callbacks: StreamSubscriptionOptions<OHLCVTokensStreamResponse[]>\n ): UnsubscribeFunction {\n // Format the token addresses array for the query\n const tokenAddressesString = params.token_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n ohlcvCandlesForToken(\n chain_name: ${params.chain_name}\n token_addresses: [${tokenAddressesString}]\n interval: ${params.interval}\n timeframe: ${params.timeframe}\n ${params.limit ? `limit: ${params.limit}` : \"\"}\n ) {\n chain_name\n pair_address\n interval\n timeframe\n timestamp\n open\n high\n low\n close\n volume\n volume_usd\n quote_rate\n quote_rate_usd\n base_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n quote_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n ohlcvCandlesForToken: OHLCVTokensStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const ohlcvData = data.data.ohlcvCandlesForToken;\n if (ohlcvData) {\n callbacks.next(ohlcvData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to new DEX pairs created on supported decentralized exchanges\n *\n * @param params - Parameters for the new pairs stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToNewPairs(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * protocols: [StreamingProtocol.UNISWAP_V2, StreamingProtocol.UNISWAP_V3]\n * },\n * {\n * next: (data) => console.log(\"New Pairs:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToNewPairs(\n params: NewPairsStreamParams,\n callbacks: StreamSubscriptionOptions<NewPairsStreamResponse[]>\n ): UnsubscribeFunction {\n const query = `\n subscription {\n newPairs(\n chain_name: ${params.chain_name},\n protocols: [${params.protocols.join(\", \")}]\n ) {\n chain_name\n protocol\n protocol_version\n pair_address\n deployer_address\n tx_hash\n block_signed_at\n liquidity\n supply\n market_cap\n event_name\n quote_rate\n quote_rate_usd\n base_token_metadata {\n contract_address\n contract_decimals\n contract_name\n contract_ticker_symbol\n }\n pair_metadata {\n contract_address\n contract_decimals\n contract_name\n contract_ticker_symbol\n }\n quote_token_metadata {\n contract_address\n contract_decimals\n contract_name\n contract_ticker_symbol\n }\n prices {\n last_5m\n last_1hr\n last_6hr\n last_24hr\n }\n swaps {\n last_5m\n last_1hr\n last_6hr\n last_24hr\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n newPairs: NewPairsStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const newPairsData = data.data.newPairs;\n if (newPairsData) {\n callbacks.next(newPairsData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to real-time updates for specific trading pairs including price, volume, and liquidity data\n *\n * @param params - Parameters for the update pairs stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToUpdatePairs(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * pair_addresses: [\n * \"0x3f0296BF652e19bca772EC3dF08b32732F93014A\"\n * ]\n * },\n * {\n * next: (data) => console.log(\"Pair Updates:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToUpdatePairs(\n params: UpdatePairsStreamParams,\n callbacks: StreamSubscriptionOptions<UpdatePairsStreamResponse>\n ): UnsubscribeFunction {\n const pairAddressesString = params.pair_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n updatePairs(\n chain_name: ${params.chain_name}\n pair_addresses: [${pairAddressesString}]\n ) {\n chain_name\n pair_address\n timestamp\n price\n price_usd\n volume\n volume_usd\n base_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n quote_token {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n updatePairs: UpdatePairsStreamResponse;\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const updatePairsData = data.data.updatePairs;\n if (updatePairsData) {\n callbacks.next(updatePairsData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to real-time token balance updates for a specific wallet address\n *\n * @param params - Parameters for the token balances stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToTokenBalances(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * wallet_address: \"0x198ef79f1f515f02dfe9e3115ed9fc07183f02fc\"\n * },\n * {\n * next: (data) => console.log(\"Token Balances:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToTokenBalances(\n params: TokenBalancesStreamParams,\n callbacks: StreamSubscriptionOptions<TokenBalancesStreamResponse>\n ): UnsubscribeFunction {\n const query = `\n subscription {\n tokenBalancesForWalletAddress(\n chain_name: ${params.chain_name},\n wallet_address: \"${params.wallet_address}\"\n ) {\n wallet_address\n chain_name\n last_block\n items {\n balance\n balance_pretty\n quote_rate_usd\n quote_usd\n metadata {\n contract_name\n contract_address\n contract_decimals\n contract_ticker_symbol\n }\n is_native\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n tokenBalancesForWalletAddress: TokenBalancesStreamResponse;\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const tokenBalancesData = data.data.tokenBalancesForWalletAddress;\n if (tokenBalancesData) {\n callbacks.next(tokenBalancesData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n\n /**\n * Subscribe to real-time wallet activity including transactions, token transfers, and smart contract interactions\n *\n * @param params - Parameters for the wallet activity stream\n * @param callbacks - Subscription callbacks\n * @returns Unsubscribe function\n *\n * @example\n * ```typescript\n * const unsubscribe = streamingService.subscribeToWalletActivity(\n * {\n * chain_name: StreamingChain.BASE_MAINNET,\n * wallet_addresses: [\"0x198ef79f1f515f02dfe9e3115ed9fc07183f02fc\"]\n * },\n * {\n * next: (data) => console.log(\"Wallet Activity:\", data),\n * error: (err) => console.error(\"Error:\", err),\n * complete: () => console.log(\"Stream completed\")\n * }\n * );\n * ```\n */\n public subscribeToWalletActivity(\n params: WalletActivityStreamParams,\n callbacks: StreamSubscriptionOptions<WalletActivityStreamResponse[]>\n ): UnsubscribeFunction {\n // Format the wallet addresses array for the query\n const walletAddressesString = params.wallet_addresses\n .map((addr) => `\"${addr}\"`)\n .join(\", \");\n\n const query = `\n subscription {\n walletTxs(\n chain_name: ${params.chain_name},\n wallet_addresses: [${walletAddressesString}]\n ) {\n tx_hash\n from_address\n to_address\n value\n chain_name\n block_signed_at\n block_height\n block_hash\n miner_address\n gas_used\n tx_offset\n successful\n decoded_type\n logs {\n emitter_address\n log_offset\n data\n topics\n }\n }\n }\n `;\n\n const client = StreamingWebSocketClient.getClient();\n\n return client.subscribe<{\n walletTxs: WalletActivityStreamResponse[];\n }>(\n {\n query,\n },\n {\n next: (data) => {\n if (data.data) {\n const walletActivityData = data.data.walletTxs;\n if (walletActivityData) {\n callbacks.next(walletActivityData);\n }\n } else if (data.errors) {\n callbacks.error?.(data.errors);\n }\n },\n error: callbacks.error || (() => {}),\n complete: callbacks.complete || (() => {}),\n }\n );\n }\n}\n\n/**\n * Singleton WebSocket Client for GoldRush Streaming\n *\n */\nclass StreamingWebSocketClient {\n private static apiKey: string;\n private static instance: StreamingWebSocketClient | null = null;\n private static client: Client | null = null;\n private static connected = false;\n private static reconnectAttempts = 0;\n private static config: Required<StreamingServiceConfig>;\n\n private constructor() {}\n\n public static getInstance(): StreamingWebSocketClient {\n if (!StreamingWebSocketClient.instance) {\n StreamingWebSocketClient.instance = new StreamingWebSocketClient();\n }\n return StreamingWebSocketClient.instance;\n }\n\n public static configure(\n apiKey: string,\n config: Required<StreamingServiceConfig>\n ): void {\n StreamingWebSocketClient.apiKey = apiKey;\n StreamingWebSocketClient.config = config;\n }\n\n public static getClient(): Client {\n if (\n !StreamingWebSocketClient.client ||\n !StreamingWebSocketClient.connected\n ) {\n StreamingWebSocketClient.connect();\n }\n return StreamingWebSocketClient.client!;\n }\n\n private static connect(): void {\n if (StreamingWebSocketClient.client) return;\n\n StreamingWebSocketClient.client = createClient({\n url: \"wss://gr-staging-v2.streaming.covalenthq.com/graphql\",\n connectionParams: {\n GOLDRUSH_API_KEY: StreamingWebSocketClient.apiKey,\n },\n shouldRetry: () =>\n StreamingWebSocketClient.config.shouldRetry(\n StreamingWebSocketClient.reconnectAttempts\n ),\n on: {\n connecting: () => {\n StreamingWebSocketClient.config.onConnecting();\n },\n opened: () => {\n StreamingWebSocketClient.config.onOpened();\n StreamingWebSocketClient.reconnectAttempts = 0;\n StreamingWebSocketClient.connected = true;\n },\n closed: () => {\n StreamingWebSocketClient.config.onClosed();\n StreamingWebSocketClient.connected = false;\n },\n error: (err) => {\n StreamingWebSocketClient.config.onError(err);\n StreamingWebSocketClient.connected = false;\n },\n },\n });\n }\n\n public static get isConnected(): boolean {\n return StreamingWebSocketClient.connected;\n }\n\n public static async disconnect(): Promise<void> {\n if (!StreamingWebSocketClient.client) return;\n if (!StreamingWebSocketClient.connected) return;\n\n // * INFO: Is a fire & forget\n await StreamingWebSocketClient.client.dispose();\n StreamingWebSocketClient.client = null;\n StreamingWebSocketClient.connected = false;\n // * INFO: Wait for the client to disconnect\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n}\n","import { bigIntParser } from \"../utils/functions/bigIntParser\";\r\nimport { endpointGenerator } from \"../utils/functions/endpointGenerator\";\r\nimport { type Execution } from \"../utils/functions/execution\";\r\nimport { paginateEndpoint } from \"../utils/functions/paginateEndpoint\";\r\nimport type { Chain, GoldRushResponse } from \"../utils/types/Generic.types\";\r\nimport type {\r\n EarliestTransactionsForAddressResponse,\r\n GetAllTransactionsForAddressQueryParamOpts,\r\n GetEarliestTransactionsForAddressQueryParamOpts,\r\n getPaginatedTransactionsForAddressQueryParamOpts,\r\n GetTimeBucketTransactionsForAddressQueryParamOpts,\r\n GetTransactionQueryParamOpts,\r\n getTransactionsForBlockByPageQueryParamOpts,\r\n GetTransactionSummaryQueryParamOpts,\r\n RecentTransactionsResponse,\r\n TransactionResponse,\r\n TransactionsBlockResponse,\r\n TransactionsForBlockResponse,\r\n TransactionsResponse,\r\n TransactionsSummaryResponse,\r\n TransactionsTimeBucketResponse,\r\n} from \"../utils/types/TransactionService.types\";\r\n\r\n/**\r\n * Transactions API\r\n *\r\n */\r\nexport class TransactionService {\r\n constructor(private execution: Execution) {}\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render a single transaction including its decoded log events.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} txHash - The transaction hash.\r\n * @param {GetTransactionQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `withInternal`: Include internal transfers/transactions.\r\n * - `withState`: Include all transaction state changes with before and after values.\r\n * - `withInputData`: Include the transaction's input data such as the Method ID.\r\n *\r\n */\r\n public async getTransaction(\r\n chainName: Chain,\r\n txHash: string,\r\n queryParamOpts?: GetTransactionQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/transaction_v2/${txHash}`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"with-internal\",\r\n value: queryParamOpts?.withInternal,\r\n },\r\n {\r\n key: \"with-state\",\r\n value: queryParamOpts?.withState,\r\n },\r\n {\r\n key: \"with-input-data\",\r\n value: queryParamOpts?.withInputData,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch the earliest and latest transactions, and the transaction count for a wallet. Calculate the age of the wallet and the time it has been idle and quickly gain insights into their engagement with web3.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetTransactionSummaryQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `withGas`: Include gas summary details. Additional charge of 1 credit when true. Response times may be impacted for wallets with millions of transactions.\r\n *\r\n */\r\n public async getTransactionSummary(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetTransactionSummaryQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsSummaryResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_summary`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"with-gas\",\r\n value: queryParamOpts?.withGas,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionsSummaryResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txsItem) => ({\r\n ...txsItem,\r\n earliest_transaction: {\r\n ...txsItem.earliest_transaction!,\r\n block_signed_at: txsItem?.earliest_transaction?.block_signed_at\r\n ? new Date(txsItem.earliest_transaction.block_signed_at)\r\n : null,\r\n },\r\n latest_transaction: {\r\n ...txsItem.latest_transaction!,\r\n block_signed_at: txsItem?.latest_transaction?.block_signed_at\r\n ? new Date(txsItem?.latest_transaction?.block_signed_at)\r\n : null,\r\n },\r\n // ? API vs docs non-consistent\r\n // gas_summary: {\r\n // ...txsItem.gas_summary,\r\n // total_fees_paid: bigIntParser(\r\n // txsItem.gas_summary.total_fees_paid\r\n // ),\r\n // },\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsSummaryResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the earliest transactions involving an address. Frequently seen in wallet applications.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetEarliestTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getEarliestTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetEarliestTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<EarliestTransactionsForAddressResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n\r\n const endpoint = endpointGenerator(\r\n `${chainName}/bulk/transactions/${walletAddress}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<EarliestTransactionsForAddressResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<EarliestTransactionsForAddressResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<EarliestTransactionsForAddressResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<EarliestTransactionsForAddressResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the most recent transactions involving an address. Frequently seen in wallet applications.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAllTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `blockSignedAtAsc`: Sort the transactions in ascending chronological order. By default, it's set to `false` and returns transactions in descending chronological order.\r\n * - `withInternal`: Include internal transfers/transactions.\r\n * - `withState`: Include all transaction state changes with before and after values.\r\n * - `withInputData`: Include the transaction's input data such as the Method ID.\r\n *\r\n */\r\n public async *getAllTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetAllTransactionsForAddressQueryParamOpts\r\n ): AsyncIterable<GoldRushResponse<RecentTransactionsResponse>> {\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_v3`,\r\n [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"block-signed-at-asc\",\r\n value: queryParamOpts?.blockSignedAtAsc,\r\n },\r\n {\r\n key: \"with-internal\",\r\n value: queryParamOpts?.withInternal,\r\n },\r\n {\r\n key: \"with-state\",\r\n value: queryParamOpts?.withState,\r\n },\r\n {\r\n key: \"with-input-data\",\r\n value: queryParamOpts?.withInputData,\r\n },\r\n ]\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<RecentTransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n for await (const data of paginateEndpoint<RecentTransactionsResponse>(\r\n endpoint,\r\n this.execution,\r\n parseData,\r\n \"links\"\r\n )) {\r\n yield data;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch and render the most recent transactions involving an address. Frequently seen in wallet applications.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {GetAllTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `blockSignedAtAsc`: Sort the transactions in ascending chronological order. By default, it's set to `false` and returns transactions in descending chronological order.\r\n * - `withInternal`: Include internal transfers/transactions.\r\n * - `withState`: Include all transaction state changes with before and after values.\r\n * - `withInputData`: Include the transaction's input data such as the Method ID.\r\n *\r\n */\r\n public async getAllTransactionsForAddressByPage(\r\n chainName: Chain,\r\n walletAddress: string,\r\n queryParamOpts?: GetAllTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<RecentTransactionsResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"block-signed-at-asc\",\r\n value: queryParamOpts?.blockSignedAtAsc,\r\n },\r\n {\r\n key: \"with-internal\",\r\n value: queryParamOpts?.withInternal,\r\n },\r\n {\r\n key: \"with-state\",\r\n value: queryParamOpts?.withState,\r\n },\r\n {\r\n key: \"with-input-data\",\r\n value: queryParamOpts?.withInputData,\r\n },\r\n ];\r\n\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_v3`,\r\n searchParams\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<RecentTransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<RecentTransactionsResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<RecentTransactionsResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<RecentTransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {number} page - The requested page, 0-indexed.\r\n * @param {getPaginatedTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n * - `blockSignedAtAsc`: Sort the transactions in ascending chronological order. By default, it's set to `false` and returns transactions in descending chronological order.\r\n *\r\n */\r\n public async getPaginatedTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n page: number,\r\n queryParamOpts?: getPaginatedTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n {\r\n key: \"block-signed-at-asc\",\r\n value: queryParamOpts?.blockSignedAtAsc,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/address/${walletAddress}/transactions_v3/page/${page}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionsResponse>) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<TransactionsResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<TransactionsResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.\r\n * @param {number} timeBucket - The 0-indexed 15-minute time bucket. E.g. 27 Feb 2023 05:23 GMT = 1677475383 (Unix time). 1677475383/900=1863861 timeBucket.\r\n * @param {GetTimeBucketTransactionsForAddressQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getTimeBucketTransactionsForAddress(\r\n chainName: Chain,\r\n walletAddress: string,\r\n timeBucket: number,\r\n queryParamOpts?: GetTimeBucketTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsTimeBucketResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/bulk/transactions/${walletAddress}/${timeBucket}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<TransactionsTimeBucketResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<TransactionsTimeBucketResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<TransactionsTimeBucketResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsTimeBucketResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch all transactions including their decoded log events in a block and further flag interesting wallets or transactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {number} blockHeight - The requested block height.\r\n * @param {number} page - The requested page, 0-indexed.\r\n * @param {getTransactionsForBlockByPageQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getTransactionsForBlockByPage(\r\n chainName: Chain,\r\n blockHeight: number | string | \"latest\",\r\n page: number,\r\n queryParamOpts?: getTransactionsForBlockByPageQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsBlockResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block/${blockHeight}/transactions_v3/page/${page}`,\r\n searchParams\r\n );\r\n\r\n const parseData = (data: GoldRushResponse<TransactionsBlockResponse>) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.prev = data.data?.links?.prev\r\n ? async () =>\r\n this.execution.execute<TransactionsBlockResponse>(\r\n endpointGenerator(data.data?.links?.prev, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.next = data.data?.links?.next\r\n ? async () =>\r\n this.execution.execute<TransactionsBlockResponse>(\r\n endpointGenerator(data.data?.links?.next, searchParams),\r\n parseData\r\n )\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsBlockResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * Commonly used to fetch all transactions including their decoded log events in a block and further flag interesting wallets or transactions.\r\n *\r\n * @param {Chain} chainName - The chain name eg: `eth-mainnet` or 1.\r\n * @param {string} blockHash - The requested block hash.\r\n * @param {getTransactionsForBlockByPageQueryParamOpts} queryParamOpts\r\n * - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.\r\n * - `noLogs`: Omit log events.\r\n *\r\n */\r\n public async getTransactionsForBlock(\r\n chainName: Chain,\r\n blockHash: string,\r\n queryParamOpts?: getTransactionsForBlockByPageQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsForBlockResponse>> {\r\n const searchParams = [\r\n {\r\n key: \"quote-currency\",\r\n value: queryParamOpts?.quoteCurrency,\r\n },\r\n {\r\n key: \"no-logs\",\r\n value: queryParamOpts?.noLogs,\r\n },\r\n ];\r\n const endpoint = endpointGenerator(\r\n `${chainName}/block_hash/${blockHash}/transactions_v3`,\r\n searchParams\r\n );\r\n\r\n const parseData = (\r\n data: GoldRushResponse<TransactionsForBlockResponse>\r\n ) => {\r\n if (data.data) {\r\n data.data.updated_at = data.data.updated_at\r\n ? new Date(data.data.updated_at)\r\n : null;\r\n data.data.items = data.data.items\r\n ? data.data.items.map((txItem) => ({\r\n ...txItem,\r\n value: bigIntParser(txItem.value),\r\n fees_paid: bigIntParser(txItem.fees_paid),\r\n block_signed_at: txItem.block_signed_at\r\n ? new Date(txItem.block_signed_at)\r\n : null,\r\n log_events: txItem.log_events\r\n ? txItem.log_events.map((logItem) => ({\r\n ...logItem,\r\n block_signed_at: logItem.block_signed_at\r\n ? new Date(logItem.block_signed_at)\r\n : null,\r\n }))\r\n : null,\r\n }))\r\n : null;\r\n }\r\n\r\n return data;\r\n };\r\n\r\n return await this.execution.execute<TransactionsForBlockResponse>(\r\n endpoint,\r\n parseData\r\n );\r\n }\r\n\r\n /**\r\n * @deprecated This method has been deprecated and will be removed in future releases. Use `getPaginatedTransactionsForAddress` instead.\r\n */\r\n public async getTransactionsForAddressV3(\r\n chainName: Chain,\r\n walletAddress: string,\r\n page: number,\r\n queryParamOpts?: getPaginatedTransactionsForAddressQueryParamOpts\r\n ): Promise<GoldRushResponse<TransactionsResponse>> {\r\n return this.getPaginatedTransactionsForAddress(\r\n chainName,\r\n walletAddress,\r\n page,\r\n queryParamOpts\r\n );\r\n }\r\n}\r\n","import { type GoldRushClientSettings } from \"../types/Generic.types\";\n\nexport async function debugOutput(\n settings: GoldRushClientSettings,\n ...content: unknown[]\n) {\n if (settings.debug) {\n content.forEach((c) => {\n console.info(\"[DEBUG] |\", c);\n });\n }\n}\n","class Node {\n\t/// value;\n\t/// next;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\n\t\t// TODO: Remove this when targeting Node.js 12.\n\t\tthis.next = undefined;\n\t}\n}\n\nclass Queue {\n\t// TODO: Use private class fields when targeting Node.js 12.\n\t// #_head;\n\t// #_tail;\n\t// #_size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this._head) {\n\t\t\tthis._tail.next = node;\n\t\t\tthis._tail = node;\n\t\t} else {\n\t\t\tthis._head = node;\n\t\t\tthis._tail = node;\n\t\t}\n\n\t\tthis._size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this._head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._head = this._head.next;\n\t\tthis._size--;\n\t\treturn current.value;\n\t}\n\n\tclear() {\n\t\tthis._head = undefined;\n\t\tthis._tail = undefined;\n\t\tthis._size = 0;\n\t}\n\n\tget size() {\n\t\treturn this._size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this._head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n\nmodule.exports = Queue;\n","'use strict';\nconst Queue = require('yocto-queue');\n\nconst pLimit = concurrency => {\n\tif (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, ...args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, ...args) => {\n\t\tqueue.enqueue(run.bind(null, fn, resolve, ...args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, ...args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t}\n\t\t}\n\t});\n\n\treturn generator;\n};\n\nmodule.exports = pLimit;\n","import {\n type GoldRushClientSettings,\n type GoldRushResponse,\n} from \"../types/Generic.types\";\nimport { debugOutput } from \"./debugOutput\";\nimport pLimit from \"p-limit\";\n\nexport class Execution {\n private maxRetries: number;\n private retryDelay: number;\n private enableRetry: boolean;\n private processes: pLimit.Limit;\n\n constructor(\n private settings: GoldRushClientSettings,\n private headers: Record<string, string>\n ) {\n this.processes = pLimit(this.settings.threadCount ?? 2);\n this.maxRetries = settings.maxRetries ?? 2;\n this.retryDelay = settings.retryDelay ?? 1500;\n this.enableRetry = settings.enableRetry ?? true;\n }\n\n async execute<T>(\n endpoint: URL,\n parseData: (data: GoldRushResponse<T>) => GoldRushResponse<T>\n ): Promise<GoldRushResponse<T>> {\n let retryCount: number = 0;\n let completed: boolean = false;\n\n while (!completed) {\n try {\n const startTime: Date = new Date();\n\n const response = await this.processes(() =>\n fetch(endpoint, {\n headers: this.headers,\n })\n );\n\n debugOutput(\n this.settings,\n `Request URL: ${\n response ? new URL(response.url) : endpoint\n } | Response code: ${\n response ? response.status : 429\n } | Response time: ${(\n new Date().getTime() - startTime.getTime()\n ).toFixed(2)}ms`\n );\n\n if (response.status === null || response.status === 429) {\n throw new Error(`Received status code: ${response.status ?? 429}`);\n }\n\n const data = (await response.json()) as GoldRushResponse<T>;\n\n if (data.error) {\n throw data;\n }\n\n const parsedData = parseData(data);\n completed = true;\n\n return {\n data: parsedData.data as T,\n error: false,\n error_code: null,\n error_message: null,\n };\n } catch (error: any) {\n debugOutput(\n this.settings,\n `Request URL: ${endpoint} | Retry Enabled: ${this.enableRetry} | Retry Count: ${retryCount} | Max Retries: ${this.maxRetries} | Retry Delay: ${this.retryDelay}ms`,\n error\n );\n\n if (\n this.enableRetry &&\n (error?.error_code === 429 || error?.cause?.code === 429)\n ) {\n if (retryCount >= this.maxRetries) {\n completed = true;\n return {\n data: null,\n error: true,\n error_code: 429,\n error_message: `${this.maxRetries} retries exceeded`,\n };\n } else {\n retryCount++;\n await new Promise((resolve) =>\n setTimeout(resolve, this.retryDelay)\n );\n completed = false;\n }\n } else {\n completed = true;\n return {\n data: null,\n error: true,\n error_code: error?.cause?.code || error?.error_code || 500,\n error_message:\n error?.cause?.message ||\n error?.error_message ||\n \"Internal server error\",\n };\n }\n }\n }\n\n return {\n data: null,\n error: true,\n error_code: 500,\n error_message: \"Internal server error\",\n };\n }\n}\n","const _apiKeyV1Pattern: RegExp = /^ckey_([a-f0-9]{27})$/;\nconst _apiKeyV2Pattern: RegExp =\n /^cqt_(wF|rQ)([bcdfghjkmpqrtvwxyBCDFGHJKMPQRTVWXY346789]{26})$/;\n\nexport const isValidApiKey = (apiKey: string): boolean => {\n return _apiKeyV1Pattern.test(apiKey) || _apiKeyV2Pattern.test(apiKey);\n};\n","import { version } from \"../package.json\";\nimport { AllChainsService } from \"./services/AllChainsService\";\nimport { BalanceService } from \"./services/BalanceService\";\nimport { BaseService } from \"./services/BaseService\";\nimport { BitcoinService } from \"./services/BitcoinService\";\nimport { NftService } from \"./services/NftService\";\nimport { PricingService } from \"./services/PricingService\";\nimport { SecurityService } from \"./services/SecurityService\";\nimport { StreamingService } from \"./services/StreamingService\";\nimport { TransactionService } from \"./services/TransactionService\";\nimport { Execution } from \"./utils/functions/execution\";\nimport { isValidApiKey } from \"./utils/functions/isValidApiKey\";\nimport {\n type GoldRushClientSettings,\n type GoldRushResponse,\n} from \"./utils/types/Generic.types\";\nimport { type StreamingServiceConfig } from \"./utils/types/StreamingService.types\";\n\n/**\n * GoldRushClient Class\n */\nexport class GoldRushClient {\n private readonly userAgent: string = `com.covalenthq.sdk.typescript/${version}`;\n\n public AllChainsService: AllChainsService;\n public BalanceService: BalanceService;\n public BaseService: BaseService;\n public BitcoinService: BitcoinService;\n public NftService: NftService;\n public PricingService: PricingService;\n public SecurityService: SecurityService;\n public StreamingService: StreamingService;\n public TransactionService: TransactionService;\n\n constructor(\n apiKey: string,\n settings: GoldRushClientSettings = {},\n streamingConfig: StreamingServiceConfig = {}\n ) {\n const validKey: boolean = isValidApiKey(apiKey);\n\n if (!validKey) {\n throw {\n data: null,\n error: true,\n error_code: 401,\n error_message:\n \"Invalid or missing API key (sign up at https://goldrush.dev/platform/apikey)\",\n } as GoldRushResponse<null>;\n }\n\n const execution: Execution = new Execution(settings, {\n Authorization: `Bearer ${apiKey}`,\n \"X-Requested-With\": settings.source\n ? `${settings.source} (${this.userAgent})`\n : this.userAgent,\n });\n\n this.AllChainsService = new AllChainsService(execution);\n this.BalanceService = new BalanceService(execution);\n this.BaseService = new BaseService(execution);\n this.BitcoinService = new BitcoinService(execution);\n this.NftService = new NftService(execution);\n this.PricingService = new PricingService(execution);\n this.SecurityService = new SecurityService(execution);\n this.TransactionService = new TransactionService(execution);\n\n this.StreamingService = new StreamingService(apiKey, streamingConfig);\n }\n}\n","/*\r\n * big.js v6.2.2\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2024 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(+stringify(x, true, true));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitve number.\r\n */\r\nP.toNumber = function () {\r\n var n = +stringify(this, true, true);\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","import Big from \"big.js\";\n\nexport const calculatePrettyBalance = (\n value: number | bigint,\n decimals: number = 18,\n roundOff: boolean = true,\n precision: number = 0\n): string => {\n const bigDecimalValue = new Big(value.toString());\n const bigDecimalExpo = new Big(Math.pow(10, decimals).toString());\n const calculated = bigDecimalValue.div(bigDecimalExpo);\n\n if (decimals === 0 || !roundOff) {\n return calculated.toString();\n }\n\n const decimalFixed = precision || (calculated.lt(100) ? 6 : 2);\n return calculated.toFixed(decimalFixed);\n};\n","import { type Quote } from \"../types/Generic.types\";\n\nconst LESS_THAN_ZERO: string = \"0.01\";\nconst ZERO: string = \"0.00\";\n\nconst currencyMap: Record<Quote, string> = {\n USD: \"$\",\n CAD: \"CA$\",\n EUR: \"€\",\n SGD: \"S$\",\n INR: \"₹\",\n JPY: \"¥\",\n VND: \"₫\",\n CNY: \"CN¥\",\n KRW: \"₩\",\n RUB: \"₽\",\n TRY: \"₺\",\n NGN: \"₦\",\n ARS: \"ARS\",\n AUD: \"A$\",\n CHF: \"CHF\",\n GBP: \"£\",\n};\n\nexport const prettifyCurrency = (\n value: number | bigint | string,\n decimals = 2,\n currency: Quote = \"USD\",\n ignoreSmallValue = false,\n ignoreMinus = true,\n ignoreZero = false\n): string => {\n let numValue = Number(value);\n let minus = \"\";\n let currencySuffix = \"\";\n\n if (!ignoreMinus && numValue < 0) {\n numValue = Math.abs(numValue);\n minus = \"-\";\n }\n\n const currencySymbol = currencyMap[currency] ?? \"$\";\n\n if (numValue === 0 || isNaN(numValue)) {\n return ignoreZero\n ? `<${currencySymbol}${LESS_THAN_ZERO}`\n : `${currencySymbol}${ZERO}`;\n }\n\n if (numValue < 0.01 && ignoreSmallValue) {\n return `<${currencySymbol}${LESS_THAN_ZERO}`;\n }\n\n if (numValue > 999999999) {\n numValue /= 1000000000;\n currencySuffix = \"B\";\n } else if (numValue > 999999) {\n numValue /= 1000000;\n currencySuffix = \"M\";\n }\n\n const factor = Math.pow(10, decimals);\n numValue = Math.floor(numValue * factor) / factor;\n\n const formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: currency,\n maximumFractionDigits: decimals,\n currencyDisplay: \"symbol\",\n });\n\n const formattedValue = formatter\n .format(numValue)\n .replace(new RegExp(`${currency}\\\\s?`), currencySymbol);\n\n return minus + formattedValue + currencySuffix;\n};\n","const months: string[] = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const timestampParser = (\n timestamp: string | Date,\n type: \"descriptive\" | \"DD MMM YY\" | \"relative\" | \"YYYY-MM-DD\"\n): string => {\n const _unix: Date = new Date(timestamp);\n\n switch (type) {\n case \"descriptive\": {\n const _minutes = _unix.getMinutes();\n const _hours = _unix.getHours();\n const _seconds = _unix.getSeconds();\n const _parsedSeconds: string = `${_seconds <= 9 ? \"0\" : \"\"}${_seconds}`;\n const _parsedMinutes: string = `${_minutes <= 9 ? \"0\" : \"\"}${_minutes}`;\n const _parsedHours: string = `${_hours <= 9 ? \"0\" : \"\"}${_hours}`;\n\n return `${\n months[_unix.getMonth()]\n } ${_unix.getDate()} ${_unix.getFullYear()} at ${_parsedHours}:${_parsedMinutes}:${_parsedSeconds}`;\n }\n\n case \"DD MMM YY\": {\n const day = _unix.getDate().toString().padStart(2, \"0\");\n const month = months[_unix.getMonth()].substring(0, 3);\n const year = _unix.getFullYear();\n return `${day} ${month} ${year}`;\n }\n\n case \"relative\": {\n const currentTime = new Date();\n const unixTime = new Date(_unix);\n\n const timeDifference = currentTime.getTime() - unixTime.getTime();\n\n const secondsDifference = Math.floor(timeDifference / 1000);\n const minutesDifference = Math.floor(secondsDifference / 60);\n const hoursDifference = Math.floor(minutesDifference / 60);\n const daysDifference = Math.floor(hoursDifference / 24);\n const monthsDifference = Math.floor(daysDifference / 30);\n const yearsDifference = Math.floor(daysDifference / 365);\n\n if (yearsDifference > 0) {\n return `${yearsDifference} year${yearsDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (monthsDifference > 0) {\n return `${monthsDifference} month${monthsDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (daysDifference > 0) {\n return `${daysDifference} day${daysDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (hoursDifference > 0) {\n return `${hoursDifference} hour${hoursDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (minutesDifference > 0) {\n return `${minutesDifference} minute${minutesDifference > 1 ? \"s\" : \"\"} ago`;\n } else if (secondsDifference > 0) {\n return `${secondsDifference} second${secondsDifference > 1 ? \"s\" : \"\"} ago`;\n } else {\n return `just now`;\n }\n }\n\n case \"YYYY-MM-DD\": {\n const offsetMinutes = _unix.getTimezoneOffset();\n const offsetMilliseconds = offsetMinutes * 60 * 1000;\n const utcTime = _unix.getTime() + offsetMilliseconds;\n const _utc_unix: Date = new Date(utcTime);\n\n const year = _utc_unix.getFullYear();\n const month = String(_utc_unix.getMonth() + 1).padStart(2, \"0\");\n const day = String(_utc_unix.getDate()).padStart(2, \"0\");\n\n return `${year}-${month}-${day}`;\n }\n\n default: {\n return _unix.toISOString();\n }\n }\n};\n","import type { ContractMetadata } from \"./Generic.types\";\n\n/**\n * Common enums and types for Streaming API\n */\nexport enum StreamingChain {\n BASE_MAINNET = \"BASE_MAINNET\",\n SOLANA_MAINNET = \"SOLANA_MAINNET\",\n SONIC_MAINNET = \"SONIC_MAINNET\",\n ETH_MAINNET = \"ETH_MAINNET\",\n BSC_MAINNET = \"BSC_MAINNET\",\n}\n\nexport enum StreamingInterval {\n FIFTEEN_SECONDS = \"FIFTEEN_SECONDS\",\n THIRTY_SECONDS = \"THIRTY_SECONDS\",\n ONE_MINUTE = \"ONE_MINUTE\",\n FIVE_MINUTES = \"FIVE_MINUTES\",\n FIFTEEN_MINUTES = \"FIFTEEN_MINUTES\",\n THIRTY_MINUTES = \"THIRTY_MINUTES\",\n ONE_HOUR = \"ONE_HOUR\",\n FOUR_HOURS = \"FOUR_HOURS\",\n ONE_DAY = \"ONE_DAY\",\n}\n\nexport enum StreamingTimeframe {\n ONE_MINUTE = \"ONE_MINUTE\",\n FIVE_MINUTES = \"FIVE_MINUTES\",\n FIFTEEN_MINUTES = \"FIFTEEN_MINUTES\",\n THIRTY_MINUTES = \"THIRTY_MINUTES\",\n ONE_HOUR = \"ONE_HOUR\",\n FOUR_HOURS = \"FOUR_HOURS\",\n ONE_DAY = \"ONE_DAY\",\n ONE_WEEK = \"ONE_WEEK\",\n ONE_MONTH = \"ONE_MONTH\",\n}\n\nexport enum StreamingProtocol {\n UNISWAP_V2 = \"UNISWAP_V2\",\n UNISWAP_V3 = \"UNISWAP_V3\",\n UNISWAP_V4 = \"UNISWAP_V4\",\n VIRTUALS_V2 = \"VIRTUALS_V2\",\n CLANKER = \"CLANKER\",\n RAYDIUM_AMM = \"RAYDIUM_AMM\",\n RAYDIUM_CPMM = \"RAYDIUM_CPMM\",\n PUMP_DOT_FUN = \"PUMP_DOT_FUN\",\n PUMP_FUN_AMM = \"PUMP_FUN_AMM\",\n MOONSHOT = \"MOONSHOT\",\n RAYDIUM_LAUNCH_LAB = \"RAYDIUM_LAUNCH_LAB\",\n METEORA_DAMM = \"METEORA_DAMM\",\n METEORA_DLMM = \"METEORA_DLMM\",\n METEORA_DBC = \"METEORA_DBC\",\n PANCAKESWAP_V2 = \"PANCAKESWAP_V2\",\n PANCAKESWAP_V3 = \"PANCAKESWAP_V3\",\n SHADOW_V2 = \"SHADOW_V2\",\n SHADOW_V3 = \"SHADOW_V3\",\n}\n\n/**\n * OHLCV Pairs Stream Types\n */\nexport interface OHLCVPairsStreamParams {\n chain_name: StreamingChain;\n pair_addresses: string[];\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n limit?: number;\n}\n\nexport interface OHLCVPairsStreamResponse {\n chain_name: StreamingChain;\n pair_address: string;\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n timestamp: string;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n price_usd: number;\n volume_usd: number;\n base_token: ContractMetadata;\n quote_token: ContractMetadata;\n}\n\n/**\n * OHLCV Tokens Stream Types\n */\nexport interface OHLCVTokensStreamParams {\n chain_name: StreamingChain;\n token_addresses: string[];\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n limit?: number;\n}\n\nexport interface OHLCVTokensStreamResponse {\n chain_name: StreamingChain;\n pair_address: string;\n interval: StreamingInterval;\n timeframe: StreamingTimeframe;\n timestamp: string;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n volume_usd: number;\n quote_rate: number;\n quote_rate_usd: number;\n base_token: ContractMetadata;\n quote_token: ContractMetadata;\n}\n\n/**\n * New DEX Pairs Stream Types\n */\nexport interface NewPairsStreamParams {\n chain_name: StreamingChain;\n protocols: StreamingProtocol[];\n}\n\nexport interface PriceMetrics {\n last_5m: number;\n last_1hr: number;\n last_6hr: number;\n last_24hr: number;\n}\n\nexport interface SwapMetrics {\n last_5m: number;\n last_1hr: number;\n last_6hr: number;\n last_24hr: number;\n}\n\nexport interface NewPairsStreamResponse {\n chain_name: string;\n protocol: string;\n protocol_version: string;\n pair_address: string;\n deployer_address: string;\n tx_hash: string;\n block_signed_at: string;\n liquidity: number;\n supply: number;\n market_cap: number;\n event_name: string;\n quote_rate: number;\n quote_rate_usd: number;\n base_token_metadata: ContractMetadata;\n quote_token_metadata: ContractMetadata;\n pair_metadata: ContractMetadata;\n prices: PriceMetrics;\n swaps: SwapMetrics;\n}\n\n/**\n * Token Balances Stream Types\n */\nexport interface TokenBalancesStreamParams {\n chain_name: StreamingChain;\n wallet_address: string;\n}\n\nexport interface TokenBalanceItem {\n balance: string;\n balance_pretty: number;\n quote_rate_usd: number;\n quote_usd: number;\n metadata: ContractMetadata;\n is_native: boolean;\n}\n\nexport interface TokenBalancesStreamResponse {\n wallet_address: string;\n chain_name: string;\n last_block: number;\n items: TokenBalanceItem[];\n}\n\n/**\n * Update Pairs Stream Types\n */\nexport interface UpdatePairsStreamParams {\n chain_name: StreamingChain;\n pair_addresses: string[];\n}\n\nexport interface UpdatePairsStreamResponse {\n chain_name: string;\n pair_address: string;\n timestamp: string;\n price: number;\n price_usd: number;\n volume: number;\n volume_usd: number;\n market_cap: number;\n liquidity: number;\n base_token: ContractMetadata;\n quote_token: ContractMetadata;\n}\n\n/**\n * Wallet Activity Stream Types\n */\nexport interface WalletActivityStreamParams {\n chain_name: StreamingChain;\n wallet_addresses: string[];\n}\n\nexport interface WalletActivityLogItem {\n emitter_address: string;\n log_offset: number;\n data: string;\n topics: string[];\n}\n\nexport interface WalletActivityStreamResponse {\n tx_hash: string;\n from_address: string;\n to_address: string;\n value: number;\n chain_name: string;\n block_signed_at: string;\n block_height: number;\n block_hash: string;\n miner_address: string;\n gas_used: number;\n tx_offset: number;\n successful: boolean;\n decoded_type: string;\n decoded_details?: object; // Union type for different decoded transaction types\n logs: WalletActivityLogItem[];\n}\n\n/**\n * Streaming service configuration\n */\nexport interface StreamingServiceConfig {\n shouldRetry?: (retries: number) => boolean;\n maxReconnectAttempts?: number;\n onConnecting?: () => void;\n onOpened?: () => void;\n onClosed?: () => void;\n onError?: (error: any) => void;\n}\n\n/**\n * Stream subscription options\n */\nexport interface StreamSubscriptionOptions<T = Array<object>> {\n next: (payload: T) => void;\n error?: (error: any) => void;\n complete?: () => void;\n}\n\n/**\n * Unsubscribe function type\n */\nexport type UnsubscribeFunction = () => void;\n"],"names":["ChainName","ChainID","Queue","require$$0","pLimit","StreamingChain","StreamingInterval","StreamingTimeframe","StreamingProtocol"],"mappings":"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","x_google_ignoreList":[11,12,16,17,21]}
|