import type * as bens from '@blockscout/bens-types'; import type * as stats from '@blockscout/stats-types'; import type * as visualizer from '@blockscout/visualizer-types'; import { getFeaturePayload } from 'configs/app/features/types'; import type { UserInfo, CustomAbis, ApiKeys, VerifiedAddressResponse, TokenInfoApplicationConfig, TokenInfoApplications, WatchlistResponse, TransactionTagsResponse, AddressTagsResponse, } from 'types/api/account'; import type { Address, AddressCounters, AddressTabsCounters, AddressTransactionsResponse, AddressTokenTransferResponse, AddressCoinBalanceHistoryResponse, AddressCoinBalanceHistoryChart, AddressBlocksValidatedResponse, AddressInternalTxsResponse, AddressTxsFilters, AddressTokenTransferFilters, AddressTokensFilter, AddressTokensResponse, AddressWithdrawalsResponse, AddressNFTsResponse, AddressCollectionsResponse, AddressNFTTokensFilter, AddressMudTables, AddressMudTablesFilter, AddressMudRecords, AddressMudRecordsFilter, AddressMudRecordsSorting, AddressMudRecord, AddressEpochRewardsResponse, AddressXStarResponse, } from 'types/api/address'; import type { AddressesResponse, AddressesMetadataSearchResult, AddressesMetadataSearchFilters } from 'types/api/addresses'; import type { AddressMetadataInfo, PublicTagTypesResponse } from 'types/api/addressMetadata'; import type { AdvancedFilterParams, AdvancedFilterResponse, AdvancedFilterMethodsResponse } from 'types/api/advancedFilter'; import type { ArbitrumL2MessagesResponse, ArbitrumL2TxnBatch, ArbitrumL2TxnBatchesResponse, ArbitrumL2BatchTxs, ArbitrumL2BatchBlocks, ArbitrumL2TxnBatchesItem, ArbitrumLatestDepositsResponse, ArbitrumL2TxnWithdrawalsResponse, ArbitrumL2MessageClaimResponse, } from 'types/api/arbitrumL2'; import type { TxBlobs, Blob } from 'types/api/blobs'; import type { BlocksResponse, BlockTransactionsResponse, Block, BlockFilters, BlockWithdrawalsResponse, BlockCountdownResponse, BlockEpoch, BlockEpochElectionRewardDetailsResponse, } from 'types/api/block'; import type { ChartMarketResponse, ChartSecondaryCoinPriceResponse, ChartTransactionResponse } from 'types/api/charts'; import type { BackendVersionConfig, CsvExportConfig } from 'types/api/configs'; import type { SmartContract, SmartContractVerificationConfigRaw, SmartContractSecurityAudits, SmartContractMudSystemsResponse, SmartContractMudSystemInfo, } from 'types/api/contract'; import type { VerifiedContractsResponse, VerifiedContractsFilters, VerifiedContractsCounters } from 'types/api/contracts'; import type { EnsAddressLookupFilters, EnsDomainLookupFilters, EnsLookupSorting, } from 'types/api/ens'; import type { IndexingStatus } from 'types/api/indexingStatus'; import type { InternalTransactionsResponse } from 'types/api/internalTransaction'; import type { InteropMessageListResponse } from 'types/api/interop'; import type { LogsResponseTx, LogsResponseAddress } from 'types/api/log'; import type { MudWorldsResponse } from 'types/api/mudWorlds'; import type { NovesAccountHistoryResponse, NovesDescribeTxsResponse, NovesResponseData } from 'types/api/noves'; import type { OptimisticL2DepositsResponse, OptimisticL2DepositsItem, OptimisticL2OutputRootsResponse, OptimisticL2TxnBatchesResponse, OptimisticL2WithdrawalsResponse, OptimisticL2DisputeGamesResponse, OptimismL2TxnBatch, OptimismL2BatchTxs, OptimismL2BatchBlocks, } from 'types/api/optimisticL2'; import type { Pool, PoolsResponse } from 'types/api/pools'; import type { RawTracesResponse } from 'types/api/rawTrace'; import type { RewardsConfigResponse, RewardsCheckRefCodeResponse, RewardsNonceResponse, RewardsCheckUserResponse, RewardsLoginResponse, RewardsUserBalancesResponse, RewardsUserDailyCheckResponse, RewardsUserDailyClaimResponse, RewardsUserReferralsResponse, } from 'types/api/rewards'; import type { ScrollL2BatchesResponse, ScrollL2TxnBatch, ScrollL2TxnBatchTxs, ScrollL2TxnBatchBlocks, ScrollL2MessagesResponse, } from 'types/api/scrollL2'; import type { SearchRedirectResult, SearchResult, SearchResultFilters, SearchResultItem } from 'types/api/search'; import type { ShibariumWithdrawalsResponse, ShibariumDepositsResponse } from 'types/api/shibarium'; import type { HomeStats } from 'types/api/stats'; import type { TokenCounters, TokenInfo, TokenHolders, TokenInventoryResponse, TokenInstance, TokenInstanceTransfersCount, TokenVerifiedInfo, TokenInventoryFilters, } from 'types/api/token'; import type { TokensResponse, TokensFilters, TokensSorting, TokenInstanceTransferResponse, TokensBridgedFilters } from 'types/api/tokens'; import type { TokenTransferResponse, TokenTransferFilters } from 'types/api/tokenTransfer'; import type { TransactionsResponseValidated, TransactionsResponsePending, Transaction, TransactionsResponseWatchlist, TransactionsSorting, TransactionsResponseWithBlobs, TransactionsStats, } from 'types/api/transaction'; import type { TxInterpretationResponse } from 'types/api/txInterpretation'; import type { TTxsFilters, TTxsWithBlobsFilters } from 'types/api/txsFilters'; import type { TxStateChanges } from 'types/api/txStateChanges'; import type { UserOpsResponse, UserOp, UserOpsFilters, UserOpsAccount } from 'types/api/userOps'; import type { ValidatorsStabilityCountersResponse, ValidatorsStabilityFilters, ValidatorsStabilityResponse, ValidatorsStabilitySorting, ValidatorsBlackfortCountersResponse, ValidatorsBlackfortResponse, ValidatorsBlackfortSorting, ValidatorsZilliqaResponse, ValidatorZilliqa, } from 'types/api/validators'; import type { VerifiedContractsSorting } from 'types/api/verifiedContracts'; import type { WithdrawalsResponse, WithdrawalsCounters } from 'types/api/withdrawals'; import type { ZkEvmL2DepositsResponse, ZkEvmL2TxnBatch, ZkEvmL2TxnBatchesItem, ZkEvmL2TxnBatchesResponse, ZkEvmL2TxnBatchTxs, ZkEvmL2WithdrawalsResponse, } from 'types/api/zkEvmL2'; import type { ZkSyncBatch, ZkSyncBatchesResponse, ZkSyncBatchTxs } from 'types/api/zkSyncL2'; import type { MarketplaceAppOverview } from 'types/client/marketplace'; import type { ArrayElement } from 'types/utils'; import config from 'configs/app'; const marketplaceFeature = getFeaturePayload(config.features.marketplace); const marketplaceApi = marketplaceFeature && 'api' in marketplaceFeature ? marketplaceFeature.api : undefined; export interface ApiResource { path: ResourcePath; endpoint?: string; basePath?: string; pathParams?: Array; needAuth?: boolean; // for external APIs which require authentication headers?: RequestInit['headers']; } export const SORTING_FIELDS = [ 'sort', 'order' ]; export const RESOURCES = { // ACCOUNT csrf: { path: '/api/account/v2/get_csrf', }, user_info: { path: '/api/account/v2/user/info', }, custom_abi: { path: '/api/account/v2/user/custom_abis{/:id}', pathParams: [ 'id' as const ], }, watchlist: { path: '/api/account/v2/user/watchlist{/:id}', pathParams: [ 'id' as const ], filterFields: [ ], }, private_tags_address: { path: '/api/account/v2/user/tags/address{/:id}', pathParams: [ 'id' as const ], filterFields: [ ], }, private_tags_tx: { path: '/api/account/v2/user/tags/transaction{/:id}', pathParams: [ 'id' as const ], filterFields: [ ], }, api_keys: { path: '/api/account/v2/user/api_keys{/:id}', pathParams: [ 'id' as const ], }, // ACCOUNT: ADDRESS VERIFICATION & TOKEN INFO address_verification: { path: '/api/v1/chains/:chainId/verified-addresses:type', pathParams: [ 'chainId' as const, 'type' as const ], endpoint: getFeaturePayload(config.features.verifiedTokens)?.api.endpoint, basePath: getFeaturePayload(config.features.verifiedTokens)?.api.basePath, needAuth: true, }, verified_addresses: { path: '/api/v1/chains/:chainId/verified-addresses', pathParams: [ 'chainId' as const ], endpoint: getFeaturePayload(config.features.verifiedTokens)?.api.endpoint, basePath: getFeaturePayload(config.features.verifiedTokens)?.api.basePath, needAuth: true, }, token_info_applications_config: { path: '/api/v1/chains/:chainId/token-info-submissions/selectors', pathParams: [ 'chainId' as const ], endpoint: getFeaturePayload(config.features.addressVerification)?.api.endpoint, basePath: getFeaturePayload(config.features.addressVerification)?.api.basePath, needAuth: true, }, token_info_applications: { path: '/api/v1/chains/:chainId/token-info-submissions{/:id}', pathParams: [ 'chainId' as const, 'id' as const ], endpoint: getFeaturePayload(config.features.addressVerification)?.api.endpoint, basePath: getFeaturePayload(config.features.addressVerification)?.api.basePath, needAuth: true, }, // AUTH auth_send_otp: { path: '/api/account/v2/send_otp', }, auth_confirm_otp: { path: '/api/account/v2/confirm_otp', }, auth_siwe_message: { path: '/api/account/v2/siwe_message', }, auth_siwe_verify: { path: '/api/account/v2/authenticate_via_wallet', }, auth_link_email: { path: '/api/account/v2/email/link', }, auth_link_address: { path: '/api/account/v2/address/link', }, auth_logout: { path: '/api/account/auth/logout', }, // STATS MICROSERVICE API stats_counters: { path: '/api/v1/counters', endpoint: getFeaturePayload(config.features.stats)?.api.endpoint, basePath: getFeaturePayload(config.features.stats)?.api.basePath, }, stats_lines: { path: '/api/v1/lines', endpoint: getFeaturePayload(config.features.stats)?.api.endpoint, basePath: getFeaturePayload(config.features.stats)?.api.basePath, }, stats_line: { path: '/api/v1/lines/:id', pathParams: [ 'id' as const ], endpoint: getFeaturePayload(config.features.stats)?.api.endpoint, basePath: getFeaturePayload(config.features.stats)?.api.basePath, }, stats_main: { path: '/api/v1/pages/main', endpoint: getFeaturePayload(config.features.stats)?.api.endpoint, basePath: getFeaturePayload(config.features.stats)?.api.basePath, }, stats_transactions: { path: '/api/v1/pages/transactions', endpoint: getFeaturePayload(config.features.stats)?.api.endpoint, basePath: getFeaturePayload(config.features.stats)?.api.basePath, }, stats_contracts: { path: '/api/v1/pages/contracts', endpoint: getFeaturePayload(config.features.stats)?.api.endpoint, basePath: getFeaturePayload(config.features.stats)?.api.basePath, }, // NAME SERVICE addresses_lookup: { path: '/api/v1/:chainId/addresses\\:lookup', pathParams: [ 'chainId' as const ], endpoint: getFeaturePayload(config.features.nameService)?.api.endpoint, basePath: getFeaturePayload(config.features.nameService)?.api.basePath, filterFields: [ 'address' as const, 'resolved_to' as const, 'owned_by' as const, 'only_active' as const, 'protocols' as const ], }, address_domain: { path: '/api/v1/:chainId/addresses/:address', pathParams: [ 'chainId' as const, 'address' as const ], endpoint: getFeaturePayload(config.features.nameService)?.api.endpoint, basePath: getFeaturePayload(config.features.nameService)?.api.basePath, }, domain_info: { path: '/api/v1/:chainId/domains/:name', pathParams: [ 'chainId' as const, 'name' as const ], endpoint: getFeaturePayload(config.features.nameService)?.api.endpoint, basePath: getFeaturePayload(config.features.nameService)?.api.basePath, }, domain_events: { path: '/api/v1/:chainId/domains/:name/events', pathParams: [ 'chainId' as const, 'name' as const ], endpoint: getFeaturePayload(config.features.nameService)?.api.endpoint, basePath: getFeaturePayload(config.features.nameService)?.api.basePath, }, domains_lookup: { path: '/api/v1/:chainId/domains\\:lookup', pathParams: [ 'chainId' as const ], endpoint: getFeaturePayload(config.features.nameService)?.api.endpoint, basePath: getFeaturePayload(config.features.nameService)?.api.basePath, filterFields: [ 'name' as const, 'only_active' as const, 'protocols' as const ], }, domain_protocols: { path: '/api/v1/:chainId/protocols', pathParams: [ 'chainId' as const ], endpoint: getFeaturePayload(config.features.nameService)?.api.endpoint, basePath: getFeaturePayload(config.features.nameService)?.api.basePath, }, // METADATA SERVICE & PUBLIC TAGS address_metadata_info: { path: '/api/v1/metadata', endpoint: getFeaturePayload(config.features.addressMetadata)?.api.endpoint, basePath: getFeaturePayload(config.features.addressMetadata)?.api.basePath, }, address_metadata_tag_search: { path: '/api/v1/tags:search', endpoint: getFeaturePayload(config.features.addressMetadata)?.api.endpoint, basePath: getFeaturePayload(config.features.addressMetadata)?.api.basePath, }, address_metadata_tag_types: { path: '/api/v1/public-tag-types', endpoint: getFeaturePayload(config.features.addressMetadata)?.api.endpoint, basePath: getFeaturePayload(config.features.addressMetadata)?.api.basePath, }, public_tag_application: { path: '/api/v1/chains/:chainId/metadata-submissions/tag', pathParams: [ 'chainId' as const ], endpoint: getFeaturePayload(config.features.publicTagsSubmission)?.api.endpoint, basePath: getFeaturePayload(config.features.publicTagsSubmission)?.api.basePath, }, // VISUALIZATION visualize_sol2uml: { path: '/api/v1/solidity\\:visualize-contracts', endpoint: getFeaturePayload(config.features.sol2uml)?.api.endpoint, basePath: getFeaturePayload(config.features.sol2uml)?.api.basePath, }, // MARKETPLACE marketplace_dapps: { path: '/api/v1/chains/:chainId/marketplace/dapps', pathParams: [ 'chainId' as const ], endpoint: marketplaceApi?.endpoint, basePath: marketplaceApi?.basePath, }, marketplace_dapp: { path: '/api/v1/chains/:chainId/marketplace/dapps/:dappId', pathParams: [ 'chainId' as const, 'dappId' as const ], endpoint: marketplaceApi?.endpoint, basePath: marketplaceApi?.basePath, }, // REWARDS SERVICE rewards_config: { path: '/api/v1/config', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_check_ref_code: { path: '/api/v1/auth/code/:code', pathParams: [ 'code' as const ], endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_nonce: { path: '/api/v1/auth/nonce', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_check_user: { path: '/api/v1/auth/user/:address', pathParams: [ 'address' as const ], endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_login: { path: '/api/v1/auth/login', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_logout: { path: '/api/v1/auth/logout', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_user_balances: { path: '/api/v1/user/balances', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_user_daily_check: { path: '/api/v1/user/daily/check', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_user_daily_claim: { path: '/api/v1/user/daily/claim', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, rewards_user_referrals: { path: '/api/v1/user/referrals', endpoint: getFeaturePayload(config.features.rewards)?.api.endpoint, basePath: getFeaturePayload(config.features.rewards)?.api.basePath, }, // BLOCKS, TXS blocks: { path: '/api/v2/blocks', filterFields: [ 'type' as const ], }, block: { path: '/api/v2/blocks/:height_or_hash', pathParams: [ 'height_or_hash' as const ], }, block_txs: { path: '/api/v2/blocks/:height_or_hash/transactions', pathParams: [ 'height_or_hash' as const ], filterFields: [ 'type' as const ], }, block_withdrawals: { path: '/api/v2/blocks/:height_or_hash/withdrawals', pathParams: [ 'height_or_hash' as const ], filterFields: [], }, block_epoch: { path: '/api/v2/blocks/:height_or_hash/epoch', pathParams: [ 'height_or_hash' as const ], filterFields: [], }, block_election_rewards: { path: '/api/v2/blocks/:height_or_hash/election-rewards/:reward_type', pathParams: [ 'height_or_hash' as const, 'reward_type' as const ], filterFields: [], }, txs_stats: { path: '/api/v2/transactions/stats', }, txs_validated: { path: '/api/v2/transactions', filterFields: [ 'filter' as const, 'type' as const, 'method' as const ], }, txs_pending: { path: '/api/v2/transactions', filterFields: [ 'filter' as const, 'type' as const, 'method' as const ], }, txs_with_blobs: { path: '/api/v2/transactions', filterFields: [ 'type' as const ], }, txs_watchlist: { path: '/api/v2/transactions/watchlist', filterFields: [ ], }, txs_execution_node: { path: '/api/v2/transactions/execution-node/:hash', pathParams: [ 'hash' as const ], filterFields: [ ], }, tx: { path: '/api/v2/transactions/:hash', pathParams: [ 'hash' as const ], }, tx_internal_txs: { path: '/api/v2/transactions/:hash/internal-transactions', pathParams: [ 'hash' as const ], filterFields: [ ], }, tx_logs: { path: '/api/v2/transactions/:hash/logs', pathParams: [ 'hash' as const ], filterFields: [ ], }, tx_token_transfers: { path: '/api/v2/transactions/:hash/token-transfers', pathParams: [ 'hash' as const ], filterFields: [ 'type' as const ], }, tx_raw_trace: { path: '/api/v2/transactions/:hash/raw-trace', pathParams: [ 'hash' as const ], }, tx_state_changes: { path: '/api/v2/transactions/:hash/state-changes', pathParams: [ 'hash' as const ], filterFields: [], }, tx_blobs: { path: '/api/v2/transactions/:hash/blobs', pathParams: [ 'hash' as const ], }, tx_interpretation: { path: '/api/v2/transactions/:hash/summary', pathParams: [ 'hash' as const ], }, tx_external_transactions: { path: '/api/v2/transactions/:hash/external-transactions', pathParams: [ 'hash' as const ], }, withdrawals: { path: '/api/v2/withdrawals', filterFields: [], }, withdrawals_counters: { path: '/api/v2/withdrawals/counters', }, internal_txs: { path: '/api/v2/internal-transactions', }, // ADDRESSES addresses: { path: '/api/v2/addresses/', filterFields: [ ], }, addresses_metadata_search: { path: '/api/v2/proxy/metadata/addresses', filterFields: [ 'slug' as const, 'tag_type' as const ], }, // ADDRESS address: { path: '/api/v2/addresses/:hash', pathParams: [ 'hash' as const ], }, address_counters: { path: '/api/v2/addresses/:hash/counters', pathParams: [ 'hash' as const ], }, address_tabs_counters: { path: '/api/v2/addresses/:hash/tabs-counters', pathParams: [ 'hash' as const ], }, // this resource doesn't have pagination, so causing huge problems on some addresses page // address_token_balances: { // path: '/api/v2/addresses/:hash/token-balances', // }, address_txs: { path: '/api/v2/addresses/:hash/transactions', pathParams: [ 'hash' as const ], filterFields: [ 'filter' as const ], }, address_internal_txs: { path: '/api/v2/addresses/:hash/internal-transactions', pathParams: [ 'hash' as const ], filterFields: [ 'filter' as const ], }, address_token_transfers: { path: '/api/v2/addresses/:hash/token-transfers', pathParams: [ 'hash' as const ], filterFields: [ 'filter' as const, 'type' as const, 'token' as const ], }, address_blocks_validated: { path: '/api/v2/addresses/:hash/blocks-validated', pathParams: [ 'hash' as const ], filterFields: [ ], }, address_coin_balance: { path: '/api/v2/addresses/:hash/coin-balance-history', pathParams: [ 'hash' as const ], filterFields: [ ], }, address_coin_balance_chart: { path: '/api/v2/addresses/:hash/coin-balance-history-by-day', pathParams: [ 'hash' as const ], }, address_logs: { path: '/api/v2/addresses/:hash/logs', pathParams: [ 'hash' as const ], filterFields: [ ], }, address_tokens: { path: '/api/v2/addresses/:hash/tokens', pathParams: [ 'hash' as const ], filterFields: [ 'type' as const ], }, address_nfts: { path: '/api/v2/addresses/:hash/nft', pathParams: [ 'hash' as const ], filterFields: [ 'type' as const ], }, address_collections: { path: '/api/v2/addresses/:hash/nft/collections', pathParams: [ 'hash' as const ], filterFields: [ 'type' as const ], }, address_withdrawals: { path: '/api/v2/addresses/:hash/withdrawals', pathParams: [ 'hash' as const ], filterFields: [], }, address_epoch_rewards: { path: '/api/v2/addresses/:hash/election-rewards', pathParams: [ 'hash' as const ], filterFields: [], }, address_xstar_score: { path: '/api/v2/proxy/3dparty/xname/addresses/:hash', pathParams: [ 'hash' as const ], }, // CONTRACT contract: { path: '/api/v2/smart-contracts/:hash', pathParams: [ 'hash' as const ], }, contract_verification_config: { path: '/api/v2/smart-contracts/verification/config', }, contract_verification_via: { path: '/api/v2/smart-contracts/:hash/verification/via/:method', pathParams: [ 'hash' as const, 'method' as const ], }, contract_solidity_scan_report: { path: '/api/v2/proxy/3dparty/solidityscan/smart-contracts/:hash/report', pathParams: [ 'hash' as const ], }, contract_security_audits: { path: '/api/v2/smart-contracts/:hash/audit-reports', pathParams: [ 'hash' as const ], }, verified_contracts: { path: '/api/v2/smart-contracts', filterFields: [ 'q' as const, 'filter' as const ], }, verified_contracts_counters: { path: '/api/v2/smart-contracts/counters', }, // TOKEN token: { path: '/api/v2/tokens/:hash', pathParams: [ 'hash' as const ], }, token_verified_info: { path: '/api/v1/chains/:chainId/token-infos/:hash', pathParams: [ 'chainId' as const, 'hash' as const ], endpoint: getFeaturePayload(config.features.verifiedTokens)?.api.endpoint, basePath: getFeaturePayload(config.features.verifiedTokens)?.api.basePath, }, token_counters: { path: '/api/v2/tokens/:hash/counters', pathParams: [ 'hash' as const ], }, token_holders: { path: '/api/v2/tokens/:hash/holders', pathParams: [ 'hash' as const ], filterFields: [], }, token_transfers: { path: '/api/v2/tokens/:hash/transfers', pathParams: [ 'hash' as const ], filterFields: [], }, token_inventory: { path: '/api/v2/tokens/:hash/instances', pathParams: [ 'hash' as const ], filterFields: [ 'holder_address_hash' as const ], }, tokens: { path: '/api/v2/tokens', filterFields: [ 'q' as const, 'type' as const ], }, tokens_bridged: { path: '/api/v2/tokens/bridged', filterFields: [ 'q' as const, 'chain_ids' as const ], }, // TOKEN INSTANCE token_instance: { path: '/api/v2/tokens/:hash/instances/:id', pathParams: [ 'hash' as const, 'id' as const ], }, token_instance_transfers_count: { path: '/api/v2/tokens/:hash/instances/:id/transfers-count', pathParams: [ 'hash' as const, 'id' as const ], }, token_instance_transfers: { path: '/api/v2/tokens/:hash/instances/:id/transfers', pathParams: [ 'hash' as const, 'id' as const ], filterFields: [], }, token_instance_holders: { path: '/api/v2/tokens/:hash/instances/:id/holders', pathParams: [ 'hash' as const, 'id' as const ], filterFields: [], }, token_instance_refresh_metadata: { path: '/api/v2/tokens/:hash/instances/:id/refetch-metadata', pathParams: [ 'hash' as const, 'id' as const ], filterFields: [], }, // TOKEN TRANSFERS token_transfers_all: { path: '/api/v2/token-transfers', filterFields: [ 'type' as const ], }, // APP STATS stats: { path: '/api/v2/stats', headers: { 'updated-gas-oracle': 'true', }, }, stats_charts_txs: { path: '/api/v2/stats/charts/transactions', }, stats_charts_market: { path: '/api/v2/stats/charts/market', }, stats_charts_secondary_coin_price: { path: '/api/v2/stats/charts/secondary-coin-market', }, // HOMEPAGE homepage_blocks: { path: '/api/v2/main-page/blocks', }, homepage_optimistic_deposits: { path: '/api/v2/main-page/optimism-deposits', }, homepage_arbitrum_deposits: { path: '/api/v2/main-page/arbitrum/messages/to-rollup', }, homepage_txs: { path: '/api/v2/main-page/transactions', }, homepage_zkevm_l2_batches: { path: '/api/v2/main-page/zkevm/batches/confirmed', }, homepage_arbitrum_l2_batches: { path: '/api/v2/main-page/arbitrum/batches/committed', }, homepage_txs_watchlist: { path: '/api/v2/main-page/transactions/watchlist', }, homepage_indexing_status: { path: '/api/v2/main-page/indexing-status', }, homepage_zkevm_latest_batch: { path: '/api/v2/main-page/zkevm/batches/latest-number', }, homepage_zksync_latest_batch: { path: '/api/v2/main-page/zksync/batches/latest-number', }, homepage_arbitrum_latest_batch: { path: '/api/v2/main-page/arbitrum/batches/latest-number', }, // SEARCH quick_search: { path: '/api/v2/search/quick', filterFields: [ 'q' ], }, search: { path: '/api/v2/search', filterFields: [ 'q' ], }, search_check_redirect: { path: '/api/v2/search/check-redirect', }, // optimistic L2 optimistic_l2_deposits: { path: '/api/v2/optimism/deposits', filterFields: [], }, optimistic_l2_deposits_count: { path: '/api/v2/optimism/deposits/count', }, optimistic_l2_withdrawals: { path: '/api/v2/optimism/withdrawals', filterFields: [], }, optimistic_l2_withdrawals_count: { path: '/api/v2/optimism/withdrawals/count', }, optimistic_l2_output_roots: { path: '/api/v2/optimism/output-roots', filterFields: [], }, optimistic_l2_output_roots_count: { path: '/api/v2/optimism/output-roots/count', }, optimistic_l2_txn_batches: { path: '/api/v2/optimism/batches', filterFields: [], }, optimistic_l2_txn_batches_count: { path: '/api/v2/optimism/batches/count', }, optimistic_l2_txn_batch: { path: '/api/v2/optimism/batches/:number', pathParams: [ 'number' as const ], }, optimistic_l2_txn_batch_celestia: { path: '/api/v2/optimism/batches/da/celestia/:height/:commitment', pathParams: [ 'height' as const, 'commitment' as const ], }, optimistic_l2_txn_batch_txs: { path: '/api/v2/transactions/optimism-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, optimistic_l2_txn_batch_blocks: { path: '/api/v2/blocks/optimism-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, optimistic_l2_dispute_games: { path: '/api/v2/optimism/games', filterFields: [], }, optimistic_l2_dispute_games_count: { path: '/api/v2/optimism/games/count', }, // MUD worlds on optimism mud_worlds: { path: '/api/v2/mud/worlds', filterFields: [], }, address_mud_tables: { path: '/api/v2/mud/worlds/:hash/tables', pathParams: [ 'hash' as const ], filterFields: [ 'q' as const ], }, address_mud_tables_count: { path: '/api/v2/mud/worlds/:hash/tables/count', pathParams: [ 'hash' as const ], }, address_mud_records: { path: '/api/v2/mud/worlds/:hash/tables/:table_id/records', pathParams: [ 'hash' as const, 'table_id' as const ], filterFields: [ 'filter_key0' as const, 'filter_key1' as const ], }, address_mud_record: { path: '/api/v2/mud/worlds/:hash/tables/:table_id/records/:record_id', pathParams: [ 'hash' as const, 'table_id' as const, 'record_id' as const ], }, contract_mud_systems: { path: '/api/v2/mud/worlds/:hash/systems', pathParams: [ 'hash' as const ], }, contract_mud_system_info: { path: '/api/v2/mud/worlds/:hash/systems/:system_address', pathParams: [ 'hash' as const, 'system_address' as const ], }, // arbitrum L2 arbitrum_l2_messages: { path: '/api/v2/arbitrum/messages/:direction', pathParams: [ 'direction' as const ], filterFields: [], }, arbitrum_l2_messages_count: { path: '/api/v2/arbitrum/messages/:direction/count', pathParams: [ 'direction' as const ], }, arbitrum_l2_txn_batches: { path: '/api/v2/arbitrum/batches', filterFields: [], }, arbitrum_l2_txn_batches_count: { path: '/api/v2/arbitrum/batches/count', }, arbitrum_l2_txn_batch: { path: '/api/v2/arbitrum/batches/:number', pathParams: [ 'number' as const ], }, arbitrum_l2_txn_batch_celestia: { path: '/api/v2/arbitrum/batches/da/celestia/:height/:commitment', pathParams: [ 'height' as const, 'commitment' as const ], }, arbitrum_l2_txn_batch_txs: { path: '/api/v2/transactions/arbitrum-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, arbitrum_l2_txn_batch_blocks: { path: '/api/v2/blocks/arbitrum-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, arbitrum_l2_txn_withdrawals: { path: '/api/v2/arbitrum/messages/withdrawals/:hash', pathParams: [ 'hash' as const ], filterFields: [], }, arbitrum_l2_message_claim: { path: '/api/v2/arbitrum/messages/claim/:id', pathParams: [ 'id' as const ], filterFields: [], }, // zkEvm L2 zkevm_l2_deposits: { path: '/api/v2/zkevm/deposits', filterFields: [], }, zkevm_l2_deposits_count: { path: '/api/v2/zkevm/deposits/count', }, zkevm_l2_withdrawals: { path: '/api/v2/zkevm/withdrawals', filterFields: [], }, zkevm_l2_withdrawals_count: { path: '/api/v2/zkevm/withdrawals/count', }, zkevm_l2_txn_batches: { path: '/api/v2/zkevm/batches', filterFields: [], }, zkevm_l2_txn_batches_count: { path: '/api/v2/zkevm/batches/count', }, zkevm_l2_txn_batch: { path: '/api/v2/zkevm/batches/:number', pathParams: [ 'number' as const ], }, zkevm_l2_txn_batch_txs: { path: '/api/v2/transactions/zkevm-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, // zkSync L2 zksync_l2_txn_batches: { path: '/api/v2/zksync/batches', filterFields: [], }, zksync_l2_txn_batches_count: { path: '/api/v2/zksync/batches/count', }, zksync_l2_txn_batch: { path: '/api/v2/zksync/batches/:number', pathParams: [ 'number' as const ], }, zksync_l2_txn_batch_txs: { path: '/api/v2/transactions/zksync-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, // SHIBARIUM L2 shibarium_deposits: { path: '/api/v2/shibarium/deposits', filterFields: [], }, shibarium_deposits_count: { path: '/api/v2/shibarium/deposits/count', }, shibarium_withdrawals: { path: '/api/v2/shibarium/withdrawals', filterFields: [], }, shibarium_withdrawals_count: { path: '/api/v2/shibarium/withdrawals/count', }, // SCROLL L2 scroll_l2_deposits: { path: '/api/v2/scroll/deposits', filterFields: [], }, scroll_l2_deposits_count: { path: '/api/v2/scroll/deposits/count', }, scroll_l2_withdrawals: { path: '/api/v2/scroll/withdrawals', filterFields: [], }, scroll_l2_withdrawals_count: { path: '/api/v2/scroll/withdrawals/count', }, scroll_l2_txn_batches: { path: '/api/v2/scroll/batches', filterFields: [], }, scroll_l2_txn_batches_count: { path: '/api/v2/scroll/batches/count', }, scroll_l2_txn_batch: { path: '/api/v2/scroll/batches/:number', pathParams: [ 'number' as const ], }, scroll_l2_txn_batch_txs: { path: '/api/v2/transactions/scroll-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, scroll_l2_txn_batch_blocks: { path: '/api/v2/blocks/scroll-batch/:number', pathParams: [ 'number' as const ], filterFields: [], }, // NOVES-FI noves_transaction: { path: '/api/v2/proxy/3dparty/noves-fi/transactions/:hash', pathParams: [ 'hash' as const ], }, noves_address_history: { path: '/api/v2/proxy/3dparty/noves-fi/addresses/:address/transactions', pathParams: [ 'address' as const ], filterFields: [], }, noves_describe_txs: { path: '/api/v2/proxy/3dparty/noves-fi/transaction-descriptions', }, // USER OPS user_ops: { path: '/api/v2/proxy/account-abstraction/operations', filterFields: [ 'transaction_hash' as const, 'sender' as const ], }, user_op: { path: '/api/v2/proxy/account-abstraction/operations/:hash', pathParams: [ 'hash' as const ], }, user_ops_account: { path: '/api/v2/proxy/account-abstraction/accounts/:hash', pathParams: [ 'hash' as const ], }, user_op_interpretation: { path: '/api/v2/proxy/account-abstraction/operations/:hash/summary', pathParams: [ 'hash' as const ], }, // VALIDATORS validators_stability: { path: '/api/v2/validators/stability', filterFields: [ 'address_hash' as const, 'state_filter' as const ], }, validators_stability_counters: { path: '/api/v2/validators/stability/counters', }, validators_blackfort: { path: '/api/v2/validators/blackfort', filterFields: [], }, validators_blackfort_counters: { path: '/api/v2/validators/blackfort/counters', }, validators_zilliqa: { path: '/api/v2/validators/zilliqa', filterFields: [], }, validator_zilliqa: { path: '/api/v2/validators/zilliqa/:bls_public_key', pathParams: [ 'bls_public_key' as const ], filterFields: [], }, // BLOBS blob: { path: '/api/v2/blobs/:hash', pathParams: [ 'hash' as const ], }, // ADVANCED FILTER advanced_filter: { path: '/api/v2/advanced-filters', filterFields: [ 'transaction_types' as const, 'methods' as const, 'methods_names' as const /* frontend only */, 'age_from' as const, 'age_to' as const, 'age' as const /* frontend only */, 'from_address_hashes_to_include' as const, 'from_address_hashes_to_exclude' as const, 'to_address_hashes_to_include' as const, 'to_address_hashes_to_exclude' as const, 'address_relation' as const, 'amount_from' as const, 'amount_to' as const, 'token_contract_address_hashes_to_include' as const, 'token_contract_symbols_to_include' as const /* frontend only */, 'token_contract_address_hashes_to_exclude' as const, 'token_contract_symbols_to_exclude' as const /* frontend only */, 'block_number' as const, 'transaction_index' as const, 'internal_transaction_index' as const, 'token_transfer_index' as const, ], }, advanced_filter_methods: { path: '/api/v2/advanced-filters/methods', filterFields: [ 'q' as const ], }, advanced_filter_csv: { path: '/api/v2/advanced-filters/csv', }, // POOLS pools: { path: '/api/v1/chains/:chainId/pools', pathParams: [ 'chainId' as const ], filterFields: [ 'query' as const ], endpoint: getFeaturePayload(config.features.pools)?.api.endpoint, basePath: getFeaturePayload(config.features.pools)?.api.basePath, }, pool: { path: '/api/v1/chains/:chainId/pools/:hash', pathParams: [ 'chainId' as const, 'hash' as const ], endpoint: getFeaturePayload(config.features.pools)?.api.endpoint, basePath: getFeaturePayload(config.features.pools)?.api.basePath, }, // CONFIGS config_backend_version: { path: '/api/v2/config/backend-version', }, config_csv_export: { path: '/api/v2/config/csv-export', }, // CSV EXPORT csv_export_token_holders: { path: '/api/v2/tokens/:hash/holders/csv', pathParams: [ 'hash' as const ], }, // OTHER api_v2_key: { path: '/api/v2/key', }, // API V1 csv_export_txs: { path: '/api/v1/transactions-csv', }, csv_export_internal_txs: { path: '/api/v1/internal-transactions-csv', }, csv_export_token_transfers: { path: '/api/v1/token-transfers-csv', }, csv_export_logs: { path: '/api/v1/logs-csv', }, csv_export_epoch_rewards: { path: '/api/v1/celo-election-rewards-csv', }, graphql: { path: '/api/v1/graphql', }, block_countdown: { path: '/api', }, // INTEROP optimistic_l2_interop_messages: { path: '/api/v2/optimism/interop/messages', filterFields: [], }, optimistic_l2_interop_messages_count: { path: '/api/v2/optimism/interop/messages/count', }, }; export type ResourceName = keyof typeof RESOURCES; type ResourcePathMap = { [K in ResourceName]: typeof RESOURCES[K]['path'] }; export type ResourcePath = ResourcePathMap[keyof ResourcePathMap]; export type ResourceFiltersKey = typeof RESOURCES[R] extends { filterFields: Array } ? ArrayElement : never; export const resourceKey = (x: keyof typeof RESOURCES) => x; type ResourcePathParamName = typeof RESOURCES[Resource] extends { pathParams: Array } ? ArrayElement : string; export type ResourcePathParams = typeof RESOURCES[Resource] extends { pathParams: Array } ? Record, string | undefined> : never; export interface ResourceError { payload?: T; status: Response['status']; statusText: Response['statusText']; } export type ResourceErrorAccount = ResourceError<{ errors: T }>; export type PaginatedResources = 'blocks' | 'block_txs' | 'block_election_rewards' | 'txs_validated' | 'txs_pending' | 'txs_with_blobs' | 'txs_watchlist' | 'txs_execution_node' | 'internal_txs' | 'tx_internal_txs' | 'tx_logs' | 'tx_token_transfers' | 'tx_state_changes' | 'tx_blobs' | 'addresses' | 'addresses_metadata_search' | 'address_txs' | 'address_internal_txs' | 'address_token_transfers' | 'address_blocks_validated' | 'address_coin_balance' | 'search' | 'address_logs' | 'address_tokens' | 'address_nfts' | 'address_collections' | 'address_epoch_rewards' | 'token_transfers' | 'token_holders' | 'token_inventory' | 'tokens' | 'tokens_bridged' | 'token_instance_transfers' | 'token_instance_holders' | 'verified_contracts' | 'optimistic_l2_output_roots' | 'optimistic_l2_withdrawals' | 'optimistic_l2_txn_batches' | 'optimistic_l2_deposits' | 'optimistic_l2_dispute_games' | 'optimistic_l2_txn_batch_txs' | 'optimistic_l2_txn_batch_blocks' | 'mud_worlds' | 'address_mud_tables' | 'address_mud_records' | 'shibarium_deposits' | 'shibarium_withdrawals' | 'arbitrum_l2_messages' | 'arbitrum_l2_txn_batches' | 'arbitrum_l2_txn_batch_txs' | 'arbitrum_l2_txn_batch_blocks' | 'zkevm_l2_deposits' | 'zkevm_l2_withdrawals' | 'zkevm_l2_txn_batches' | 'zkevm_l2_txn_batch_txs' | 'zksync_l2_txn_batches' | 'zksync_l2_txn_batch_txs' | 'withdrawals' | 'address_withdrawals' | 'block_withdrawals' | 'watchlist' | 'private_tags_address' | 'private_tags_tx' | 'domains_lookup' | 'addresses_lookup' | 'user_ops' | 'validators_stability' | 'validators_blackfort' | 'validators_zilliqa' | 'noves_address_history' | 'token_transfers_all' | 'scroll_l2_txn_batches' | 'scroll_l2_txn_batch_txs' | 'scroll_l2_txn_batch_blocks' | 'scroll_l2_deposits' | 'scroll_l2_withdrawals' | 'advanced_filter' | 'pools' | 'optimistic_l2_interop_messages'; export type PaginatedResponse = ResourcePayload; /* eslint-disable @stylistic/indent */ // !!! IMPORTANT !!! // Don't add any new types here because TypeScript cannot handle it properly // use ResourcePayloadB instead export type ResourcePayloadA = Q extends 'user_info' ? UserInfo : Q extends 'custom_abi' ? CustomAbis : Q extends 'private_tags_address' ? AddressTagsResponse : Q extends 'private_tags_tx' ? TransactionTagsResponse : Q extends 'api_keys' ? ApiKeys : Q extends 'watchlist' ? WatchlistResponse : Q extends 'verified_addresses' ? VerifiedAddressResponse : Q extends 'token_info_applications_config' ? TokenInfoApplicationConfig : Q extends 'token_info_applications' ? TokenInfoApplications : Q extends 'stats' ? HomeStats : Q extends 'stats_charts_txs' ? ChartTransactionResponse : Q extends 'stats_charts_market' ? ChartMarketResponse : Q extends 'stats_charts_secondary_coin_price' ? ChartSecondaryCoinPriceResponse : Q extends 'homepage_blocks' ? Array : Q extends 'homepage_txs' ? Array : Q extends 'homepage_txs_watchlist' ? Array : Q extends 'homepage_optimistic_deposits' ? Array : Q extends 'homepage_arbitrum_deposits' ? ArbitrumLatestDepositsResponse : Q extends 'homepage_zkevm_l2_batches' ? { items: Array } : Q extends 'homepage_arbitrum_l2_batches' ? { items: Array } : Q extends 'homepage_indexing_status' ? IndexingStatus : Q extends 'homepage_zkevm_latest_batch' ? number : Q extends 'homepage_zksync_latest_batch' ? number : Q extends 'homepage_arbitrum_latest_batch' ? number : Q extends 'stats_counters' ? stats.Counters : Q extends 'stats_lines' ? stats.LineCharts : Q extends 'stats_line' ? stats.LineChart : Q extends 'blocks' ? BlocksResponse : Q extends 'block' ? Block : Q extends 'block_countdown' ? BlockCountdownResponse : Q extends 'block_txs' ? BlockTransactionsResponse : Q extends 'block_withdrawals' ? BlockWithdrawalsResponse : Q extends 'block_epoch' ? BlockEpoch : Q extends 'block_election_rewards' ? BlockEpochElectionRewardDetailsResponse : Q extends 'txs_stats' ? TransactionsStats : Q extends 'txs_validated' ? TransactionsResponseValidated : Q extends 'txs_pending' ? TransactionsResponsePending : Q extends 'txs_with_blobs' ? TransactionsResponseWithBlobs : Q extends 'txs_watchlist' ? TransactionsResponseWatchlist : Q extends 'txs_execution_node' ? TransactionsResponseValidated : Q extends 'internal_txs' ? InternalTransactionsResponse : Q extends 'tx' ? Transaction : Q extends 'tx_internal_txs' ? InternalTransactionsResponse : Q extends 'tx_logs' ? LogsResponseTx : Q extends 'tx_token_transfers' ? TokenTransferResponse : Q extends 'tx_raw_trace' ? RawTracesResponse : Q extends 'tx_state_changes' ? TxStateChanges : Q extends 'tx_blobs' ? TxBlobs : Q extends 'tx_interpretation' ? TxInterpretationResponse : Q extends 'tx_external_transactions' ? Array : Q extends 'addresses' ? AddressesResponse : Q extends 'addresses_metadata_search' ? AddressesMetadataSearchResult : Q extends 'address' ? Address : Q extends 'address_counters' ? AddressCounters : Q extends 'address_tabs_counters' ? AddressTabsCounters : Q extends 'address_txs' ? AddressTransactionsResponse : Q extends 'address_internal_txs' ? AddressInternalTxsResponse : Q extends 'address_token_transfers' ? AddressTokenTransferResponse : Q extends 'address_blocks_validated' ? AddressBlocksValidatedResponse : Q extends 'address_coin_balance' ? AddressCoinBalanceHistoryResponse : Q extends 'address_coin_balance_chart' ? AddressCoinBalanceHistoryChart : Q extends 'address_logs' ? LogsResponseAddress : Q extends 'address_tokens' ? AddressTokensResponse : Q extends 'address_nfts' ? AddressNFTsResponse : Q extends 'address_collections' ? AddressCollectionsResponse : Q extends 'address_withdrawals' ? AddressWithdrawalsResponse : Q extends 'token' ? TokenInfo : Q extends 'token_verified_info' ? TokenVerifiedInfo : Q extends 'token_counters' ? TokenCounters : Q extends 'token_transfers' ? TokenTransferResponse : Q extends 'token_holders' ? TokenHolders : Q extends 'token_instance' ? TokenInstance : Q extends 'token_instance_transfers_count' ? TokenInstanceTransfersCount : Q extends 'token_instance_transfers' ? TokenInstanceTransferResponse : Q extends 'token_instance_holders' ? TokenHolders : Q extends 'token_inventory' ? TokenInventoryResponse : Q extends 'tokens' ? TokensResponse : Q extends 'tokens_bridged' ? TokensResponse : Q extends 'quick_search' ? Array : Q extends 'search' ? SearchResult : Q extends 'search_check_redirect' ? SearchRedirectResult : Q extends 'contract' ? SmartContract : Q extends 'contract_solidity_scan_report' ? unknown : Q extends 'verified_contracts' ? VerifiedContractsResponse : Q extends 'verified_contracts_counters' ? VerifiedContractsCounters : Q extends 'visualize_sol2uml' ? visualizer.VisualizeResponse : Q extends 'contract_verification_config' ? SmartContractVerificationConfigRaw : never; // !!! IMPORTANT !!! // See comment above /* eslint-enable @stylistic/indent */ /* eslint-disable @stylistic/indent */ export type ResourcePayloadB = Q extends 'config_backend_version' ? BackendVersionConfig : Q extends 'config_csv_export' ? CsvExportConfig : Q extends 'address_metadata_info' ? AddressMetadataInfo : Q extends 'address_metadata_tag_types' ? PublicTagTypesResponse : Q extends 'blob' ? Blob : Q extends 'marketplace_dapps' ? Array : Q extends 'marketplace_dapp' ? MarketplaceAppOverview : Q extends 'validators_stability' ? ValidatorsStabilityResponse : Q extends 'validators_stability_counters' ? ValidatorsStabilityCountersResponse : Q extends 'validators_blackfort' ? ValidatorsBlackfortResponse : Q extends 'validators_blackfort_counters' ? ValidatorsBlackfortCountersResponse : Q extends 'validators_zilliqa' ? ValidatorsZilliqaResponse : Q extends 'validator_zilliqa' ? ValidatorZilliqa : Q extends 'contract_security_audits' ? SmartContractSecurityAudits : Q extends 'addresses_lookup' ? bens.LookupAddressResponse : Q extends 'address_domain' ? bens.GetAddressResponse : Q extends 'domain_info' ? bens.DetailedDomain : Q extends 'domain_events' ? bens.ListDomainEventsResponse : Q extends 'domains_lookup' ? bens.LookupDomainNameResponse : Q extends 'domain_protocols' ? bens.GetProtocolsResponse : Q extends 'user_ops' ? UserOpsResponse : Q extends 'user_op' ? UserOp : Q extends 'user_ops_account' ? UserOpsAccount : Q extends 'user_op_interpretation' ? TxInterpretationResponse : Q extends 'noves_transaction' ? NovesResponseData : Q extends 'noves_address_history' ? NovesAccountHistoryResponse : Q extends 'noves_describe_txs' ? NovesDescribeTxsResponse : Q extends 'mud_worlds' ? MudWorldsResponse : Q extends 'address_mud_tables' ? AddressMudTables : Q extends 'address_mud_tables_count' ? number : Q extends 'address_mud_records' ? AddressMudRecords : Q extends 'address_mud_record' ? AddressMudRecord : Q extends 'contract_mud_systems' ? SmartContractMudSystemsResponse : Q extends 'contract_mud_system_info' ? SmartContractMudSystemInfo : Q extends 'address_epoch_rewards' ? AddressEpochRewardsResponse : Q extends 'withdrawals' ? WithdrawalsResponse : Q extends 'withdrawals_counters' ? WithdrawalsCounters : Q extends 'rewards_config' ? RewardsConfigResponse : Q extends 'rewards_check_ref_code' ? RewardsCheckRefCodeResponse : Q extends 'rewards_nonce' ? RewardsNonceResponse : Q extends 'rewards_check_user' ? RewardsCheckUserResponse : Q extends 'rewards_login' ? RewardsLoginResponse : Q extends 'rewards_user_balances' ? RewardsUserBalancesResponse : Q extends 'rewards_user_daily_check' ? RewardsUserDailyCheckResponse : Q extends 'rewards_user_daily_claim' ? RewardsUserDailyClaimResponse : Q extends 'rewards_user_referrals' ? RewardsUserReferralsResponse : Q extends 'token_transfers_all' ? TokenTransferResponse : Q extends 'address_xstar_score' ? AddressXStarResponse : Q extends 'advanced_filter' ? AdvancedFilterResponse : Q extends 'advanced_filter_methods' ? AdvancedFilterMethodsResponse : Q extends 'pools' ? PoolsResponse : Q extends 'pool' ? Pool : Q extends 'stats_main' ? stats.MainPageStats : Q extends 'stats_transactions' ? stats.TransactionsPageStats : Q extends 'stats_contracts' ? stats.ContractsPageStats : never; /* eslint-enable @stylistic/indent */ /* eslint-disable @stylistic/indent */ export type ResourcePayloadRollups = Q extends 'optimistic_l2_output_roots' ? OptimisticL2OutputRootsResponse : Q extends 'optimistic_l2_withdrawals' ? OptimisticL2WithdrawalsResponse : Q extends 'optimistic_l2_deposits' ? OptimisticL2DepositsResponse : Q extends 'optimistic_l2_txn_batches' ? OptimisticL2TxnBatchesResponse : Q extends 'optimistic_l2_txn_batches_count' ? number : Q extends 'optimistic_l2_txn_batch' ? OptimismL2TxnBatch : Q extends 'optimistic_l2_txn_batch_celestia' ? OptimismL2TxnBatch : Q extends 'optimistic_l2_txn_batch_txs' ? OptimismL2BatchTxs : Q extends 'optimistic_l2_txn_batch_blocks' ? OptimismL2BatchBlocks : Q extends 'optimistic_l2_dispute_games' ? OptimisticL2DisputeGamesResponse : Q extends 'optimistic_l2_output_roots_count' ? number : Q extends 'optimistic_l2_withdrawals_count' ? number : Q extends 'optimistic_l2_deposits_count' ? number : Q extends 'optimistic_l2_dispute_games_count' ? number : Q extends 'optimistic_l2_interop_messages' ? InteropMessageListResponse : Q extends 'optimistic_l2_interop_messages_count' ? number : Q extends 'shibarium_withdrawals' ? ShibariumWithdrawalsResponse : Q extends 'shibarium_deposits' ? ShibariumDepositsResponse : Q extends 'shibarium_withdrawals_count' ? number : Q extends 'shibarium_deposits_count' ? number : Q extends 'arbitrum_l2_messages' ? ArbitrumL2MessagesResponse : Q extends 'arbitrum_l2_messages_count' ? number : Q extends 'arbitrum_l2_txn_batches' ? ArbitrumL2TxnBatchesResponse : Q extends 'arbitrum_l2_txn_batches_count' ? number : Q extends 'arbitrum_l2_txn_batch' ? ArbitrumL2TxnBatch : Q extends 'arbitrum_l2_txn_batch_celestia' ? ArbitrumL2TxnBatch : Q extends 'arbitrum_l2_txn_batch_txs' ? ArbitrumL2BatchTxs : Q extends 'arbitrum_l2_txn_batch_blocks' ? ArbitrumL2BatchBlocks : Q extends 'arbitrum_l2_txn_withdrawals' ? ArbitrumL2TxnWithdrawalsResponse : Q extends 'arbitrum_l2_message_claim' ? ArbitrumL2MessageClaimResponse : Q extends 'zkevm_l2_deposits' ? ZkEvmL2DepositsResponse : Q extends 'zkevm_l2_deposits_count' ? number : Q extends 'zkevm_l2_withdrawals' ? ZkEvmL2WithdrawalsResponse : Q extends 'zkevm_l2_withdrawals_count' ? number : Q extends 'zkevm_l2_txn_batches' ? ZkEvmL2TxnBatchesResponse : Q extends 'zkevm_l2_txn_batches_count' ? number : Q extends 'zkevm_l2_txn_batch' ? ZkEvmL2TxnBatch : Q extends 'zkevm_l2_txn_batch_txs' ? ZkEvmL2TxnBatchTxs : Q extends 'zksync_l2_txn_batches' ? ZkSyncBatchesResponse : Q extends 'zksync_l2_txn_batches_count' ? number : Q extends 'zksync_l2_txn_batch' ? ZkSyncBatch : Q extends 'zksync_l2_txn_batch_txs' ? ZkSyncBatchTxs : Q extends 'scroll_l2_txn_batch_txs' ? ScrollL2TxnBatchTxs : Q extends 'scroll_l2_txn_batch_blocks' ? ScrollL2TxnBatchBlocks : Q extends 'scroll_l2_txn_batches' ? ScrollL2BatchesResponse : Q extends 'scroll_l2_txn_batches_count' ? number : Q extends 'scroll_l2_txn_batch' ? ScrollL2TxnBatch : Q extends 'scroll_l2_deposits' ? ScrollL2MessagesResponse : Q extends 'scroll_l2_deposits_count' ? number : Q extends 'scroll_l2_withdrawals' ? ScrollL2MessagesResponse : Q extends 'scroll_l2_withdrawals_count' ? number : never; /* eslint-enable @stylistic/indent */ export type ResourcePayload = ResourcePayloadA | ResourcePayloadB | ResourcePayloadRollups; export type PaginatedResponseItems = Q extends PaginatedResources ? ResourcePayloadA['items'] | ResourcePayloadB['items'] | ResourcePayloadRollups['items'] : never; export type PaginatedResponseNextPageParams = Q extends PaginatedResources ? ResourcePayloadA['next_page_params'] | ResourcePayloadB['next_page_params'] | ResourcePayloadRollups['next_page_params'] : never; /* eslint-disable @stylistic/indent */ export type PaginationFilters = Q extends 'blocks' ? BlockFilters : Q extends 'block_txs' ? TTxsWithBlobsFilters : Q extends 'txs_validated' | 'txs_pending' ? TTxsFilters : Q extends 'txs_with_blobs' ? TTxsWithBlobsFilters : Q extends 'tx_token_transfers' ? TokenTransferFilters : Q extends 'token_transfers' ? TokenTransferFilters : Q extends 'address_txs' | 'address_internal_txs' ? AddressTxsFilters : Q extends 'addresses_metadata_search' ? AddressesMetadataSearchFilters : Q extends 'address_token_transfers' ? AddressTokenTransferFilters : Q extends 'address_tokens' ? AddressTokensFilter : Q extends 'address_nfts' ? AddressNFTTokensFilter : Q extends 'address_collections' ? AddressNFTTokensFilter : Q extends 'search' ? SearchResultFilters : Q extends 'token_inventory' ? TokenInventoryFilters : Q extends 'tokens' ? TokensFilters : Q extends 'tokens_bridged' ? TokensBridgedFilters : Q extends 'verified_contracts' ? VerifiedContractsFilters : Q extends 'addresses_lookup' ? EnsAddressLookupFilters : Q extends 'domains_lookup' ? EnsDomainLookupFilters : Q extends 'user_ops' ? UserOpsFilters : Q extends 'validators_stability' ? ValidatorsStabilityFilters : Q extends 'address_mud_tables' ? AddressMudTablesFilter : Q extends 'address_mud_records' ? AddressMudRecordsFilter : Q extends 'token_transfers_all' ? TokenTransferFilters : Q extends 'advanced_filter' ? AdvancedFilterParams : Q extends 'pools' ? { query: string } : never; /* eslint-enable @stylistic/indent */ /* eslint-disable @stylistic/indent */ export type PaginationSorting = Q extends 'tokens' ? TokensSorting : Q extends 'tokens_bridged' ? TokensSorting : Q extends 'verified_contracts' ? VerifiedContractsSorting : Q extends 'address_txs' ? TransactionsSorting : Q extends 'addresses_lookup' ? EnsLookupSorting : Q extends 'domains_lookup' ? EnsLookupSorting : Q extends 'validators_stability' ? ValidatorsStabilitySorting : Q extends 'validators_blackfort' ? ValidatorsBlackfortSorting : Q extends 'address_mud_records' ? AddressMudRecordsSorting : never; /* eslint-enable @stylistic/indent */