import type { ExtractAbiFunction, ExtractAbiFunctionNames } from "abitype"; import type { Abi, AbiFunction, AbiParameter, AbiParameterKind, AbiParameterToPrimitiveType, AbiStateMutability, Address, ContractFunctionName, Hex, Narrow, Prettify } from "viem"; export declare enum CallType { CALL = "0x00", BATCH_CALL = "0x01", DELEGATE_CALL = "0xff" } export declare enum ParamCondition { EQUAL = 0, GREATER_THAN = 1, LESS_THAN = 2, GREATER_THAN_OR_EQUAL = 3, LESS_THAN_OR_EQUAL = 4, NOT_EQUAL = 5, ONE_OF = 6, SLICE_EQUAL = 7 } export interface ParamRule { condition: ParamCondition; offset: number; params: Hex | Hex[]; } export type PermissionCore = { callType?: CallType; target: Address; selector?: Hex; valueLimit?: bigint; rules?: ParamRule[]; }; export type InferFunctionName = TAbi extends Abi ? ExtractAbiFunctionNames extends infer AbiFunctionNames ? AbiFunctionNames | (TFunctionName extends AbiFunctionNames ? TFunctionName : never) | (Abi extends TAbi ? string : never) : never : TFunctionName; export type GetFunctionArgs : AbiFunction, TArgs = CombinedArgs, FailedToParseArgs = ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false)> = true extends FailedToParseArgs ? { args?: readonly unknown[]; } : TArgs extends readonly [] ? { args?: never; } : { args?: TArgs; }; export type PermissionWithABI : never> = PermissionCore & { abi: TAbi extends Abi ? Narrow : [Narrow]; functionName: _FunctionName; selector?: Hex; rules?: never; } & (TFunctionName extends string ? GetFunctionArgs : _FunctionName extends string ? GetFunctionArgs : never); export type PermissionManual = PermissionCore & { abi?: never; functionName?: never; args?: never; }; export type Permission = PermissionWithABI | PermissionManual; type ConditionValue = { condition: ParamCondition.ONE_OF; value: AbiParameterToPrimitiveType[]; } | { condition: ParamCondition.SLICE_EQUAL; value: AbiParameterToPrimitiveType; start: number; length: number; } | { condition: Exclude; value: AbiParameterToPrimitiveType; }; export type CombinedArgs = { [K in keyof TAbiParameters]: ConditionValue | null; }; export type GeneratePermissionWithPolicyAddressParameters = GeneratePermissionFromArgsParameters & { policyAddress: Address; }; export type GeneratePermissionFromArgsParameters : never> = { functionName?: _FunctionName; selector?: Hex; } & (TFunctionName extends string ? { abi: Narrow; } & GetFunctionArgs : _FunctionName extends string ? { abi: [Narrow]; } & GetFunctionArgs : never); export type GetPermissionParameters = permission extends { abi: infer abi extends Abi; } ? permission extends { functionName: infer functionName extends ContractFunctionName; } ? PermissionWithABI : Abi extends abi ? PermissionWithABI : PermissionWithABI : permission extends { target: Address; } ? PermissionManual : never; export type InferPermissions = permissions extends readonly [] ? readonly [] : permissions extends readonly [infer permission] ? readonly [...result, Prettify>] : permissions extends readonly [infer permission, ...infer rest] ? InferPermissions<[ ...rest ], [ ...result, Prettify> ]> : readonly unknown[] extends permissions ? permissions : permissions extends readonly (infer permission)[] ? readonly Prettify>[] : readonly Permission[]; export {}; //# sourceMappingURL=types.d.ts.map