import type { ExtractAbiFunction, ExtractAbiFunctionNames } from "abitype" import type { Abi, AbiFunction, AbiParameter, AbiParameterKind, AbiParameterToPrimitiveType, AbiStateMutability, Address, Narrow } from "viem" import type { CallType } from "./actions/createMagicAddress" import type { AMOUNT, FLEX } from "./constants" export type InferFunctionName< TAbi extends Abi | readonly unknown[] = Abi, TFunctionName extends string | undefined = string, TAbiStateMutability extends AbiStateMutability = AbiStateMutability > = TAbi extends Abi ? ExtractAbiFunctionNames< TAbi, TAbiStateMutability > extends infer AbiFunctionNames ? | AbiFunctionNames | (TFunctionName extends AbiFunctionNames ? TFunctionName : never) | (Abi extends TAbi ? string : never) : never : TFunctionName export type GetFunctionArgs< TAbi extends Abi | readonly unknown[], TFunctionName extends string, TAbiFunction extends AbiFunction = TAbi extends Abi ? ExtractAbiFunction : AbiFunction, TArgs = CombinedArgs, FailedToParseArgs = | ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false) > = true extends FailedToParseArgs ? readonly unknown[] : TArgs export type CombinedArgs< TAbiParameters extends readonly AbiParameter[], TAbiParameterKind extends AbiParameterKind = AbiParameterKind > = { [K in keyof TAbiParameters]: | AbiParameterToPrimitiveType | FLEX } export type CreateActionFromArgsParameters< TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName : never > = { target: Address | FLEX.TOKEN_ADDRESS value?: bigint | AMOUNT | FLEX.NATIVE_AMOUNT actionType?: CallType tokenAddressOffset?: bigint tokenAmountOffset?: bigint } & ( | { functionName: _FunctionName abi: TFunctionName extends string ? Narrow : [Narrow] args: GetFunctionArgs } | { functionName?: undefined abi?: never args?: never } ) export type MagicAddressErrorResponse = { error: string details: string }