-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathuseInitializeWalletKit.ts
More file actions
91 lines (83 loc) · 3.58 KB
/
Copy pathuseInitializeWalletKit.ts
File metadata and controls
91 lines (83 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { useCallback, useEffect, useRef, useState } from 'react';
import { useSnapshot } from 'valtio';
import LogStore from '@/store/LogStore';
import SettingsStore from '@/store/SettingsStore';
import { createOrRestoreEIP155Wallet } from '@/utils/EIP155WalletUtil';
import { createOrRestoreSuiWallet } from '@/utils/SuiWalletUtil';
import { createWalletKit, walletKit } from '@/utils/WalletKitUtil';
import { createOrRestoreTonWallet } from '@/utils/TonWalletUtil';
import { createOrRestoreTronWallet } from '@/utils/TronWalletUtil';
import { createOrRestoreCantonWallet } from '@/utils/CantonWalletUtil';
import { createOrRestoreSolanaWallet } from '@/utils/SolanaWalletUtil';
import { createOrRestoreBitcoinWallet } from '@/utils/BitcoinWalletUtil';
export default function useInitializeWalletKit() {
const [initialized, setInitialized] = useState(false);
const prevRelayerURLValue = useRef<string>('');
const { relayerRegionURL } = useSnapshot(SettingsStore.state);
const onInitialize = useCallback(async () => {
try {
const { eip155Addresses, eip155Wallets } =
await createOrRestoreEIP155Wallet();
const { suiAddresses, suiWallet } = await createOrRestoreSuiWallet();
const { tonAddresses, tonWallets } = await createOrRestoreTonWallet();
const { tronAddresses, tronWallets } = await createOrRestoreTronWallet();
const { cantonAddresses, cantonWallet } =
await createOrRestoreCantonWallet();
const { solanaAddress, solanaWallet } =
await createOrRestoreSolanaWallet();
const { bitcoinAddress, bitcoinWallet } =
await createOrRestoreBitcoinWallet();
SettingsStore.setEIP155Address(eip155Addresses[0]);
SettingsStore.setWallet(eip155Wallets[eip155Addresses[0]]);
SettingsStore.setSuiAddress(suiAddresses[0]);
SettingsStore.setSuiWallet(suiWallet);
SettingsStore.setTonAddress(tonAddresses[0]);
SettingsStore.setTonWallet(tonWallets[tonAddresses[0]]);
SettingsStore.setTronAddress(tronAddresses[0]);
SettingsStore.setTronWallet(tronWallets[tronAddresses[0]]);
SettingsStore.setCantonAddress(cantonAddresses[0]);
SettingsStore.setCantonWallet(cantonWallet);
SettingsStore.setSolanaAddress(solanaAddress);
SettingsStore.setSolanaWallet(solanaWallet);
SettingsStore.setBitcoinAddress(bitcoinAddress);
SettingsStore.setBitcoinWallet(bitcoinWallet);
await createWalletKit(relayerRegionURL);
setInitialized(true);
SettingsStore.state.initPromiseResolver?.resolve(undefined);
} catch (err: unknown) {
LogStore.error(
`Failed to initialize WalletKit: ${
err instanceof Error ? err.message : 'Unknown error'
}`,
'Initialization',
'onInitialize',
{ error: String(err) },
);
}
}, [relayerRegionURL]);
// restart transport if relayer region changes
const onRelayerRegionChange = useCallback(() => {
try {
walletKit.core.relayer.restartTransport(relayerRegionURL);
prevRelayerURLValue.current = relayerRegionURL;
} catch (err: unknown) {
LogStore.error(
`Failed to restart relayer transport: ${
err instanceof Error ? err.message : 'Unknown error'
}`,
'Initialization',
'onRelayerRegionChange',
{ error: String(err) },
);
}
}, [relayerRegionURL]);
useEffect(() => {
if (!initialized) {
onInitialize();
}
if (prevRelayerURLValue.current !== relayerRegionURL) {
onRelayerRegionChange();
}
}, [initialized, onInitialize, relayerRegionURL, onRelayerRegionChange]);
return initialized;
}