@wagmi/core
Version:
VanillaJS library for Ethereum
126 lines (118 loc) • 3.95 kB
text/typescript
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 {
Compute,
IsNarrowable,
UnionCompute,
UnionStrictOmit,
} from '../types/utils.js'
import { getAction } from '../utils/getAction.js'
import { getAccount } from './getAccount.js'
export type PrepareTransactionRequestParameters<
config extends Config = Config,
chainId extends
| config['chains'][number]['id']
| undefined = config['chains'][number]['id'],
request extends viem_PrepareTransactionRequestRequest<
SelectChains<config, chainId>[0],
SelectChains<config, chainId>[0]
> = viem_PrepareTransactionRequestRequest<
SelectChains<config, chainId>[0],
SelectChains<config, chainId>[0]
>,
///
chains extends readonly Chain[] = SelectChains<config, chainId>,
> = {
[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<config, chainId> & {
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<config, chainId>[0],
SelectChains<config, chainId>[0]
> = viem_PrepareTransactionRequestRequest<
SelectChains<config, chainId>[0],
SelectChains<config, chainId>[0]
>,
///
chains extends readonly Chain[] = SelectChains<config, chainId>,
> = {
[key in keyof chains]: Compute<
viem_PrepareTransactionRequestReturnType<
IsNarrowable<chains[key], Chain> extends true ? chains[key] : undefined,
Account,
chains[key],
Account,
request extends viem_PrepareTransactionRequestRequest<
IsNarrowable<chains[key], Chain> 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<config, chainId>['0'],
SelectChains<config, chainId>['0']
>,
>(
config: config,
parameters: PrepareTransactionRequestParameters<config, chainId, request>,
): Promise<PrepareTransactionRequestReturnType<config, chainId, request>> {
const { account: account_, chainId, ...rest } = parameters
const account = account_ ?? getAccount(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<config, chainId, request>
>
}