import WalletConnectProvider, { ProviderOptions as WalletConnectProviderConfig } from '@walletconnect/web3-provider'; import Web3 from 'web3'; import { Provider } from 'web3/providers'; import { Bitski, BitskiSDKOptions } from 'bitski'; import { O } from 'ts-toolbelt'; import Fortmatic from 'fortmatic'; export declare type ConnectionStatus = 'disconnected' | 'pending' | 'connected'; export interface ConnectResult { web3: Web3; account: string; } export declare type ConnectionDetails = { wallet: T; provider: Provider; } & (InitializationResult extends null ? {} : { payload: InitializationResult; }); export declare type ConnectionDetailsUnion = T extends WalletType ? ConnectionDetails : never; interface WalletsSignatures { 'wallet-connect': [WalletConnectProvider, WalletConnectProviderConfig]; bitski: [Bitski, BitskiConfig]; metamask: [null, null]; fortmatic: [Fortmatic, FortmaticConfig]; } export declare type WalletType = keyof WalletsSignatures; declare type InitializationResult = WalletsSignatures[K][0]; declare type InitializationConfig = WalletsSignatures[K][1]; declare type MaybePromise = T | Promise; export declare type Resolver = { initialize(config: InitializationConfig): MaybePromise>; destroy(details: ConnectionDetails): MaybePromise; }; export declare type Resolvers = { [key in WalletType]: Resolver; }; export declare type WalletConfigs = O.Filter<{ [T in WalletType]: InitializationConfig; }, null>; interface BitskiConfig { clientId: string; redirectUri: string; additionalScopes?: string[]; options?: BitskiSDKOptions; } interface FortmaticConfig { apiKey: string; network?: 'rinkeby' | 'kovan' | 'ropsten'; } export interface MetamaskInpageProvider extends Provider { enable?(): Promise; } export {};