import type { ExtractAbiEvent, ExtractAbiEventNames, FormatAbi, ParseAbi, } from 'abitype' import type { BlockNumber, BlockTag, CreateEventFilterParameters } from 'viem' import type { MaybeExtractEventArgsFromAbi } from 'viem/_types/types/contract' export type ValueOf = T[keyof T] export type Events< TName extends string, THumanReadableAbi extends readonly string[], > = { [TEventName in ExtractAbiEventNames>]: (< TStrict extends boolean = false, TFromBlock extends BlockNumber | BlockTag | undefined = undefined, TToBlock extends BlockNumber | BlockTag | undefined = undefined, >( params: Pick< CreateEventFilterParameters< ExtractAbiEvent, TEventName>, ParseAbi, TStrict, TFromBlock, TToBlock, TEventName, MaybeExtractEventArgsFromAbi, TEventName> >, 'fromBlock' | 'toBlock' | 'args' | 'strict' >, ) => CreateEventFilterParameters< ExtractAbiEvent, TEventName>, ParseAbi, TStrict, TFromBlock, TToBlock, TEventName, MaybeExtractEventArgsFromAbi, TEventName> > & { evmtsContractName: TName eventName: TEventName abi: [ExtractAbiEvent, TEventName>] }) & { eventName: TEventName humanReadableAbi: FormatAbi< [ExtractAbiEvent, TEventName>] > abi: [ExtractAbiEvent, TEventName>] } }