UNPKG

web3-wallets-kit

Version:

Package for connecting with Ethereum wallets for dApp

84 lines (67 loc) 2.13 kB
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 type ConnectionStatus = 'disconnected' | 'pending' | 'connected'; export interface ConnectResult { web3: Web3; account: string; } export type ConnectionDetails<T extends WalletType> = { wallet: T; provider: Provider; } & (InitializationResult<T> extends null ? {} : { payload: InitializationResult<T>; }); export type ConnectionDetailsUnion<T extends WalletType = WalletType> = T extends WalletType ? ConnectionDetails<T> : never; // type: [InitializationResult, InitializationConfig] interface WalletsSignatures { 'wallet-connect': [WalletConnectProvider, WalletConnectProviderConfig]; bitski: [Bitski, BitskiConfig]; metamask: [null, null]; fortmatic: [Fortmatic, FortmaticConfig]; // portis: [null, null]; // squarelink: [null, null]; // torus: [null, null]; // ledger: [null, null]; } export type WalletType = keyof WalletsSignatures; type InitializationResult<K extends WalletType> = WalletsSignatures[K][0]; type InitializationConfig<K extends WalletType> = WalletsSignatures[K][1]; type MaybePromise<T> = T | Promise<T>; export type Resolver<D extends WalletType> = { initialize(config: InitializationConfig<D>): MaybePromise<ConnectionDetails<D>>; destroy(details: ConnectionDetails<D>): MaybePromise<void>; }; export type Resolvers = { [key in WalletType]: Resolver<key>; }; /* *** Wallet Configs *** */ export type WalletConfigs = O.Filter< { [T in WalletType]: InitializationConfig<T>; }, null >; interface BitskiConfig { clientId: string; redirectUri: string; additionalScopes?: string[]; options?: BitskiSDKOptions; } interface FortmaticConfig { apiKey: string; network?: 'rinkeby' | 'kovan' | 'ropsten'; } /* *** Other *** */ export interface MetamaskInpageProvider extends Provider { enable?(): Promise<void>; }