@web3auth/no-modal
Version:
Multi chain wallet aggregator for web3Auth
101 lines (97 loc) • 4.53 kB
JavaScript
'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;