import type { AccountId, ChainId, ChainIdParams } from 'caip' import type { ProviderKey, ProviderType, ProviderTypes } from './providers/types' import type { Deferred } from './utils' export type DisplayDefaults = { label: string logo: string } export type Networks = { ethereum: 'eip1193' | 'web3' } export type NetworkKey = keyof Networks export type NetworkProvider = Networks[Key] export type ConnectorKey = 'fortmatic' | 'injected' | 'portis' | 'torus' | 'walletConnect' export type ConnectorConfigDefaults = DisplayDefaults & { getNetworkProvider( network: Key, params?: unknown ): NetworkProvider | null getProvider(key: Key, params?: unknown): Promise params?: unknown } export type PartialConnectorConfig = | Key | (Partial & { key: Key }) export type ConnectorConfig = ConnectorConfigDefaults & { key: Key providerKey: ProviderKey } export type GetNetworkState = ( providerKey: Key, provider: ProviderType, params?: NetworkStateParams ) => Promise> export type NetworkConfigDefaults = DisplayDefaults & { connectors: Array getState: GetNetworkState } export type PartialNetworkConfig = | Key | (Partial & { key: Key; connectors?: Array }) export type NetworkConfig = DisplayDefaults & { key: Key connectors: Array getState: GetNetworkState> } export type Config = { networks: Array } export type PartialConfig = { networks?: Array } export type NetworkStateParams = { account?: string chainID?: ChainId | ChainIdParams | string | number } export type NetworkState = { account: string | null chainID: ChainId providerKey: Key provider: ProviderType } export type AuthenticatedState = NetworkState & { account: string } export type AuthMethod = { key: Key connector: ConnectorConfig } export type AuthAccount = { accountID: AccountId method: AuthMethod state: AuthenticatedState } export type AuthState< Key extends NetworkKey = NetworkKey, Provider extends NetworkProvider = NetworkProvider > = | { status: 'idle' } | { status: 'authenticating' promise: Deferred | null> modal: boolean method?: AuthMethod } | { status: 'authenticated'; auth: AuthAccount } | { status: 'failed'; error?: Error }