import type { Account, Address, Chain, PrepareTransactionRequestErrorType as viem_PrepareTransactionRequestErrorType, PrepareTransactionRequestParameters as viem_PrepareTransactionRequestParameters, PrepareTransactionRequestRequest as viem_PrepareTransactionRequestRequest, PrepareTransactionRequestReturnType as viem_PrepareTransactionRequestReturnType, } from 'viem' import { prepareTransactionRequest as viem_prepareTransactionRequest } 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 { IsNarrowable, UnionCompute, UnionStrictOmit, } from '../types/utils.js' import { getAction } from '../utils/getAction.js' import { getConnection } from './getConnection.js' export type PrepareTransactionRequestParameters< config extends Config = Config, chainId extends | config['chains'][number]['id'] | undefined = config['chains'][number]['id'], request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] > = viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, /// chains extends readonly Chain[] = SelectChains, > = { [key in keyof chains]: UnionCompute< UnionStrictOmit< viem_PrepareTransactionRequestParameters< chains[key], Account, chains[key], Account | Address, request extends viem_PrepareTransactionRequestRequest< chains[key], chains[key] > ? request : never >, 'chain' > & ChainIdParameter & { to: Address } > }[number] export type PrepareTransactionRequestReturnType< config extends Config = Config, chainId extends | config['chains'][number]['id'] | undefined = config['chains'][number]['id'], request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] > = viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, /// chains extends readonly Chain[] = SelectChains, > = { [key in keyof chains]: viem_PrepareTransactionRequestReturnType< IsNarrowable extends true ? chains[key] : undefined, Account, chains[key], Account, request extends viem_PrepareTransactionRequestRequest< IsNarrowable extends true ? chains[key] : undefined, chains[key] > ? request : never > & { chainId: chains[key]['id'] } }[number] export type PrepareTransactionRequestErrorType = viem_PrepareTransactionRequestErrorType /** https://wagmi.sh/core/api/actions/prepareTransactionRequest */ export async function prepareTransactionRequest< config extends Config, chainId extends config['chains'][number]['id'] | undefined, const request extends viem_PrepareTransactionRequestRequest< SelectChains['0'], SelectChains['0'] >, >( config: config, parameters: PrepareTransactionRequestParameters, ): Promise> { const { account: account_, chainId, ...rest } = parameters const account = account_ ?? getConnection(config).address const client = config.getClient({ chainId }) const action = getAction( client, viem_prepareTransactionRequest, 'prepareTransactionRequest', ) return action({ ...rest, ...(account ? { account } : {}), } as unknown as viem_PrepareTransactionRequestParameters) as unknown as Promise< PrepareTransactionRequestReturnType > }