@orderly.network/wallet-connector 2.0.4 → 2.0.5
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 +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +85 -81
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +87 -83
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.d.mts
CHANGED
|
@@ -6,7 +6,6 @@ import { InitOptions } from '@web3-onboard/core';
|
|
|
6
6
|
type ConnectorInitOptions = Optional<InitOptions, "apiKey" | "connect" | "wallets" | "chains" | "appMetadata" | "accountCenter" | "theme">;
|
|
7
7
|
type SolanaInitialProps = PropsWithChildren<{
|
|
8
8
|
network?: WalletAdapterNetwork;
|
|
9
|
-
endPoint?: string;
|
|
10
9
|
mainnetRpc?: string;
|
|
11
10
|
devnetRpc?: string;
|
|
12
11
|
wallets?: Adapter[];
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ import { InitOptions } from '@web3-onboard/core';
|
|
|
6
6
|
type ConnectorInitOptions = Optional<InitOptions, "apiKey" | "connect" | "wallets" | "chains" | "appMetadata" | "accountCenter" | "theme">;
|
|
7
7
|
type SolanaInitialProps = PropsWithChildren<{
|
|
8
8
|
network?: WalletAdapterNetwork;
|
|
9
|
-
endPoint?: string;
|
|
10
9
|
mainnetRpc?: string;
|
|
11
10
|
devnetRpc?: string;
|
|
12
11
|
wallets?: Adapter[];
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
|
+
var hooks = require('@orderly.network/hooks');
|
|
5
|
+
var utils = require('@orderly.network/utils');
|
|
6
|
+
var types = require('@orderly.network/types');
|
|
4
7
|
var walletAdapterReact = require('@solana/wallet-adapter-react');
|
|
5
|
-
var walletAdapterBase = require('@solana/wallet-adapter-base');
|
|
6
8
|
var walletAdapterReactUi = require('@solana/wallet-adapter-react-ui');
|
|
7
|
-
var web3_js = require('@solana/web3.js');
|
|
8
|
-
require('@solana/wallet-adapter-react-ui/styles.css');
|
|
9
|
-
var walletAdapterMobile = require('@solana-mobile/wallet-adapter-mobile');
|
|
10
|
-
var walletAdapterWallets = require('@solana/wallet-adapter-wallets');
|
|
11
|
-
var utils = require('@orderly.network/utils');
|
|
12
9
|
var ui = require('@orderly.network/ui');
|
|
13
|
-
var
|
|
14
|
-
var types = require('@orderly.network/types');
|
|
10
|
+
var walletAdapterBase = require('@solana/wallet-adapter-base');
|
|
15
11
|
var injectedModule = require('@web3-onboard/injected-wallets');
|
|
16
12
|
var react = require('@web3-onboard/react');
|
|
17
13
|
var binanceModule = require('@binance/w3w-blocknative-connector');
|
|
18
14
|
var lodash = require('lodash');
|
|
15
|
+
require('@solana/wallet-adapter-react-ui/styles.css');
|
|
16
|
+
var walletAdapterMobile = require('@solana-mobile/wallet-adapter-mobile');
|
|
17
|
+
var walletAdapterWallets = require('@solana/wallet-adapter-wallets');
|
|
19
18
|
|
|
20
19
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
20
|
|
|
@@ -23,51 +22,7 @@ var React__default = /*#__PURE__*/_interopDefault(React);
|
|
|
23
22
|
var injectedModule__default = /*#__PURE__*/_interopDefault(injectedModule);
|
|
24
23
|
var binanceModule__default = /*#__PURE__*/_interopDefault(binanceModule);
|
|
25
24
|
|
|
26
|
-
// src/
|
|
27
|
-
function InitSolana({ children, ...props }) {
|
|
28
|
-
const { isMobile } = ui.useScreen();
|
|
29
|
-
const network = props.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet;
|
|
30
|
-
const endPoint = React.useMemo(() => {
|
|
31
|
-
if (network === walletAdapterBase.WalletAdapterNetwork.Mainnet) {
|
|
32
|
-
return props.mainnetRpc ?? web3_js.clusterApiUrl(network);
|
|
33
|
-
}
|
|
34
|
-
if (network === walletAdapterBase.WalletAdapterNetwork.Devnet) {
|
|
35
|
-
return props.devnetRpc ?? web3_js.clusterApiUrl(network);
|
|
36
|
-
}
|
|
37
|
-
return web3_js.clusterApiUrl(network);
|
|
38
|
-
}, [network, props.mainnetRpc, props.devnetRpc]);
|
|
39
|
-
const mobileWalletNotFoundHanlder = (adapter) => {
|
|
40
|
-
console.log("-- mobile wallet adapter", adapter);
|
|
41
|
-
return Promise.reject(new walletAdapterBase.WalletNotReadyError("wallet not ready"));
|
|
42
|
-
};
|
|
43
|
-
const handleSolanaError = (error, adapter) => {
|
|
44
|
-
console.log("-- solanan error", error);
|
|
45
|
-
console.log("-- solana adapter", adapter);
|
|
46
|
-
if (!isMobile && error instanceof walletAdapterBase.WalletNotReadyError) {
|
|
47
|
-
window.open(adapter?.url, "_blank");
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const wallets = React.useMemo(() => {
|
|
51
|
-
let uri = "";
|
|
52
|
-
if (typeof window !== "undefined") {
|
|
53
|
-
const location = utils.getGlobalObject().location;
|
|
54
|
-
uri = `${location.protocol}//${location.host}`;
|
|
55
|
-
}
|
|
56
|
-
return props.wallets ?? [
|
|
57
|
-
new walletAdapterWallets.PhantomWalletAdapter(),
|
|
58
|
-
new walletAdapterMobile.SolanaMobileWalletAdapter({
|
|
59
|
-
addressSelector: walletAdapterMobile.createDefaultAddressSelector(),
|
|
60
|
-
appIdentity: {
|
|
61
|
-
uri
|
|
62
|
-
},
|
|
63
|
-
authorizationResultCache: walletAdapterMobile.createDefaultAuthorizationResultCache(),
|
|
64
|
-
chain: network,
|
|
65
|
-
onWalletNotFound: mobileWalletNotFoundHanlder
|
|
66
|
-
})
|
|
67
|
-
];
|
|
68
|
-
}, [props.wallets, network]);
|
|
69
|
-
return /* @__PURE__ */ React__default.default.createElement(walletAdapterReact.ConnectionProvider, { endpoint: endPoint }, /* @__PURE__ */ React__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, onError: props.onError ?? handleSolanaError }, /* @__PURE__ */ React__default.default.createElement(walletAdapterReactUi.WalletModalProvider, { className: "oui-pointer-events-auto" }, children)));
|
|
70
|
-
}
|
|
25
|
+
// src/main.tsx
|
|
71
26
|
var binance = binanceModule__default.default({ options: { lng: "en" } });
|
|
72
27
|
var initConfig = (apiKey, options) => {
|
|
73
28
|
const defaultOptions = {
|
|
@@ -111,14 +66,72 @@ var initConfig = (apiKey, options) => {
|
|
|
111
66
|
return react.init(mergedOptions);
|
|
112
67
|
};
|
|
113
68
|
var SolanaChains = /* @__PURE__ */ new Map([[walletAdapterBase.WalletAdapterNetwork.Devnet, 901901901], [walletAdapterBase.WalletAdapterNetwork.Mainnet, 900900900]]);
|
|
69
|
+
var SolanaContext = React.createContext({
|
|
70
|
+
network: walletAdapterBase.WalletAdapterNetwork.Devnet,
|
|
71
|
+
endpoint: ""
|
|
72
|
+
});
|
|
73
|
+
var useSolanaContext = () => {
|
|
74
|
+
const context = React.useContext(SolanaContext);
|
|
75
|
+
if (context === void 0) {
|
|
76
|
+
throw new Error("useSolanaContext must be used within a SolanaProvider");
|
|
77
|
+
}
|
|
78
|
+
return context;
|
|
79
|
+
};
|
|
80
|
+
function SolanaProvider({ children, ...props }) {
|
|
81
|
+
const { isMobile } = ui.useScreen();
|
|
82
|
+
const network = React.useMemo(() => props.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet, [props.network]);
|
|
83
|
+
const endpoint = React.useMemo(() => {
|
|
84
|
+
if (network === walletAdapterBase.WalletAdapterNetwork.Mainnet) {
|
|
85
|
+
return props.mainnetRpc ?? "";
|
|
86
|
+
}
|
|
87
|
+
if (network === walletAdapterBase.WalletAdapterNetwork.Devnet) {
|
|
88
|
+
return props.devnetRpc ?? "";
|
|
89
|
+
}
|
|
90
|
+
return "";
|
|
91
|
+
}, [network, props.mainnetRpc, props.devnetRpc]);
|
|
92
|
+
const mobileWalletNotFoundHanlder = (adapter) => {
|
|
93
|
+
console.log("-- mobile wallet adapter", adapter);
|
|
94
|
+
return Promise.reject(new walletAdapterBase.WalletNotReadyError("wallet not ready"));
|
|
95
|
+
};
|
|
96
|
+
const handleSolanaError = (error, adapter) => {
|
|
97
|
+
console.log("-- solanan error", error);
|
|
98
|
+
console.log("-- solana adapter", adapter);
|
|
99
|
+
if (!isMobile && error instanceof walletAdapterBase.WalletNotReadyError) {
|
|
100
|
+
window.open(adapter?.url, "_blank");
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const wallets = React.useMemo(() => {
|
|
104
|
+
let uri = "";
|
|
105
|
+
if (typeof window !== "undefined") {
|
|
106
|
+
const location = utils.getGlobalObject().location;
|
|
107
|
+
uri = `${location.protocol}//${location.host}`;
|
|
108
|
+
}
|
|
109
|
+
return props.wallets ?? [
|
|
110
|
+
new walletAdapterWallets.PhantomWalletAdapter(),
|
|
111
|
+
new walletAdapterMobile.SolanaMobileWalletAdapter({
|
|
112
|
+
addressSelector: walletAdapterMobile.createDefaultAddressSelector(),
|
|
113
|
+
appIdentity: {
|
|
114
|
+
uri
|
|
115
|
+
},
|
|
116
|
+
authorizationResultCache: walletAdapterMobile.createDefaultAuthorizationResultCache(),
|
|
117
|
+
chain: network,
|
|
118
|
+
onWalletNotFound: mobileWalletNotFoundHanlder
|
|
119
|
+
})
|
|
120
|
+
];
|
|
121
|
+
}, [props.wallets, network]);
|
|
122
|
+
const contextValue = React.useMemo(() => ({
|
|
123
|
+
network,
|
|
124
|
+
endpoint
|
|
125
|
+
}), [network, endpoint]);
|
|
126
|
+
return /* @__PURE__ */ React__default.default.createElement(SolanaContext.Provider, { value: contextValue }, /* @__PURE__ */ React__default.default.createElement(walletAdapterReact.WalletProvider, { wallets, onError: props.onError ?? handleSolanaError }, /* @__PURE__ */ React__default.default.createElement(walletAdapterReactUi.WalletModalProvider, { className: "oui-pointer-events-auto" }, children)));
|
|
127
|
+
}
|
|
114
128
|
|
|
115
129
|
// src/useSOL.tsx
|
|
116
|
-
function useSOL(
|
|
130
|
+
function useSOL() {
|
|
117
131
|
const [wallet, setWallet] = React.useState(null);
|
|
118
132
|
const { isMobile } = ui.useScreen();
|
|
119
|
-
const {
|
|
133
|
+
const { endpoint, network } = useSolanaContext();
|
|
120
134
|
const { setVisible: setModalVisible, visible } = walletAdapterReactUi.useWalletModal();
|
|
121
|
-
const { setLedgerAddress } = hooks.useStorageLedgerAddress();
|
|
122
135
|
const {
|
|
123
136
|
signMessage,
|
|
124
137
|
signTransaction,
|
|
@@ -130,6 +143,7 @@ function useSOL({ network }) {
|
|
|
130
143
|
connecting
|
|
131
144
|
} = walletAdapterReact.useWallet();
|
|
132
145
|
const selectModalVisibleRef = React.useRef(false);
|
|
146
|
+
const [ledgerWallet, setLedgerWallet] = hooks.useLocalStorage(types.LedgerWalletKey, []);
|
|
133
147
|
const [connected, setConnected] = React.useState(false);
|
|
134
148
|
const isManual = React.useRef(false);
|
|
135
149
|
const solanaPromiseRef = React.useRef({
|
|
@@ -213,8 +227,9 @@ function useSOL({ network }) {
|
|
|
213
227
|
label: wallet2.adapter.name,
|
|
214
228
|
icon: "",
|
|
215
229
|
provider: {
|
|
230
|
+
rpcUrl: endpoint,
|
|
231
|
+
network,
|
|
216
232
|
signMessage: signMessage2,
|
|
217
|
-
connection,
|
|
218
233
|
signTransaction: signTransaction2,
|
|
219
234
|
sendTransaction: sendTransaction2
|
|
220
235
|
},
|
|
@@ -231,7 +246,10 @@ function useSOL({ network }) {
|
|
|
231
246
|
]
|
|
232
247
|
};
|
|
233
248
|
if (wallet2.adapter.name === "Ledger") {
|
|
234
|
-
|
|
249
|
+
if (!ledgerWallet.includes(userAddress)) {
|
|
250
|
+
ledgerWallet.push(userAddress);
|
|
251
|
+
setLedgerWallet([...ledgerWallet]);
|
|
252
|
+
}
|
|
235
253
|
}
|
|
236
254
|
setWallet(tempWallet);
|
|
237
255
|
setConnected(true);
|
|
@@ -301,7 +319,6 @@ function useSOL({ network }) {
|
|
|
301
319
|
}
|
|
302
320
|
return;
|
|
303
321
|
}
|
|
304
|
-
console.log("-- tt");
|
|
305
322
|
const userAddress = publicKey.toBase58();
|
|
306
323
|
setWallet({
|
|
307
324
|
label: solanaWallet.adapter.name,
|
|
@@ -310,7 +327,8 @@ function useSOL({ network }) {
|
|
|
310
327
|
signMessage,
|
|
311
328
|
signTransaction,
|
|
312
329
|
sendTransaction,
|
|
313
|
-
|
|
330
|
+
rpcUrl: endpoint,
|
|
331
|
+
network
|
|
314
332
|
},
|
|
315
333
|
accounts: [
|
|
316
334
|
{
|
|
@@ -325,7 +343,10 @@ function useSOL({ network }) {
|
|
|
325
343
|
]
|
|
326
344
|
});
|
|
327
345
|
if (solanaWallet.adapter.name === "Ledger") {
|
|
328
|
-
|
|
346
|
+
if (!ledgerWallet.includes(userAddress)) {
|
|
347
|
+
ledgerWallet.push(userAddress);
|
|
348
|
+
setLedgerWallet([...ledgerWallet]);
|
|
349
|
+
}
|
|
329
350
|
}
|
|
330
351
|
setConnected(true);
|
|
331
352
|
}, [
|
|
@@ -334,27 +355,10 @@ function useSOL({ network }) {
|
|
|
334
355
|
signMessage,
|
|
335
356
|
signTransaction,
|
|
336
357
|
isManual,
|
|
337
|
-
connection,
|
|
338
358
|
sendTransaction,
|
|
359
|
+
endpoint,
|
|
339
360
|
network
|
|
340
361
|
]);
|
|
341
|
-
React.useEffect(() => {
|
|
342
|
-
if (!publicKey) {
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
const id = connection.onAccountChange(
|
|
346
|
-
publicKey,
|
|
347
|
-
(updatedAccountInfo, context) => {
|
|
348
|
-
console.log("--- account change", updatedAccountInfo, context);
|
|
349
|
-
},
|
|
350
|
-
{ commitment: "confirmed" }
|
|
351
|
-
);
|
|
352
|
-
return () => {
|
|
353
|
-
if (id) {
|
|
354
|
-
connection.removeAccountChangeListener(id).then();
|
|
355
|
-
}
|
|
356
|
-
};
|
|
357
|
-
}, [connection, publicKey]);
|
|
358
362
|
React.useEffect(() => {
|
|
359
363
|
if (!solanaWallet) {
|
|
360
364
|
return;
|
|
@@ -453,7 +457,7 @@ function useEvm() {
|
|
|
453
457
|
|
|
454
458
|
// src/main.tsx
|
|
455
459
|
function Main(props) {
|
|
456
|
-
const sol = useSOL(
|
|
460
|
+
const sol = useSOL();
|
|
457
461
|
const evm = useEvm();
|
|
458
462
|
const [namespace, setNamespace] = React.useState(null);
|
|
459
463
|
const newNamespace = React.useRef();
|
|
@@ -597,7 +601,7 @@ var processChainInfo = (chainInfo) => chainInfo?.data?.rows?.map((row) => ({
|
|
|
597
601
|
blockExplorerUrl: row.explorer_base_url
|
|
598
602
|
})) || [];
|
|
599
603
|
function WalletConnectorProvider(props) {
|
|
600
|
-
return /* @__PURE__ */ React__default.default.createElement(
|
|
604
|
+
return /* @__PURE__ */ React__default.default.createElement(SolanaProvider, { ...props.solanaInitial ?? {} }, /* @__PURE__ */ React__default.default.createElement(InitEvm, { ...props.evmInitial ?? {} }, /* @__PURE__ */ React__default.default.createElement(Main, { solanaNetwork: props.solanaInitial?.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet }, props.children)));
|
|
601
605
|
}
|
|
602
606
|
|
|
603
607
|
exports.WalletConnectorProvider = WalletConnectorProvider;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","useScreen","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","signTransaction","sendTransaction","merge"],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport {\n WalletModalProvider\n} from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport { SolanaInitialProps } from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache, createDefaultWalletNotFoundHandler,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { useScreen } from \"@orderly.network/ui\";\n\nexport default function InitSolana({ children, ...props }: SolanaInitialProps) {\n const { isMobile } = useScreen();\n const network = props.network ?? WalletAdapterNetwork.Devnet;\n\n const endPoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n // return 'https://rpc.ankr.com/solana';\n return props.mainnetRpc ?? clusterApiUrl(network);\n // return 'https://svc.blockdaemon.com/solana/mainnet/native?apiKey=zpka_417399a60de542759adf31a42a30e60e_61763d0a'\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? clusterApiUrl(network);\n }\n return clusterApiUrl(network);\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n\n if (!isMobile && error instanceof WalletNotReadyError) {\n window.open(adapter?.url, '_blank');\n }\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location = (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n return (\n <ConnectionProvider endpoint={endPoint}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n}\n","import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL({ network: props.solanaNetwork });\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, useLocalStorage, useStorageLedgerAddress, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\n\n\n\nexport function useSOL({ network }: { network: WalletAdapterNetwork }) {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { connection } = useConnection();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const { setLedgerAddress } = useStorageLedgerAddress();\n const {\n signMessage,\n signTransaction,\n sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\n // 1 for open, 2 for close, null for default\n const selectModalVisibleRef = useRef<boolean>(false);\n\n const [connected, setConnected] = useState(false);\n\n const isManual = useRef(false);\n const solanaPromiseRef = useRef<{\n walletSelect: Promise<any> | null;\n connect: Promise<any> | null;\n walletSelectResolve: (value: any) => void;\n walletSelectReject: (value: any) => void;\n connectResolve: (value: any) => void;\n connectReject: (value: any) => void;\n }>({\n walletSelect: null,\n connect: null,\n walletSelectResolve: () => { },\n walletSelectReject: () => { },\n connectReject: () => { },\n connectResolve: () => { },\n });\n const ee = useEventEmitter();\n\n const initPromiseRef = () => {\n console.log(\"-- init solana promise\");\n solanaPromiseRef.current.walletSelectResolve = () => { };\n solanaPromiseRef.current.walletSelectReject = () => { };\n solanaPromiseRef.current.connectReject = () => { };\n solanaPromiseRef.current.connectReject = () => { };\n solanaPromiseRef.current.connect = null;\n solanaPromiseRef.current.walletSelect = null;\n solanaPromiseRef.current.walletSelect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.walletSelectResolve = resolve;\n solanaPromiseRef.current.walletSelectReject = reject;\n });\n solanaPromiseRef.current.connect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.connectResolve = resolve;\n solanaPromiseRef.current.connectReject = reject;\n });\n };\n\n const handleSolanaError = (e: Error) => {\n console.log(\"solan connect error\", e);\n\n if (e instanceof WalletNotReadyError) {\n if (isMobile) {\n console.log(\"-- need toast wallet not ready\", e);\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\n });\n }\n }\n solanaDisconnect().then();\n };\n\n const connect = async () => {\n initPromiseRef();\n isManual.current = true;\n if (!solanaPromiseRef.current) {\n return;\n }\n if (!solanaWallet) {\n setModalVisible(true);\n selectModalVisibleRef.current = true;\n } else {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n if (!publicKey) {\n try {\n await solanaConnect();\n } catch (e) {\n solanaPromiseRef.current.connectReject(e);\n }\n } else {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage, signTransaction, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n signTransaction,\n sendTransaction,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n };\n if (wallet.adapter.name === 'Ledger') {\n setLedgerAddress(userAddress);\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n return;\n }\n console.log(\"-- tt\");\n const userAddress = publicKey.toBase58();\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n connection,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n if (solanaWallet.adapter.name === 'Ledger') {\n setLedgerAddress(userAddress);\n }\n\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n signTransaction,\n isManual,\n connection,\n sendTransaction,\n network,\n ]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(\n publicKey,\n (updatedAccountInfo, context) => {\n console.log(\"--- account change\", updatedAccountInfo, context);\n },\n { commitment: \"confirmed\" }\n );\n\n return () => {\n if (id) {\n connection.removeAccountChangeListener(id).then();\n }\n };\n }, [connection, publicKey]);\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import InitSolana from \"./initSolana\";\nimport { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <InitSolana {...(props.solanaInitial ?? {})}>\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </InitSolana>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/SolanaProvider.tsx","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","useScreen","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","signTransaction","sendTransaction","merge"],"mappings":"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","sourcesContent":["import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL();\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, useLocalStorage, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\nimport { useSolanaContext } from \"./SolanaProvider\";\n\n\n\nexport function useSOL() {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { endpoint, network} = useSolanaContext();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const {\n signMessage,\n signTransaction,\n sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\n // 1 for open, 2 for close, null for default\n const selectModalVisibleRef = useRef<boolean>(false);\n const [ledgerWallet, setLedgerWallet] = useLocalStorage<string[]>(LedgerWalletKey, [] as string[]);\n\n const [connected, setConnected] = useState(false);\n\n const isManual = useRef(false);\n const solanaPromiseRef = useRef<{\n walletSelect: Promise<any> | null;\n connect: Promise<any> | null;\n walletSelectResolve: (value: any) => void;\n walletSelectReject: (value: any) => void;\n connectResolve: (value: any) => void;\n connectReject: (value: any) => void;\n }>({\n walletSelect: null,\n connect: null,\n walletSelectResolve: () => {},\n walletSelectReject: () => {},\n connectReject: () => {},\n connectResolve: () => {},\n });\n const ee = useEventEmitter();\n\n const initPromiseRef = () => {\n console.log(\"-- init solana promise\");\n solanaPromiseRef.current.walletSelectResolve = () => {};\n solanaPromiseRef.current.walletSelectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connect = null;\n solanaPromiseRef.current.walletSelect = null;\n solanaPromiseRef.current.walletSelect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.walletSelectResolve = resolve;\n solanaPromiseRef.current.walletSelectReject = reject;\n });\n solanaPromiseRef.current.connect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.connectResolve = resolve;\n solanaPromiseRef.current.connectReject = reject;\n });\n };\n\n const handleSolanaError = (e: Error) => {\n console.log(\"solan connect error\", e);\n\n if (e instanceof WalletNotReadyError) {\n if (isMobile) {\n console.log(\"-- need toast wallet not ready\", e);\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\n });\n }\n }\n solanaDisconnect().then();\n };\n\n const connect = async () => {\n initPromiseRef();\n isManual.current = true;\n if (!solanaPromiseRef.current) {\n return;\n }\n if (!solanaWallet) {\n setModalVisible(true);\n selectModalVisibleRef.current = true;\n } else {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n if (!publicKey) {\n try {\n await solanaConnect();\n } catch (e) {\n solanaPromiseRef.current.connectReject(e);\n }\n } else {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage,signTransaction, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n rpcUrl: endpoint,\n network: network,\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n };\n if (wallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n return;\n }\n const userAddress = publicKey.toBase58();\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n rpcUrl: endpoint,\n network: network, \n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n if (solanaWallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n signTransaction,\n isManual,\n sendTransaction,\n endpoint,\n network,\n ]);\n\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport { WalletModalProvider } from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport { SolanaInitialProps } from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { useScreen } from \"@orderly.network/ui\";\n\nconst SolanaContext = createContext<{\n network: WalletAdapterNetwork;\n endpoint: string;\n}>({\n network: WalletAdapterNetwork.Devnet,\n endpoint: '',\n});\n\nexport const useSolanaContext = () => {\n const context = useContext(SolanaContext);\n\n if (context === undefined) {\n throw new Error('useSolanaContext must be used within a SolanaProvider');\n }\n\n return context;\n};\n\nexport function SolanaProvider({ children, ...props }: SolanaInitialProps) {\n const { isMobile } = useScreen();\n const network = useMemo(() => props.network ?? WalletAdapterNetwork.Devnet, [props.network]);\n\n const endpoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n return props.mainnetRpc ?? '';\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? '';\n }\n return '';\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n\n if (!isMobile && error instanceof WalletNotReadyError) {\n window.open(adapter?.url, '_blank');\n }\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location = (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n const contextValue = useMemo(() => ({\n network,\n endpoint,\n }), [network, endpoint]);\n\n return (\n <SolanaContext.Provider value={contextValue}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </SolanaContext.Provider>\n );\n} ","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaProvider } from \"./SolanaProvider\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <SolanaProvider {...(props.solanaInitial ?? {})}>\n\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </SolanaProvider>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,65 +1,20 @@
|
|
|
1
|
-
import React, { useMemo, useState, useEffect, useRef } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { WalletAdapterNetwork, WalletNotReadyError, WalletReadyState } from '@solana/wallet-adapter-base';
|
|
4
|
-
import { WalletModalProvider, useWalletModal } from '@solana/wallet-adapter-react-ui';
|
|
5
|
-
import { clusterApiUrl } from '@solana/web3.js';
|
|
6
|
-
import '@solana/wallet-adapter-react-ui/styles.css';
|
|
7
|
-
import { SolanaMobileWalletAdapter, createDefaultAuthorizationResultCache, createDefaultAddressSelector } from '@solana-mobile/wallet-adapter-mobile';
|
|
8
|
-
import { PhantomWalletAdapter } from '@solana/wallet-adapter-wallets';
|
|
1
|
+
import React, { createContext, useMemo, useState, useEffect, useRef, useContext } from 'react';
|
|
2
|
+
import { useSimpleDI, WalletConnectorContext, useLocalStorage, useEventEmitter } from '@orderly.network/hooks';
|
|
9
3
|
import { getGlobalObject, hex2int } from '@orderly.network/utils';
|
|
4
|
+
import { ChainNamespace, LedgerWalletKey } from '@orderly.network/types';
|
|
5
|
+
import { WalletProvider, useWallet } from '@solana/wallet-adapter-react';
|
|
6
|
+
import { WalletModalProvider, useWalletModal } from '@solana/wallet-adapter-react-ui';
|
|
10
7
|
import { useScreen } from '@orderly.network/ui';
|
|
11
|
-
import {
|
|
12
|
-
import { ChainNamespace } from '@orderly.network/types';
|
|
8
|
+
import { WalletAdapterNetwork, WalletNotReadyError, WalletReadyState } from '@solana/wallet-adapter-base';
|
|
13
9
|
import injectedModule from '@web3-onboard/injected-wallets';
|
|
14
10
|
import { init, useConnectWallet, useSetChain } from '@web3-onboard/react';
|
|
15
11
|
import binanceModule from '@binance/w3w-blocknative-connector';
|
|
16
12
|
import { merge } from 'lodash';
|
|
13
|
+
import '@solana/wallet-adapter-react-ui/styles.css';
|
|
14
|
+
import { SolanaMobileWalletAdapter, createDefaultAuthorizationResultCache, createDefaultAddressSelector } from '@solana-mobile/wallet-adapter-mobile';
|
|
15
|
+
import { PhantomWalletAdapter } from '@solana/wallet-adapter-wallets';
|
|
17
16
|
|
|
18
|
-
// src/
|
|
19
|
-
function InitSolana({ children, ...props }) {
|
|
20
|
-
const { isMobile } = useScreen();
|
|
21
|
-
const network = props.network ?? WalletAdapterNetwork.Devnet;
|
|
22
|
-
const endPoint = useMemo(() => {
|
|
23
|
-
if (network === WalletAdapterNetwork.Mainnet) {
|
|
24
|
-
return props.mainnetRpc ?? clusterApiUrl(network);
|
|
25
|
-
}
|
|
26
|
-
if (network === WalletAdapterNetwork.Devnet) {
|
|
27
|
-
return props.devnetRpc ?? clusterApiUrl(network);
|
|
28
|
-
}
|
|
29
|
-
return clusterApiUrl(network);
|
|
30
|
-
}, [network, props.mainnetRpc, props.devnetRpc]);
|
|
31
|
-
const mobileWalletNotFoundHanlder = (adapter) => {
|
|
32
|
-
console.log("-- mobile wallet adapter", adapter);
|
|
33
|
-
return Promise.reject(new WalletNotReadyError("wallet not ready"));
|
|
34
|
-
};
|
|
35
|
-
const handleSolanaError = (error, adapter) => {
|
|
36
|
-
console.log("-- solanan error", error);
|
|
37
|
-
console.log("-- solana adapter", adapter);
|
|
38
|
-
if (!isMobile && error instanceof WalletNotReadyError) {
|
|
39
|
-
window.open(adapter?.url, "_blank");
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
const wallets = useMemo(() => {
|
|
43
|
-
let uri = "";
|
|
44
|
-
if (typeof window !== "undefined") {
|
|
45
|
-
const location = getGlobalObject().location;
|
|
46
|
-
uri = `${location.protocol}//${location.host}`;
|
|
47
|
-
}
|
|
48
|
-
return props.wallets ?? [
|
|
49
|
-
new PhantomWalletAdapter(),
|
|
50
|
-
new SolanaMobileWalletAdapter({
|
|
51
|
-
addressSelector: createDefaultAddressSelector(),
|
|
52
|
-
appIdentity: {
|
|
53
|
-
uri
|
|
54
|
-
},
|
|
55
|
-
authorizationResultCache: createDefaultAuthorizationResultCache(),
|
|
56
|
-
chain: network,
|
|
57
|
-
onWalletNotFound: mobileWalletNotFoundHanlder
|
|
58
|
-
})
|
|
59
|
-
];
|
|
60
|
-
}, [props.wallets, network]);
|
|
61
|
-
return /* @__PURE__ */ React.createElement(ConnectionProvider, { endpoint: endPoint }, /* @__PURE__ */ React.createElement(WalletProvider, { wallets, onError: props.onError ?? handleSolanaError }, /* @__PURE__ */ React.createElement(WalletModalProvider, { className: "oui-pointer-events-auto" }, children)));
|
|
62
|
-
}
|
|
17
|
+
// src/main.tsx
|
|
63
18
|
var binance = binanceModule({ options: { lng: "en" } });
|
|
64
19
|
var initConfig = (apiKey, options) => {
|
|
65
20
|
const defaultOptions = {
|
|
@@ -103,14 +58,72 @@ var initConfig = (apiKey, options) => {
|
|
|
103
58
|
return init(mergedOptions);
|
|
104
59
|
};
|
|
105
60
|
var SolanaChains = /* @__PURE__ */ new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);
|
|
61
|
+
var SolanaContext = createContext({
|
|
62
|
+
network: WalletAdapterNetwork.Devnet,
|
|
63
|
+
endpoint: ""
|
|
64
|
+
});
|
|
65
|
+
var useSolanaContext = () => {
|
|
66
|
+
const context = useContext(SolanaContext);
|
|
67
|
+
if (context === void 0) {
|
|
68
|
+
throw new Error("useSolanaContext must be used within a SolanaProvider");
|
|
69
|
+
}
|
|
70
|
+
return context;
|
|
71
|
+
};
|
|
72
|
+
function SolanaProvider({ children, ...props }) {
|
|
73
|
+
const { isMobile } = useScreen();
|
|
74
|
+
const network = useMemo(() => props.network ?? WalletAdapterNetwork.Devnet, [props.network]);
|
|
75
|
+
const endpoint = useMemo(() => {
|
|
76
|
+
if (network === WalletAdapterNetwork.Mainnet) {
|
|
77
|
+
return props.mainnetRpc ?? "";
|
|
78
|
+
}
|
|
79
|
+
if (network === WalletAdapterNetwork.Devnet) {
|
|
80
|
+
return props.devnetRpc ?? "";
|
|
81
|
+
}
|
|
82
|
+
return "";
|
|
83
|
+
}, [network, props.mainnetRpc, props.devnetRpc]);
|
|
84
|
+
const mobileWalletNotFoundHanlder = (adapter) => {
|
|
85
|
+
console.log("-- mobile wallet adapter", adapter);
|
|
86
|
+
return Promise.reject(new WalletNotReadyError("wallet not ready"));
|
|
87
|
+
};
|
|
88
|
+
const handleSolanaError = (error, adapter) => {
|
|
89
|
+
console.log("-- solanan error", error);
|
|
90
|
+
console.log("-- solana adapter", adapter);
|
|
91
|
+
if (!isMobile && error instanceof WalletNotReadyError) {
|
|
92
|
+
window.open(adapter?.url, "_blank");
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
const wallets = useMemo(() => {
|
|
96
|
+
let uri = "";
|
|
97
|
+
if (typeof window !== "undefined") {
|
|
98
|
+
const location = getGlobalObject().location;
|
|
99
|
+
uri = `${location.protocol}//${location.host}`;
|
|
100
|
+
}
|
|
101
|
+
return props.wallets ?? [
|
|
102
|
+
new PhantomWalletAdapter(),
|
|
103
|
+
new SolanaMobileWalletAdapter({
|
|
104
|
+
addressSelector: createDefaultAddressSelector(),
|
|
105
|
+
appIdentity: {
|
|
106
|
+
uri
|
|
107
|
+
},
|
|
108
|
+
authorizationResultCache: createDefaultAuthorizationResultCache(),
|
|
109
|
+
chain: network,
|
|
110
|
+
onWalletNotFound: mobileWalletNotFoundHanlder
|
|
111
|
+
})
|
|
112
|
+
];
|
|
113
|
+
}, [props.wallets, network]);
|
|
114
|
+
const contextValue = useMemo(() => ({
|
|
115
|
+
network,
|
|
116
|
+
endpoint
|
|
117
|
+
}), [network, endpoint]);
|
|
118
|
+
return /* @__PURE__ */ React.createElement(SolanaContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement(WalletProvider, { wallets, onError: props.onError ?? handleSolanaError }, /* @__PURE__ */ React.createElement(WalletModalProvider, { className: "oui-pointer-events-auto" }, children)));
|
|
119
|
+
}
|
|
106
120
|
|
|
107
121
|
// src/useSOL.tsx
|
|
108
|
-
function useSOL(
|
|
122
|
+
function useSOL() {
|
|
109
123
|
const [wallet, setWallet] = useState(null);
|
|
110
124
|
const { isMobile } = useScreen();
|
|
111
|
-
const {
|
|
125
|
+
const { endpoint, network } = useSolanaContext();
|
|
112
126
|
const { setVisible: setModalVisible, visible } = useWalletModal();
|
|
113
|
-
const { setLedgerAddress } = useStorageLedgerAddress();
|
|
114
127
|
const {
|
|
115
128
|
signMessage,
|
|
116
129
|
signTransaction,
|
|
@@ -122,6 +135,7 @@ function useSOL({ network }) {
|
|
|
122
135
|
connecting
|
|
123
136
|
} = useWallet();
|
|
124
137
|
const selectModalVisibleRef = useRef(false);
|
|
138
|
+
const [ledgerWallet, setLedgerWallet] = useLocalStorage(LedgerWalletKey, []);
|
|
125
139
|
const [connected, setConnected] = useState(false);
|
|
126
140
|
const isManual = useRef(false);
|
|
127
141
|
const solanaPromiseRef = useRef({
|
|
@@ -205,8 +219,9 @@ function useSOL({ network }) {
|
|
|
205
219
|
label: wallet2.adapter.name,
|
|
206
220
|
icon: "",
|
|
207
221
|
provider: {
|
|
222
|
+
rpcUrl: endpoint,
|
|
223
|
+
network,
|
|
208
224
|
signMessage: signMessage2,
|
|
209
|
-
connection,
|
|
210
225
|
signTransaction: signTransaction2,
|
|
211
226
|
sendTransaction: sendTransaction2
|
|
212
227
|
},
|
|
@@ -223,7 +238,10 @@ function useSOL({ network }) {
|
|
|
223
238
|
]
|
|
224
239
|
};
|
|
225
240
|
if (wallet2.adapter.name === "Ledger") {
|
|
226
|
-
|
|
241
|
+
if (!ledgerWallet.includes(userAddress)) {
|
|
242
|
+
ledgerWallet.push(userAddress);
|
|
243
|
+
setLedgerWallet([...ledgerWallet]);
|
|
244
|
+
}
|
|
227
245
|
}
|
|
228
246
|
setWallet(tempWallet);
|
|
229
247
|
setConnected(true);
|
|
@@ -293,7 +311,6 @@ function useSOL({ network }) {
|
|
|
293
311
|
}
|
|
294
312
|
return;
|
|
295
313
|
}
|
|
296
|
-
console.log("-- tt");
|
|
297
314
|
const userAddress = publicKey.toBase58();
|
|
298
315
|
setWallet({
|
|
299
316
|
label: solanaWallet.adapter.name,
|
|
@@ -302,7 +319,8 @@ function useSOL({ network }) {
|
|
|
302
319
|
signMessage,
|
|
303
320
|
signTransaction,
|
|
304
321
|
sendTransaction,
|
|
305
|
-
|
|
322
|
+
rpcUrl: endpoint,
|
|
323
|
+
network
|
|
306
324
|
},
|
|
307
325
|
accounts: [
|
|
308
326
|
{
|
|
@@ -317,7 +335,10 @@ function useSOL({ network }) {
|
|
|
317
335
|
]
|
|
318
336
|
});
|
|
319
337
|
if (solanaWallet.adapter.name === "Ledger") {
|
|
320
|
-
|
|
338
|
+
if (!ledgerWallet.includes(userAddress)) {
|
|
339
|
+
ledgerWallet.push(userAddress);
|
|
340
|
+
setLedgerWallet([...ledgerWallet]);
|
|
341
|
+
}
|
|
321
342
|
}
|
|
322
343
|
setConnected(true);
|
|
323
344
|
}, [
|
|
@@ -326,27 +347,10 @@ function useSOL({ network }) {
|
|
|
326
347
|
signMessage,
|
|
327
348
|
signTransaction,
|
|
328
349
|
isManual,
|
|
329
|
-
connection,
|
|
330
350
|
sendTransaction,
|
|
351
|
+
endpoint,
|
|
331
352
|
network
|
|
332
353
|
]);
|
|
333
|
-
useEffect(() => {
|
|
334
|
-
if (!publicKey) {
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
const id = connection.onAccountChange(
|
|
338
|
-
publicKey,
|
|
339
|
-
(updatedAccountInfo, context) => {
|
|
340
|
-
console.log("--- account change", updatedAccountInfo, context);
|
|
341
|
-
},
|
|
342
|
-
{ commitment: "confirmed" }
|
|
343
|
-
);
|
|
344
|
-
return () => {
|
|
345
|
-
if (id) {
|
|
346
|
-
connection.removeAccountChangeListener(id).then();
|
|
347
|
-
}
|
|
348
|
-
};
|
|
349
|
-
}, [connection, publicKey]);
|
|
350
354
|
useEffect(() => {
|
|
351
355
|
if (!solanaWallet) {
|
|
352
356
|
return;
|
|
@@ -445,7 +449,7 @@ function useEvm() {
|
|
|
445
449
|
|
|
446
450
|
// src/main.tsx
|
|
447
451
|
function Main(props) {
|
|
448
|
-
const sol = useSOL(
|
|
452
|
+
const sol = useSOL();
|
|
449
453
|
const evm = useEvm();
|
|
450
454
|
const [namespace, setNamespace] = useState(null);
|
|
451
455
|
const newNamespace = useRef();
|
|
@@ -589,7 +593,7 @@ var processChainInfo = (chainInfo) => chainInfo?.data?.rows?.map((row) => ({
|
|
|
589
593
|
blockExplorerUrl: row.explorer_base_url
|
|
590
594
|
})) || [];
|
|
591
595
|
function WalletConnectorProvider(props) {
|
|
592
|
-
return /* @__PURE__ */ React.createElement(
|
|
596
|
+
return /* @__PURE__ */ React.createElement(SolanaProvider, { ...props.solanaInitial ?? {} }, /* @__PURE__ */ React.createElement(InitEvm, { ...props.evmInitial ?? {} }, /* @__PURE__ */ React.createElement(Main, { solanaNetwork: props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet }, props.children)));
|
|
593
597
|
}
|
|
594
598
|
|
|
595
599
|
export { WalletConnectorProvider };
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","useScreen","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","signTransaction","sendTransaction","merge"],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport {\n WalletModalProvider\n} from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport { SolanaInitialProps } from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache, createDefaultWalletNotFoundHandler,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { useScreen } from \"@orderly.network/ui\";\n\nexport default function InitSolana({ children, ...props }: SolanaInitialProps) {\n const { isMobile } = useScreen();\n const network = props.network ?? WalletAdapterNetwork.Devnet;\n\n const endPoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n // return 'https://rpc.ankr.com/solana';\n return props.mainnetRpc ?? clusterApiUrl(network);\n // return 'https://svc.blockdaemon.com/solana/mainnet/native?apiKey=zpka_417399a60de542759adf31a42a30e60e_61763d0a'\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? clusterApiUrl(network);\n }\n return clusterApiUrl(network);\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n\n if (!isMobile && error instanceof WalletNotReadyError) {\n window.open(adapter?.url, '_blank');\n }\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location = (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n return (\n <ConnectionProvider endpoint={endPoint}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n}\n","import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL({ network: props.solanaNetwork });\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, useLocalStorage, useStorageLedgerAddress, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\n\n\n\nexport function useSOL({ network }: { network: WalletAdapterNetwork }) {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { connection } = useConnection();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const { setLedgerAddress } = useStorageLedgerAddress();\n const {\n signMessage,\n signTransaction,\n sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\n // 1 for open, 2 for close, null for default\n const selectModalVisibleRef = useRef<boolean>(false);\n\n const [connected, setConnected] = useState(false);\n\n const isManual = useRef(false);\n const solanaPromiseRef = useRef<{\n walletSelect: Promise<any> | null;\n connect: Promise<any> | null;\n walletSelectResolve: (value: any) => void;\n walletSelectReject: (value: any) => void;\n connectResolve: (value: any) => void;\n connectReject: (value: any) => void;\n }>({\n walletSelect: null,\n connect: null,\n walletSelectResolve: () => { },\n walletSelectReject: () => { },\n connectReject: () => { },\n connectResolve: () => { },\n });\n const ee = useEventEmitter();\n\n const initPromiseRef = () => {\n console.log(\"-- init solana promise\");\n solanaPromiseRef.current.walletSelectResolve = () => { };\n solanaPromiseRef.current.walletSelectReject = () => { };\n solanaPromiseRef.current.connectReject = () => { };\n solanaPromiseRef.current.connectReject = () => { };\n solanaPromiseRef.current.connect = null;\n solanaPromiseRef.current.walletSelect = null;\n solanaPromiseRef.current.walletSelect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.walletSelectResolve = resolve;\n solanaPromiseRef.current.walletSelectReject = reject;\n });\n solanaPromiseRef.current.connect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.connectResolve = resolve;\n solanaPromiseRef.current.connectReject = reject;\n });\n };\n\n const handleSolanaError = (e: Error) => {\n console.log(\"solan connect error\", e);\n\n if (e instanceof WalletNotReadyError) {\n if (isMobile) {\n console.log(\"-- need toast wallet not ready\", e);\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\n });\n }\n }\n solanaDisconnect().then();\n };\n\n const connect = async () => {\n initPromiseRef();\n isManual.current = true;\n if (!solanaPromiseRef.current) {\n return;\n }\n if (!solanaWallet) {\n setModalVisible(true);\n selectModalVisibleRef.current = true;\n } else {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n if (!publicKey) {\n try {\n await solanaConnect();\n } catch (e) {\n solanaPromiseRef.current.connectReject(e);\n }\n } else {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage, signTransaction, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n signTransaction,\n sendTransaction,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n };\n if (wallet.adapter.name === 'Ledger') {\n setLedgerAddress(userAddress);\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n return;\n }\n console.log(\"-- tt\");\n const userAddress = publicKey.toBase58();\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n connection,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n if (solanaWallet.adapter.name === 'Ledger') {\n setLedgerAddress(userAddress);\n }\n\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n signTransaction,\n isManual,\n connection,\n sendTransaction,\n network,\n ]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(\n publicKey,\n (updatedAccountInfo, context) => {\n console.log(\"--- account change\", updatedAccountInfo, context);\n },\n { commitment: \"confirmed\" }\n );\n\n return () => {\n if (id) {\n connection.removeAccountChangeListener(id).then();\n }\n };\n }, [connection, publicKey]);\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import InitSolana from \"./initSolana\";\nimport { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <InitSolana {...(props.solanaInitial ?? {})}>\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </InitSolana>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/SolanaProvider.tsx","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","useScreen","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","signTransaction","sendTransaction","merge"],"mappings":"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","sourcesContent":["import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL();\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, useLocalStorage, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\nimport { useSolanaContext } from \"./SolanaProvider\";\n\n\n\nexport function useSOL() {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { endpoint, network} = useSolanaContext();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const {\n signMessage,\n signTransaction,\n sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\n // 1 for open, 2 for close, null for default\n const selectModalVisibleRef = useRef<boolean>(false);\n const [ledgerWallet, setLedgerWallet] = useLocalStorage<string[]>(LedgerWalletKey, [] as string[]);\n\n const [connected, setConnected] = useState(false);\n\n const isManual = useRef(false);\n const solanaPromiseRef = useRef<{\n walletSelect: Promise<any> | null;\n connect: Promise<any> | null;\n walletSelectResolve: (value: any) => void;\n walletSelectReject: (value: any) => void;\n connectResolve: (value: any) => void;\n connectReject: (value: any) => void;\n }>({\n walletSelect: null,\n connect: null,\n walletSelectResolve: () => {},\n walletSelectReject: () => {},\n connectReject: () => {},\n connectResolve: () => {},\n });\n const ee = useEventEmitter();\n\n const initPromiseRef = () => {\n console.log(\"-- init solana promise\");\n solanaPromiseRef.current.walletSelectResolve = () => {};\n solanaPromiseRef.current.walletSelectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connect = null;\n solanaPromiseRef.current.walletSelect = null;\n solanaPromiseRef.current.walletSelect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.walletSelectResolve = resolve;\n solanaPromiseRef.current.walletSelectReject = reject;\n });\n solanaPromiseRef.current.connect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.connectResolve = resolve;\n solanaPromiseRef.current.connectReject = reject;\n });\n };\n\n const handleSolanaError = (e: Error) => {\n console.log(\"solan connect error\", e);\n\n if (e instanceof WalletNotReadyError) {\n if (isMobile) {\n console.log(\"-- need toast wallet not ready\", e);\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\n });\n }\n }\n solanaDisconnect().then();\n };\n\n const connect = async () => {\n initPromiseRef();\n isManual.current = true;\n if (!solanaPromiseRef.current) {\n return;\n }\n if (!solanaWallet) {\n setModalVisible(true);\n selectModalVisibleRef.current = true;\n } else {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n if (!publicKey) {\n try {\n await solanaConnect();\n } catch (e) {\n solanaPromiseRef.current.connectReject(e);\n }\n } else {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage,signTransaction, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n rpcUrl: endpoint,\n network: network,\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n };\n if (wallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n return;\n }\n const userAddress = publicKey.toBase58();\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n rpcUrl: endpoint,\n network: network, \n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n if (solanaWallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n signTransaction,\n isManual,\n sendTransaction,\n endpoint,\n network,\n ]);\n\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport { WalletModalProvider } from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport { SolanaInitialProps } from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { useScreen } from \"@orderly.network/ui\";\n\nconst SolanaContext = createContext<{\n network: WalletAdapterNetwork;\n endpoint: string;\n}>({\n network: WalletAdapterNetwork.Devnet,\n endpoint: '',\n});\n\nexport const useSolanaContext = () => {\n const context = useContext(SolanaContext);\n\n if (context === undefined) {\n throw new Error('useSolanaContext must be used within a SolanaProvider');\n }\n\n return context;\n};\n\nexport function SolanaProvider({ children, ...props }: SolanaInitialProps) {\n const { isMobile } = useScreen();\n const network = useMemo(() => props.network ?? WalletAdapterNetwork.Devnet, [props.network]);\n\n const endpoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n return props.mainnetRpc ?? '';\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? '';\n }\n return '';\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n\n if (!isMobile && error instanceof WalletNotReadyError) {\n window.open(adapter?.url, '_blank');\n }\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location = (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n const contextValue = useMemo(() => ({\n network,\n endpoint,\n }), [network, endpoint]);\n\n return (\n <SolanaContext.Provider value={contextValue}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </SolanaContext.Provider>\n );\n} ","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaProvider } from \"./SolanaProvider\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <SolanaProvider {...(props.solanaInitial ?? {})}>\n\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </SolanaProvider>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orderly.network/wallet-connector",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.mjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"@solana-mobile/wallet-adapter-mobile": "2.1.4",
|
|
29
29
|
"@solana/web3.js": "1.95.3",
|
|
30
30
|
"rxjs": "^7.5.5",
|
|
31
|
-
"@orderly.network/
|
|
32
|
-
"@orderly.network/
|
|
33
|
-
"@orderly.network/
|
|
34
|
-
"@orderly.network/ui": "2.0.
|
|
35
|
-
"@orderly.network/
|
|
31
|
+
"@orderly.network/core": "2.0.5",
|
|
32
|
+
"@orderly.network/utils": "2.0.5",
|
|
33
|
+
"@orderly.network/hooks": "2.0.5",
|
|
34
|
+
"@orderly.network/ui": "2.0.5",
|
|
35
|
+
"@orderly.network/types": "2.0.5"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/react": "^18.2.38",
|