Skip to content

Commit

Permalink
refactor: improve type
Browse files Browse the repository at this point in the history
  • Loading branch information
wa0x6e committed Jan 26, 2025
1 parent 057c04e commit 186919b
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 30 deletions.
4 changes: 4 additions & 0 deletions apps/ui/src/composables/useActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,8 @@ export function useActions() {
}

async function executeTransactions(proposal: Proposal) {
if (!provider.value) return await forceLogin();

const network = getReadWriteNetwork(proposal.network);

await wrapPromise(
Expand All @@ -421,6 +423,8 @@ export function useActions() {
}

async function executeQueuedProposal(proposal: Proposal) {
if (!provider.value) return await forceLogin();

const network = getReadWriteNetwork(proposal.network);

await wrapPromise(
Expand Down
65 changes: 35 additions & 30 deletions apps/ui/src/composables/useWeb3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,17 @@ import { STARKNET_CONNECTORS } from '@/networks/common/constants';
import { Connector } from '@/networks/types';
import { ChainId } from '@/types';

type Web3providerWithSafe = Web3Provider & {
provider: Web3Provider['provider'] & {
safe?: {
safeAddress: string;
chainId: ChainId;
};
};
};

const LAST_USED_CONNECTOR_CACHE_KEY = 'connector';

const STARKNET_NETWORKS = {
[constants.StarknetChainId.SN_MAIN]: {
key: constants.StarknetChainId.SN_MAIN,
Expand Down Expand Up @@ -34,73 +45,69 @@ const state = reactive({
const authInitiated = ref(false);
const loadedProviders = ref(new Set<Connector['id']>());
const currentConnector = ref<Connector | null>(null);
const provider = ref<
| (Web3Provider & {
provider: Web3Provider['provider'] & {
safe?: { chainId: any; safeAddress: string };
};
})
| null
>(null);
const provider = ref<Web3providerWithSafe | null>(null);

export function useWeb3() {
const { connectors } = useConnectors();

async function login(connector: Connector) {
_connectFn(connector, 'connect');
connectUsing(connector, 'connect');
}

async function autoLogin(connectorId?: string) {
authInitiated.value = true;

const _connectorId = connectorId ?? lsGet('connector');
const id = connectorId ?? lsGet(LAST_USED_CONNECTOR_CACHE_KEY);

if (!_connectorId) return;
if (!id) return;

const connector = connectors.value.find(
(connector: any) => connector.id === _connectorId
);
const connector = connectors.value.find(connector => connector.id === id);

if (!connector) return;

_connectFn(connector, 'autoConnect');
connectUsing(connector, 'autoConnect');
}

async function _connectFn(
async function connectUsing(
connector: Connector,
connectFn: 'connect' | 'autoConnect'
) {
authInitiated.value = true;
state.authLoading = true;

try {
state.authLoading = true;
await connector[connectFn]();
await registerConnector(connector);

currentConnector.value = connector;
lsSet('connector', connector.id);
lsSet(LAST_USED_CONNECTOR_CACHE_KEY, connector.id);
} finally {
state.authLoading = false;
}
}

function logout() {
removeProviderEvents();
currentConnector.value?.disconnect();
function logout(connector: Connector | null = currentConnector.value) {
if (connector) {
removeConnectorEvents(connector);
connector.disconnect();
}

reset();
if (connector?.id === currentConnector.value?.id) reset();
}

function reset() {
lsRemove('connector');
lsRemove(LAST_USED_CONNECTOR_CACHE_KEY);
currentConnector.value = null;
provider.value = null;
state.account = '';
state.name = '';
}

async function registerConnector(connector: Connector) {
const web3 = new Web3Provider(connector.provider, 'any');
const web3: Web3providerWithSafe = new Web3Provider(
connector.provider,
'any'
);

provider.value = markRaw(web3);

Expand Down Expand Up @@ -129,10 +136,10 @@ export function useWeb3() {
} catch (e) {
console.log(e);
}
handleChainChanged(network.chainId);
const acc = accounts.length > 0 ? accounts[0] : null;

if (acc) {
handleChainChanged(network.chainId);
const usersStore = useUsersStore();
try {
await usersStore.fetchUser(formatAddress(acc));
Expand Down Expand Up @@ -162,13 +169,14 @@ export function useWeb3() {

function attachConnectorEvents(connector: Connector) {
if (loadedProviders.value.has(connector.id)) return;

loadedProviders.value.add(connector.id);

if (!connector.provider.on) return;

connector.provider.on('accountsChanged', async accounts => {
if (!accounts?.length) {
logout();
logout(connector);
return;
}

Expand All @@ -185,10 +193,7 @@ export function useWeb3() {
// provider.on('disconnect', async () => {});
}

function removeProviderEvents() {
const connector = currentConnector.value;
if (!connector) return;

function removeConnectorEvents(connector: Connector) {
loadedProviders.value.delete(connector.id);

try {
Expand Down

0 comments on commit 186919b

Please sign in to comment.