import type { BlockTag, Chain } from 'viem' import { type GetBlockErrorType as viem_GetBlockErrorType, type GetBlockParameters as viem_GetBlockParameters, type GetBlockReturnType as viem_GetBlockReturnType, getBlock as viem_getBlock, } from 'viem/actions' import type { Config } from '../createConfig.js' import type { SelectChains } from '../types/chain.js' import type { ChainIdParameter } from '../types/properties.js' import type { Compute, IsNarrowable } from '../types/utils.js' import { getAction } from '../utils/getAction.js' export type GetBlockParameters< includeTransactions extends boolean = false, blockTag extends BlockTag = 'latest', config extends Config = Config, chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], > = Compute< viem_GetBlockParameters & ChainIdParameter > export type GetBlockReturnType< includeTransactions extends boolean = false, blockTag extends BlockTag = 'latest', config extends Config = Config, chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], /// chains extends readonly Chain[] = SelectChains, > = Compute< { [key in keyof chains]: viem_GetBlockReturnType< IsNarrowable extends true ? chains[key] : undefined, includeTransactions, blockTag > & { chainId: chains[key]['id'] } }[number] > export type GetBlockErrorType = viem_GetBlockErrorType /** https://wagmi.sh/core/actions/getBlock */ export async function getBlock< config extends Config, chainId extends config['chains'][number]['id'], includeTransactions extends boolean = false, blockTag extends BlockTag = 'latest', >( config: config, parameters: GetBlockParameters< includeTransactions, blockTag, config, chainId > = {}, ): Promise> { const { chainId, ...rest } = parameters const client = config.getClient({ chainId }) const action = getAction(client, viem_getBlock, 'getBlock') const block = await action(rest) return { ...(block as unknown as GetBlockReturnType< includeTransactions, blockTag, config, chainId >), chainId: client.chain.id, } }