import type * as Address from '../../Address.js';
import type * as Hex from '../../Hex.js';
import type * as RpcSchema from '../../RpcSchema.js';
import type * as TransactionReceipt from '../../TransactionReceipt.js';
import type * as TransactionRequest from '../../TransactionRequest.js';
import type { Compute } from '../types.js';
/**
 * Union of all JSON-RPC Methods for the `wallet_` namespace.
 *
 * @example
 * ```ts twoslash
 * import { RpcSchema } from 'ox'
 *
 * type Schema = RpcSchema.Wallet
 * //   ^?
 * ```
 */
export type Wallet = RpcSchema.From<
/**
 * Requests that the user provides an Ethereum address to be identified by.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-1102}
 */
{
    Request: {
        method: 'eth_requestAccounts';
        params?: undefined;
    };
    ReturnType: readonly Address.Address[];
}
/**
 * Sends a **signed** transaction to the network
 *
 * @example
 * ```
 * request({ method: 'eth_sendRawTransaction', params: ['0x...'] })
 * // => '0x...'
 * ```
 */
 | {
    Request: {
        method: 'eth_sendRawTransaction';
        params: [serializedTransaction: Hex.Hex];
    };
    ReturnType: Hex.Hex;
}
/**
 * Sends a **signed** transaction to the network, and waits for the transaction to be included.
 *
 * @example
 * ```
 * request({ method: 'eth_sendRawTransactionSync', params: ['0x...'] })
 * // => '0x...'
 * ```
 */
 | {
    Request: {
        method: 'eth_sendRawTransactionSync';
        params: [serializedTransaction: Hex.Hex] | [serializedTransaction: Hex.Hex, timeout: number];
    };
    ReturnType: TransactionReceipt.Rpc;
}
/**
 * Creates, signs, and sends a new transaction to the network
 *
 * @example
 * ```
 * request({ method: 'eth_sendTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })
 * // '0x...'
 * ```
 */
 | {
    Request: {
        method: 'eth_sendTransaction';
        params: [transaction: TransactionRequest.Rpc];
    };
    ReturnType: Hex.Hex;
}
/**
 * Signs a transaction that can be submitted to the network at a later time using with `eth_sendRawTransaction`
 *
 * @example
 * ```
 * request({ method: 'eth_signTransaction', params: [{ from: '0x...', to: '0x...', value: '0x...' }] })
 * // '0x...'
 * ```
 */
 | {
    Request: {
        method: 'eth_signTransaction';
        params: [request: TransactionRequest.Rpc];
    };
    ReturnType: Hex.Hex;
}
/**
 * Calculates an Ethereum-specific signature in the form of `keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))`
 *
 * @example
 * ```
 * request({ method: 'eth_signTypedData_v4', params: [{ from: '0x...', data: [{ type: 'string', name: 'message', value: 'hello world' }] }] })
 * // '0x...'
 * ```
 */
 | {
    Request: {
        method: 'eth_signTypedData_v4';
        params: [
            /** Address to use for signing */
            address: Address.Address,
            /** Message to sign containing type information, a domain separator, and data */
            message: string
        ];
    };
    ReturnType: Hex.Hex;
}
/**
 * Calculates an Ethereum-specific signature in the form of `keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))`
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-1474}
 */
 | {
    Request: {
        method: 'personal_sign';
        params: [
            /** Data to sign */
            data: Hex.Hex,
            /** Address to use for signing */
            address: Address.Address
        ];
    };
    ReturnType: Hex.Hex;
}
/**
 * Add an Ethereum chain to the wallet.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-3085}
 */
 | {
    Request: {
        method: 'wallet_addEthereumChain';
        params: [chain: Compute<WalletAddEthereumChainParameters>];
    };
    ReturnType: null;
}
/**
 * Returns the status of a call batch that was sent via `wallet_sendCalls`.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-5792}
 */
 | {
    Request: {
        method: 'wallet_getCallsStatus';
        params?: [string];
    };
    ReturnType: Compute<WalletGetCallsStatusReturnType>;
}
/**
 * Gets the connected wallet's capabilities.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-5792}
 */
 | {
    Request: {
        method: 'wallet_getCapabilities';
        params?: readonly [] | readonly [Address.Address | undefined] | readonly [
            Address.Address | undefined,
            readonly Hex.Hex[] | undefined
        ] | undefined;
    };
    ReturnType: Compute<WalletCapabilitiesMap>;
}
/**
 * Gets the wallets current permissions.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-2255}
 */
 | {
    Request: {
        method: 'wallet_getPermissions';
        params?: undefined;
    };
    ReturnType: readonly Compute<WalletPermission>[];
}
/**
 * Requests permissions from a wallet.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-7715}
 */
 | {
    Request: {
        method: 'wallet_grantPermissions';
        params?: [WalletGrantPermissionsParameters];
    };
    ReturnType: Compute<WalletGrantPermissionsReturnType>;
}
/**
 * Requests the given permissions from the user.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-2255}
 */
 | {
    Request: {
        method: 'wallet_requestPermissions';
        params: [permissions: {
            eth_accounts: Record<string, any>;
        }];
    };
    ReturnType: readonly Compute<WalletPermission>[];
}
/**
 * Revokes the given permissions from the user.
 *
 * @see {@link https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md}
 */
 | {
    Request: {
        method: 'wallet_revokePermissions';
        params: [permissions: {
            eth_accounts: Record<string, any>;
        }];
    };
    ReturnType: null;
}
/**
 * Requests the connected wallet to send a batch of calls.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-5792}
 */
 | {
    Request: {
        method: 'wallet_sendCalls';
        params: Compute<WalletSendCallsParameters>;
    };
    ReturnType: WalletSendCallsReturnType;
}
/**
 * Requests for the wallet to show information about a call batch
 * that was sent via `wallet_sendCalls`.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-5792}
 */
 | {
    Request: {
        method: 'wallet_showCallsStatus';
        params: [string];
    };
    ReturnType: undefined;
}
/**
 * Switch the wallet to the given Ethereum chain.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-3326}
 */
 | {
    Request: {
        method: 'wallet_switchEthereumChain';
        params: [chain: {
            chainId: string;
        }];
    };
    ReturnType: null;
}
/**
 * Requests that the user tracks the token in their wallet. Returns a boolean indicating if the token was successfully added.
 *
 * @see {@link https://eips.ethereum.org/EIPS/eip-747}
 */
 | {
    Request: {
        method: 'wallet_watchAsset';
        params: [Compute<WalletWatchAssetParameters>];
    };
    ReturnType: boolean;
}>;
/**
 * Parameters for `wallet_addEthereumChain`. [See more](https://eips.ethereum.org/EIPS/eip-3085).
 * @internal
 */
type WalletAddEthereumChainParameters = {
    /** A 0x-prefixed hexadecimal string */
    chainId: string;
    /** The chain name. */
    chainName: string;
    /** Native currency for the chain. */
    nativeCurrency?: {
        name: string;
        symbol: string;
        decimals: number;
    } | undefined;
    rpcUrls: readonly string[];
    blockExplorerUrls?: readonly string[] | undefined;
    iconUrls?: readonly string[] | undefined;
};
/**
 * Capabilities of a wallet. [See more](https://eips.ethereum.org/EIPS/eip-5792#wallet_getcapabilities).
 * @internal
 */
type WalletCapabilities = {
    [capability: string]: any;
};
/**
 * Capabilities of a wallet, mapped to chain IDs. [See more](https://eips.ethereum.org/EIPS/eip-5792#wallet_getcapabilities).
 * @internal
 */
type WalletCapabilitiesMap = {
    [chainId: Hex.Hex]: WalletCapabilities;
};
/**
 * Return type for `wallet_getCallsStatus`. [See more](https://eips.ethereum.org/EIPS/eip-5792#wallet_getcallsstatus).
 * @internal
 */
type WalletGetCallsStatusReturnType = {
    atomic: boolean;
    capabilities?: WalletCapabilities | undefined;
    chainId: Hex.Hex;
    id: string;
    receipts?: readonly {
        logs: {
            address: Hex.Hex;
            data: Hex.Hex;
            topics: readonly Hex.Hex[];
        }[];
        status: Hex.Hex;
        blockHash: Hex.Hex;
        blockNumber: Hex.Hex;
        gasUsed: Hex.Hex;
        transactionHash: Hex.Hex;
    }[] | undefined;
    status: number;
    version: string;
};
/**
 * Caveat for a wallet permission. [See more](https://eips.ethereum.org/EIPS/eip-2255).
 * @internal
 */
type WalletPermissionCaveat = {
    type: string;
    value: any;
};
/**
 * A wallet permission. [See more](https://eips.ethereum.org/EIPS/eip-2255).
 * @internal
 */
type WalletPermission = {
    caveats: readonly WalletPermissionCaveat[];
    date: number;
    id: string;
    invoker: `http://${string}` | `https://${string}`;
    parentCapability: 'eth_accounts' | string;
};
/**
 * Parameters for `wallet_grantPermissions`. [See more](https://eips.ethereum.org/EIPS/eip-7715).
 * @internal
 */
type WalletGrantPermissionsParameters = {
    signer?: {
        type: string;
        data?: unknown | undefined;
    } | undefined;
    permissions: readonly {
        data: unknown;
        policies: readonly {
            data: unknown;
            type: string;
        }[];
        required?: boolean | undefined;
        type: string;
    }[];
    expiry: number;
};
/**
 * Return type for `wallet_grantPermissions`. [See more](https://eips.ethereum.org/EIPS/eip-7715).
 * @internal
 */
type WalletGrantPermissionsReturnType = {
    expiry: number;
    factory?: `0x${string}` | undefined;
    factoryData?: string | undefined;
    grantedPermissions: readonly {
        data: unknown;
        policies: readonly {
            data: unknown;
            type: string;
        }[];
        required?: boolean | undefined;
        type: string;
    }[];
    permissionsContext: string;
    signerData?: {
        userOpBuilder?: `0x${string}` | undefined;
        submitToAddress?: `0x${string}` | undefined;
    } | undefined;
};
/**
 * Parameters for `wallet_sendCalls`. [See more](https://eips.ethereum.org/EIPS/eip-5792).
 * @internal
 */
type WalletSendCallsParameters = [
    {
        atomicRequired: boolean;
        calls: readonly {
            capabilities?: WalletCapabilities | undefined;
            to?: Address.Address | undefined;
            data?: Hex.Hex | undefined;
            value?: Hex.Hex | undefined;
        }[];
        capabilities?: WalletCapabilities | undefined;
        chainId?: Hex.Hex | undefined;
        id?: string | undefined;
        from?: Address.Address | undefined;
        version: string;
    }
];
/**
 * Return type for `wallet_sendCalls`. [See more](https://eips.ethereum.org/EIPS/eip-5792#wallet_sendcalls).
 * @internal
 */
type WalletSendCallsReturnType = {
    capabilities?: WalletCapabilities | undefined;
    id: string;
};
/**
 * Parameters for `wallet_watchAsset`. [See more](https://eips.ethereum.org/EIPS/eip-747).
 * @internal
 */
type WalletWatchAssetParameters = {
    /** Token type. */
    type: 'ERC20';
    options: {
        /** The address of the token contract */
        address: string;
        /** A ticker symbol or shorthand, up to 11 characters */
        symbol: string;
        /** The number of token decimals */
        decimals: number;
        /** A string url of the token logo */
        image?: string | undefined;
    };
};
export {};
//# sourceMappingURL=wallet.d.ts.map