@orderly.network/wallet-connector-privy 2.1.1 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +291 -284
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +292 -285
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
package/dist/index.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React12, { createContext, useContext, useState, useRef, useMemo, useEffect, useCallback } from 'react';
|
|
2
2
|
import { useWalletConnector, useTrack, useStorageLedgerAddress, WalletConnectorContext, useLocalStorage, useStorageChain } from '@orderly.network/hooks';
|
|
3
3
|
import { installExtension, ExtensionPositionEnum, useScreen, Button, Text, formatAddress, TooltipProvider, cn, ExclamationFillIcon, Tooltip, CopyIcon, Checkbox, ChevronDownIcon, ChevronUpIcon, toast, DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, DropdownMenuItem, Popover, ChainIcon } from '@orderly.network/ui';
|
|
4
|
+
import { AccountStatusEnum, ArbitrumSepoliaChainInfo, SolanaDevnetChainInfo, SolanaChains as SolanaChains$1, ChainNamespace, TrackerEventName, ConnectorKey } from '@orderly.network/types';
|
|
5
|
+
import { PrivyProvider, usePrivy, useWallets, useSolanaWallets } from '@privy-io/react-auth';
|
|
6
|
+
import { WalletAdapterNetwork } from '@solana/wallet-adapter-base';
|
|
7
|
+
import { WalletProvider, useWallet } from '@solana/wallet-adapter-react';
|
|
4
8
|
import * as WagmiExport from 'wagmi';
|
|
5
9
|
import { createConfig, injected, createStorage, http, WagmiProvider, useConnect, useDisconnect, useAccount, useSwitchChain } from 'wagmi';
|
|
6
|
-
import { AccountStatusEnum, ArbitrumSepoliaChainInfo, SolanaDevnetChainInfo, SolanaChains as SolanaChains$1, ChainNamespace, EnumTrackerKeys, ConnectorKey } from '@orderly.network/types';
|
|
7
|
-
import { WalletProvider, useWallet } from '@solana/wallet-adapter-react';
|
|
8
|
-
import { WalletAdapterNetwork } from '@solana/wallet-adapter-base';
|
|
9
|
-
import { PrivyProvider, usePrivy, useWallets, useSolanaWallets } from '@privy-io/react-auth';
|
|
10
10
|
import { useTranslation, Trans } from '@orderly.network/i18n';
|
|
11
11
|
import { createPortal } from 'react-dom';
|
|
12
12
|
import { AuthGuard } from '@orderly.network/ui-connector';
|
|
@@ -18,124 +18,262 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
|
18
18
|
import * as WagmiConnectorsExport from 'wagmi/connectors';
|
|
19
19
|
|
|
20
20
|
// src/provider.tsx
|
|
21
|
-
var
|
|
22
|
-
|
|
21
|
+
var Network = /* @__PURE__ */ ((Network2) => {
|
|
22
|
+
Network2["mainnet"] = "mainnet";
|
|
23
|
+
Network2["testnet"] = "testnet";
|
|
24
|
+
return Network2;
|
|
25
|
+
})(Network || {});
|
|
26
|
+
var WalletType = /* @__PURE__ */ ((WalletType2) => {
|
|
27
|
+
WalletType2["EVM"] = "EVM";
|
|
28
|
+
WalletType2["SOL"] = "SOL";
|
|
29
|
+
WalletType2["PRIVY"] = "privy";
|
|
30
|
+
return WalletType2;
|
|
31
|
+
})(WalletType || {});
|
|
32
|
+
var SolanaChains = /* @__PURE__ */ new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);
|
|
33
|
+
var SolanaChainsMap = /* @__PURE__ */ new Map([
|
|
34
|
+
[WalletAdapterNetwork.Devnet, 901901901],
|
|
35
|
+
["testnet" /* testnet */, 901901901],
|
|
36
|
+
["mainnet" /* mainnet */, 900900900],
|
|
37
|
+
[WalletAdapterNetwork.Mainnet, 900900900]
|
|
38
|
+
]);
|
|
39
|
+
var WalletChainTypeEnum = /* @__PURE__ */ ((WalletChainTypeEnum2) => {
|
|
40
|
+
WalletChainTypeEnum2["onlyEVM"] = "onlyEVM";
|
|
41
|
+
WalletChainTypeEnum2["onlySOL"] = "onlySOL";
|
|
42
|
+
WalletChainTypeEnum2["EVM_SOL"] = "EVM_SOL";
|
|
43
|
+
return WalletChainTypeEnum2;
|
|
44
|
+
})(WalletChainTypeEnum || {});
|
|
45
|
+
|
|
46
|
+
// src/providers/privyWalletProvider.tsx
|
|
47
|
+
var getPrivyEmbeddedWalletChainId = (chainId) => {
|
|
48
|
+
if (!chainId) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return parseInt(chainId.split("eip155:")[1]);
|
|
52
|
+
};
|
|
53
|
+
var PrivyWalletContext = createContext(null);
|
|
54
|
+
var PrivyWalletProvider = ({
|
|
23
55
|
children
|
|
24
56
|
}) => {
|
|
25
|
-
const { connectorWalletType } = useWalletConnectorPrivy();
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
57
|
+
const { network, solanaInfo, setSolanaInfo, connectorWalletType } = useWalletConnectorPrivy();
|
|
58
|
+
const {
|
|
59
|
+
login,
|
|
60
|
+
logout,
|
|
61
|
+
ready,
|
|
62
|
+
authenticated,
|
|
63
|
+
user,
|
|
64
|
+
exportWallet: exportEvmWallet,
|
|
65
|
+
createWallet: createEvmWallet
|
|
66
|
+
} = usePrivy();
|
|
67
|
+
const { wallets: walletsEVM } = connectorWalletType.disablePrivy ? { wallets: [] } : useWallets();
|
|
68
|
+
const connectedRef = useRef(false);
|
|
69
|
+
const {
|
|
70
|
+
ready: solanaReady,
|
|
71
|
+
wallets: walletsSOL,
|
|
72
|
+
createWallet: createSolanaWallet,
|
|
73
|
+
exportWallet: exportSolanaWallet
|
|
74
|
+
} = connectorWalletType.disablePrivy ? {
|
|
75
|
+
ready: false,
|
|
76
|
+
wallets: [],
|
|
77
|
+
createWallet: () => Promise.resolve(),
|
|
78
|
+
exportWallet: () => Promise.resolve()
|
|
79
|
+
} : useSolanaWallets();
|
|
80
|
+
const [walletEVM, setWalletEVM] = useState(null);
|
|
81
|
+
const [walletSOL, setWalletSOL] = useState(null);
|
|
82
|
+
const { track } = useTrack();
|
|
83
|
+
const linkedAccount = useMemo(() => {
|
|
84
|
+
if (user && user.linkedAccounts) {
|
|
85
|
+
const account = user.linkedAccounts.filter((item) => item.type !== "wallet").sort(
|
|
86
|
+
(a, b) => (b.latestVerifiedAt?.getTime() ?? 0) - (a.latestVerifiedAt?.getTime() ?? 0)
|
|
87
|
+
)[0];
|
|
88
|
+
let address = null;
|
|
89
|
+
if (account.type === "email") {
|
|
90
|
+
address = account.address;
|
|
91
|
+
} else if (account.type === "twitter_oauth") {
|
|
92
|
+
address = `@${account.username}`;
|
|
93
|
+
} else if (account.type === "google_oauth") {
|
|
94
|
+
address = `@${account.name}`;
|
|
95
|
+
}
|
|
33
96
|
return {
|
|
34
|
-
|
|
35
|
-
|
|
97
|
+
type: account.type,
|
|
98
|
+
address
|
|
36
99
|
};
|
|
37
100
|
}
|
|
38
101
|
return null;
|
|
39
|
-
}, [
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
102
|
+
}, [user]);
|
|
103
|
+
const switchChain = (chainId) => {
|
|
104
|
+
const wallet = walletsEVM[0];
|
|
105
|
+
if (wallet) {
|
|
106
|
+
return wallet.switchChain(chainId);
|
|
107
|
+
}
|
|
108
|
+
return Promise.reject("no wallet");
|
|
109
|
+
};
|
|
110
|
+
const connect = () => {
|
|
111
|
+
login();
|
|
112
|
+
};
|
|
113
|
+
const disconnect = () => {
|
|
114
|
+
return logout();
|
|
115
|
+
};
|
|
116
|
+
const exportWallet = (namespace) => {
|
|
117
|
+
if (namespace === ChainNamespace.evm) {
|
|
118
|
+
track(TrackerEventName.clickExportPrivateKey, {
|
|
119
|
+
type: "evm"
|
|
52
120
|
});
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
121
|
+
return exportEvmWallet();
|
|
122
|
+
} else if (namespace === ChainNamespace.solana) {
|
|
123
|
+
track(TrackerEventName.clickExportPrivateKey, {
|
|
124
|
+
type: "solana"
|
|
125
|
+
});
|
|
126
|
+
return exportSolanaWallet();
|
|
127
|
+
}
|
|
128
|
+
return Promise.reject("no namespace");
|
|
129
|
+
};
|
|
130
|
+
const isConnected = useMemo(() => {
|
|
131
|
+
if (ready && authenticated) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}, [ready, authenticated]);
|
|
56
136
|
useEffect(() => {
|
|
57
|
-
if (!
|
|
58
|
-
|
|
137
|
+
if (!authenticated || !walletsEVM || !walletsEVM[0]) {
|
|
138
|
+
setWalletEVM(null);
|
|
59
139
|
return;
|
|
60
140
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
141
|
+
const wallet = walletsEVM[0];
|
|
142
|
+
wallet.getEthereumProvider().then((provider) => {
|
|
143
|
+
setWalletEVM({
|
|
144
|
+
label: "privy",
|
|
64
145
|
icon: "",
|
|
65
146
|
provider,
|
|
66
147
|
accounts: [
|
|
67
148
|
{
|
|
68
|
-
address
|
|
149
|
+
address: wallet.address
|
|
69
150
|
}
|
|
70
151
|
],
|
|
71
152
|
chains: [
|
|
72
153
|
{
|
|
73
|
-
id: chainId,
|
|
154
|
+
id: getPrivyEmbeddedWalletChainId(wallet.chainId) ?? 1,
|
|
74
155
|
namespace: ChainNamespace.evm
|
|
75
156
|
}
|
|
76
157
|
],
|
|
77
|
-
chain:
|
|
158
|
+
chain: {
|
|
159
|
+
id: getPrivyEmbeddedWalletChainId(wallet.chainId) ?? 1,
|
|
160
|
+
namespace: ChainNamespace.evm
|
|
161
|
+
}
|
|
78
162
|
});
|
|
79
163
|
});
|
|
80
|
-
}, [
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
(
|
|
164
|
+
}, [walletsEVM, authenticated]);
|
|
165
|
+
useEffect(() => {
|
|
166
|
+
if (!authenticated) {
|
|
167
|
+
setWalletSOL(null);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (!solanaReady) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (!user) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const embededSolanaWallet = (user?.linkedAccounts).find(
|
|
177
|
+
(item) => item.chainType === "solana" && item.connectorType === "embedded"
|
|
84
178
|
);
|
|
85
|
-
|
|
179
|
+
if (!embededSolanaWallet) {
|
|
180
|
+
createSolanaWallet().then();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (!walletsSOL || !walletsSOL[0]) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const wallet = walletsSOL.find((w) => w.connectorType === "embedded");
|
|
187
|
+
if (wallet) {
|
|
188
|
+
if (walletSOL && wallet.address === walletSOL.accounts[0].address) {
|
|
189
|
+
if (walletSOL.chain.id === SolanaChainsMap.get(network)) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
setWalletSOL({
|
|
194
|
+
label: "privy",
|
|
195
|
+
icon: "",
|
|
196
|
+
provider: {
|
|
197
|
+
signMessage: wallet.signMessage,
|
|
198
|
+
signTransaction: wallet.signTransaction,
|
|
199
|
+
sendTransaction: wallet.sendTransaction,
|
|
200
|
+
network: solanaInfo?.network ?? WalletAdapterNetwork.Devnet,
|
|
201
|
+
rpcUrl: solanaInfo?.rpcUrl ?? void 0
|
|
202
|
+
},
|
|
203
|
+
accounts: [
|
|
204
|
+
{
|
|
205
|
+
address: wallet.address
|
|
206
|
+
}
|
|
207
|
+
],
|
|
208
|
+
chains: [
|
|
209
|
+
{
|
|
210
|
+
id: SolanaChainsMap.get(network),
|
|
211
|
+
namespace: ChainNamespace.solana
|
|
212
|
+
}
|
|
213
|
+
],
|
|
214
|
+
chain: {
|
|
215
|
+
id: SolanaChainsMap.get(network),
|
|
216
|
+
namespace: ChainNamespace.solana
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}, [
|
|
221
|
+
walletsSOL,
|
|
222
|
+
authenticated,
|
|
223
|
+
createSolanaWallet,
|
|
224
|
+
solanaReady,
|
|
225
|
+
user,
|
|
226
|
+
walletSOL,
|
|
227
|
+
network,
|
|
228
|
+
solanaInfo
|
|
229
|
+
]);
|
|
230
|
+
useEffect(() => {
|
|
231
|
+
if (isConnected && linkedAccount) {
|
|
232
|
+
if (connectedRef.current) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
connectedRef.current = true;
|
|
236
|
+
track(TrackerEventName.socialLoginSuccess, {
|
|
237
|
+
type: linkedAccount.type,
|
|
238
|
+
address: linkedAccount.address
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}, [isConnected, linkedAccount, connectedRef]);
|
|
86
242
|
const value = useMemo(
|
|
87
243
|
() => ({
|
|
88
|
-
connectors,
|
|
89
244
|
connect,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
245
|
+
walletEVM,
|
|
246
|
+
walletSOL,
|
|
247
|
+
isConnected,
|
|
93
248
|
disconnect,
|
|
94
|
-
|
|
249
|
+
switchChain,
|
|
250
|
+
linkedAccount,
|
|
251
|
+
exportWallet,
|
|
252
|
+
createEvmWallet,
|
|
253
|
+
createSolanaWallet
|
|
95
254
|
}),
|
|
96
255
|
[
|
|
97
|
-
connectors,
|
|
98
256
|
connect,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
257
|
+
walletEVM,
|
|
258
|
+
walletSOL,
|
|
259
|
+
isConnected,
|
|
102
260
|
disconnect,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
})(Network || {});
|
|
120
|
-
var WalletType = /* @__PURE__ */ ((WalletType2) => {
|
|
121
|
-
WalletType2["EVM"] = "EVM";
|
|
122
|
-
WalletType2["SOL"] = "SOL";
|
|
123
|
-
WalletType2["PRIVY"] = "privy";
|
|
124
|
-
return WalletType2;
|
|
125
|
-
})(WalletType || {});
|
|
126
|
-
var SolanaChains = /* @__PURE__ */ new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);
|
|
127
|
-
var SolanaChainsMap = /* @__PURE__ */ new Map([
|
|
128
|
-
[WalletAdapterNetwork.Devnet, 901901901],
|
|
129
|
-
["testnet" /* testnet */, 901901901],
|
|
130
|
-
["mainnet" /* mainnet */, 900900900],
|
|
131
|
-
[WalletAdapterNetwork.Mainnet, 900900900]
|
|
132
|
-
]);
|
|
133
|
-
var WalletChainTypeEnum = /* @__PURE__ */ ((WalletChainTypeEnum2) => {
|
|
134
|
-
WalletChainTypeEnum2["onlyEVM"] = "onlyEVM";
|
|
135
|
-
WalletChainTypeEnum2["onlySOL"] = "onlySOL";
|
|
136
|
-
WalletChainTypeEnum2["EVM_SOL"] = "EVM_SOL";
|
|
137
|
-
return WalletChainTypeEnum2;
|
|
138
|
-
})(WalletChainTypeEnum || {});
|
|
261
|
+
switchChain,
|
|
262
|
+
linkedAccount,
|
|
263
|
+
exportWallet,
|
|
264
|
+
createEvmWallet,
|
|
265
|
+
createSolanaWallet
|
|
266
|
+
]
|
|
267
|
+
);
|
|
268
|
+
return /* @__PURE__ */ React12.createElement(PrivyWalletContext.Provider, { value }, children);
|
|
269
|
+
};
|
|
270
|
+
function usePrivyWallet() {
|
|
271
|
+
const context = useContext(PrivyWalletContext);
|
|
272
|
+
if (!context) {
|
|
273
|
+
throw new Error("usePrivyWallet must be used within a PrivyWalletProvider");
|
|
274
|
+
}
|
|
275
|
+
return context;
|
|
276
|
+
}
|
|
139
277
|
var SolanaWalletContext = createContext(
|
|
140
278
|
null
|
|
141
279
|
);
|
|
@@ -361,231 +499,102 @@ function useSolanaWallet() {
|
|
|
361
499
|
}
|
|
362
500
|
return context;
|
|
363
501
|
}
|
|
364
|
-
var
|
|
365
|
-
|
|
366
|
-
return null;
|
|
367
|
-
}
|
|
368
|
-
return parseInt(chainId.split("eip155:")[1]);
|
|
369
|
-
};
|
|
370
|
-
var PrivyWalletContext = createContext(null);
|
|
371
|
-
var PrivyWalletProvider = ({
|
|
502
|
+
var WagmiWalletContext = createContext(null);
|
|
503
|
+
var WagmiWalletProvider = ({
|
|
372
504
|
children
|
|
373
505
|
}) => {
|
|
374
|
-
const {
|
|
375
|
-
const
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
createWallet: createEvmWallet
|
|
383
|
-
} = usePrivy();
|
|
384
|
-
const { wallets: walletsEVM } = connectorWalletType.disablePrivy ? { wallets: [] } : useWallets();
|
|
385
|
-
const connectedRef = useRef(false);
|
|
386
|
-
const {
|
|
387
|
-
ready: solanaReady,
|
|
388
|
-
wallets: walletsSOL,
|
|
389
|
-
createWallet: createSolanaWallet,
|
|
390
|
-
exportWallet: exportSolanaWallet
|
|
391
|
-
} = connectorWalletType.disablePrivy ? { ready: false, wallets: [], createWallet: () => Promise.resolve(), exportWallet: () => Promise.resolve() } : useSolanaWallets();
|
|
392
|
-
const [walletEVM, setWalletEVM] = useState(null);
|
|
393
|
-
const [walletSOL, setWalletSOL] = useState(null);
|
|
394
|
-
const { track } = useTrack();
|
|
395
|
-
const linkedAccount = useMemo(() => {
|
|
396
|
-
if (user && user.linkedAccounts) {
|
|
397
|
-
const account = user.linkedAccounts.filter((item) => item.type !== "wallet").sort(
|
|
398
|
-
(a, b) => (b.latestVerifiedAt?.getTime() ?? 0) - (a.latestVerifiedAt?.getTime() ?? 0)
|
|
399
|
-
)[0];
|
|
400
|
-
let address = null;
|
|
401
|
-
if (account.type === "email") {
|
|
402
|
-
address = account.address;
|
|
403
|
-
} else if (account.type === "twitter_oauth") {
|
|
404
|
-
address = `@${account.username}`;
|
|
405
|
-
} else if (account.type === "google_oauth") {
|
|
406
|
-
address = `@${account.name}`;
|
|
407
|
-
}
|
|
506
|
+
const { connectorWalletType } = useWalletConnectorPrivy();
|
|
507
|
+
const [wallet, setWallet] = useState(void 0);
|
|
508
|
+
const { connect, connectors: wagmiConnectors2 } = connectorWalletType.disableWagmi ? { connect: () => Promise.resolve(), connectors: [] } : useConnect();
|
|
509
|
+
const { disconnect } = connectorWalletType.disableWagmi ? { disconnect: () => Promise.resolve() } : useDisconnect();
|
|
510
|
+
const { connector, isConnected, address, chainId } = connectorWalletType.disableWagmi ? { connector: null, isConnected: false, address: null, chainId: null } : useAccount();
|
|
511
|
+
const { switchChain } = connectorWalletType.disableWagmi ? { switchChain: () => Promise.resolve() } : useSwitchChain();
|
|
512
|
+
const connectedChain = useMemo(() => {
|
|
513
|
+
if (chainId) {
|
|
408
514
|
return {
|
|
409
|
-
|
|
410
|
-
|
|
515
|
+
id: chainId,
|
|
516
|
+
namespace: ChainNamespace.evm
|
|
411
517
|
};
|
|
412
518
|
}
|
|
413
519
|
return null;
|
|
414
|
-
}, [
|
|
415
|
-
const
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
};
|
|
428
|
-
const exportWallet = (namespace) => {
|
|
429
|
-
if (namespace === ChainNamespace.evm) {
|
|
430
|
-
track(EnumTrackerKeys.clickExportPrivateKey, {
|
|
431
|
-
type: "evm"
|
|
432
|
-
});
|
|
433
|
-
return exportEvmWallet();
|
|
434
|
-
} else if (namespace === ChainNamespace.solana) {
|
|
435
|
-
track(EnumTrackerKeys.clickExportPrivateKey, {
|
|
436
|
-
type: "solana"
|
|
520
|
+
}, [chainId]);
|
|
521
|
+
const setChain = useCallback(
|
|
522
|
+
(chainId2) => {
|
|
523
|
+
return new Promise((resolve, reject) => {
|
|
524
|
+
switchChain(
|
|
525
|
+
{ chainId: chainId2 },
|
|
526
|
+
{
|
|
527
|
+
onSuccess: () => resolve(true),
|
|
528
|
+
onError: (e) => {
|
|
529
|
+
return reject(e);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
);
|
|
437
533
|
});
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
};
|
|
442
|
-
const isConnected = useMemo(() => {
|
|
443
|
-
if (ready && authenticated) {
|
|
444
|
-
return true;
|
|
445
|
-
}
|
|
446
|
-
return false;
|
|
447
|
-
}, [ready, authenticated]);
|
|
534
|
+
},
|
|
535
|
+
[switchChain]
|
|
536
|
+
);
|
|
448
537
|
useEffect(() => {
|
|
449
|
-
if (!
|
|
450
|
-
|
|
538
|
+
if (!connector || !isConnected) {
|
|
539
|
+
setWallet(void 0);
|
|
451
540
|
return;
|
|
452
541
|
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
label: "privy",
|
|
542
|
+
connector.getProvider().then((provider) => {
|
|
543
|
+
setWallet({
|
|
544
|
+
label: connector.name,
|
|
457
545
|
icon: "",
|
|
458
546
|
provider,
|
|
459
547
|
accounts: [
|
|
460
548
|
{
|
|
461
|
-
address
|
|
549
|
+
address
|
|
462
550
|
}
|
|
463
551
|
],
|
|
464
552
|
chains: [
|
|
465
553
|
{
|
|
466
|
-
id:
|
|
554
|
+
id: chainId,
|
|
467
555
|
namespace: ChainNamespace.evm
|
|
468
556
|
}
|
|
469
557
|
],
|
|
470
|
-
chain:
|
|
471
|
-
id: getPrivyEmbeddedWalletChainId(wallet.chainId) ?? 1,
|
|
472
|
-
namespace: ChainNamespace.evm
|
|
473
|
-
}
|
|
558
|
+
chain: connectedChain
|
|
474
559
|
});
|
|
475
560
|
});
|
|
476
|
-
}, [
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
return;
|
|
481
|
-
}
|
|
482
|
-
if (!solanaReady) {
|
|
483
|
-
return;
|
|
484
|
-
}
|
|
485
|
-
if (!user) {
|
|
486
|
-
return;
|
|
487
|
-
}
|
|
488
|
-
const embededSolanaWallet = (user?.linkedAccounts).find(
|
|
489
|
-
(item) => item.chainType === "solana" && item.connectorType === "embedded"
|
|
561
|
+
}, [connector, chainId, isConnected, address, connectedChain]);
|
|
562
|
+
const connectors = useMemo(() => {
|
|
563
|
+
return wagmiConnectors2.filter((connector2) => connector2.id !== "injected").sort(
|
|
564
|
+
(a, b) => a.type === "injected" ? -1 : 1
|
|
490
565
|
);
|
|
491
|
-
|
|
492
|
-
createSolanaWallet().then();
|
|
493
|
-
return;
|
|
494
|
-
}
|
|
495
|
-
if (!walletsSOL || !walletsSOL[0]) {
|
|
496
|
-
return;
|
|
497
|
-
}
|
|
498
|
-
const wallet = walletsSOL.find((w) => w.connectorType === "embedded");
|
|
499
|
-
if (wallet) {
|
|
500
|
-
if (walletSOL && wallet.address === walletSOL.accounts[0].address) {
|
|
501
|
-
if (walletSOL.chain.id === SolanaChainsMap.get(network)) {
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
setWalletSOL({
|
|
506
|
-
label: "privy",
|
|
507
|
-
icon: "",
|
|
508
|
-
provider: {
|
|
509
|
-
signMessage: wallet.signMessage,
|
|
510
|
-
signTransaction: wallet.signTransaction,
|
|
511
|
-
sendTransaction: wallet.sendTransaction,
|
|
512
|
-
network: solanaInfo?.network ?? WalletAdapterNetwork.Devnet,
|
|
513
|
-
rpcUrl: solanaInfo?.rpcUrl ?? void 0
|
|
514
|
-
},
|
|
515
|
-
accounts: [
|
|
516
|
-
{
|
|
517
|
-
address: wallet.address
|
|
518
|
-
}
|
|
519
|
-
],
|
|
520
|
-
chains: [
|
|
521
|
-
{
|
|
522
|
-
id: SolanaChainsMap.get(network),
|
|
523
|
-
namespace: ChainNamespace.solana
|
|
524
|
-
}
|
|
525
|
-
],
|
|
526
|
-
chain: {
|
|
527
|
-
id: SolanaChainsMap.get(network),
|
|
528
|
-
namespace: ChainNamespace.solana
|
|
529
|
-
}
|
|
530
|
-
});
|
|
531
|
-
}
|
|
532
|
-
}, [
|
|
533
|
-
walletsSOL,
|
|
534
|
-
authenticated,
|
|
535
|
-
createSolanaWallet,
|
|
536
|
-
solanaReady,
|
|
537
|
-
user,
|
|
538
|
-
walletSOL,
|
|
539
|
-
network,
|
|
540
|
-
solanaInfo
|
|
541
|
-
]);
|
|
542
|
-
useEffect(() => {
|
|
543
|
-
if (isConnected && linkedAccount) {
|
|
544
|
-
if (connectedRef.current) {
|
|
545
|
-
return;
|
|
546
|
-
}
|
|
547
|
-
connectedRef.current = true;
|
|
548
|
-
track(EnumTrackerKeys.socialLoginSuccess, {
|
|
549
|
-
type: linkedAccount.type,
|
|
550
|
-
address: linkedAccount.address
|
|
551
|
-
});
|
|
552
|
-
}
|
|
553
|
-
}, [isConnected, linkedAccount, connectedRef]);
|
|
566
|
+
}, [wagmiConnectors2]);
|
|
554
567
|
const value = useMemo(
|
|
555
568
|
() => ({
|
|
569
|
+
connectors,
|
|
556
570
|
connect,
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
571
|
+
wallet,
|
|
572
|
+
connectedChain,
|
|
573
|
+
setChain,
|
|
560
574
|
disconnect,
|
|
561
|
-
|
|
562
|
-
linkedAccount,
|
|
563
|
-
exportWallet,
|
|
564
|
-
createEvmWallet,
|
|
565
|
-
createSolanaWallet
|
|
575
|
+
isConnected
|
|
566
576
|
}),
|
|
567
577
|
[
|
|
578
|
+
connectors,
|
|
568
579
|
connect,
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
580
|
+
wallet,
|
|
581
|
+
connectedChain,
|
|
582
|
+
setChain,
|
|
572
583
|
disconnect,
|
|
573
|
-
|
|
574
|
-
linkedAccount,
|
|
575
|
-
exportWallet,
|
|
576
|
-
createEvmWallet,
|
|
577
|
-
createSolanaWallet
|
|
584
|
+
isConnected
|
|
578
585
|
]
|
|
579
586
|
);
|
|
580
|
-
return /* @__PURE__ */ React12.createElement(
|
|
587
|
+
return /* @__PURE__ */ React12.createElement(WagmiWalletContext.Provider, { value }, children);
|
|
581
588
|
};
|
|
582
|
-
function
|
|
583
|
-
const context = useContext(
|
|
589
|
+
function useWagmiWallet() {
|
|
590
|
+
const context = useContext(WagmiWalletContext);
|
|
584
591
|
if (!context) {
|
|
585
|
-
throw new Error("
|
|
592
|
+
throw new Error("useWagmiWallet must be used within a WagmiWalletProvider");
|
|
586
593
|
}
|
|
587
594
|
return context;
|
|
588
595
|
}
|
|
596
|
+
|
|
597
|
+
// src/hooks/useWallet.tsx
|
|
589
598
|
function useWallet2() {
|
|
590
599
|
const { track } = useTrack();
|
|
591
600
|
const { walletChainType } = useWalletConnectorPrivy();
|
|
@@ -657,7 +666,7 @@ function useWallet2() {
|
|
|
657
666
|
}
|
|
658
667
|
isManual.current = true;
|
|
659
668
|
return setChainPrivy(parseInt(chain.chainId)).then((res) => {
|
|
660
|
-
track(
|
|
669
|
+
track(TrackerEventName.switchNetworkSuccess, {
|
|
661
670
|
from_chain: storageChain?.chainId,
|
|
662
671
|
to_chain: chain.chainId
|
|
663
672
|
});
|
|
@@ -686,7 +695,7 @@ function useWallet2() {
|
|
|
686
695
|
if (tempNamespace === ChainNamespace.evm) {
|
|
687
696
|
await setChainEvm(parseInt(chain.chainId));
|
|
688
697
|
setStorageChain(parseInt(chain.chainId));
|
|
689
|
-
track(
|
|
698
|
+
track(TrackerEventName.switchNetworkSuccess, {
|
|
690
699
|
from_chain: storageChain?.chainId,
|
|
691
700
|
to_chain: chain.chainId
|
|
692
701
|
});
|
|
@@ -742,7 +751,7 @@ function useWallet2() {
|
|
|
742
751
|
}
|
|
743
752
|
}
|
|
744
753
|
}
|
|
745
|
-
track(
|
|
754
|
+
track(TrackerEventName.clickSwitchWallet, {
|
|
746
755
|
fromWallet,
|
|
747
756
|
toWallet
|
|
748
757
|
});
|
|
@@ -2095,12 +2104,10 @@ function InitSolanaProvider({
|
|
|
2095
2104
|
} else {
|
|
2096
2105
|
rpcUrl = devnetRpc ?? null;
|
|
2097
2106
|
}
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
});
|
|
2103
|
-
}
|
|
2107
|
+
setSolanaInfo({
|
|
2108
|
+
rpcUrl,
|
|
2109
|
+
network: network === "mainnet" ? WalletAdapterNetwork.Mainnet : WalletAdapterNetwork.Devnet
|
|
2110
|
+
});
|
|
2104
2111
|
}, [network, mainnetRpc, devnetRpc, setSolanaInfo]);
|
|
2105
2112
|
return /* @__PURE__ */ React12.createElement(WalletProvider, { wallets, onError }, children);
|
|
2106
2113
|
}
|