RuleSchema: ZodDiscriminatedUnion<
    "operation",
    [
        ZodObject<
            {
                action: ZodEnum<["reject", "accept"]>;
                criteria: ZodArray<
                    ZodDiscriminatedUnion<
                        "type",
                        [
                            ZodObject<
                                {
                                    ethValue: ZodString;
                                    operator: ZodEnum<[(...), (...), (...), (...), (...)]>;
                                    type: ZodLiteral<"ethValue">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    ethValue: string;
                                    operator: ">"
                                    | ">="
                                    | "<"
                                    | "<="
                                    | "==";
                                    type: "ethValue";
                                },
                                {
                                    ethValue: string;
                                    operator: ">"
                                    | ">="
                                    | "<"
                                    | "<="
                                    | "==";
                                    type: "ethValue";
                                },
                            >,
                            ZodObject<
                                {
                                    addresses: ZodArray<ZodEffects<(...), (...), (...)>, "many">;
                                    operator: ZodEnum<[(...), (...)]>;
                                    type: ZodLiteral<"evmAddress">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    addresses: `0x${(...)}`[];
                                    operator: "in" | "not in";
                                    type: "evmAddress";
                                },
                                {
                                    addresses: string[];
                                    operator: "in"
                                    | "not in";
                                    type: "evmAddress";
                                },
                            >,
                            ZodObject<
                                {
                                    abi: ZodUnion<[(...), (...)]>;
                                    conditions: ZodArray<
                                        ZodObject<(...), (...), (...), (...), (...)>,
                                        "many",
                                    >;
                                    type: ZodLiteral<"evmData">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    abi: "erc20"
                                    | "erc721"
                                    | "erc1155"
                                    | readonly (...)[];
                                    conditions: { function: ...; params?: ... }[];
                                    type: "evmData";
                                },
                                {
                                    abi: "erc20"
                                    | "erc721"
                                    | "erc1155"
                                    | readonly (...)[];
                                    conditions: { function: ...; params?: ... }[];
                                    type: "evmData";
                                },
                            >,
                        ],
                    >,
                    "many",
                >;
                operation: ZodLiteral<"signEvmTransaction">;
            },
            "strip",
            ZodTypeAny,
            {
                action: "reject"
                | "accept";
                criteria: (
                    | {
                        ethValue: string;
                        operator: ">"
                        | ">="
                        | "<"
                        | "<="
                        | "==";
                        type: "ethValue";
                    }
                    | {
                        addresses: `0x${string}`[];
                        operator: "in"
                        | "not in";
                        type: "evmAddress";
                    }
                    | {
                        abi: | "erc20"
                        | "erc721"
                        | "erc1155"
                        | readonly (
                            | { inputs: ...; name: ...; type: ... }
                            | { anonymous?: ...; inputs: ...; name: ...; type: ... }
                            | (
                                { payable?: boolean | undefined; constant?: boolean | undefined; gas?: number | undefined; } & ({ inputs: readonly AbiParameter[]; outputs: readonly AbiParameter[]; type: "function"; name: string; stateMutability: "pure" | ... 2 more ... | "payable"; } | { ...; } | { ...; } | { ...; })
                            )
                        )[];
                        conditions: { function: string; params?: (...)[] }[];
                        type: "evmData";
                    }
                )[];
                operation: "signEvmTransaction";
            },
            {
                action: "reject"
                | "accept";
                criteria: (
                    | {
                        ethValue: string;
                        operator: ">"
                        | ">="
                        | "<"
                        | "<="
                        | "==";
                        type: "ethValue";
                    }
                    | {
                        addresses: string[];
                        operator: "in"
                        | "not in";
                        type: "evmAddress";
                    }
                    | {
                        abi: "erc20"
                        | "erc721"
                        | "erc1155"
                        | readonly unknown[];
                        conditions: { function: string; params?: (...)[] }[];
                        type: "evmData";
                    }
                )[];
                operation: "signEvmTransaction";
            },
        >,
        ZodObject<
            {
                action: ZodEnum<["reject", "accept"]>;
                operation: ZodLiteral<"signEvmHash">;
            },
            "strip",
            ZodTypeAny,
            { action: "reject"
            | "accept"; operation: "signEvmHash" },
            { action: "reject" | "accept"; operation: "signEvmHash" },
        >,
        ZodObject<
            {
                action: ZodEnum<["reject", "accept"]>;
                criteria: ZodArray<
                    ZodDiscriminatedUnion<
                        "type",
                        [
                            ZodObject<
                                { match: ZodString; type: ZodLiteral<"evmMessage"> },
                                "strip",
                                ZodTypeAny,
                                { match: string; type: "evmMessage" },
                                { match: string; type: "evmMessage" },
                            >,
                        ],
                    >,
                    "many",
                >;
                operation: ZodLiteral<"signEvmMessage">;
            },
            "strip",
            ZodTypeAny,
            {
                action: "reject"
                | "accept";
                criteria: { match: string; type: "evmMessage" }[];
                operation: "signEvmMessage";
            },
            {
                action: "reject"
                | "accept";
                criteria: { match: string; type: "evmMessage" }[];
                operation: "signEvmMessage";
            },
        >,
        ZodObject<
            {
                action: ZodEnum<["reject", "accept"]>;
                criteria: ZodArray<
                    ZodDiscriminatedUnion<
                        "type",
                        [
                            ZodObject<
                                {
                                    ethValue: ZodString;
                                    operator: ZodEnum<[(...), (...), (...), (...), (...)]>;
                                    type: ZodLiteral<"ethValue">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    ethValue: string;
                                    operator: ">"
                                    | ">="
                                    | "<"
                                    | "<="
                                    | "==";
                                    type: "ethValue";
                                },
                                {
                                    ethValue: string;
                                    operator: ">"
                                    | ">="
                                    | "<"
                                    | "<="
                                    | "==";
                                    type: "ethValue";
                                },
                            >,
                            ZodObject<
                                {
                                    addresses: ZodArray<ZodEffects<(...), (...), (...)>, "many">;
                                    operator: ZodEnum<[(...), (...)]>;
                                    type: ZodLiteral<"evmAddress">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    addresses: `0x${(...)}`[];
                                    operator: "in" | "not in";
                                    type: "evmAddress";
                                },
                                {
                                    addresses: string[];
                                    operator: "in"
                                    | "not in";
                                    type: "evmAddress";
                                },
                            >,
                            ZodObject<
                                {
                                    networks: ZodArray<ZodEnum<(...)>, "many">;
                                    operator: ZodEnum<[(...), (...)]>;
                                    type: ZodLiteral<"evmNetwork">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    networks: ((...) | (...))[];
                                    operator: "in" | "not in";
                                    type: "evmNetwork";
                                },
                                {
                                    networks: ((...) | (...))[];
                                    operator: "in" | "not in";
                                    type: "evmNetwork";
                                },
                            >,
                            ZodObject<
                                {
                                    abi: ZodUnion<[(...), (...)]>;
                                    conditions: ZodArray<
                                        ZodObject<(...), (...), (...), (...), (...)>,
                                        "many",
                                    >;
                                    type: ZodLiteral<"evmData">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    abi: "erc20"
                                    | "erc721"
                                    | "erc1155"
                                    | readonly (...)[];
                                    conditions: { function: ...; params?: ... }[];
                                    type: "evmData";
                                },
                                {
                                    abi: "erc20"
                                    | "erc721"
                                    | "erc1155"
                                    | readonly (...)[];
                                    conditions: { function: ...; params?: ... }[];
                                    type: "evmData";
                                },
                            >,
                        ],
                    >,
                    "many",
                >;
                operation: ZodLiteral<"sendEvmTransaction">;
            },
            "strip",
            ZodTypeAny,
            {
                action: "reject"
                | "accept";
                criteria: (
                    | {
                        ethValue: string;
                        operator: ">"
                        | ">="
                        | "<"
                        | "<="
                        | "==";
                        type: "ethValue";
                    }
                    | {
                        addresses: `0x${string}`[];
                        operator: "in"
                        | "not in";
                        type: "evmAddress";
                    }
                    | {
                        networks: ("base-sepolia" | "base")[];
                        operator: "in" | "not in";
                        type: "evmNetwork";
                    }
                    | {
                        abi: | "erc20"
                        | "erc721"
                        | "erc1155"
                        | readonly (
                            | { inputs: ...; name: ...; type: ... }
                            | { anonymous?: ...; inputs: ...; name: ...; type: ... }
                            | (
                                { payable?: boolean | undefined; constant?: boolean | undefined; gas?: number | undefined; } & ({ inputs: readonly AbiParameter[]; outputs: readonly AbiParameter[]; type: "function"; name: string; stateMutability: "pure" | ... 2 more ... | "payable"; } | { ...; } | { ...; } | { ...; })
                            )
                        )[];
                        conditions: { function: string; params?: (...)[] }[];
                        type: "evmData";
                    }
                )[];
                operation: "sendEvmTransaction";
            },
            {
                action: "reject"
                | "accept";
                criteria: (
                    | {
                        ethValue: string;
                        operator: ">"
                        | ">="
                        | "<"
                        | "<="
                        | "==";
                        type: "ethValue";
                    }
                    | {
                        addresses: string[];
                        operator: "in"
                        | "not in";
                        type: "evmAddress";
                    }
                    | {
                        networks: ("base-sepolia" | "base")[];
                        operator: "in" | "not in";
                        type: "evmNetwork";
                    }
                    | {
                        abi: "erc20"
                        | "erc721"
                        | "erc1155"
                        | readonly unknown[];
                        conditions: { function: string; params?: (...)[] }[];
                        type: "evmData";
                    }
                )[];
                operation: "sendEvmTransaction";
            },
        >,
        ZodObject<
            {
                action: ZodEnum<["reject", "accept"]>;
                criteria: ZodArray<
                    ZodDiscriminatedUnion<
                        "type",
                        [
                            ZodObject<
                                {
                                    addresses: ZodArray<ZodString, "many">;
                                    operator: ZodEnum<[(...), (...)]>;
                                    type: ZodLiteral<"solAddress">;
                                },
                                "strip",
                                ZodTypeAny,
                                {
                                    addresses: string[];
                                    operator: "in"
                                    | "not in";
                                    type: "solAddress";
                                },
                                {
                                    addresses: string[];
                                    operator: "in"
                                    | "not in";
                                    type: "solAddress";
                                },
                            >,
                        ],
                    >,
                    "many",
                >;
                operation: ZodLiteral<"signSolTransaction">;
            },
            "strip",
            ZodTypeAny,
            {
                action: "reject"
                | "accept";
                criteria: {
                    addresses: string[];
                    operator: "in" | "not in";
                    type: "solAddress";
                }[];
                operation: "signSolTransaction";
            },
            {
                action: "reject"
                | "accept";
                criteria: {
                    addresses: string[];
                    operator: "in" | "not in";
                    type: "solAddress";
                }[];
                operation: "signSolTransaction";
            },
        >,
    ],
> = ...

Schema for policy rules