import type { PrepareTransactionRequestRequest as viem_PrepareTransactionRequestRequest } from 'viem' import { type PrepareTransactionRequestErrorType, type PrepareTransactionRequestParameters, type PrepareTransactionRequestReturnType, prepareTransactionRequest, } from '../actions/prepareTransactionRequest.js' import type { Config } from '../createConfig.js' import type { SelectChains } from '../types/chain.js' import type { ScopeKeyParameter } from '../types/properties.js' import type { QueryOptions, QueryParameter } from '../types/query.js' import type { UnionExactPartial } from '../types/utils.js' import { filterQueryOptions } from './utils.js' export type PrepareTransactionRequestOptions< config extends Config, chainId extends config['chains'][number]['id'] | undefined, request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, selectData = PrepareTransactionRequestData, > = UnionExactPartial< PrepareTransactionRequestParameters > & ScopeKeyParameter & QueryParameter< PrepareTransactionRequestQueryFnData, PrepareTransactionRequestErrorType, selectData, PrepareTransactionRequestQueryKey > export function prepareTransactionRequestQueryOptions< config extends Config, chainId extends config['chains'][number]['id'] | undefined, request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, selectData = PrepareTransactionRequestData, >( config: config, options: PrepareTransactionRequestOptions< config, chainId, request, selectData > = {} as any, ): PrepareTransactionRequestQueryOptions { return { ...options.query, enabled: Boolean(options.to && (options.query?.enabled ?? true)), queryFn: async (context) => { const [, { scopeKey: _, ...parameters }] = context.queryKey if (!parameters.to) throw new Error('to is required') return prepareTransactionRequest(config, { ...(parameters as any), to: parameters.to, }) as unknown as Promise< PrepareTransactionRequestQueryFnData > }, queryKey: prepareTransactionRequestQueryKey( options, ) as PrepareTransactionRequestQueryKey, } } export type PrepareTransactionRequestQueryFnData< config extends Config, chainId extends config['chains'][number]['id'] | undefined, request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, > = PrepareTransactionRequestReturnType export type PrepareTransactionRequestData< config extends Config, chainId extends config['chains'][number]['id'] | undefined, request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, > = PrepareTransactionRequestQueryFnData export function prepareTransactionRequestQueryKey< config extends Config, chainId extends config['chains'][number]['id'] | undefined, request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, >( options: UnionExactPartial< PrepareTransactionRequestParameters > & ScopeKeyParameter = {} as any, ) { return ['prepareTransactionRequest', filterQueryOptions(options)] as const } export type PrepareTransactionRequestQueryKey< config extends Config, chainId extends config['chains'][number]['id'] | undefined, request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, > = ReturnType< typeof prepareTransactionRequestQueryKey > export type PrepareTransactionRequestQueryOptions< config extends Config, chainId extends config['chains'][number]['id'] | undefined, request extends viem_PrepareTransactionRequestRequest< SelectChains[0], SelectChains[0] >, selectData = PrepareTransactionRequestData, > = QueryOptions< PrepareTransactionRequestQueryFnData, PrepareTransactionRequestErrorType, selectData, PrepareTransactionRequestQueryKey >