UNPKG

@broxus/tvm-connect

Version:

Nekoton-compatible wallets connector.

216 lines (215 loc) 7.71 kB
import { AbstractStore, type Forceable, type NativeCurrency, type TvmNetworkConfig } from '@broxus/js-core'; import { type AddNetwork, type Address, type AssetType, type FullContractState, type Network, type ProviderProperties, ProviderRpcClient, type Subscriber } from 'everscale-inpage-provider'; import { type IReactionDisposer } from 'mobx'; import { type ConnectOptions, type DisconnectOptions, type NekotonConnector } from '../core/NekotonConnector'; import { type TvmWalletProviderConfig } from '../types'; export interface TvmWalletServiceCtorParams { /** * Should the service be initialized in the background? * @default true */ autoInit?: boolean; /** * Standalone connection (connection that`s not require permissions) params */ connectionParams?: { factory?: (network?: TvmNetworkConfig) => ProviderRpcClient; provider?: ProviderProperties['provider']; type?: 'jrpc' | 'proto'; }; defaultNetworkId?: number; /** * List of supported networks */ networks?: Readonly<TvmNetworkConfig[]>; providerId?: string; /** * List of supported Providers */ providers?: Readonly<TvmWalletProviderConfig[]>; } export interface TvmWalletServiceData { contractState?: FullContractState; networks: Readonly<TvmNetworkConfig[]>; } export interface TvmWalletServiceState { isSyncing?: boolean; providerId?: string; } export declare class TvmWalletService extends AbstractStore<TvmWalletServiceData, TvmWalletServiceState> { protected readonly params?: Readonly<TvmWalletServiceCtorParams> | undefined; readonly name = "TvmWalletService"; constructor(params?: Readonly<TvmWalletServiceCtorParams> | undefined); /** * Define current provider connector * @returns {NekotonConnector|undefined} */ get connector(): NekotonConnector | undefined; /** * Initialize the wallet connection manually * @returns {Promise<ProviderRpcClient | undefined>} */ init(): Promise<ProviderRpcClient | undefined>; /** * Manually connect to the wallet * @returns {Promise<void>} */ connect(networkIdOParams?: number | AddNetwork, options?: ConnectOptions): Promise<void>; /** * Manually disconnect from the wallet * @param {DisconnectOptions} [options] * @returns {Promise<void>} */ disconnect(options?: DisconnectOptions): Promise<void>; /** * Add custom token asset to the TVM Wallet * @param {Address | string} address * @param {AssetType} [type] */ addAsset(address: Address | string, type?: AssetType): Promise<boolean | undefined>; /** * Add new network to the wallet. * Supported since version `0.3.40` of the `everscale-inpage-provider` * @param {AddNetwork} network * @param {boolean} switchNetwork * @returns {Promise<Network | null>} */ addNetwork(network: AddNetwork, switchNetwork?: boolean): Promise<Network | null>; /** * Switch to network by the given networkId or network params. * Supported since version `0.3.40` of the `everscale-inpage-provider` * @param {number | AddNetwork} networkIdOParams * @returns {Promise<Network | null>} */ switchNetwork(networkIdOParams: number | AddNetwork): Promise<Network | null>; /** * An independent RPC connection that allows you to receive data from the blockchain without being * able to send transactions. * * This connection does not require `accountInteraction` permissions. * @returns {ProviderRpcClient} */ get connection(): ProviderRpcClient; /** * A Provider that requires a `basic` and `accountInteraction` permissions for the ability to send transactions. * @returns {ProviderRpcClient|undefined} */ get provider(): ProviderRpcClient | undefined; /** * Returns computed wallet contract state * @returns {TvmWalletServiceData["contractState"]} */ get contract(): TvmWalletServiceData['contractState']; /** * The list of the supported networks * @returns {TvmWalletServiceData["networks"]} */ get networks(): TvmWalletServiceData['networks']; /** * Returns `true` if wallet contract is updating * @returns {TvmWalletServiceState["isSyncing"]} */ get isSyncing(): TvmWalletServiceState['isSyncing']; /** * A unique identifier of the connected wallet (provider) * @returns {TvmWalletServiceState["providerId"]} */ get providerId(): TvmWalletServiceState['providerId']; /** * Returns computed wallet address value * @returns {Address|undefined} */ get address(): Address | undefined; /** * Returns computed wallet normalized balance value * @returns {FullContractState["balance"]} */ get balance(): FullContractState['balance']; /** * Returns network native currency * @returns {NativeCurrency<Address>} */ get currency(): Readonly<NativeCurrency<Address>>; /** * Whether provider is available. * * That means extension is installed and activated, else `false` * @returns {boolean} */ get hasProvider(): boolean; /** * Returns `true` if wallet is connected * @returns {boolean} */ get isConnected(): boolean; /** * Returns `true` if installed wallet has outdated version */ get isOutdated(): boolean; /** * Returns `true` if connection to RPC is initialized and connected * @returns {boolean} */ get isReady(): boolean; /** * Checks for supported network * @returns {boolean} */ get isUnsupportedNetwork(): boolean; /** * Returns current network configuration * @returns {TvmNetworkConfig|undefined} */ get network(): TvmNetworkConfig | undefined; /** * Returns details about current connected provider * @returns {TvmWalletProviderConfig["info"]|undefined} */ get providerInfo(): TvmWalletProviderConfig['info'] | undefined; /** * The list of the supported providers * @returns {Readonly<TvmWalletServiceCtorParams["providers"]>} */ get providers(): Readonly<TvmWalletProviderConfig[]>; /** * Returns computed account * @returns {NekotonConnector["account"]} */ get account(): NekotonConnector['account']; /** * Returns current network chain id * @returns {NekotonConnector["chainId"]} */ get chainId(): NekotonConnector['chainId']; /** * Returns `true` if wallet is connecting * @returns {NekotonConnector["isConnecting"]} */ get isConnecting(): NekotonConnector['isConnecting']; /** * Returns `true` if wallet is disconnecting * @returns {NekotonConnector["isDisconnecting"]} */ get isDisconnecting(): NekotonConnector['isDisconnecting']; /** * Returns `true` if wallet is initialized * @returns {NekotonConnector["isInitialized"]} */ get isInitialized(): NekotonConnector['isInitialized']; /** * Returns `true` if wallet is initializing * @returns {NekotonConnector["isInitializing"]} */ get isInitializing(): NekotonConnector['isInitializing']; protected syncContractState(options?: Forceable): Promise<void>; /** * Trying to resolve TVM Wallet connection * @protected */ protected _init(): Promise<void>; protected watch(): Promise<void>; protected unwatch(): Promise<void>; protected accountDisposer: IReactionDisposer | undefined; protected contractSubscriber: Subscriber | undefined; protected networkDisposer: IReactionDisposer | undefined; }