@web3auth/no-modal
Version:
Multi chain wallet aggregator for web3Auth
55 lines (51 loc) • 2.29 kB
JavaScript
;
var kit = require('@solana/kit');
var wsEmbed = require('@web3auth/ws-embed');
var react = require('react');
var baseControllers = require('@toruslabs/base-controllers');
var index = require('../../../base/wallet/index.js');
var useChain = require('../../hooks/useChain.js');
var useWeb3Auth = require('../../hooks/useWeb3Auth.js');
const useSolanaWallet = () => {
const {
connection,
web3Auth
} = useWeb3Auth.useWeb3Auth();
const {
chainNamespace
} = useChain.useChain();
const solanaWallet = react.useMemo(() => {
var _connection$solanaWal;
return (_connection$solanaWal = connection === null || connection === void 0 ? void 0 : connection.solanaWallet) !== null && _connection$solanaWal !== void 0 ? _connection$solanaWal : null;
}, [connection]);
const accounts = react.useMemo(() => {
if (chainNamespace !== baseControllers.CHAIN_NAMESPACES.SOLANA || !solanaWallet) return null;
const accts = solanaWallet.accounts.map(a => a.address);
return accts.length > 0 ? accts : null;
}, [solanaWallet, chainNamespace]);
const rpc = react.useMemo(() => {
if (!web3Auth || !solanaWallet || chainNamespace !== baseControllers.CHAIN_NAMESPACES.SOLANA) return null;
return kit.createSolanaRpc(web3Auth.currentChain.rpcTarget);
}, [web3Auth, solanaWallet, chainNamespace]);
const getPrivateKey = react.useCallback(async () => {
var _web3Auth$primaryConn;
if (!web3Auth) throw new Error("Web3Auth not initialized");
if ((connection === null || connection === void 0 ? void 0 : connection.connectorName) !== index.WALLET_CONNECTORS.AUTH) {
throw new Error("getPrivateKey is only supported with the Auth connector");
}
const provider = (_web3Auth$primaryConn = web3Auth.primaryConnector) === null || _web3Auth$primaryConn === void 0 ? void 0 : _web3Auth$primaryConn.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;
}, [web3Auth, connection]);
return {
solanaWallet,
accounts,
rpc,
getPrivateKey
};
};
exports.useSolanaWallet = useSolanaWallet;