UNPKG

@zerochain/sdk

Version:

The Züs JS SDK is a JavaScript client library that provides a convenient interface for interacting with the Züs Network. It allows developers to perform various operations such as creating and managing allocations, uploading and downloading files, executi

112 lines (96 loc) 3.14 kB
import type { NetworkDomain, Domain, ActiveWallet, NetworkConfig, } from '@/types/wallet' import { awaitWasmLoad } from '../wasmLoader/createWasmLoader' import { networkConfig } from '@/constants' import { getBls } from '@/utils' import type { GoWasmProxy } from '@/setup/createWasm/createProxy/createProxy' export const resetGoWasm = (): void => { window.__zcn_wasm__ = undefined window.newGoWasm = undefined window.createWasmPromise = undefined } type ZboxAppType = 'vult' | 'blimp' | 'chalk' | 'chimney' | 'bolt' | 'atlus' /** Set the wallet details and return the goWasm instance to call SDK methods. */ const getWasm = async ({ domain, wallet, zboxAppType, networkConfig, }: { domain: NetworkDomain wallet?: ActiveWallet zboxAppType?: ZboxAppType networkConfig?: NetworkConfig }): Promise<GoWasmProxy> => { if (!window.newGoWasm) { if (!window.createWasmPromise) { window.createWasmPromise = createWasm( domain as Domain, zboxAppType, networkConfig ) } window.newGoWasm = await window.createWasmPromise } if (wallet?.peer_public_key && wallet?.is_split && wallet?.zauth_host) { await window.newGoWasm.sdk.registerZauthServer(wallet?.zauth_host) } if (wallet) { if (wallet.keys) { const { privateKey, publicKey, walletMnemonic } = wallet.keys const mnemonic = wallet?.mnemonic !== '' && wallet?.mnemonic?.split(' ')?.length === 24 ? wallet.mnemonic : walletMnemonic const bls = await getBls() if (!mnemonic && !wallet?.is_split) { return window.newGoWasm } await window.newGoWasm.setWallet( bls, wallet.id || wallet.temp_id, wallet.client_key || publicKey, wallet.peer_public_key, privateKey, publicKey, mnemonic, (Boolean(wallet?.is_split) && Boolean(wallet?.peer_public_key)) || false ) } else { await window.newGoWasm.sdk.setWalletMode( (Boolean(wallet?.is_split) && Boolean(wallet?.peer_public_key)) || false ) } } return window.newGoWasm } const createWasm = async ( domain: Domain, zboxAppType?: ZboxAppType, customNetworkConfig?: NetworkConfig ): Promise<GoWasmProxy> => { if (domain.startsWith('http')) throw new Error('domain should not start with http') const blockWorker = `https://${domain}/dns` const config = [ customNetworkConfig?.chainId || networkConfig.chainId, customNetworkConfig?.blockWorker || blockWorker, customNetworkConfig?.signatureScheme || networkConfig.signatureScheme, customNetworkConfig?.minConfirmation || networkConfig.minConfirmation, customNetworkConfig?.minSubmit || networkConfig.minSubmit, customNetworkConfig?.confirmationChainLength || networkConfig.confirmationChainLength, customNetworkConfig?.zboxHost || `https://0box.${domain}`, zboxAppType || '', customNetworkConfig?.sharderConsensus || 3, ] await awaitWasmLoad() await window.goWasm.sdk.init(...config) window.newGoWasm = window.goWasm return window.newGoWasm } export { getWasm }