UNPKG

@web3auth/no-modal

Version:
101 lines (97 loc) 4.53 kB
'use strict'; var kit = require('@solana/kit'); var features = require('@wallet-standard/features'); var wsEmbed = require('@web3auth/ws-embed'); var vue = require('vue'); var baseControllers = require('@toruslabs/base-controllers'); var index = require('../../../base/wallet/index.js'); require('@babel/runtime/helpers/objectSpread2'); require('@babel/runtime/helpers/defineProperty'); require('@segment/analytics-next'); require('../../../base/loglevel.js'); require('@toruslabs/session-manager'); require('@web3auth/auth'); require('../../../base/errors/index.js'); require('@toruslabs/constants'); require('@toruslabs/http-helpers'); require('../../../base/constants.js'); require('../../../base/connector/connectorStatus.js'); require('../../../base/connector/constants.js'); require('jwt-decode'); require('../../../base/plugin/errors.js'); require('../../../base/plugin/IPlugin.js'); var useChain = require('../../composables/useChain.js'); var useWeb3Auth = require('../../composables/useWeb3Auth.js'); const useSolanaWallet = () => { const { connection, web3Auth } = useWeb3Auth.useWeb3Auth(); const { chainNamespace } = useChain.useChain(); const accounts = vue.ref(null); const solanaWallet = vue.shallowRef(null); const rpc = vue.shallowRef(null); let unsubscribeStandardEvents = null; const teardownWalletListeners = () => { var _unsubscribeStandardE; (_unsubscribeStandardE = unsubscribeStandardEvents) === null || _unsubscribeStandardE === void 0 || _unsubscribeStandardE(); unsubscribeStandardEvents = null; }; const syncAccounts = () => { var _solanaWallet$value$a, _solanaWallet$value; const accts = (_solanaWallet$value$a = (_solanaWallet$value = solanaWallet.value) === null || _solanaWallet$value === void 0 ? void 0 : _solanaWallet$value.accounts.map(a => a.address)) !== null && _solanaWallet$value$a !== void 0 ? _solanaWallet$value$a : []; accounts.value = accts.length > 0 ? accts : null; }; const setupWallet = () => { var _connection$value$sol, _connection$value, _web3Auth$value; teardownWalletListeners(); const wallet = (_connection$value$sol = (_connection$value = connection.value) === null || _connection$value === void 0 ? void 0 : _connection$value.solanaWallet) !== null && _connection$value$sol !== void 0 ? _connection$value$sol : null; if (!wallet) return; solanaWallet.value = wallet; syncAccounts(); unsubscribeStandardEvents = wallet.features[features.StandardEvents].on("change", syncAccounts); if ((_web3Auth$value = web3Auth.value) !== null && _web3Auth$value !== void 0 && (_web3Auth$value = _web3Auth$value.currentChain) !== null && _web3Auth$value !== void 0 && _web3Auth$value.rpcTarget && chainNamespace.value === baseControllers.CHAIN_NAMESPACES.SOLANA) { rpc.value = kit.createSolanaRpc(web3Auth.value.currentChain.rpcTarget); } }; const resetWallet = () => { teardownWalletListeners(); solanaWallet.value = null; accounts.value = null; rpc.value = null; }; vue.onScopeDispose(teardownWalletListeners); const getPrivateKey = async () => { var _connection$value2, _web3Auth$value$prima; if (!web3Auth.value) throw new Error("Web3Auth not initialized"); if (((_connection$value2 = connection.value) === null || _connection$value2 === void 0 ? void 0 : _connection$value2.connectorName) !== index.WALLET_CONNECTORS.AUTH) { throw new Error("getPrivateKey is only supported with the Auth connector"); } const provider = (_web3Auth$value$prima = web3Auth.value.primaryConnector) === null || _web3Auth$value$prima === void 0 ? void 0 : _web3Auth$value$prima.provider; if (!provider) throw new Error("Provider not available"); const privateKey = await provider.request({ method: wsEmbed.SOLANA_METHOD_TYPES.SOLANA_PRIVATE_KEY }); if (!privateKey) throw new Error("Failed to retrieve private key"); return privateKey; }; vue.watch([connection, chainNamespace], ([newConnection, newChainNamespace]) => { if (!(newConnection !== null && newConnection !== void 0 && newConnection.solanaWallet)) { if (solanaWallet.value) resetWallet(); return; } // setup wallet if not setup or chain namespace is changed to solana if (!solanaWallet.value || newChainNamespace === baseControllers.CHAIN_NAMESPACES.SOLANA) setupWallet(); }, { immediate: true }); return { solanaWallet, accounts, rpc, getPrivateKey }; }; exports.useSolanaWallet = useSolanaWallet;