UNPKG

@ponziland/account

Version:

Account management library for Starknet with wallet modal and connection state

64 lines (63 loc) 1.9 kB
import {} from 'starknet'; import { useAccount } from './context/account.svelte.js'; import { configureAccount } from './consts.js'; export const accountState = $state({ isConnected: false, }); let isSetup = $state(false); const updateState = async (provider) => { const walletAccount = provider.getWalletAccount(); accountState.isConnected = walletAccount != null; accountState.address = walletAccount?.address; accountState.walletAccount = walletAccount; accountState.providerName = useAccount()?.getProviderName(); }; const resetState = () => { accountState.address = undefined; accountState.isConnected = false; accountState.walletAccount = undefined; accountState.providerName = undefined; }; export async function refresh() { const accountManager = useAccount(); if (!accountManager) return; const currentProvider = accountManager.getProvider(); if (currentProvider != null) { await updateState(currentProvider); } else { resetState(); } } export async function setup(config) { if (config) { configureAccount(config); } if (isSetup) return accountState; const accountManager = useAccount(); if (!accountManager) { console.warn('Account manager not initialized. Call setupAccount() first.'); return accountState; } isSetup = true; // Initial state let currentProvider = accountManager.getProvider(); if (currentProvider != null) { await updateState(currentProvider); } // Listen on updates accountManager.listen((event) => { switch (event.type) { case 'connected': updateState(event.provider); break; case 'disconnected': resetState(); break; } }); return accountState; } export default accountState;