@orderly.network/wallet-connector 2.5.3 → 2.6.0-alpha.0

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 CHANGED
@@ -21,6 +21,6 @@ interface WalletConnectorProviderProps {
21
21
  solanaInitial?: SolanaInitialProps;
22
22
  evmInitial?: EvmInitialProps;
23
23
  }
24
- declare function WalletConnectorProvider(props: PropsWithChildren<WalletConnectorProviderProps>): React.JSX.Element;
24
+ declare const WalletConnectorProvider: React.FC<PropsWithChildren<WalletConnectorProviderProps>>;
25
25
 
26
26
  export { WalletConnectorProvider };
package/dist/index.d.ts CHANGED
@@ -21,6 +21,6 @@ interface WalletConnectorProviderProps {
21
21
  solanaInitial?: SolanaInitialProps;
22
22
  evmInitial?: EvmInitialProps;
23
23
  }
24
- declare function WalletConnectorProvider(props: PropsWithChildren<WalletConnectorProviderProps>): React.JSX.Element;
24
+ declare const WalletConnectorProvider: React.FC<PropsWithChildren<WalletConnectorProviderProps>>;
25
25
 
26
26
  export { WalletConnectorProvider };
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
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');
7
4
  var walletAdapterBase = require('@solana/wallet-adapter-base');
5
+ var types = require('@orderly.network/types');
6
+ var walletAdapterMobile = require('@solana-mobile/wallet-adapter-mobile');
8
7
  var walletAdapterReact = require('@solana/wallet-adapter-react');
9
8
  var walletAdapterReactUi = require('@solana/wallet-adapter-react-ui');
10
- var ui = require('@orderly.network/ui');
11
- var walletAdapterMobile = require('@solana-mobile/wallet-adapter-mobile');
12
9
  var walletAdapterWallets = require('@solana/wallet-adapter-wallets');
10
+ var ui = require('@orderly.network/ui');
11
+ var utils = require('@orderly.network/utils');
13
12
  require('@solana/wallet-adapter-react-ui/styles.css');
13
+ var hooks = require('@orderly.network/hooks');
14
14
  var injectedModule = require('@web3-onboard/injected-wallets');
15
15
  var react = require('@web3-onboard/react');
16
16
  var binanceModule = require('@binance/w3w-blocknative-connector');
@@ -22,7 +22,7 @@ var React__default = /*#__PURE__*/_interopDefault(React);
22
22
  var injectedModule__default = /*#__PURE__*/_interopDefault(injectedModule);
23
23
  var binanceModule__default = /*#__PURE__*/_interopDefault(binanceModule);
24
24
 
25
- // src/main.tsx
25
+ // src/provider.tsx
26
26
  var SolanaContext = React.createContext({
27
27
  network: walletAdapterBase.WalletAdapterNetwork.Devnet,
28
28
  endpoint: ""
@@ -139,8 +139,114 @@ var initConfig = (apiKey, options) => {
139
139
  return react.init(mergedOptions);
140
140
  };
141
141
  var SolanaChains = /* @__PURE__ */ new Map([[walletAdapterBase.WalletAdapterNetwork.Devnet, 901901901], [walletAdapterBase.WalletAdapterNetwork.Mainnet, 900900900]]);
142
-
143
- // src/useSOL.tsx
142
+ function InitEvm(props) {
143
+ const [initialized, setInitialized] = React.useState(!!props.skipInit);
144
+ const { get, register } = hooks.useSimpleDI();
145
+ React.useEffect(() => {
146
+ document.body.style.setProperty("--onboard-modal-z-index", "88");
147
+ }, []);
148
+ React.useEffect(() => {
149
+ if (props.skipInit) {
150
+ return;
151
+ }
152
+ let onboardAPI = get("onboardAPI");
153
+ if (onboardAPI) {
154
+ console.log("[Orderly SDK]:onboardAPI already initialized");
155
+ setInitialized(true);
156
+ return;
157
+ }
158
+ Promise.all([
159
+ fetchChainInfo("https://testnet-api.orderly.org/v1/public/chain_info"),
160
+ fetchChainInfo("https://api.orderly.org/v1/public/chain_info")
161
+ ]).then(([testChainInfo, mainnetChainInfo]) => {
162
+ const testChains = processChainInfo(testChainInfo);
163
+ const mainnetChains = processChainInfo(mainnetChainInfo);
164
+ let options = props.options || {};
165
+ options = lodash.merge({ chains: [...testChains, ...mainnetChains] }, options);
166
+ onboardAPI = initConfig(props.apiKey, options);
167
+ register("onboardAPI", onboardAPI);
168
+ setInitialized(true);
169
+ }).catch((error) => {
170
+ console.error("Error fetching data:", error);
171
+ });
172
+ }, []);
173
+ if (!initialized)
174
+ return null;
175
+ return props.children;
176
+ }
177
+ var fetchChainInfo = async (url) => {
178
+ const response = await fetch(url);
179
+ if (!response.ok) {
180
+ throw new Error(`Failed to fetch data from ${url}`);
181
+ }
182
+ return response.json();
183
+ };
184
+ var processChainInfo = (chainInfo) => chainInfo?.data?.rows?.map((row) => ({
185
+ id: Number(row.chain_id),
186
+ token: row.currency_symbol,
187
+ label: row.name,
188
+ rpcUrl: row.public_rpc_url,
189
+ blockExplorerUrl: row.explorer_base_url
190
+ })) || [];
191
+ function useEvm() {
192
+ const [
193
+ {
194
+ wallet,
195
+ // the wallet that has been connected or null if not yet connected
196
+ connecting
197
+ // boolean indicating if connection is in progress
198
+ },
199
+ connect,
200
+ // function to call to initiate user to connect wallet
201
+ evmDisconnect,
202
+ // function to call with wallet<DisconnectOptions> to disconnect wallet
203
+ updateBalances,
204
+ // 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
205
+ setWalletModules,
206
+ // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])
207
+ setPrimaryWallet
208
+ // 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
209
+ ] = react.useConnectWallet();
210
+ const [
211
+ {
212
+ chains,
213
+ // the list of chains that web3-onboard was initialized with
214
+ connectedChain: evmConnectChain,
215
+ // the current chain the user's wallet is connected to
216
+ settingChain
217
+ // boolean indicating if the chain is in the process of being set
218
+ },
219
+ setChain
220
+ // function to call to initiate user to switch chains in their wallet
221
+ ] = react.useSetChain();
222
+ const connected = React.useMemo(() => {
223
+ return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);
224
+ }, [wallet]);
225
+ const disconnect = async () => {
226
+ console.log("-- disconnect evm xxxxxxxxxxxx");
227
+ if (!wallet) {
228
+ return;
229
+ }
230
+ return evmDisconnect({
231
+ label: wallet.label
232
+ });
233
+ };
234
+ const connectedChain = React.useMemo(() => {
235
+ return evmConnectChain ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) } : null;
236
+ }, [evmConnectChain]);
237
+ const changeChain = (chain) => {
238
+ return setChain(chain);
239
+ };
240
+ return {
241
+ connect,
242
+ connected,
243
+ disconnect,
244
+ connecting,
245
+ wallet,
246
+ connectedChain,
247
+ changeChain
248
+ };
249
+ }
144
250
  function useSOL() {
145
251
  const [wallet, setWallet] = React.useState(null);
146
252
  const { isMobile } = ui.useScreen();
@@ -402,68 +508,9 @@ function useSOL() {
402
508
  connectedChain
403
509
  };
404
510
  }
405
- function useEvm() {
406
- const [
407
- {
408
- wallet,
409
- // the wallet that has been connected or null if not yet connected
410
- connecting
411
- // boolean indicating if connection is in progress
412
- },
413
- connect,
414
- // function to call to initiate user to connect wallet
415
- evmDisconnect,
416
- // function to call with wallet<DisconnectOptions> to disconnect wallet
417
- updateBalances,
418
- // 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
419
- setWalletModules,
420
- // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])
421
- setPrimaryWallet
422
- // 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
423
- ] = react.useConnectWallet();
424
- const [
425
- {
426
- chains,
427
- // the list of chains that web3-onboard was initialized with
428
- connectedChain: evmConnectChain,
429
- // the current chain the user's wallet is connected to
430
- settingChain
431
- // boolean indicating if the chain is in the process of being set
432
- },
433
- setChain
434
- // function to call to initiate user to switch chains in their wallet
435
- ] = react.useSetChain();
436
- const connected = React.useMemo(() => {
437
- return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);
438
- }, [wallet]);
439
- const disconnect = async () => {
440
- console.log("-- disconnect evm xxxxxxxxxxxx");
441
- if (!wallet) {
442
- return;
443
- }
444
- return evmDisconnect({
445
- label: wallet.label
446
- });
447
- };
448
- const connectedChain = React.useMemo(() => {
449
- return evmConnectChain ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) } : null;
450
- }, [evmConnectChain]);
451
- const changeChain = (chain) => {
452
- return setChain(chain);
453
- };
454
- return {
455
- connect,
456
- connected,
457
- disconnect,
458
- connecting,
459
- wallet,
460
- connectedChain,
461
- changeChain
462
- };
463
- }
464
511
 
465
512
  // src/main.tsx
466
- function Main(props) {
513
+ var Main = (props) => {
467
514
  const sol = useSOL();
468
515
  const evm = useEvm();
469
516
  const [namespace, setNamespace] = React.useState(null);
@@ -472,7 +519,6 @@ function Main(props) {
472
519
  if (Array.from(SolanaChains.values()).includes(options.chainId)) {
473
520
  newNamespace.current = types.ChainNamespace.solana;
474
521
  return sol.connect().then((res) => {
475
- console.log("-- connect sol", res);
476
522
  if (res) {
477
523
  return res;
478
524
  }
@@ -483,13 +529,11 @@ function Main(props) {
483
529
  autoSelect: options.autoSelect
484
530
  } : void 0;
485
531
  return evm.connect(evmOption).then((res) => {
486
- console.log("-- connect evm", res);
487
532
  if (!res.length) {
488
533
  return Promise.reject({ message: "user reject" });
489
534
  }
490
535
  return res;
491
536
  }).catch((e) => {
492
- console.log("-- connect evm error", e);
493
537
  return Promise.reject(e);
494
538
  });
495
539
  };
@@ -510,10 +554,6 @@ function Main(props) {
510
554
  if (Array.from(SolanaChains.values()).includes(chainId)) {
511
555
  tempNamespace = types.ChainNamespace.solana;
512
556
  }
513
- console.log("--- namespace", {
514
- namespace,
515
- tempNamespace
516
- });
517
557
  if (namespace === tempNamespace && namespace === types.ChainNamespace.evm) {
518
558
  return evm.changeChain(chain);
519
559
  }
@@ -542,74 +582,40 @@ function Main(props) {
542
582
  return;
543
583
  }
544
584
  }, [newNamespace.current, sol.connected, evm.connected]);
545
- return /* @__PURE__ */ React__default.default.createElement(
546
- hooks.WalletConnectorContext.Provider,
585
+ const memoizedValue = React.useMemo(() => {
586
+ return {
587
+ connect,
588
+ disconnect,
589
+ connecting,
590
+ wallet,
591
+ setChain,
592
+ connectedChain,
593
+ namespace,
594
+ chains: [],
595
+ settingChain: false
596
+ };
597
+ }, [
598
+ connect,
599
+ disconnect,
600
+ connecting,
601
+ wallet,
602
+ setChain,
603
+ connectedChain,
604
+ namespace
605
+ ]);
606
+ return /* @__PURE__ */ React__default.default.createElement(hooks.WalletConnectorContext.Provider, { value: memoizedValue }, props.children);
607
+ };
608
+
609
+ // src/provider.tsx
610
+ var WalletConnectorProvider = (props) => {
611
+ return /* @__PURE__ */ React__default.default.createElement(SolanaProvider, { ...props.solanaInitial ?? types.EMPTY_OBJECT }, /* @__PURE__ */ React__default.default.createElement(InitEvm, { ...props.evmInitial ?? types.EMPTY_OBJECT }, /* @__PURE__ */ React__default.default.createElement(
612
+ Main,
547
613
  {
548
- value: {
549
- connect,
550
- disconnect,
551
- connecting,
552
- wallet,
553
- setChain,
554
- connectedChain,
555
- namespace
556
- }
614
+ solanaNetwork: props.solanaInitial?.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet
557
615
  },
558
616
  props.children
559
- );
560
- }
561
- function InitEvm(props) {
562
- const [initialized, setInitialized] = React.useState(!!props.skipInit);
563
- const { get, register } = hooks.useSimpleDI();
564
- React.useEffect(() => {
565
- document.body.style.setProperty("--onboard-modal-z-index", "88");
566
- }, []);
567
- React.useEffect(() => {
568
- if (props.skipInit) {
569
- return;
570
- }
571
- let onboardAPI = get("onboardAPI");
572
- if (onboardAPI) {
573
- console.log("[Orderly SDK]:onboardAPI already initialized");
574
- setInitialized(true);
575
- return;
576
- }
577
- Promise.all([
578
- fetchChainInfo("https://testnet-api.orderly.org/v1/public/chain_info"),
579
- fetchChainInfo("https://api.orderly.org/v1/public/chain_info")
580
- ]).then(([testChainInfo, mainnetChainInfo]) => {
581
- const testChains = processChainInfo(testChainInfo);
582
- const mainnetChains = processChainInfo(mainnetChainInfo);
583
- let options = props.options || {};
584
- options = lodash.merge({ chains: [...testChains, ...mainnetChains] }, options);
585
- onboardAPI = initConfig(props.apiKey, options);
586
- register("onboardAPI", onboardAPI);
587
- setInitialized(true);
588
- }).catch((error) => {
589
- console.error("Error fetching data:", error);
590
- });
591
- }, []);
592
- if (!initialized)
593
- return null;
594
- return props.children;
595
- }
596
- var fetchChainInfo = async (url) => {
597
- const response = await fetch(url);
598
- if (!response.ok) {
599
- throw new Error(`Failed to fetch data from ${url}`);
600
- }
601
- return response.json();
617
+ )));
602
618
  };
603
- var processChainInfo = (chainInfo) => chainInfo?.data?.rows?.map((row) => ({
604
- id: Number(row.chain_id),
605
- token: row.currency_symbol,
606
- label: row.name,
607
- rpcUrl: row.public_rpc_url,
608
- blockExplorerUrl: row.explorer_base_url
609
- })) || [];
610
- function WalletConnectorProvider(props) {
611
- 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)));
612
- }
613
619
 
614
620
  exports.WalletConnectorProvider = WalletConnectorProvider;
615
621
  //# sourceMappingURL=out.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.tsx","../src/useSOL.tsx","../src/SolanaProvider.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletAdapterNetwork","WalletNotReadyError","useScreen","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 {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport {\n useEventEmitter,\n useLocalStorage,\n useStorageLedgerAddress,\n WalletState,\n} from \"@orderly.network/hooks\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useSolanaContext } from \"./SolanaProvider\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\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 { 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(\n ([\n wallet,\n { userAddress, signMessage, signTransaction, sendTransaction },\n ]) => {\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 setLedgerAddress(userAddress);\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n },\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: signTransaction!,\n sendTransaction: 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 setLedgerAddress(userAddress);\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 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 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 React, { createContext, useContext, useMemo } from \"react\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache,\n SolanaMobileWalletAdapter,\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport {\n Adapter,\n WalletAdapterNetwork,\n WalletError,\n WalletNotReadyError,\n} from \"@solana/wallet-adapter-base\";\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\nimport { WalletModalProvider } from \"@solana/wallet-adapter-react-ui\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { SolanaInitialProps } from \"./types\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\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(\n () => props.network ?? WalletAdapterNetwork.Devnet,\n [props.network],\n );\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 (\n 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 );\n }, [props.wallets, network]);\n\n const contextValue = useMemo(\n () => ({\n network,\n endpoint,\n }),\n [network, endpoint],\n );\n\n return (\n <SolanaContext.Provider value={contextValue}>\n <WalletProvider\n wallets={wallets}\n onError={props.onError ?? handleSolanaError}\n autoConnect={true}\n >\n <WalletModalProvider className=\"oui-pointer-events-auto\">\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </SolanaContext.Provider>\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 { 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.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api.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/provider.tsx","../src/SolanaProvider.tsx","../src/initEvm.tsx","../src/config.ts","../src/main.tsx","../src/useEvm.tsx","../src/useSOL.tsx"],"names":["React","WalletAdapterNetwork","merge","useEffect","useMemo","useRef","useState","ChainNamespace","WalletNotReadyError","useScreen","wallet","signMessage","signTransaction","sendTransaction"],"mappings":"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","sourcesContent":["import React, { type PropsWithChildren } from \"react\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { EMPTY_OBJECT } from \"@orderly.network/types\";\nimport { SolanaProvider } from \"./SolanaProvider\";\nimport { InitEvm } from \"./initEvm\";\nimport { Main } from \"./main\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport const WalletConnectorProvider: React.FC<\n PropsWithChildren<WalletConnectorProviderProps>\n> = (props) => {\n return (\n <SolanaProvider {...(props.solanaInitial ?? EMPTY_OBJECT)}>\n <InitEvm {...(props.evmInitial ?? EMPTY_OBJECT)}>\n <Main\n solanaNetwork={\n props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet\n }\n >\n {props.children}\n </Main>\n </InitEvm>\n </SolanaProvider>\n );\n};\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache,\n SolanaMobileWalletAdapter,\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport {\n Adapter,\n WalletAdapterNetwork,\n WalletError,\n WalletNotReadyError,\n} from \"@solana/wallet-adapter-base\";\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\nimport { WalletModalProvider } from \"@solana/wallet-adapter-react-ui\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { SolanaInitialProps } from \"./types\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\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(\n () => props.network ?? WalletAdapterNetwork.Devnet,\n [props.network],\n );\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 (\n 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 );\n }, [props.wallets, network]);\n\n const contextValue = useMemo(\n () => ({\n network,\n endpoint,\n }),\n [network, endpoint],\n );\n\n return (\n <SolanaContext.Provider value={contextValue}>\n <WalletProvider\n wallets={wallets}\n onError={props.onError ?? handleSolanaError}\n autoConnect={true}\n >\n <WalletModalProvider className=\"oui-pointer-events-auto\">\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </SolanaContext.Provider>\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.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api.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","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, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport type { WalletConnectorContextState } from \"@orderly.network/hooks\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { hex2int } from \"@orderly.network/utils\";\nimport { SolanaChains } from \"./config\";\nimport { useEvm } from \"./useEvm\";\nimport { useSOL } from \"./useSOL\";\n\nexport const Main: React.FC<\n React.PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n> = (props) => {\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 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 if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((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\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 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\n const memoizedValue = useMemo<WalletConnectorContextState>(() => {\n return {\n connect: connect as any,\n disconnect: disconnect as any,\n connecting,\n wallet: wallet as any,\n setChain: setChain as any,\n connectedChain: connectedChain as any,\n namespace: namespace,\n chains: [],\n settingChain: false,\n };\n }, [\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n ]);\n\n return (\n <WalletConnectorContext.Provider value={memoizedValue}>\n {props.children}\n </WalletConnectorContext.Provider>\n );\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 { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport {\n useEventEmitter,\n useLocalStorage,\n useStorageLedgerAddress,\n WalletState,\n} from \"@orderly.network/hooks\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useSolanaContext } from \"./SolanaProvider\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\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 { 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(\n ([\n wallet,\n { userAddress, signMessage, signTransaction, sendTransaction },\n ]) => {\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 setLedgerAddress(userAddress);\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n },\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: signTransaction!,\n sendTransaction: 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 setLedgerAddress(userAddress);\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 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 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"]}
package/dist/index.mjs CHANGED
@@ -1,20 +1,20 @@
1
1
  import React, { createContext, useMemo, useState, useEffect, useRef, useContext } from 'react';
2
- import { useSimpleDI, WalletConnectorContext, useStorageLedgerAddress, useEventEmitter } from '@orderly.network/hooks';
3
- import { getGlobalObject, hex2int } from '@orderly.network/utils';
4
- import { ChainNamespace } from '@orderly.network/types';
5
2
  import { WalletAdapterNetwork, WalletNotReadyError, WalletReadyState } from '@solana/wallet-adapter-base';
3
+ import { EMPTY_OBJECT, ChainNamespace } from '@orderly.network/types';
4
+ import { SolanaMobileWalletAdapter, createDefaultAuthorizationResultCache, createDefaultAddressSelector } from '@solana-mobile/wallet-adapter-mobile';
6
5
  import { WalletProvider, useWallet } from '@solana/wallet-adapter-react';
7
6
  import { WalletModalProvider, useWalletModal } from '@solana/wallet-adapter-react-ui';
8
- import { useScreen } from '@orderly.network/ui';
9
- import { SolanaMobileWalletAdapter, createDefaultAuthorizationResultCache, createDefaultAddressSelector } from '@solana-mobile/wallet-adapter-mobile';
10
7
  import { PhantomWalletAdapter } from '@solana/wallet-adapter-wallets';
8
+ import { useScreen } from '@orderly.network/ui';
9
+ import { getGlobalObject, hex2int } from '@orderly.network/utils';
11
10
  import '@solana/wallet-adapter-react-ui/styles.css';
11
+ import { useSimpleDI, WalletConnectorContext, useStorageLedgerAddress, useEventEmitter } from '@orderly.network/hooks';
12
12
  import injectedModule from '@web3-onboard/injected-wallets';
13
13
  import { init, useConnectWallet, useSetChain } from '@web3-onboard/react';
14
14
  import binanceModule from '@binance/w3w-blocknative-connector';
15
15
  import { merge } from 'lodash';
16
16
 
17
- // src/main.tsx
17
+ // src/provider.tsx
18
18
  var SolanaContext = createContext({
19
19
  network: WalletAdapterNetwork.Devnet,
20
20
  endpoint: ""
@@ -131,8 +131,114 @@ var initConfig = (apiKey, options) => {
131
131
  return init(mergedOptions);
132
132
  };
133
133
  var SolanaChains = /* @__PURE__ */ new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);
134
-
135
- // src/useSOL.tsx
134
+ function InitEvm(props) {
135
+ const [initialized, setInitialized] = useState(!!props.skipInit);
136
+ const { get, register } = useSimpleDI();
137
+ useEffect(() => {
138
+ document.body.style.setProperty("--onboard-modal-z-index", "88");
139
+ }, []);
140
+ useEffect(() => {
141
+ if (props.skipInit) {
142
+ return;
143
+ }
144
+ let onboardAPI = get("onboardAPI");
145
+ if (onboardAPI) {
146
+ console.log("[Orderly SDK]:onboardAPI already initialized");
147
+ setInitialized(true);
148
+ return;
149
+ }
150
+ Promise.all([
151
+ fetchChainInfo("https://testnet-api.orderly.org/v1/public/chain_info"),
152
+ fetchChainInfo("https://api.orderly.org/v1/public/chain_info")
153
+ ]).then(([testChainInfo, mainnetChainInfo]) => {
154
+ const testChains = processChainInfo(testChainInfo);
155
+ const mainnetChains = processChainInfo(mainnetChainInfo);
156
+ let options = props.options || {};
157
+ options = merge({ chains: [...testChains, ...mainnetChains] }, options);
158
+ onboardAPI = initConfig(props.apiKey, options);
159
+ register("onboardAPI", onboardAPI);
160
+ setInitialized(true);
161
+ }).catch((error) => {
162
+ console.error("Error fetching data:", error);
163
+ });
164
+ }, []);
165
+ if (!initialized)
166
+ return null;
167
+ return props.children;
168
+ }
169
+ var fetchChainInfo = async (url) => {
170
+ const response = await fetch(url);
171
+ if (!response.ok) {
172
+ throw new Error(`Failed to fetch data from ${url}`);
173
+ }
174
+ return response.json();
175
+ };
176
+ var processChainInfo = (chainInfo) => chainInfo?.data?.rows?.map((row) => ({
177
+ id: Number(row.chain_id),
178
+ token: row.currency_symbol,
179
+ label: row.name,
180
+ rpcUrl: row.public_rpc_url,
181
+ blockExplorerUrl: row.explorer_base_url
182
+ })) || [];
183
+ function useEvm() {
184
+ const [
185
+ {
186
+ wallet,
187
+ // the wallet that has been connected or null if not yet connected
188
+ connecting
189
+ // boolean indicating if connection is in progress
190
+ },
191
+ connect,
192
+ // function to call to initiate user to connect wallet
193
+ evmDisconnect,
194
+ // function to call with wallet<DisconnectOptions> to disconnect wallet
195
+ updateBalances,
196
+ // 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
197
+ setWalletModules,
198
+ // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])
199
+ setPrimaryWallet
200
+ // 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
201
+ ] = useConnectWallet();
202
+ const [
203
+ {
204
+ chains,
205
+ // the list of chains that web3-onboard was initialized with
206
+ connectedChain: evmConnectChain,
207
+ // the current chain the user's wallet is connected to
208
+ settingChain
209
+ // boolean indicating if the chain is in the process of being set
210
+ },
211
+ setChain
212
+ // function to call to initiate user to switch chains in their wallet
213
+ ] = useSetChain();
214
+ const connected = useMemo(() => {
215
+ return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);
216
+ }, [wallet]);
217
+ const disconnect = async () => {
218
+ console.log("-- disconnect evm xxxxxxxxxxxx");
219
+ if (!wallet) {
220
+ return;
221
+ }
222
+ return evmDisconnect({
223
+ label: wallet.label
224
+ });
225
+ };
226
+ const connectedChain = useMemo(() => {
227
+ return evmConnectChain ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) } : null;
228
+ }, [evmConnectChain]);
229
+ const changeChain = (chain) => {
230
+ return setChain(chain);
231
+ };
232
+ return {
233
+ connect,
234
+ connected,
235
+ disconnect,
236
+ connecting,
237
+ wallet,
238
+ connectedChain,
239
+ changeChain
240
+ };
241
+ }
136
242
  function useSOL() {
137
243
  const [wallet, setWallet] = useState(null);
138
244
  const { isMobile } = useScreen();
@@ -394,68 +500,9 @@ function useSOL() {
394
500
  connectedChain
395
501
  };
396
502
  }
397
- function useEvm() {
398
- const [
399
- {
400
- wallet,
401
- // the wallet that has been connected or null if not yet connected
402
- connecting
403
- // boolean indicating if connection is in progress
404
- },
405
- connect,
406
- // function to call to initiate user to connect wallet
407
- evmDisconnect,
408
- // function to call with wallet<DisconnectOptions> to disconnect wallet
409
- updateBalances,
410
- // 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
411
- setWalletModules,
412
- // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])
413
- setPrimaryWallet
414
- // 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
415
- ] = useConnectWallet();
416
- const [
417
- {
418
- chains,
419
- // the list of chains that web3-onboard was initialized with
420
- connectedChain: evmConnectChain,
421
- // the current chain the user's wallet is connected to
422
- settingChain
423
- // boolean indicating if the chain is in the process of being set
424
- },
425
- setChain
426
- // function to call to initiate user to switch chains in their wallet
427
- ] = useSetChain();
428
- const connected = useMemo(() => {
429
- return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);
430
- }, [wallet]);
431
- const disconnect = async () => {
432
- console.log("-- disconnect evm xxxxxxxxxxxx");
433
- if (!wallet) {
434
- return;
435
- }
436
- return evmDisconnect({
437
- label: wallet.label
438
- });
439
- };
440
- const connectedChain = useMemo(() => {
441
- return evmConnectChain ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) } : null;
442
- }, [evmConnectChain]);
443
- const changeChain = (chain) => {
444
- return setChain(chain);
445
- };
446
- return {
447
- connect,
448
- connected,
449
- disconnect,
450
- connecting,
451
- wallet,
452
- connectedChain,
453
- changeChain
454
- };
455
- }
456
503
 
457
504
  // src/main.tsx
458
- function Main(props) {
505
+ var Main = (props) => {
459
506
  const sol = useSOL();
460
507
  const evm = useEvm();
461
508
  const [namespace, setNamespace] = useState(null);
@@ -464,7 +511,6 @@ function Main(props) {
464
511
  if (Array.from(SolanaChains.values()).includes(options.chainId)) {
465
512
  newNamespace.current = ChainNamespace.solana;
466
513
  return sol.connect().then((res) => {
467
- console.log("-- connect sol", res);
468
514
  if (res) {
469
515
  return res;
470
516
  }
@@ -475,13 +521,11 @@ function Main(props) {
475
521
  autoSelect: options.autoSelect
476
522
  } : void 0;
477
523
  return evm.connect(evmOption).then((res) => {
478
- console.log("-- connect evm", res);
479
524
  if (!res.length) {
480
525
  return Promise.reject({ message: "user reject" });
481
526
  }
482
527
  return res;
483
528
  }).catch((e) => {
484
- console.log("-- connect evm error", e);
485
529
  return Promise.reject(e);
486
530
  });
487
531
  };
@@ -502,10 +546,6 @@ function Main(props) {
502
546
  if (Array.from(SolanaChains.values()).includes(chainId)) {
503
547
  tempNamespace = ChainNamespace.solana;
504
548
  }
505
- console.log("--- namespace", {
506
- namespace,
507
- tempNamespace
508
- });
509
549
  if (namespace === tempNamespace && namespace === ChainNamespace.evm) {
510
550
  return evm.changeChain(chain);
511
551
  }
@@ -534,74 +574,40 @@ function Main(props) {
534
574
  return;
535
575
  }
536
576
  }, [newNamespace.current, sol.connected, evm.connected]);
537
- return /* @__PURE__ */ React.createElement(
538
- WalletConnectorContext.Provider,
577
+ const memoizedValue = useMemo(() => {
578
+ return {
579
+ connect,
580
+ disconnect,
581
+ connecting,
582
+ wallet,
583
+ setChain,
584
+ connectedChain,
585
+ namespace,
586
+ chains: [],
587
+ settingChain: false
588
+ };
589
+ }, [
590
+ connect,
591
+ disconnect,
592
+ connecting,
593
+ wallet,
594
+ setChain,
595
+ connectedChain,
596
+ namespace
597
+ ]);
598
+ return /* @__PURE__ */ React.createElement(WalletConnectorContext.Provider, { value: memoizedValue }, props.children);
599
+ };
600
+
601
+ // src/provider.tsx
602
+ var WalletConnectorProvider = (props) => {
603
+ return /* @__PURE__ */ React.createElement(SolanaProvider, { ...props.solanaInitial ?? EMPTY_OBJECT }, /* @__PURE__ */ React.createElement(InitEvm, { ...props.evmInitial ?? EMPTY_OBJECT }, /* @__PURE__ */ React.createElement(
604
+ Main,
539
605
  {
540
- value: {
541
- connect,
542
- disconnect,
543
- connecting,
544
- wallet,
545
- setChain,
546
- connectedChain,
547
- namespace
548
- }
606
+ solanaNetwork: props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet
549
607
  },
550
608
  props.children
551
- );
552
- }
553
- function InitEvm(props) {
554
- const [initialized, setInitialized] = useState(!!props.skipInit);
555
- const { get, register } = useSimpleDI();
556
- useEffect(() => {
557
- document.body.style.setProperty("--onboard-modal-z-index", "88");
558
- }, []);
559
- useEffect(() => {
560
- if (props.skipInit) {
561
- return;
562
- }
563
- let onboardAPI = get("onboardAPI");
564
- if (onboardAPI) {
565
- console.log("[Orderly SDK]:onboardAPI already initialized");
566
- setInitialized(true);
567
- return;
568
- }
569
- Promise.all([
570
- fetchChainInfo("https://testnet-api.orderly.org/v1/public/chain_info"),
571
- fetchChainInfo("https://api.orderly.org/v1/public/chain_info")
572
- ]).then(([testChainInfo, mainnetChainInfo]) => {
573
- const testChains = processChainInfo(testChainInfo);
574
- const mainnetChains = processChainInfo(mainnetChainInfo);
575
- let options = props.options || {};
576
- options = merge({ chains: [...testChains, ...mainnetChains] }, options);
577
- onboardAPI = initConfig(props.apiKey, options);
578
- register("onboardAPI", onboardAPI);
579
- setInitialized(true);
580
- }).catch((error) => {
581
- console.error("Error fetching data:", error);
582
- });
583
- }, []);
584
- if (!initialized)
585
- return null;
586
- return props.children;
587
- }
588
- var fetchChainInfo = async (url) => {
589
- const response = await fetch(url);
590
- if (!response.ok) {
591
- throw new Error(`Failed to fetch data from ${url}`);
592
- }
593
- return response.json();
609
+ )));
594
610
  };
595
- var processChainInfo = (chainInfo) => chainInfo?.data?.rows?.map((row) => ({
596
- id: Number(row.chain_id),
597
- token: row.currency_symbol,
598
- label: row.name,
599
- rpcUrl: row.public_rpc_url,
600
- blockExplorerUrl: row.explorer_base_url
601
- })) || [];
602
- function WalletConnectorProvider(props) {
603
- 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)));
604
- }
605
611
 
606
612
  export { WalletConnectorProvider };
607
613
  //# sourceMappingURL=out.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.tsx","../src/useSOL.tsx","../src/SolanaProvider.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletAdapterNetwork","WalletNotReadyError","useScreen","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 {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport {\n useEventEmitter,\n useLocalStorage,\n useStorageLedgerAddress,\n WalletState,\n} from \"@orderly.network/hooks\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useSolanaContext } from \"./SolanaProvider\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\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 { 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(\n ([\n wallet,\n { userAddress, signMessage, signTransaction, sendTransaction },\n ]) => {\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 setLedgerAddress(userAddress);\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n },\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: signTransaction!,\n sendTransaction: 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 setLedgerAddress(userAddress);\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 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 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 React, { createContext, useContext, useMemo } from \"react\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache,\n SolanaMobileWalletAdapter,\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport {\n Adapter,\n WalletAdapterNetwork,\n WalletError,\n WalletNotReadyError,\n} from \"@solana/wallet-adapter-base\";\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\nimport { WalletModalProvider } from \"@solana/wallet-adapter-react-ui\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { SolanaInitialProps } from \"./types\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\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(\n () => props.network ?? WalletAdapterNetwork.Devnet,\n [props.network],\n );\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 (\n 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 );\n }, [props.wallets, network]);\n\n const contextValue = useMemo(\n () => ({\n network,\n endpoint,\n }),\n [network, endpoint],\n );\n\n return (\n <SolanaContext.Provider value={contextValue}>\n <WalletProvider\n wallets={wallets}\n onError={props.onError ?? handleSolanaError}\n autoConnect={true}\n >\n <WalletModalProvider className=\"oui-pointer-events-auto\">\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </SolanaContext.Provider>\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 { 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.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api.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/provider.tsx","../src/SolanaProvider.tsx","../src/initEvm.tsx","../src/config.ts","../src/main.tsx","../src/useEvm.tsx","../src/useSOL.tsx"],"names":["React","WalletAdapterNetwork","merge","useEffect","useMemo","useRef","useState","ChainNamespace","WalletNotReadyError","useScreen","wallet","signMessage","signTransaction","sendTransaction"],"mappings":"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","sourcesContent":["import React, { type PropsWithChildren } from \"react\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { EMPTY_OBJECT } from \"@orderly.network/types\";\nimport { SolanaProvider } from \"./SolanaProvider\";\nimport { InitEvm } from \"./initEvm\";\nimport { Main } from \"./main\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport const WalletConnectorProvider: React.FC<\n PropsWithChildren<WalletConnectorProviderProps>\n> = (props) => {\n return (\n <SolanaProvider {...(props.solanaInitial ?? EMPTY_OBJECT)}>\n <InitEvm {...(props.evmInitial ?? EMPTY_OBJECT)}>\n <Main\n solanaNetwork={\n props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet\n }\n >\n {props.children}\n </Main>\n </InitEvm>\n </SolanaProvider>\n );\n};\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache,\n SolanaMobileWalletAdapter,\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport {\n Adapter,\n WalletAdapterNetwork,\n WalletError,\n WalletNotReadyError,\n} from \"@solana/wallet-adapter-base\";\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\nimport { WalletModalProvider } from \"@solana/wallet-adapter-react-ui\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { SolanaInitialProps } from \"./types\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\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(\n () => props.network ?? WalletAdapterNetwork.Devnet,\n [props.network],\n );\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 (\n 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 );\n }, [props.wallets, network]);\n\n const contextValue = useMemo(\n () => ({\n network,\n endpoint,\n }),\n [network, endpoint],\n );\n\n return (\n <SolanaContext.Provider value={contextValue}>\n <WalletProvider\n wallets={wallets}\n onError={props.onError ?? handleSolanaError}\n autoConnect={true}\n >\n <WalletModalProvider className=\"oui-pointer-events-auto\">\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </SolanaContext.Provider>\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.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api.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","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, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport type { WalletConnectorContextState } from \"@orderly.network/hooks\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { hex2int } from \"@orderly.network/utils\";\nimport { SolanaChains } from \"./config\";\nimport { useEvm } from \"./useEvm\";\nimport { useSOL } from \"./useSOL\";\n\nexport const Main: React.FC<\n React.PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n> = (props) => {\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 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 if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((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\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 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\n const memoizedValue = useMemo<WalletConnectorContextState>(() => {\n return {\n connect: connect as any,\n disconnect: disconnect as any,\n connecting,\n wallet: wallet as any,\n setChain: setChain as any,\n connectedChain: connectedChain as any,\n namespace: namespace,\n chains: [],\n settingChain: false,\n };\n }, [\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n ]);\n\n return (\n <WalletConnectorContext.Provider value={memoizedValue}>\n {props.children}\n </WalletConnectorContext.Provider>\n );\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 { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport {\n useEventEmitter,\n useLocalStorage,\n useStorageLedgerAddress,\n WalletState,\n} from \"@orderly.network/hooks\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useSolanaContext } from \"./SolanaProvider\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\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 { 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(\n ([\n wallet,\n { userAddress, signMessage, signTransaction, sendTransaction },\n ]) => {\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 setLedgerAddress(userAddress);\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n },\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: signTransaction!,\n sendTransaction: 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 setLedgerAddress(userAddress);\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 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 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/wallet-connector",
3
- "version": "2.5.3",
3
+ "version": "2.6.0-alpha.0",
4
4
  "description": "",
5
5
  "main": "dist/index.mjs",
6
6
  "module": "dist/index.mjs",
@@ -25,17 +25,17 @@
25
25
  "@solana-mobile/wallet-adapter-mobile": "^2.1.4",
26
26
  "@solana/web3.js": "^1.95.3",
27
27
  "rxjs": "^7.5.5",
28
- "@orderly.network/hooks": "2.5.3",
29
- "@orderly.network/utils": "2.5.3",
30
- "@orderly.network/ui": "2.5.3",
31
- "@orderly.network/core": "2.5.3",
32
- "@orderly.network/types": "2.5.3"
28
+ "@orderly.network/hooks": "2.6.0-alpha.0",
29
+ "@orderly.network/types": "2.6.0-alpha.0",
30
+ "@orderly.network/utils": "2.6.0-alpha.0",
31
+ "@orderly.network/ui": "2.6.0-alpha.0",
32
+ "@orderly.network/core": "2.6.0-alpha.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/react": "^18.2.38",
36
36
  "react": "^18.2.0",
37
37
  "tsup": "^7.1.0",
38
- "tsconfig": "0.8.3"
38
+ "tsconfig": "0.9.0-alpha.0"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=18"