@ponziland/account
Version:
Account management library for Starknet with wallet modal and connection state
64 lines (63 loc) • 1.9 kB
JavaScript
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;