/// import { LCDClientConfig } from '@terra-money/feather.js'; import { ExtensionOptions, LCDClient } from '@terra-money/feather.js'; import { ConnectedWallet, Connection, ConnectType, Installation, NetworkInfo, SignBytesResult, SignResult, TxResult, WalletStates } from '@terra-money/wallet-types'; import { Observable } from 'rxjs'; import { ExtensionInfo } from './modules/extension-router/multiChannel'; import { ReadonlyWalletSession } from './modules/readonly-wallet'; import { WalletPlugin } from './modules/wallet-plugin/types'; import { WalletConnectControllerOptions } from './modules/walletconnect'; export interface WalletControllerOptions extends WalletConnectControllerOptions { /** * ⚠️ Don't hardcoding this, use getChain Options() * * fallback network if controller is not connected */ defaultNetwork: NetworkInfo; /** * ⚠️ Don't hardcoding this, use getChain Options() * * for walletconnect * * The network rules passed by the Terra Station Mobile are 0 is testnet, 1 is mainnet. * * Always set testnet for 0 and mainnet for 1. * * @example * ``` * const mainnet: NetworkInfo = { * name: 'mainnet', * chainID: 'columbus-5', * lcd: 'https://lcd.terra.dev', * } * * const testnet: NetworkInfo = { * name: 'testnet', * chainID: 'bombay-12', * lcd: 'https://bombay-lcd.terra.dev', * } * * const walletConnectChainIds: Record = { * 0: testnet, * 1: mainnet, * } * * * ``` */ walletConnectChainIds: Record; /** * run at executing the `connect(ConnectType.READONLY)` */ createReadonlyWalletSession?: (networks: NetworkInfo[]) => Promise; plugins?: WalletPlugin[]; /** * run at executing the `connect()` - only used when does not input ConnectType */ selectConnection?: (connections: Connection[]) => Promise<[type: ConnectType, identifier: string | undefined] | null>; /** * run at executing the `connect(ConnectType.EXTENSION)` * if user installed multiple wallets */ selectExtension?: (extensionInfos: ExtensionInfo[]) => Promise; /** * milliseconds to wait checking chrome extension is installed * * @default 1000 * 3 miliseconds */ waitingChromeExtensionInstallCheck?: number; /** * ⚠️ This API is an option for wallet developers. Please don't use dApp developers. * * @example * ``` * { * return /MyWallet\//.test(userAgent); * }}> * ``` */ dangerously__chromeExtensionCompatibleBrowserCheck?: (userAgent: string) => boolean; } export declare class WalletController { readonly options: WalletControllerOptions; private extension; private walletConnect; private readonlyWallet; private plugin; private _availableConnectTypes; private _availableInstallTypes; private _states; private disableReadonlyWallet; private disableExtension; private disableWalletConnect; private disableWalletPlugin; private readonly _notConnected; private readonly _initializing; constructor(options: WalletControllerOptions); /** * Some mobile wallet emulates the behavior of chrome extension. * It confirms that the current connection environment is such a wallet. * (If you are running connect() by checking availableConnectType, you do not need to use this API.) * * @see Wallet#isChromeExtensionCompatibleBrowser */ isChromeExtensionCompatibleBrowser: () => boolean; /** * available connect types on the browser * * @see Wallet#availableConnectTypes */ availableConnectTypes: () => Observable; /** * available connections includes identifier, name, icon * * @see Wallet#availableConnections */ availableConnections: () => Observable; /** * available install types on the browser * * in this time, this only contains [ConnectType.EXTENSION] * * @see Wallet#availableInstallTypes */ availableInstallTypes: () => Observable; /** * available installations includes identifier, name, icon, url * * @see Wallet#availableInstallations */ availableInstallations: () => Observable; /** * @see Wallet#status * @see Wallet#network * @see Wallet#wallets */ states: () => Observable; /** get connectedWallet */ connectedWallet: () => Observable; /** get lcdClient */ lcdClient: (lcdClientConfig: Record) => Observable; /** * reload the connected wallet states * * in this time, this only work on the ConnectType.EXTENSION * * @see Wallet#recheckStatus */ refetchStates: () => void; /** * @deprecated Please use availableInstallations * * install for the connect type * * @see Wallet#install */ install: (type: ConnectType) => void; /** * connect to wallet * * @see Wallet#connect */ connect: (_type?: ConnectType, _identifier?: string) => Promise; /** * manual connect to read only session * * @see Wallet#connectReadonly */ connectReadonly: (terraAddress: string, network: NetworkInfo) => void; /** @see Wallet#disconnect */ disconnect: () => void; /** * @see Wallet#post * @param tx * @param terraAddress only available new extension */ post: (tx: ExtensionOptions, terraAddress?: string | undefined) => Promise; /** * @see Wallet#sign * @param tx * @param terraAddress only available new extension */ sign: (tx: ExtensionOptions, terraAddress?: string) => Promise; /** * @see Wallet#signBytes * @param bytes * @param terraAddress only available new extension */ signBytes: (bytes: Buffer, terraAddress?: string) => Promise; /** * @see Wallet#hasCW20Tokens * @param chainID * @param tokenAddrs Token addresses */ hasCW20Tokens: (chainID: string, ...tokenAddrs: string[]) => Promise<{ [tokenAddr: string]: boolean; }>; /** * @see Wallet#addCW20Tokens * @param chainID * @param tokenAddrs Token addresses */ addCW20Tokens: (chainID: string, ...tokenAddrs: string[]) => Promise<{ [tokenAddr: string]: boolean; }>; /** * @see Wallet#hasNetwork * @param network */ hasNetwork: (network: Omit) => Promise; /** * @see Wallet#hasNetwork * @param network */ addNetwork: (network: NetworkInfo) => Promise; private availableExtensionFeature; private updateStates; private enableReadonlyWallet; private enableExtension; private enableWalletConnect; private enableWalletPlugin; }