import { Injected } from '@polkadot/extension-inject/types' import { WalletAdapter } from '@solana/wallet-adapter-base' import SolanaWallets from '@solana/wallet-adapter-wallets' import { TorusCtorArgs, TorusParams } from '@toruslabs/torus-embed' // import coinbaseWalletModule from '@web3-onboard/coinbase' import { CustomNetwork, EIP1193Provider, Platform } from '@web3-onboard/common' import { WalletInit } from '@web3-onboard/common' //wallet key names here should be the same as the ones specified in web3modal to generate the modal export interface EVMProviderConfigs { ledger?: { customNetwork?: CustomNetwork filter?: Platform[] } trezor?: { email: string appUrl: string customNetwork?: CustomNetwork filter?: Platform[] } walletconnect?: { bridge?: string qrcodeModalOptions?: { mobileLinks: string[] } connectFirstChainId?: boolean } gnosis?: { whitelistedDomains?: RegExp[] } fortmatic?: { apiKey: string } portis?: { apiKey: string } // coinbase?: { // darkMode?: boolean // } enkrypt?: boolean subwallet?: boolean talisman?: boolean mew?: boolean torus?: TorusCtorArgs & TorusParams } export interface PolkadotProviderConfigs { enkrypt?: boolean polkadotJsExtension?: boolean subwallet?: boolean talisman?: boolean } export interface SolanaProviderConfigs { walletconnect?: SolanaWallets.WalletConnectWalletAdapterConfig ledger?: SolanaWallets.LedgerWalletAdapterConfig solflare?: SolanaWallets.SolflareWalletAdapterConfig sollet?: SolanaWallets.SolletWalletAdapterConfig torus?: SolanaWallets.TorusWalletAdapterConfig blocto?: SolanaWallets.BloctoWalletAdapterConfig phantom?: SolanaWallets.PhantomWalletAdapterConfig backpack?: SolanaWallets.BackpackWalletAdapterConfig nightly?: {} clover?: SolanaWallets.CloverWalletAdapterConfig coin98?: SolanaWallets.Coin98WalletAdapterConfig slope?: SolanaWallets.SlopeWalletAdapterConfig solong?: SolanaWallets.SolongWalletAdapterConfig exodus?: SolanaWallets.ExodusWalletAdapterConfig math?: SolanaWallets.MathWalletAdapterConfig } export interface ProviderConfigs { evm?: EVMProviderConfigs polkadot?: PolkadotProviderConfigs solana?: SolanaProviderConfigs } export interface PolkadotExtensionModule { label: string isEnabled: () => boolean getIcon: () => string getInstallLink?: () => string getInjected: (appName: string) => Promise< | { injected: Injected } | undefined > } export interface AtaWalletState { label: string icon: string polkadotInjected?: Injected evmProvider?: EIP1193Provider solanaWalletAdapter?: WalletAdapter accounts: string[] } export interface PolkadotExtensionState { label: string icon: string injected: Injected accounts: string[] } export interface SolanaWalletAdapterState { label: string icon: string adapter: WalletAdapter accounts: string[] } export type EVMProviderGetters = { [key in keyof EVMProviderConfigs]: (options: EVMProviderConfigs) => WalletInit | undefined } export type PolkadotExtensionModuleGetters = { [key in keyof PolkadotProviderConfigs]: ( options: PolkadotProviderConfigs ) => PolkadotExtensionModule | undefined } export type SolanaWalletAdapterGetters = { [key in keyof SolanaProviderConfigs]: ( options: SolanaProviderConfigs ) => WalletAdapter | undefined } type NativeCurrency = { name: string decimals: number symbol: string } export enum ChainType { EVM = 'evm', Polkadot = 'polkadot', Solana = 'solana' } export interface Chain { type: ChainType rpcUrls: string[] blockExplorerUrls?: string[] chainId: string chainName: string nativeCurrency?: NativeCurrency iconUrl?: string } export type Chains = Chain[]