📄 src/web3/vue/handlers/sessionRetireHandler.ts
D-OPEN SOVEREIGN
1import { sessionStore } from '../../session/store';
2import type { ChainMutation, MutationHandler } from '../MutationBus';
3
4type RetireMutation = Extract<ChainMutation, { type: 'retire' }>;
5
6interface RetireSnapshot {
7 chainId: number;
8 account: string;
9 hasAccount: boolean;
10}
11
12export const sessionRetireHandler: MutationHandler<RetireMutation> = {
13 applyOptimistic: (mutation): RetireSnapshot | null => {
14 const account = sessionStore
15 .getState()
16 .known.find((a) => a.account.toLowerCase() === mutation.account.toLowerCase() && a.chainId === mutation.chainId);
17 if (!account) return null;
18
19 const snapshot: RetireSnapshot = { chainId: mutation.chainId, account: mutation.account, hasAccount: account.hasAccount };
20 sessionStore.updateAccount(mutation.account, mutation.chainId, { hasAccount: false });
21 return snapshot;
22 },
23
24 rollback: (snapshot: RetireSnapshot | null) => {
25 if (!snapshot) return;
26 sessionStore.updateAccount(snapshot.account, snapshot.chainId, { hasAccount: snapshot.hasAccount });
27 },
28};
29