import type { AccountInterface, ProviderInterface } from "starknet"; import type { AccountInterface as AccountInterfaceV4, ProviderInterface as ProviderInterfaceV4 } from "starknet4"; export declare type AccountChangeEventHandler = (accounts: string[]) => void; export declare type NetworkChangeEventHandler = (network?: string) => void; export declare type WalletEvents = { type: "accountsChanged"; handler: AccountChangeEventHandler; } | { type: "networkChanged"; handler: NetworkChangeEventHandler; }; export interface WatchAssetParameters { type: "ERC20"; options: { address: string; symbol?: string; decimals?: number; image?: string; name?: string; }; } export interface AddStarknetChainParameters { id: string; chainId: string; chainName: string; baseUrl: string; rpcUrls?: string[]; blockExplorerUrls?: string[]; nativeCurrency?: { address: string; name: string; symbol: string; decimals: number; }; iconUrls?: string[]; } export interface SwitchStarknetChainParameter { chainId: string; } export declare type RpcMessage = { type: "wallet_watchAsset"; params: WatchAssetParameters; result: boolean; } | { type: "wallet_addStarknetChain"; params: AddStarknetChainParameters; result: boolean; } | { type: "wallet_switchStarknetChain"; params: SwitchStarknetChainParameter; result: boolean; }; export interface IStarknetWindowObject { id: string; name: string; version: string; icon: string; request: (call: Omit) => Promise; enable: (options?: { starknetVersion?: "v4" | "v5"; }) => Promise; isPreauthorized: () => Promise; on: (event: E["type"], handleEvent: E["handler"]) => void; off: (event: E["type"], handleEvent: E["handler"]) => void; account?: AccountInterface | AccountInterfaceV4; provider?: ProviderInterface | ProviderInterfaceV4; selectedAddress?: string; chainId?: string; isConnected: boolean; } export interface ConnectedStarknetWindowObject extends IStarknetWindowObject { isConnected: true; account: AccountInterface | AccountInterfaceV4; provider: ProviderInterface | ProviderInterfaceV4; selectedAddress: string; chainId: string; } export interface DisconnectedStarknetWindowObject extends IStarknetWindowObject { isConnected: false; } export declare type StarknetWindowObject = ConnectedStarknetWindowObject | DisconnectedStarknetWindowObject; declare global { interface Window { starknet?: StarknetWindowObject; starknet_braavos?: StarknetWindowObject; starknet_argentX?: StarknetWindowObject; starknet_metamask?: StarknetWindowObject; [key: `starknet_${string}`]: StarknetWindowObject | undefined; } }