import { type EventEmitter } from 'eventemitter3'; import { EIP1193Provider, PublicClient } from 'viem'; import type { BaseAccountSDKOpts } from '@dynamic-labs-connectors/base-account-evm'; import { ProviderCondition } from '@dynamic-labs/wallet-connector-core'; import { RegisterEvmProvidersConfig } from '@dynamic-labs/ethereum-core'; declare global { interface IWindowPhantom { ethereum: IEthereum; } interface Window { ethereum?: EIP1193Provider; phantom?: IWindowPhantom; zerionWallet?: IEthereum; coinbaseWalletExtension?: IEthereum; superb?: IEthereum; okxwallet?: IEthereum; } } export type IEthereum = { [key in ExtensionLocator]: boolean; } & { providers?: object[]; request: (params: { method: T; } | object) => Promise; selectedAddress: string | null; } & EventEmitter; export type ExtensionLocator = 'isDawn' | 'isBraveWallet' | 'isCoinbaseWallet' | 'isFrame' | 'isGamestop' | 'isMetaMask' | 'isExodus' | 'isOpera' | 'isBlocto' | 'isTrustWallet' | 'isZerion' | 'isPhantom' | 'isSuperb' | 'isRabby' | 'isOkxWallet'; export type EthProviderCondition = ProviderCondition; export type Provider = () => PublicClient | undefined; export type ExternalProviderEventEmitter = PublicClient & { on: (event: string, listener: (...args: Array) => unknown) => void; removeListener: (event: string, listener: (...args: Array) => unknown) => void; }; export type EthereumWalletConnectorsWithConfigProps = RegisterEvmProvidersConfig & { baseAccountSdkOpts?: BaseAccountSDKOpts; };