@broxus/tvm-connect
Version:
Nekoton-compatible wallets connector.
216 lines (215 loc) • 7.71 kB
TypeScript
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;
}