UNPKG

@broxus/js-bridge-essentials

Version:

Bridge JavaScript Essentials library

231 lines (230 loc) 9.56 kB
import { AbstractStore, type TokenRaw, type TvmBasedNetwork, TvmToken } from '@broxus/js-core'; import { type Connection } from '@solana/web3.js'; import { type TonClient } from '@ton/ton'; import { type ProviderRpcClient } from 'everscale-inpage-provider'; import type Web3 from 'web3'; import { EvmToken, EvmTonPipelineConfig, EvmTvmPipelineConfig, SolTvmPipelineConfig, SolanaToken, TonEvmPipelineConfig, TonToken, TvmEvmPipelineConfig, TvmSolPipelineConfig } from '../models'; import { type CurrencyRaw, type EvmBasedNetwork, type NetworkConfig, type NetworkType, type SolanaNetwork, TokenType, type TonBasedNetwork } from '../types'; export interface BridgeRawAssetVault { chainId: string; ethereumConfiguration: string; vault: string; } export interface BridgeRawAsset { proxy: string; vaults: BridgeRawAssetVault[]; } export interface BridgeRawSolanaAsset { chainId: string; proxy: string; solanaConfiguration: string; tvmConfiguration: string; vault: string; } export interface BridgeRawAssets { evm_tvm: BridgeRawAsset; tvm_evm: BridgeRawAsset; solana_tvm: BridgeRawSolanaAsset; tvm_solana: BridgeRawSolanaAsset; evm_ton: BridgeRawAsset; ton_evm: BridgeRawAsset; } export interface BridgeAssetsManifest { name: string; multitoken: BridgeRawAssets; } export type AssetKeyLiteral<T extends NetworkType = NetworkType> = `${T}_${string}_${string}`; export interface BridgeAssetAttributes<T extends NetworkType = NetworkType> { key: AssetKeyLiteral<T>; tags?: Set<string>; wrappedLogoURI?: string; wrappedName?: string; wrappedSymbol?: string; } export interface SolanaFeeInfo { divisor: number; multiplier: number; } export interface SolanaTokenKind { mint: string; vault: string; } export interface EverTokenKind { decimals: number; mint: string; token: string; } export interface SolanaTokenSettings { account_kind: { TokenSettings: number[]; }; deposit_limit: string; emergency: boolean; fee_deposit_info: SolanaFeeInfo; fee_supply: number; fee_withdrawal_info: SolanaFeeInfo; is_initialized: boolean; kind: { Solana: SolanaTokenKind; } | { Ever: EverTokenKind; }; name: string; symbol: string; withdrawal_daily_amount: string; withdrawal_daily_limit: string; withdrawal_epoch: string; withdrawal_limit: string; } export type EvmBridgeAsset = EvmToken<BridgeAssetAttributes<EvmBasedNetwork>>; export type TvmBridgeAsset = TvmToken<BridgeAssetAttributes<TvmBasedNetwork>>; export type TonBridgeAsset = TonToken<BridgeAssetAttributes<TonBasedNetwork>>; export type SolanaBridgeAsset = SolanaToken<BridgeAssetAttributes<SolanaNetwork>>; export type BridgeAsset = EvmBridgeAsset | TvmBridgeAsset | SolanaBridgeAsset | TonBridgeAsset; export interface ImportedBridgeAsset extends Omit<BridgeAssetAttributes, 'tags'> { chainId: string; decimals: number; icon: string; logoURI: string; name: string; root: string; symbol: string; tags: string[]; } export interface BridgeAssetsServiceCtorParams { assetsUrlMap: { [chainId: string]: string; }; currenciesListUrl?: string; getEvmProvider?: () => Web3 | undefined; getSolConnection?: () => Connection | undefined; getTonConnection?: () => TonClient | undefined; getTvmProvider?: () => ProviderRpcClient | undefined; networks?: Readonly<NetworkConfig[]>; tokensListsUrls?: { [vendor: string]: string[]; }; } export interface BridgeAssetsServiceData { assets: Map<string, BridgeRawAssets>; currencies: CurrencyRaw<string>[]; externals: string[]; rawTokens: TokenRaw<string>[]; tokens: BridgeAsset[]; } export interface BridgeAssetsServiceState { isAssetsFetched: boolean; isBuilt: boolean; isFetching: boolean; isTokensFetched: boolean; } export declare class BridgeAssetsService extends AbstractStore<BridgeAssetsServiceData, BridgeAssetsServiceState> { protected readonly params: Readonly<BridgeAssetsServiceCtorParams>; constructor(params: Readonly<BridgeAssetsServiceCtorParams>); init(): Promise<void>; protected build(): Promise<void>; get assets(): BridgeAssetsServiceData['assets']; get tokens(): BridgeAssetsServiceData['tokens']; get isFetching(): BridgeAssetsServiceState['isFetching']; /** * Returns token by the given `networkType`, `chainId` and token `root` address. * @param {NetworkType} networkType * @param {string} chainId * @param {string} root * @returns {BridgeAsset} */ get(networkType: EvmBasedNetwork, chainId: string, root: string): EvmBridgeAsset | undefined; get(networkType: TvmBasedNetwork, chainId: string, root: string): TvmBridgeAsset | undefined; get(networkType: TonBasedNetwork, chainId: string, root: string, lowercase?: boolean): TonBridgeAsset | undefined; get(networkType: SolanaNetwork, chainId: string, root: string, lowercase?: boolean): SolanaBridgeAsset | undefined; getByRoot(root: string): BridgeAsset | undefined; getByKey(root: string): BridgeAsset | undefined; /** * Check if token was stored to the cache. * @param {string} key * @returns {boolean} */ has(key: string): boolean; /** * Add a new token to the tokens list. * @param {BridgeAsset} token */ add(token: BridgeAsset): void; /** * Remove token from the tokens list * @param {BridgeAsset} token */ remove(token: BridgeAsset): void; /** * Returns the minimum required pipeline configuration for TVM - Evm transfers. * @param {string} root - TVM token root * @param {string} sourceId - source TVM network chain id * @param {string} targetId - target EVM network chain id * @returns {Promise<SolTvmPipelineConfig | undefined>} */ resolveTvmEvmPipeline(root: string, sourceId: string, targetId: string): Promise<TvmEvmPipelineConfig | undefined>; /** * Returns the minimum required pipeline configuration for Solana - TVM transfers. * @param {string} root - EVM token root * @param {string} sourceId - source EVM network chain id * @param {string} targetId - target TVM network chain id * @param {BridgeAsset} fallbackAsset * @returns {Promise<SolTvmPipelineConfig | undefined>} */ resolveEvmTvmPipeline(root: string, sourceId: string, targetId: string, fallbackAsset?: BridgeAsset): Promise<EvmTvmPipelineConfig | undefined>; /** * Returns the minimum required pipeline configuration for TVM - Solana transfers. * @param {string} root - TVM token root * @param {string} sourceId - source Solana network chain id * @param {string} targetId - target TVM network chain id * @returns {Promise<SolTvmPipelineConfig | undefined>} */ resolveTvmSolPipeline(root: string, sourceId: string, targetId: string): Promise<TvmSolPipelineConfig | undefined>; /** * Returns the minimum required pipeline configuration for Solana - TVM transfers. * @param {string} root - Solana mint address * @param {string} sourceId - source Solana network chain id * @param {string} targetId - target TVM network chain id * @returns {Promise<SolTvmPipelineConfig | undefined>} */ resolveSolTvmPipeline(root: string, sourceId: string, targetId: string): Promise<SolTvmPipelineConfig | undefined>; /** * Returns the minimum required pipeline configuration for TON - EVM transfers. * @param {string} root - TON or TVM-like (TON raw) token root * @param {string} sourceId - source TON network chain id * @param {string} targetId - target EVM network chain id * @returns {Promise<SolTvmPipelineConfig | undefined>} */ resolveTonEvmPipeline(root: string, sourceId: string, targetId: string): Promise<TonEvmPipelineConfig | undefined>; /** * Returns the minimum required pipeline configuration for EVM - TON transfers. * @param {string} root - EVM token root * @param {string} sourceId - source EVM network chain id * @param {string} targetId - target TON network chain id * @param {BridgeAsset} fallbackAsset * @returns {Promise<SolTvmPipelineConfig | undefined>} */ resolveEvmTonPipeline(root: string, sourceId: string, targetId: string, fallbackAsset?: BridgeAsset): Promise<EvmTonPipelineConfig | undefined>; resolveEvmAsset(root: string, chainId: string, fallbackAsset?: BridgeAsset): Promise<EvmBridgeAsset>; resolveTvmAsset(root: string, chainId: string, fallbackAsset?: BridgeAsset): Promise<TvmBridgeAsset>; resolveTonAsset(root: string, chainId: string, fallbackAsset?: BridgeAsset): Promise<TonBridgeAsset>; resolveSolanaAsset(root: string, chainId: string, fallbackAsset?: BridgeAsset): Promise<SolanaBridgeAsset>; isNativeCurrency(root: string): boolean; /** * Returns generated pipeline type * @param {string} proxy * @param {NetworkType} sourceType * @param sourceId * @param {NetworkType} target */ getPipelineType(proxy: string, sourceType: NetworkType, sourceId: string, target: NetworkType): TokenType | undefined; get isReady(): boolean; isCustomToken(root: string): boolean; isWhitelisted(root: string): boolean; /** * Returns tokens map where key is a token root address. * @protected */ protected get _byKey(): Record<string, BridgeAsset>; protected get _byRoot(): Record<string, BridgeAsset>; }