import type { Account, Address, Chain, Client, NamehashErrorType, Transport, WriteContractErrorType, WriteContractParameters, WriteContractReturnType, } from 'viem' import { writeContract } from 'viem/actions' import { getAction } from 'viem/utils' import type { Prettify, WriteTransactionParameters, } from '../../../../types/index.js' import { type ClientWithOverridesErrorType, clientWithOverrides, } from '../../../../utils/clientWithOverrides.js' import { type ClearRecordsParametersErrorType, clearRecordsParameters, } from '../../../../utils/v1/resolver/clearRecords.js' // ================================ // Write Parameters // ================================ export type ClearRecordsWriteParametersParameters = { /** The name to clear records for */ name: string /** The resolver address to use */ resolverAddress: Address } export type ClearRecordsWriteParametersReturnType< chain extends Chain = Chain, account extends Account = Account, > = ReturnType> export type ClearRecordsWriteParametersErrorType = | ClearRecordsParametersErrorType | NamehashErrorType export const clearRecordsWriteParameters = < chain extends Chain, account extends Account, >( client: Client, { name, resolverAddress }: ClearRecordsWriteParametersParameters, ) => { const _clearRecordsParameters = clearRecordsParameters(name) return { address: resolverAddress, chain: client.chain, account: client.account, ..._clearRecordsParameters, } as const satisfies WriteContractParameters } // ================================ // Action // ================================ export type ClearRecordsParameters< chain extends Chain | undefined, account extends Account | undefined, chainOverride extends Chain | undefined, > = Prettify< ClearRecordsWriteParametersParameters & WriteTransactionParameters > export type ClearRecordsReturnType = WriteContractReturnType export type ClearRecordsErrorType = | ClearRecordsParametersErrorType | ClientWithOverridesErrorType | WriteContractErrorType /** * Clears the records for a name on a resolver. * @param client - {@link Client} * @param options - {@link ClearRecordsParameters} * @returns Transaction hash. {@link ClearRecordsReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts } from '@ensdomains/ensjs' * import { clearRecords } from '@ensdomains/ensjs/wallet/v1' * * const [account] = await window.ethereum.request({ method: 'eth_requestAccounts' }) * const wallet = createWalletClient({ * account, * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }) * const hash = await clearRecords(wallet, { * name: 'ens.eth', * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ export async function clearRecords< chain extends Chain | undefined, account extends Account | undefined, chainOverride extends Chain | undefined, >( client: Client, { name, resolverAddress, ...txArgs }: ClearRecordsParameters, ): Promise { const writeParameters = clearRecordsWriteParameters( clientWithOverrides(client, txArgs), { name, resolverAddress, }, ) const writeContractAction = getAction(client, writeContract, 'writeContract') return writeContractAction({ ...writeParameters, ...txArgs, } as WriteContractParameters) }