@orderly.network/wallet-connector 2.0.2 → 2.0.3

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.js CHANGED
@@ -9,9 +9,9 @@ require('@solana/wallet-adapter-react-ui/styles.css');
9
9
  var walletAdapterMobile = require('@solana-mobile/wallet-adapter-mobile');
10
10
  var walletAdapterWallets = require('@solana/wallet-adapter-wallets');
11
11
  var utils = require('@orderly.network/utils');
12
+ var ui = require('@orderly.network/ui');
12
13
  var hooks = require('@orderly.network/hooks');
13
14
  var types = require('@orderly.network/types');
14
- var ui = require('@orderly.network/ui');
15
15
  var injectedModule = require('@web3-onboard/injected-wallets');
16
16
  var react = require('@web3-onboard/react');
17
17
  var binanceModule = require('@binance/w3w-blocknative-connector');
@@ -25,6 +25,7 @@ var binanceModule__default = /*#__PURE__*/_interopDefault(binanceModule);
25
25
 
26
26
  // src/initSolana.tsx
27
27
  function InitSolana({ children, ...props }) {
28
+ const { isMobile } = ui.useScreen();
28
29
  const network = props.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet;
29
30
  const endPoint = React.useMemo(() => {
30
31
  if (network === walletAdapterBase.WalletAdapterNetwork.Mainnet) {
@@ -42,6 +43,9 @@ function InitSolana({ children, ...props }) {
42
43
  const handleSolanaError = (error, adapter) => {
43
44
  console.log("-- solanan error", error);
44
45
  console.log("-- solana adapter", adapter);
46
+ if (!isMobile && error instanceof walletAdapterBase.WalletNotReadyError) {
47
+ window.open(adapter?.url, "_blank");
48
+ }
45
49
  };
46
50
  const wallets = React.useMemo(() => {
47
51
  let uri = "";
@@ -116,6 +120,7 @@ function useSOL({ network }) {
116
120
  const { setVisible: setModalVisible, visible } = walletAdapterReactUi.useWalletModal();
117
121
  const {
118
122
  signMessage,
123
+ signTransaction,
119
124
  sendTransaction,
120
125
  publicKey,
121
126
  wallet: solanaWallet,
@@ -124,6 +129,7 @@ function useSOL({ network }) {
124
129
  connecting
125
130
  } = walletAdapterReact.useWallet();
126
131
  const selectModalVisibleRef = React.useRef(false);
132
+ const [ledgerWallet, setLedgerWallet] = hooks.useLocalStorage(types.LedgerWalletKey, []);
127
133
  const [connected, setConnected] = React.useState(false);
128
134
  const isManual = React.useRef(false);
129
135
  const solanaPromiseRef = React.useRef({
@@ -163,10 +169,12 @@ function useSOL({ network }) {
163
169
  const handleSolanaError = (e) => {
164
170
  console.log("solan connect error", e);
165
171
  if (e instanceof walletAdapterBase.WalletNotReadyError) {
166
- console.log("-- need toast wallet not ready");
167
- ee.emit("wallet:connect-error", {
168
- message: "Please open the wallet app and use the in-app browser."
169
- });
172
+ if (isMobile) {
173
+ console.log("-- need toast wallet not ready", e);
174
+ ee.emit("wallet:connect-error", {
175
+ message: "Please open the wallet app and use the in-app browser."
176
+ });
177
+ }
170
178
  }
171
179
  solanaDisconnect().then();
172
180
  };
@@ -191,6 +199,7 @@ function useSOL({ network }) {
191
199
  solanaPromiseRef.current.connectResolve({
192
200
  userAddress: publicKey.toBase58(),
193
201
  signMessage,
202
+ signTransaction,
194
203
  sendTransaction
195
204
  });
196
205
  }
@@ -199,13 +208,14 @@ function useSOL({ network }) {
199
208
  return Promise.all([
200
209
  solanaPromiseRef.current.walletSelect,
201
210
  solanaPromiseRef.current.connect
202
- ]).then(([wallet2, { userAddress, signMessage: signMessage2, sendTransaction: sendTransaction2 }]) => {
211
+ ]).then(([wallet2, { userAddress, signMessage: signMessage2, signTransaction: signTransaction2, sendTransaction: sendTransaction2 }]) => {
203
212
  const tempWallet = {
204
213
  label: wallet2.adapter.name,
205
214
  icon: "",
206
215
  provider: {
207
216
  signMessage: signMessage2,
208
217
  connection,
218
+ signTransaction: signTransaction2,
209
219
  sendTransaction: sendTransaction2
210
220
  },
211
221
  accounts: [
@@ -220,6 +230,12 @@ function useSOL({ network }) {
220
230
  }
221
231
  ]
222
232
  };
233
+ if (wallet2.adapter.name === "Ledger") {
234
+ if (!ledgerWallet.includes(userAddress)) {
235
+ ledgerWallet.push(userAddress);
236
+ setLedgerWallet([...ledgerWallet]);
237
+ }
238
+ }
223
239
  setWallet(tempWallet);
224
240
  setConnected(true);
225
241
  return [tempWallet];
@@ -282,23 +298,26 @@ function useSOL({ network }) {
282
298
  solanaPromiseRef.current.connectResolve({
283
299
  userAddress: publicKey?.toBase58(),
284
300
  signMessage,
301
+ signTransaction,
285
302
  sendTransaction
286
303
  });
287
304
  }
288
305
  return;
289
306
  }
290
307
  console.log("-- tt");
308
+ const userAddress = publicKey.toBase58();
291
309
  setWallet({
292
310
  label: solanaWallet.adapter.name,
293
311
  icon: "",
294
312
  provider: {
295
313
  signMessage,
296
- connection,
297
- sendTransaction
314
+ signTransaction,
315
+ sendTransaction,
316
+ connection
298
317
  },
299
318
  accounts: [
300
319
  {
301
- address: publicKey.toBase58()
320
+ address: userAddress
302
321
  }
303
322
  ],
304
323
  chains: [
@@ -308,11 +327,18 @@ function useSOL({ network }) {
308
327
  }
309
328
  ]
310
329
  });
330
+ if (solanaWallet.adapter.name === "Ledger") {
331
+ if (!ledgerWallet.includes(userAddress)) {
332
+ ledgerWallet.push(userAddress);
333
+ setLedgerWallet([...ledgerWallet]);
334
+ }
335
+ }
311
336
  setConnected(true);
312
337
  }, [
313
338
  publicKey,
314
339
  solanaWallet,
315
340
  signMessage,
341
+ signTransaction,
316
342
  isManual,
317
343
  connection,
318
344
  sendTransaction,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","sendTransaction","merge"],"mappings":"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","sourcesContent":["import React, {useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport {\n WalletModalProvider\n} from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport {SolanaInitialProps} from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache, createDefaultWalletNotFoundHandler,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\n\nexport default function InitSolana({ children, ...props }:SolanaInitialProps) {\n const network =props.network ?? WalletAdapterNetwork.Devnet;\n const endPoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n // return 'https://rpc.ankr.com/solana';\n return props.mainnetRpc ?? clusterApiUrl(network);\n // return 'https://svc.blockdaemon.com/solana/mainnet/native?apiKey=zpka_417399a60de542759adf31a42a30e60e_61763d0a'\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? clusterApiUrl(network);\n }\n return clusterApiUrl(network);\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location= (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n return (\n <ConnectionProvider endpoint={endPoint}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n}\n","import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL({ network: props.solanaNetwork });\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\n\nexport function useSOL({ network }: { network: WalletAdapterNetwork }) {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { connection } = useConnection();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const {\n signMessage,\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 console.log(\"-- need toast wallet not ready\");\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\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 sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n 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 setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n sendTransaction,\n });\n }\n return;\n }\n console.log(\"-- tt\");\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n sendTransaction,\n },\n accounts: [\n {\n address: publicKey.toBase58(),\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n isManual,\n connection,\n sendTransaction,\n network,\n ]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(\n publicKey,\n (updatedAccountInfo, context) => {\n console.log(\"--- account change\", updatedAccountInfo, context);\n },\n { commitment: \"confirmed\" }\n );\n\n return () => {\n if (id) {\n connection.removeAccountChangeListener(id).then();\n }\n };\n }, [connection, publicKey]);\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import InitSolana from \"./initSolana\";\nimport { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <InitSolana {...(props.solanaInitial ?? {})}>\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </InitSolana>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
1
+ {"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","useScreen","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","signTransaction","sendTransaction","merge"],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport {\n WalletModalProvider\n} from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport { SolanaInitialProps } from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache, createDefaultWalletNotFoundHandler,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { useScreen } from \"@orderly.network/ui\";\n\nexport default function InitSolana({ children, ...props }: SolanaInitialProps) {\n const { isMobile } = useScreen();\n const network = props.network ?? WalletAdapterNetwork.Devnet;\n\n const endPoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n // return 'https://rpc.ankr.com/solana';\n return props.mainnetRpc ?? clusterApiUrl(network);\n // return 'https://svc.blockdaemon.com/solana/mainnet/native?apiKey=zpka_417399a60de542759adf31a42a30e60e_61763d0a'\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? clusterApiUrl(network);\n }\n return clusterApiUrl(network);\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n\n if (!isMobile && error instanceof WalletNotReadyError) {\n window.open(adapter?.url, '_blank');\n }\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location = (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n return (\n <ConnectionProvider endpoint={endPoint}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n}\n","import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL({ network: props.solanaNetwork });\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, useLocalStorage, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\n\n\n\nexport function useSOL({ network }: { network: WalletAdapterNetwork }) {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { connection } = useConnection();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const {\n signMessage,\n signTransaction,\n sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\n // 1 for open, 2 for close, null for default\n const selectModalVisibleRef = useRef<boolean>(false);\n const [ledgerWallet, setLedgerWallet] = useLocalStorage<string[]>(LedgerWalletKey, [] as string[]);\n\n const [connected, setConnected] = useState(false);\n\n const isManual = useRef(false);\n const solanaPromiseRef = useRef<{\n walletSelect: Promise<any> | null;\n connect: Promise<any> | null;\n walletSelectResolve: (value: any) => void;\n walletSelectReject: (value: any) => void;\n connectResolve: (value: any) => void;\n connectReject: (value: any) => void;\n }>({\n walletSelect: null,\n connect: null,\n walletSelectResolve: () => {},\n walletSelectReject: () => {},\n connectReject: () => {},\n connectResolve: () => {},\n });\n const ee = useEventEmitter();\n\n const initPromiseRef = () => {\n console.log(\"-- init solana promise\");\n solanaPromiseRef.current.walletSelectResolve = () => {};\n solanaPromiseRef.current.walletSelectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connect = null;\n solanaPromiseRef.current.walletSelect = null;\n solanaPromiseRef.current.walletSelect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.walletSelectResolve = resolve;\n solanaPromiseRef.current.walletSelectReject = reject;\n });\n solanaPromiseRef.current.connect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.connectResolve = resolve;\n solanaPromiseRef.current.connectReject = reject;\n });\n };\n\n const handleSolanaError = (e: Error) => {\n console.log(\"solan connect error\", e);\n\n if (e instanceof WalletNotReadyError) {\n if (isMobile) {\n console.log(\"-- need toast wallet not ready\", e);\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\n });\n }\n }\n solanaDisconnect().then();\n };\n\n const connect = async () => {\n initPromiseRef();\n isManual.current = true;\n if (!solanaPromiseRef.current) {\n return;\n }\n if (!solanaWallet) {\n setModalVisible(true);\n selectModalVisibleRef.current = true;\n } else {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n if (!publicKey) {\n try {\n await solanaConnect();\n } catch (e) {\n solanaPromiseRef.current.connectReject(e);\n }\n } else {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage,signTransaction, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n signTransaction,\n sendTransaction,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n };\n if (wallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n return;\n }\n console.log(\"-- tt\");\n const userAddress = publicKey.toBase58();\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n connection,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n if (solanaWallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n signTransaction,\n isManual,\n connection,\n sendTransaction,\n network,\n ]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(\n publicKey,\n (updatedAccountInfo, context) => {\n console.log(\"--- account change\", updatedAccountInfo, context);\n },\n { commitment: \"confirmed\" }\n );\n\n return () => {\n if (id) {\n connection.removeAccountChangeListener(id).then();\n }\n };\n }, [connection, publicKey]);\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import InitSolana from \"./initSolana\";\nimport { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <InitSolana {...(props.solanaInitial ?? {})}>\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </InitSolana>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
package/dist/index.mjs CHANGED
@@ -7,9 +7,9 @@ import '@solana/wallet-adapter-react-ui/styles.css';
7
7
  import { SolanaMobileWalletAdapter, createDefaultAddressSelector, createDefaultAuthorizationResultCache } from '@solana-mobile/wallet-adapter-mobile';
8
8
  import { PhantomWalletAdapter } from '@solana/wallet-adapter-wallets';
9
9
  import { getGlobalObject, hex2int } from '@orderly.network/utils';
10
- import { WalletConnectorContext, useSimpleDI, useEventEmitter } from '@orderly.network/hooks';
11
- import { ChainNamespace } from '@orderly.network/types';
12
10
  import { useScreen } from '@orderly.network/ui';
11
+ import { WalletConnectorContext, useSimpleDI, useLocalStorage, useEventEmitter } from '@orderly.network/hooks';
12
+ import { ChainNamespace, LedgerWalletKey } from '@orderly.network/types';
13
13
  import injectedModule from '@web3-onboard/injected-wallets';
14
14
  import { init, useConnectWallet, useSetChain } from '@web3-onboard/react';
15
15
  import binanceModule from '@binance/w3w-blocknative-connector';
@@ -17,6 +17,7 @@ import { merge } from 'lodash';
17
17
 
18
18
  // src/initSolana.tsx
19
19
  function InitSolana({ children, ...props }) {
20
+ const { isMobile } = useScreen();
20
21
  const network = props.network ?? WalletAdapterNetwork.Devnet;
21
22
  const endPoint = useMemo(() => {
22
23
  if (network === WalletAdapterNetwork.Mainnet) {
@@ -34,6 +35,9 @@ function InitSolana({ children, ...props }) {
34
35
  const handleSolanaError = (error, adapter) => {
35
36
  console.log("-- solanan error", error);
36
37
  console.log("-- solana adapter", adapter);
38
+ if (!isMobile && error instanceof WalletNotReadyError) {
39
+ window.open(adapter?.url, "_blank");
40
+ }
37
41
  };
38
42
  const wallets = useMemo(() => {
39
43
  let uri = "";
@@ -108,6 +112,7 @@ function useSOL({ network }) {
108
112
  const { setVisible: setModalVisible, visible } = useWalletModal();
109
113
  const {
110
114
  signMessage,
115
+ signTransaction,
111
116
  sendTransaction,
112
117
  publicKey,
113
118
  wallet: solanaWallet,
@@ -116,6 +121,7 @@ function useSOL({ network }) {
116
121
  connecting
117
122
  } = useWallet();
118
123
  const selectModalVisibleRef = useRef(false);
124
+ const [ledgerWallet, setLedgerWallet] = useLocalStorage(LedgerWalletKey, []);
119
125
  const [connected, setConnected] = useState(false);
120
126
  const isManual = useRef(false);
121
127
  const solanaPromiseRef = useRef({
@@ -155,10 +161,12 @@ function useSOL({ network }) {
155
161
  const handleSolanaError = (e) => {
156
162
  console.log("solan connect error", e);
157
163
  if (e instanceof WalletNotReadyError) {
158
- console.log("-- need toast wallet not ready");
159
- ee.emit("wallet:connect-error", {
160
- message: "Please open the wallet app and use the in-app browser."
161
- });
164
+ if (isMobile) {
165
+ console.log("-- need toast wallet not ready", e);
166
+ ee.emit("wallet:connect-error", {
167
+ message: "Please open the wallet app and use the in-app browser."
168
+ });
169
+ }
162
170
  }
163
171
  solanaDisconnect().then();
164
172
  };
@@ -183,6 +191,7 @@ function useSOL({ network }) {
183
191
  solanaPromiseRef.current.connectResolve({
184
192
  userAddress: publicKey.toBase58(),
185
193
  signMessage,
194
+ signTransaction,
186
195
  sendTransaction
187
196
  });
188
197
  }
@@ -191,13 +200,14 @@ function useSOL({ network }) {
191
200
  return Promise.all([
192
201
  solanaPromiseRef.current.walletSelect,
193
202
  solanaPromiseRef.current.connect
194
- ]).then(([wallet2, { userAddress, signMessage: signMessage2, sendTransaction: sendTransaction2 }]) => {
203
+ ]).then(([wallet2, { userAddress, signMessage: signMessage2, signTransaction: signTransaction2, sendTransaction: sendTransaction2 }]) => {
195
204
  const tempWallet = {
196
205
  label: wallet2.adapter.name,
197
206
  icon: "",
198
207
  provider: {
199
208
  signMessage: signMessage2,
200
209
  connection,
210
+ signTransaction: signTransaction2,
201
211
  sendTransaction: sendTransaction2
202
212
  },
203
213
  accounts: [
@@ -212,6 +222,12 @@ function useSOL({ network }) {
212
222
  }
213
223
  ]
214
224
  };
225
+ if (wallet2.adapter.name === "Ledger") {
226
+ if (!ledgerWallet.includes(userAddress)) {
227
+ ledgerWallet.push(userAddress);
228
+ setLedgerWallet([...ledgerWallet]);
229
+ }
230
+ }
215
231
  setWallet(tempWallet);
216
232
  setConnected(true);
217
233
  return [tempWallet];
@@ -274,23 +290,26 @@ function useSOL({ network }) {
274
290
  solanaPromiseRef.current.connectResolve({
275
291
  userAddress: publicKey?.toBase58(),
276
292
  signMessage,
293
+ signTransaction,
277
294
  sendTransaction
278
295
  });
279
296
  }
280
297
  return;
281
298
  }
282
299
  console.log("-- tt");
300
+ const userAddress = publicKey.toBase58();
283
301
  setWallet({
284
302
  label: solanaWallet.adapter.name,
285
303
  icon: "",
286
304
  provider: {
287
305
  signMessage,
288
- connection,
289
- sendTransaction
306
+ signTransaction,
307
+ sendTransaction,
308
+ connection
290
309
  },
291
310
  accounts: [
292
311
  {
293
- address: publicKey.toBase58()
312
+ address: userAddress
294
313
  }
295
314
  ],
296
315
  chains: [
@@ -300,11 +319,18 @@ function useSOL({ network }) {
300
319
  }
301
320
  ]
302
321
  });
322
+ if (solanaWallet.adapter.name === "Ledger") {
323
+ if (!ledgerWallet.includes(userAddress)) {
324
+ ledgerWallet.push(userAddress);
325
+ setLedgerWallet([...ledgerWallet]);
326
+ }
327
+ }
303
328
  setConnected(true);
304
329
  }, [
305
330
  publicKey,
306
331
  solanaWallet,
307
332
  signMessage,
333
+ signTransaction,
308
334
  isManual,
309
335
  connection,
310
336
  sendTransaction,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","sendTransaction","merge"],"mappings":"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","sourcesContent":["import React, {useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport {\n WalletModalProvider\n} from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport {SolanaInitialProps} from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache, createDefaultWalletNotFoundHandler,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\n\nexport default function InitSolana({ children, ...props }:SolanaInitialProps) {\n const network =props.network ?? WalletAdapterNetwork.Devnet;\n const endPoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n // return 'https://rpc.ankr.com/solana';\n return props.mainnetRpc ?? clusterApiUrl(network);\n // return 'https://svc.blockdaemon.com/solana/mainnet/native?apiKey=zpka_417399a60de542759adf31a42a30e60e_61763d0a'\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? clusterApiUrl(network);\n }\n return clusterApiUrl(network);\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location= (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n return (\n <ConnectionProvider endpoint={endPoint}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n}\n","import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL({ network: props.solanaNetwork });\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\n\nexport function useSOL({ network }: { network: WalletAdapterNetwork }) {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { connection } = useConnection();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const {\n signMessage,\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 console.log(\"-- need toast wallet not ready\");\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\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 sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n 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 setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n sendTransaction,\n });\n }\n return;\n }\n console.log(\"-- tt\");\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n sendTransaction,\n },\n accounts: [\n {\n address: publicKey.toBase58(),\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n isManual,\n connection,\n sendTransaction,\n network,\n ]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(\n publicKey,\n (updatedAccountInfo, context) => {\n console.log(\"--- account change\", updatedAccountInfo, context);\n },\n { commitment: \"confirmed\" }\n );\n\n return () => {\n if (id) {\n connection.removeAccountChangeListener(id).then();\n }\n };\n }, [connection, publicKey]);\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import InitSolana from \"./initSolana\";\nimport { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <InitSolana {...(props.solanaInitial ?? {})}>\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </InitSolana>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
1
+ {"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","useScreen","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","signTransaction","sendTransaction","merge"],"mappings":";AAAA,OAAO,SAAS,eAAe;AAC/B,SAAS,oBAAoB,sBAAsB;AACnD,SAAkB,sBAAmC,2BAA2B;AAChF;AAAA,EACE;AAAA,OACK;AACP,SAAS,qBAAqB;AAC9B,OAAO;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAChC,SAAS,iBAAiB;AAEX,SAAR,WAA4B,EAAE,UAAU,GAAG,MAAM,GAAuB;AAC7E,QAAM,EAAE,SAAS,IAAI,UAAU;AAC/B,QAAM,UAAU,MAAM,WAAW,qBAAqB;AAEtD,QAAM,WAAW,QAAQ,MAAM;AAC7B,QAAI,YAAY,qBAAqB,SAAS;AAE5C,aAAO,MAAM,cAAc,cAAc,OAAO;AAAA,IAElD;AACA,QAAI,YAAY,qBAAqB,QAAQ;AAC3C,aAAO,MAAM,aAAa,cAAc,OAAO;AAAA,IACjD;AACA,WAAO,cAAc,OAAO;AAAA,EAC9B,GAAG,CAAC,SAAS,MAAM,YAAY,MAAM,SAAS,CAAC;AAE/C,QAAM,8BAA8B,CAAC,YAAuC;AAC1E,YAAQ,IAAI,4BAA4B,OAAO;AAE/C,WAAO,QAAQ,OAAO,IAAI,oBAAoB,kBAAkB,CAAC;AAAA,EACnE;AAGA,QAAM,oBAAoB,CAAC,OAAoB,YAAsB;AACnE,YAAQ,IAAI,oBAAoB,KAAK;AACrC,YAAQ,IAAI,qBAAqB,OAAO;AAExC,QAAI,CAAC,YAAY,iBAAiB,qBAAqB;AACrD,aAAO,KAAK,SAAS,KAAK,QAAQ;AAAA,IACpC;AAAA,EACF;AAEA,QAAM,UAAU,QAAQ,MAAM;AAC5B,QAAI,MAAM;AACV,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,WAAY,gBAAgB,EAAU;AAC5C,YAAM,GAAG,SAAS,QAAQ,KAAK,SAAS,IAAI;AAAA,IAC9C;AAIA,WAAO,MAAM,WAAW;AAAA,MACtB,IAAI,qBAAqB;AAAA,MACzB,IAAI,0BAA0B;AAAA,QAC5B,iBAAiB,6BAA6B;AAAA,QAC9C,aAAa;AAAA,UACX;AAAA,QACF;AAAA,QACA,0BAA0B,sCAAsC;AAAA,QAChE,OAAO;AAAA,QACP,kBAAkB;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,MAAM,SAAS,OAAO,CAAC;AAE3B,SACE,oCAAC,sBAAmB,UAAU,YAC5B,oCAAC,kBAAe,SAAkB,SAAS,MAAM,WAAW,qBAC1D,oCAAC,uBAAoB,WAAU,6BAE5B,QACH,CACF,CACF;AAEJ;;;ACnFA,OAAOA;AAAA,EAEL,aAAAC;AAAA,EAEA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AACP,SAAS,8BAA8B;AACvC,SAAS,eAAwB;AACjC,SAAS,kBAAAC,uBAAsB;;;ACT/B,SAAS,WAAW,WAAAC,UAAS,QAAQ,gBAAgB;AACrD,SAAS,eAAe,iBAAiB;AACzC,SAAS,sBAAsB;AAC/B,SAAS,gBAAgB,uBAAuB;AAChD,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,iBAAiB,uBAAoC;AAC9D;AAAA,EACE,wBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA;AAAA,OACK;;;ACVP,OAAO,oBAAoB;AAC3B,SAAS,YAAY;AAErB,OAAO,mBAAmB;AAE1B,SAAS,aAAa;AACtB,SAAS,wBAAAD,6BAA4B;AAGrC,IAAM,UAAU,cAAc,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,CAAC;AAGjD,IAAM,aAGK,CAAC,QAAQ,YAAY;AACrC,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA,SAAS;AAAA;AAAA,MAEP,uBAAuB;AAAA,IACzB;AAAA,IACA,SAAS,CAAC,eAAe,GAAG,OAAO;AAAA,IACnC,QAAQ,CAAC;AAAA,IACT,aAAa;AAAA,MACX,MAAM;AAAA;AAAA,MAEN,aAAa;AAAA,MACb,4BAA4B;AAAA,QAC1B,EAAE,MAAM,YAAY,KAAK,+BAA+B;AAAA,QACxD,EAAE,MAAM,YAAY,KAAK,sBAAsB;AAAA,QAC/C,EAAE,MAAM,UAAU,KAAK,qBAAqB;AAAA,QAC5C,EAAE,MAAM,iBAAiB,KAAK,6BAA6B;AAAA,QAC3D,EAAE,MAAM,UAAU,KAAK,0BAA0B;AAAA,MACnD;AAAA,MACA,WAAW;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MACA,qBAAqB;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,QACP,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,OAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,MAAM,gBAAgB,OAAO;AAEnD,SAAO,KAAK,aAAa;AAC3B;AAOO,IAAM,eAAe,oBAAI,IAAI,CAAC,CAACA,sBAAqB,QAAS,SAAS,GAAG,CAACA,sBAAqB,SAAS,SAAS,CAAC,CAAC;;;ADjDnH,SAAS,OAAO,EAAE,QAAQ,GAAsC;AACrE,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA6B,IAAI;AAC7D,QAAM,EAAE,SAAS,IAAID,WAAU;AAC/B,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,EAAE,YAAY,iBAAiB,QAAQ,IAAI,eAAe;AAChE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ;AAAA,EACF,IAAI,UAAU;AAGd,QAAM,wBAAwB,OAAgB,KAAK;AACnD,QAAM,CAAC,cAAc,eAAe,IAAI,gBAA0B,iBAAiB,CAAC,CAAa;AAEjG,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,WAAW,OAAO,KAAK;AAC7B,QAAM,mBAAmB,OAOtB;AAAA,IACD,cAAc;AAAA,IACd,SAAS;AAAA,IACT,qBAAqB,MAAM;AAAA,IAAC;AAAA,IAC5B,oBAAoB,MAAM;AAAA,IAAC;AAAA,IAC3B,eAAe,MAAM;AAAA,IAAC;AAAA,IACtB,gBAAgB,MAAM;AAAA,IAAC;AAAA,EACzB,CAAC;AACD,QAAM,KAAK,gBAAgB;AAE3B,QAAM,iBAAiB,MAAM;AAC3B,YAAQ,IAAI,wBAAwB;AACpC,qBAAiB,QAAQ,sBAAsB,MAAM;AAAA,IAAC;AACtD,qBAAiB,QAAQ,qBAAqB,MAAM;AAAA,IAAC;AACrD,qBAAiB,QAAQ,gBAAgB,MAAM;AAAA,IAAC;AAChD,qBAAiB,QAAQ,gBAAgB,MAAM;AAAA,IAAC;AAChD,qBAAiB,QAAQ,UAAU;AACnC,qBAAiB,QAAQ,eAAe;AACxC,qBAAiB,QAAQ,eAAe,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvE,uBAAiB,QAAQ,sBAAsB;AAC/C,uBAAiB,QAAQ,qBAAqB;AAAA,IAChD,CAAC;AACD,qBAAiB,QAAQ,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAClE,uBAAiB,QAAQ,iBAAiB;AAC1C,uBAAiB,QAAQ,gBAAgB;AAAA,IAC3C,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,CAAC,MAAa;AACtC,YAAQ,IAAI,uBAAuB,CAAC;AAEpC,QAAI,aAAaE,sBAAqB;AACpC,UAAI,UAAU;AACZ,gBAAQ,IAAI,kCAAkC,CAAC;AAC/C,WAAG,KAAK,wBAAwB;AAAA,UAC9B,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF;AACA,qBAAiB,EAAE,KAAK;AAAA,EAC1B;AAEA,QAAM,UAAU,YAAY;AAC1B,mBAAe;AACf,aAAS,UAAU;AACnB,QAAI,CAAC,iBAAiB,SAAS;AAC7B;AAAA,IACF;AACA,QAAI,CAAC,cAAc;AACjB,sBAAgB,IAAI;AACpB,4BAAsB,UAAU;AAAA,IAClC,OAAO;AACL,uBAAiB,QAAQ,oBAAoB,YAAY;AACzD,UAAI,CAAC,WAAW;AACd,YAAI;AACF,gBAAM,cAAc;AAAA,QACtB,SAAS,GAAG;AACV,2BAAiB,QAAQ,cAAc,CAAC;AAAA,QAC1C;AAAA,MACF,OAAO;AACL,yBAAiB,QAAQ,eAAe;AAAA,UACtC,aAAa,UAAU,SAAS;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,YAAQ,IAAI,iBAAiB,cAAc,SAAS;AACpD,WAAO,QAAQ,IAAI;AAAA,MACjB,iBAAiB,QAAQ;AAAA,MACzB,iBAAiB,QAAQ;AAAA,IAC3B,CAAC,EACE,KAAK,CAAC,CAACC,SAAQ,EAAE,aAAa,aAAAC,cAAY,iBAAAC,kBAAiB,iBAAAC,iBAAgB,CAAC,MAAM;AAKjF,YAAM,aAAa;AAAA,QACjB,OAAOH,QAAO,QAAQ;AAAA,QACtB,MAAM;AAAA,QACN,UAAU;AAAA,UACR,aAAaC;AAAA,UACb;AAAA,UACA,iBAAAC;AAAA,UACA,iBAAAC;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA,YACE,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,YACE,IAAI,aAAa,IAAI,OAAO;AAAA,YAC5B,WAAW,eAAe;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AACA,UAAIH,QAAO,QAAQ,SAAQ,UAAU;AACnC,YAAI,CAAC,aAAa,SAAS,WAAW,GAAG;AACvC,uBAAa,KAAM,WAAY;AAC/B,0BAAgB,CAAC,GAAG,YAAY,CAAC;AAAA,QACnC;AAAA,MACF;AACA,gBAAU,UAAU;AACpB,mBAAa,IAAI;AACjB,aAAO,CAAC,UAAU;AAAA,IACpB,CAAC,EACA,MAAM,CAAC,MAAM;AACZ,cAAQ,IAAI,wBAAwB,CAAC;AACrC,wBAAkB,CAAC;AACnB,aAAO,QAAQ,OAAO,CAAC;AAAA,IACzB,CAAC,EACA,QAAQ,MAAM;AACb,eAAS,UAAU;AAAA,IACrB,CAAC;AAAA,EACL;AAEA,QAAM,aAAa,YAAY;AAC7B,YAAQ,IAAI,qBAAqB;AACjC,UAAM,iBAAiB;AACvB,cAAU,IAAI;AACd,iBAAa,KAAK;AAClB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,iBAAiBJ,SAAQ,MAAM;AACnC,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,IACE,YAAYE,sBAAqB;AAAA,MAGnC,WAAW,eAAe;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,YAAU,MAAM;AACd,QAAI,sBAAsB,SAAS;AACjC,UAAI,CAAC,WAAW,CAAC,gBAAgB,iBAAiB,SAAS;AACzD,gBAAQ;AAAA,UACN;AAAA,UACA,sBAAsB;AAAA,QACxB;AACA,gBAAQ,IAAI,mCAAmC;AAC/C,yBAAiB,QAAQ,mBAAmB,aAAa;AACzD,8BAAsB,UAAU;AAAA,MAClC,WAAW,cAAc;AACvB,8BAAsB,UAAU;AAAA,MAClC;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,EACxB,CAAC;AAED,YAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,WAAW;AAC/B,cAAQ,IAAI,uBAAuB,cAAc,SAAS;AAC1D,mBAAa,KAAK;AAClB;AAAA,IACF;AACA,YAAQ,IAAI,cAAc;AAAA,MACxB,WAAW,UAAU,SAAS;AAAA,MAC9B,UAAU,SAAS;AAAA,IACrB,CAAC;AAED,QAAI,SAAS,SAAS;AACpB,UAAI,iBAAiB,SAAS;AAC5B,yBAAiB,QAAQ,eAAe;AAAA,UACtC,aAAa,WAAW,SAAS;AAAA,UACjC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AACA;AAAA,IACF;AACA,YAAQ,IAAI,OAAO;AACnB,UAAM,cAAc,UAAU,SAAS;AACvC,cAAU;AAAA,MACR,OAAO,aAAa,QAAQ;AAAA,MAC5B,MAAM;AAAA,MACN,UAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR;AAAA,UACE,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN;AAAA,UACE,IAAI,aAAa,IAAI,OAAO;AAAA,UAC5B,WAAW,eAAe;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,aAAa,QAAQ,SAAQ,UAAU;AACzC,UAAI,CAAC,aAAa,SAAS,WAAW,GAAG;AACvC,qBAAa,KAAM,WAAY;AAC/B,wBAAgB,CAAC,GAAG,YAAY,CAAC;AAAA,MACnC;AAAA,IACF;AAEA,iBAAa,IAAI;AAAA,EACnB,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,YAAU,MAAM;AACd,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AACA,UAAM,KAAK,WAAW;AAAA,MACpB;AAAA,MACA,CAAC,oBAAoB,YAAY;AAC/B,gBAAQ,IAAI,sBAAsB,oBAAoB,OAAO;AAAA,MAC/D;AAAA,MACA,EAAE,YAAY,YAAY;AAAA,IAC5B;AAEA,WAAO,MAAM;AACX,UAAI,IAAI;AACN,mBAAW,4BAA4B,EAAE,EAAE,KAAK;AAAA,MAClD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,CAAC;AAE1B,YAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB;AAAA,IACF;AACA,YAAQ,IAAI,iBAAiB,WAAW,EAAE,SAAS,CAAC;AACpD,QACE,YACA,aAAa,eAAe,iBAAiB,YAC7C,CAAC,SAAS,SACV;AACA,uBAAiB,EAAE,KAAK;AACxB;AAAA,IACF;AAEA,YAAQ,IAAI,kCAAkC,YAAY;AAE1D,QAAI,iBAAiB,SAAS;AAC5B,uBAAiB,QAAQ,oBAAoB,YAAY;AAAA,IAC3D;AAEA,kBAAc,EACX,KAAK,CAAC,QAAQ;AACb,cAAQ,IAAI,kBAAkB,GAAG;AAAA,IACnC,CAAC,EACA,MAAM,CAAC,MAAM;AACZ,uBAAiB,QAAQ,cAAc,CAAC;AACxC,wBAAkB,CAAC;AAAA,IACrB,CAAC;AAAA,EACL,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AE/UA,SAAS,kBAAkB,mBAAmB;AAC9C,SAAS,WAAAF,gBAAe;AAEjB,SAAS,SAAS;AACvB,QAAM;AAAA,IACJ;AAAA,MACE;AAAA;AAAA,MACA;AAAA;AAAA,IACF;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACF,IAAI,iBAAiB;AAErB,QAAM;AAAA,IACJ;AAAA,MACE;AAAA;AAAA,MACA,gBAAgB;AAAA;AAAA,MAChB;AAAA;AAAA,IACF;AAAA,IACA;AAAA;AAAA,EACF,IAAI,YAAY;AAEhB,QAAM,YAAYA,SAAQ,MAAM;AAC9B,WAAO,CAAC,EAAE,UAAU,OAAO,YAAY,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,EAAE;AAAA,EAClF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,YAAY;AAC7B,YAAQ,IAAI,gCAAgC;AAC5C,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AACA,WAAO,cAAc;AAAA,MACnB,OAAO,OAAO;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiBA,SAAQ,MAAM;AACnC,WAAO,kBACH,EAAE,GAAG,iBAAiB,IAAI,SAAS,gBAAgB,EAAE,EAAE,IACvD;AAAA,EACN,GAAG,CAAC,eAAe,CAAC;AAEpB,QAAM,cAAc,CAAC,UAA2C;AAC9D,WAAO,SAAS,KAAK;AAAA,EACvB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAEF;AACF;;;AH5CO,SAAS,KACd,OACA;AACA,QAAM,MAAM,OAAO,EAAE,SAAS,MAAM,cAAc,CAAC;AACnD,QAAM,MAAM,OAAO;AAEnB,QAAM,CAAC,WAAW,YAAY,IAAIF,UAAgC,IAAI;AAEtE,QAAM,eAAeD,QAA8B;AAEnD,QAAM,UAAU,OAAO,YAAiB;AACtC,QAAI,MAAM,KAAK,aAAa,OAAO,CAAC,EAAE,SAAS,QAAQ,OAAO,GAAG;AAC/D,mBAAa,UAAUE,gBAAe;AAEtC,aAAO,IAAI,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACjC,gBAAQ,IAAI,kBAAkB,GAAG;AACjC,YAAI,KAAK;AACP,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AACA,iBAAa,UAAUA,gBAAe;AACtC,UAAM,YAAY,QAAQ,aACtB;AAAA,MACE,YAAY,QAAQ;AAAA,IACtB,IACD;AAEH,WAAO,IACJ,QAAQ,SAAS,EACjB,KAAK,CAAC,QAAQ;AACb,cAAQ,IAAI,kBAAkB,GAAG;AACjC,UAAI,CAAC,IAAI,QAAQ;AACf,eAAO,QAAQ,OAAO,EAAE,SAAS,cAAc,CAAC;AAAA,MAClD;AACA,aAAO;AAAA,IACT,CAAC,EACA,MAAM,CAAC,MAAM;AACZ,cAAQ,IAAI,wBAAwB,CAAC;AACrC,aAAO,QAAQ,OAAO,CAAC;AAAA,IACzB,CAAC;AAAA,EACL;AAEA,QAAM,aAAa,YAAY;AAC7B,QAAI,cAAcA,gBAAe,KAAK;AACpC,aAAO,IAAI,WAAW;AAAA,IACxB;AACA,QAAI,cAAcA,gBAAe,QAAQ;AACvC,aAAO,IAAI,WAAW;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,aACJ,aAAa,WAAWA,gBAAe,SACnC,IAAI,aACJ,IAAI;AAIV,QAAM,SACJ,cAAcA,gBAAe,UAAU,IAAI,YACvC,IAAI,SACJ,cAAcA,gBAAe,OAAO,IAAI,YACxC,IAAI,SACJ;AAEN,QAAM,iBACJ,cAAcA,gBAAe,SACzB,IAAI,iBACJ,IAAI;AAEV,QAAM,WAAW,CAAC,UAAe;AAE/B,UAAM,UACJ,OAAO,MAAM,YAAY,WACrB,MAAM,UACN,QAAQ,MAAM,OAAO;AAK3B,QAAI,gBAAgCA,gBAAe;AACnD,QAAI,MAAM,KAAK,aAAa,OAAO,CAAC,EAAE,SAAS,OAAO,GAAG;AACvD,sBAAgBA,gBAAe;AAAA,IACjC;AACA,YAAQ,IAAI,iBAAiB;AAAA,MAC3B;AAAA,MACA;AAAA,IACF,CAAC;AACD,QAAI,cAAc,iBAAiB,cAAcA,gBAAe,KAAK;AAGnE,aAAO,IAAI,YAAY,KAAK;AAAA,IAC9B;AACA,QAAI,cAAc,eAAe;AAC/B,aAAO,QAAQ,EAAE,QAAiB,CAAC,EAAE,KAAK;AAAA,IAC5C;AAAA,EACF;AAEA,EAAAH,WAAU,MAAM;AAKd,QAAI,IAAI,aAAa,IAAI,WAAW;AAClC,UAAI,aAAa,YAAYG,gBAAe,QAAQ;AAClD,YAAI,WAAW,EAAE,KAAK;AACtB,qBAAaA,gBAAe,MAAM;AAClC;AAAA,MACF,OAAO;AACL,qBAAaA,gBAAe,GAAG;AAC/B,YAAI,WAAW,EAAE,KAAK;AACtB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,IAAI,WAAW;AACjB,mBAAaA,gBAAe,MAAM;AAClC;AAAA,IACF;AACA,QAAI,IAAI,WAAW;AACjB,mBAAaA,gBAAe,GAAG;AAC/B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,aAAa,SAAS,IAAI,WAAW,IAAI,SAAS,CAAC;AAMvD,SACE,gBAAAJ,OAAA;AAAA,IAAC,uBAAuB;AAAA,IAAvB;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEC,MAAM;AAAA,EACT;AAEJ;;;AI9JA,OAAOA,YAAuC;;;ACF9C,SAAmC,aAAAC,YAAW,YAAAE,iBAAgB;AAC9D,SAAS,mBAAmB;AAI5B,SAAS,SAAAU,cAAa;AAqBf,SAAS,QACd,OACA;AACA,QAAM,CAAC,aAAa,cAAc,IAAIV,UAAS,CAAC,CAAC,MAAM,QAAQ;AAE/D,QAAM,EAAE,KAAK,SAAS,IAAI,YAAY;AAEtC,EAAAF,WAAU,MAAM;AACd,aAAS,KAAK,MAAM,YAAY,2BAA2B,IAAI;AAAA,EACjE,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,QAAI,MAAM,UAAU;AAClB;AAAA,IACF;AAEA,QAAI,aAAa,IAAI,YAAY;AAEjC,QAAI,YAAY;AACd,cAAQ,IAAI,8CAA8C;AAC1D,qBAAe,IAAI;AACnB;AAAA,IACF;AAEA,YAAQ,IAAI;AAAA,MACV,eAAe,0DAA0D;AAAA,MACzE,eAAe,kDAAkD;AAAA,IACnE,CAAC,EACE,KAAK,CAAC,CAAC,eAAe,gBAAgB,MAAM;AAC3C,YAAM,aAAa,iBAAiB,aAAa;AACjD,YAAM,gBAAgB,iBAAiB,gBAAgB;AAEvD,UAAI,UAAU,MAAM,WAAW,CAAC;AAChC,gBAAUY,OAAM,EAAE,QAAQ,CAAC,GAAG,YAAY,GAAG,aAAa,EAAE,GAAG,OAAO;AAEtE,mBAAa,WAAW,MAAM,QAAQ,OAAsB;AAC5D,eAAS,cAAc,UAAU;AACjC,qBAAe,IAAI;AAAA,IACrB,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,cAAQ,MAAM,wBAAwB,KAAK;AAAA,IAC7C,CAAC;AAAA,EACL,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC;AAAa,WAAO;AAEzB,SAAO,MAAM;AACf;AAEA,IAAM,iBAAiB,OAAO,QAAgB;AAC5C,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,6BAA6B,GAAG,EAAE;AAAA,EACpD;AACA,SAAO,SAAS,KAAK;AACvB;AAEA,IAAM,mBAAmB,CAAC,cACxB,WAAW,MAAM,MAAM,IAAI,CAAC,SAAc;AAAA,EACxC,IAAI,OAAO,IAAI,QAAQ;AAAA,EACvB,OAAO,IAAI;AAAA,EACX,OAAO,IAAI;AAAA,EACX,QAAQ,IAAI;AAAA,EACZ,kBAAkB,IAAI;AACxB,EAAE,KAAK,CAAC;;;ADrFV,SAAS,wBAAAN,6BAA4B;AAO9B,SAAS,wBACd,OACA;AACA,SACE,gBAAAP,OAAA,cAAC,cAAY,GAAI,MAAM,iBAAiB,CAAC,KACvC,gBAAAA,OAAA,cAAC,WAAS,GAAI,MAAM,cAAc,CAAC,KACjC,gBAAAA,OAAA,cAAC,QAAK,eAAe,MAAM,eAAe,WAAWO,sBAAqB,UAAS,MAAM,QAAS,CACpG,CACF;AAEJ","sourcesContent":["import React, { useMemo } from \"react\";\nimport { ConnectionProvider, WalletProvider } from \"@solana/wallet-adapter-react\";\nimport { Adapter, WalletAdapterNetwork, WalletError, WalletNotReadyError } from \"@solana/wallet-adapter-base\";\nimport {\n WalletModalProvider\n} from \"@solana/wallet-adapter-react-ui\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport \"@solana/wallet-adapter-react-ui/styles.css\";\nimport { SolanaInitialProps } from \"./types\";\nimport {\n createDefaultAddressSelector,\n createDefaultAuthorizationResultCache, createDefaultWalletNotFoundHandler,\n SolanaMobileWalletAdapter\n} from \"@solana-mobile/wallet-adapter-mobile\";\nimport { PhantomWalletAdapter } from \"@solana/wallet-adapter-wallets\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { useScreen } from \"@orderly.network/ui\";\n\nexport default function InitSolana({ children, ...props }: SolanaInitialProps) {\n const { isMobile } = useScreen();\n const network = props.network ?? WalletAdapterNetwork.Devnet;\n\n const endPoint = useMemo(() => {\n if (network === WalletAdapterNetwork.Mainnet) {\n // return 'https://rpc.ankr.com/solana';\n return props.mainnetRpc ?? clusterApiUrl(network);\n // return 'https://svc.blockdaemon.com/solana/mainnet/native?apiKey=zpka_417399a60de542759adf31a42a30e60e_61763d0a'\n }\n if (network === WalletAdapterNetwork.Devnet) {\n return props.devnetRpc ?? clusterApiUrl(network);\n }\n return clusterApiUrl(network);\n }, [network, props.mainnetRpc, props.devnetRpc]);\n\n const mobileWalletNotFoundHanlder = (adapter: SolanaMobileWalletAdapter) => {\n console.log('-- mobile wallet adapter', adapter);\n\n return Promise.reject(new WalletNotReadyError('wallet not ready'));\n }\n\n\n const handleSolanaError = (error: WalletError, adapter?: Adapter) => {\n console.log('-- solanan error', error);\n console.log('-- solana adapter', adapter);\n\n if (!isMobile && error instanceof WalletNotReadyError) {\n window.open(adapter?.url, '_blank');\n }\n }\n\n const wallets = useMemo(() => {\n let uri = '';\n if (typeof window !== \"undefined\") {\n const location = (getGlobalObject() as any).location;\n uri = `${location.protocol}//${location.host}`;\n }\n\n\n\n return props.wallets ?? [\n new PhantomWalletAdapter(),\n new SolanaMobileWalletAdapter({\n addressSelector: createDefaultAddressSelector(),\n appIdentity: {\n uri,\n },\n authorizationResultCache: createDefaultAuthorizationResultCache(),\n chain: network,\n onWalletNotFound: mobileWalletNotFoundHanlder,\n })\n ];\n }, [props.wallets, network]);\n\n return (\n <ConnectionProvider endpoint={endPoint}>\n <WalletProvider wallets={wallets} onError={props.onError ?? handleSolanaError}>\n <WalletModalProvider className='oui-pointer-events-auto'>\n\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n}\n","import React, {\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { WalletConnectorContext } from \"@orderly.network/hooks\";\nimport { hex2int, int2hex } from \"@orderly.network/utils\";\nimport { ChainNamespace } from \"@orderly.network/types\";\nimport { useSOL } from \"./useSOL\";\nimport { useEvm } from \"./useEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport { SolanaChains } from \"./config\";\n\nexport function Main(\n props: PropsWithChildren<{ solanaNetwork: WalletAdapterNetwork }>\n) {\n const sol = useSOL({ network: props.solanaNetwork });\n const evm = useEvm();\n\n const [namespace, setNamespace] = useState<ChainNamespace | null>(null);\n\n const newNamespace = useRef<ChainNamespace | null>();\n\n const connect = async (options: any) => {\n if (Array.from(SolanaChains.values()).includes(options.chainId)) {\n newNamespace.current = ChainNamespace.solana;\n // connect solana\n return sol.connect().then((res) => {\n console.log(\"-- connect sol\", res);\n if (res) {\n return res;\n }\n });\n }\n newNamespace.current = ChainNamespace.evm;\n const evmOption = options.autoSelect\n ? {\n autoSelect: options.autoSelect,\n }\n :undefined;\n\n return evm\n .connect(evmOption)\n .then((res) => {\n console.log(\"-- connect evm\", res);\n if (!res.length) {\n return Promise.reject({ message: \"user reject\" });\n }\n return res;\n })\n .catch((e) => {\n console.log(\"-- connect evm error\", e);\n return Promise.reject(e);\n });\n };\n\n const disconnect = async () => {\n if (namespace === ChainNamespace.evm) {\n return evm.disconnect();\n }\n if (namespace === ChainNamespace.solana) {\n return sol.disconnect();\n }\n };\n\n const connecting =\n newNamespace.current == ChainNamespace.solana\n ? sol.connecting\n : evm.connecting;\n\n // console.log('-- connecting', connecting);\n\n const wallet =\n namespace === ChainNamespace.solana && sol.connected\n ? sol.wallet\n : namespace === ChainNamespace.evm && evm.connected\n ? evm.wallet\n : null;\n\n const connectedChain =\n namespace === ChainNamespace.solana\n ? sol.connectedChain\n : evm.connectedChain;\n\n const setChain = (chain: any) => {\n // solana connect\n const chainId =\n typeof chain.chainId === \"number\"\n ? chain.chainId\n : hex2int(chain.chainId);\n // console.log('-- setchain chain',{\n // chain, chainId,\n // });\n\n let tempNamespace: ChainNamespace = ChainNamespace.evm;\n if (Array.from(SolanaChains.values()).includes(chainId)) {\n tempNamespace = ChainNamespace.solana;\n }\n console.log(\"--- namespace\", {\n namespace,\n tempNamespace,\n });\n if (namespace === tempNamespace && namespace === ChainNamespace.evm) {\n // todo switch chan on block native\n\n return evm.changeChain(chain);\n }\n if (namespace !== tempNamespace) {\n return connect({ chainId: chainId }).then();\n }\n };\n\n useEffect(() => {\n // console.log(\"-- connect\", {\n // sol: sol.connected,\n // evm: evm.connected,\n // });\n if (sol.connected && evm.connected) {\n if (newNamespace.current === ChainNamespace.solana) {\n evm.disconnect().then();\n setNamespace(ChainNamespace.solana);\n return;\n } else {\n setNamespace(ChainNamespace.evm);\n sol.disconnect().then();\n return;\n }\n }\n\n if (sol.connected) {\n setNamespace(ChainNamespace.solana);\n return;\n }\n if (evm.connected) {\n setNamespace(ChainNamespace.evm);\n return;\n }\n }, [newNamespace.current, sol.connected, evm.connected]);\n // console.log('--main wallet', {\n // wallet,\n // 'sol wallet': sol.wallet\n // });\n\n return (\n <WalletConnectorContext.Provider\n value={{\n connect,\n disconnect,\n connecting,\n wallet,\n setChain,\n connectedChain,\n namespace,\n }}\n >\n {props.children}\n </WalletConnectorContext.Provider>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWalletModal } from \"@solana/wallet-adapter-react-ui\";\nimport { ChainNamespace, LedgerWalletKey } from \"@orderly.network/types\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { useEventEmitter, useLocalStorage, WalletState } from \"@orderly.network/hooks\";\nimport {\n WalletAdapterNetwork,\n WalletNotReadyError,\n WalletReadyState,\n} from \"@solana/wallet-adapter-base\";\nimport { SolanaChainIdEnum, SolanaChains } from \"./config\";\n\n\n\nexport function useSOL({ network }: { network: WalletAdapterNetwork }) {\n const [wallet, setWallet] = useState<WalletState | null>(null);\n const { isMobile } = useScreen();\n const { connection } = useConnection();\n const { setVisible: setModalVisible, visible } = useWalletModal();\n const {\n signMessage,\n signTransaction,\n sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\n // 1 for open, 2 for close, null for default\n const selectModalVisibleRef = useRef<boolean>(false);\n const [ledgerWallet, setLedgerWallet] = useLocalStorage<string[]>(LedgerWalletKey, [] as string[]);\n\n const [connected, setConnected] = useState(false);\n\n const isManual = useRef(false);\n const solanaPromiseRef = useRef<{\n walletSelect: Promise<any> | null;\n connect: Promise<any> | null;\n walletSelectResolve: (value: any) => void;\n walletSelectReject: (value: any) => void;\n connectResolve: (value: any) => void;\n connectReject: (value: any) => void;\n }>({\n walletSelect: null,\n connect: null,\n walletSelectResolve: () => {},\n walletSelectReject: () => {},\n connectReject: () => {},\n connectResolve: () => {},\n });\n const ee = useEventEmitter();\n\n const initPromiseRef = () => {\n console.log(\"-- init solana promise\");\n solanaPromiseRef.current.walletSelectResolve = () => {};\n solanaPromiseRef.current.walletSelectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connectReject = () => {};\n solanaPromiseRef.current.connect = null;\n solanaPromiseRef.current.walletSelect = null;\n solanaPromiseRef.current.walletSelect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.walletSelectResolve = resolve;\n solanaPromiseRef.current.walletSelectReject = reject;\n });\n solanaPromiseRef.current.connect = new Promise((resolve, reject) => {\n solanaPromiseRef.current.connectResolve = resolve;\n solanaPromiseRef.current.connectReject = reject;\n });\n };\n\n const handleSolanaError = (e: Error) => {\n console.log(\"solan connect error\", e);\n\n if (e instanceof WalletNotReadyError) {\n if (isMobile) {\n console.log(\"-- need toast wallet not ready\", e);\n ee.emit(\"wallet:connect-error\", {\n message: \"Please open the wallet app and use the in-app browser.\",\n });\n }\n }\n solanaDisconnect().then();\n };\n\n const connect = async () => {\n initPromiseRef();\n isManual.current = true;\n if (!solanaPromiseRef.current) {\n return;\n }\n if (!solanaWallet) {\n setModalVisible(true);\n selectModalVisibleRef.current = true;\n } else {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n if (!publicKey) {\n try {\n await solanaConnect();\n } catch (e) {\n solanaPromiseRef.current.connectReject(e);\n }\n } else {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n }\n\n console.log(\"-- connect fn\", solanaWallet, publicKey);\n return Promise.all([\n solanaPromiseRef.current.walletSelect,\n solanaPromiseRef.current.connect,\n ])\n .then(([wallet, { userAddress, signMessage,signTransaction, sendTransaction }]) => {\n // console.log('-- connect sol res',{\n // wallet,\n // userAddress, signMessage, sendTransaction\n // });\n const tempWallet = {\n label: wallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n connection,\n signTransaction,\n sendTransaction,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n };\n if (wallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n setWallet(tempWallet);\n setConnected(true);\n return [tempWallet];\n })\n .catch((e) => {\n console.log(\"connect solana error\", e);\n handleSolanaError(e);\n return Promise.reject(e);\n })\n .finally(() => {\n isManual.current = false;\n });\n };\n\n const disconnect = async () => {\n console.log(\"--- discconnect sol\");\n await solanaDisconnect();\n setWallet(null);\n setConnected(false);\n return [];\n };\n\n const connectedChain = useMemo(() => {\n if (!publicKey) {\n return null;\n }\n return {\n id:\n network === WalletAdapterNetwork.Mainnet\n ? SolanaChainIdEnum.MAINNET\n : SolanaChainIdEnum.DEVNET,\n namespace: ChainNamespace.solana,\n };\n }, [publicKey]);\n\n useEffect(() => {\n if (selectModalVisibleRef.current) {\n if (!visible && !solanaWallet && solanaPromiseRef.current) {\n console.log(\n \"-- select modal visible ref\",\n selectModalVisibleRef.current\n );\n console.log(\"-- use reject solana select modal\");\n solanaPromiseRef.current.walletSelectReject(\"user reject\");\n selectModalVisibleRef.current = false;\n } else if (solanaWallet) {\n selectModalVisibleRef.current = false;\n }\n }\n }, [\n visible,\n solanaWallet,\n solanaPromiseRef.current,\n selectModalVisibleRef.current,\n ]);\n\n useEffect(() => {\n if (!solanaWallet || !publicKey) {\n console.log(\"--- not connect sol\", solanaWallet, publicKey);\n setConnected(false);\n return;\n }\n console.log(\"-- publick\", {\n publicKey: publicKey.toBase58(),\n isManual: isManual.current,\n });\n\n if (isManual.current) {\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.connectResolve({\n userAddress: publicKey?.toBase58(),\n signMessage,\n signTransaction,\n sendTransaction,\n });\n }\n return;\n }\n console.log(\"-- tt\");\n const userAddress = publicKey.toBase58();\n setWallet({\n label: solanaWallet.adapter.name,\n icon: \"\",\n provider: {\n signMessage: signMessage,\n signTransaction,\n sendTransaction,\n connection,\n },\n accounts: [\n {\n address: userAddress,\n },\n ],\n chains: [\n {\n id: SolanaChains.get(network)!,\n namespace: ChainNamespace.solana,\n },\n ],\n });\n if (solanaWallet.adapter.name ==='Ledger') {\n if (!ledgerWallet.includes(userAddress)) {\n ledgerWallet.push( userAddress );\n setLedgerWallet([...ledgerWallet]);\n }\n }\n\n setConnected(true);\n }, [\n publicKey,\n solanaWallet,\n signMessage,\n signTransaction,\n isManual,\n connection,\n sendTransaction,\n network,\n ]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(\n publicKey,\n (updatedAccountInfo, context) => {\n console.log(\"--- account change\", updatedAccountInfo, context);\n },\n { commitment: \"confirmed\" }\n );\n\n return () => {\n if (id) {\n connection.removeAccountChangeListener(id).then();\n }\n };\n }, [connection, publicKey]);\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log(\"-- public key\", publicKey, { isMobile });\n if (\n isMobile &&\n solanaWallet.readyState === WalletReadyState.Loadable &&\n !isManual.current\n ) {\n solanaDisconnect().then();\n return;\n }\n\n console.log(\"-- solana refresh auto connect\", solanaWallet);\n\n if (solanaPromiseRef.current) {\n solanaPromiseRef.current.walletSelectResolve(solanaWallet);\n }\n\n solanaConnect()\n .then((res) => {\n console.log(\"-- connect res\", res);\n })\n .catch((e) => {\n solanaPromiseRef.current.connectReject(e);\n handleSolanaError(e);\n });\n }, [\n solanaWallet,\n solanaConnect,\n publicKey,\n solanaDisconnect,\n handleSolanaError,\n isMobile,\n ]);\n\n return {\n connected,\n connect,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n };\n}\n","import injectedModule from \"@web3-onboard/injected-wallets\";\nimport { init } from \"@web3-onboard/react\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport binanceModule from \"@binance/w3w-blocknative-connector\";\n// import bitgetWalletModule from \"@web3-onboard/bitget\";\nimport { merge } from \"lodash\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\n// initialize the module with options\nconst binance = binanceModule({ options: { lng: \"en\" } });\n// const bitgetWallet = bitgetWalletModule();\n\nexport const initConfig: (\n apiKey?: string,\n options?: InitOptions\n) => OnboardAPI = (apiKey, options) => {\n const defaultOptions = {\n apiKey,\n connect: {\n // autoConnectAllPreviousWallet: true,\n autoConnectLastWallet: true,\n },\n wallets: [injectedModule(), binance],\n chains: [],\n appMetadata: {\n name: \"Orderly\",\n // icon: blocknativeIcon,\n description: \"Orderly\",\n recommendedInjectedWallets: [\n { name: \"Coinbase\", url: \"https://wallet.coinbase.com/\" },\n { name: \"MetaMask\", url: \"https://metamask.io\" },\n { name: \"Trezor\", url: \"https://trezor.io/\" },\n { name: \"Walletconnect\", url: \"https://walletconnect.com/\" },\n { name: \"Ledger\", url: \"https://www.ledger.com/\" },\n ],\n agreement: {\n version: \"1.0.0\",\n termsUrl: \"https://www.blocknative.com/terms-conditions\",\n privacyUrl: \"https://www.blocknative.com/privacy-policy\",\n },\n gettingStartedGuide: \"https://blocknative.com\",\n explore: \"https://blocknative.com\",\n },\n accountCenter: {\n desktop: {\n enabled: false,\n },\n mobile: {\n enabled: false,\n },\n },\n theme: \"dark\",\n } as InitOptions;\n\n const mergedOptions = merge(defaultOptions, options);\n\n return init(mergedOptions);\n};\n\nexport enum SolanaChainIdEnum {\n MAINNET = 900900900,\n DEVNET = 901901901,\n}\n\nexport const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import InitSolana from \"./initSolana\";\nimport { Main } from \"./main\";\nimport React, { type PropsWithChildren } from \"react\";\nimport { EvmInitialProps, SolanaInitialProps } from \"./types\";\nimport { InitEvm } from \"./initEvm\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nexport interface WalletConnectorProviderProps {\n solanaInitial?: SolanaInitialProps;\n evmInitial?: EvmInitialProps;\n}\n\nexport function WalletConnectorProvider(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n return (\n <InitSolana {...(props.solanaInitial ?? {})}>\n <InitEvm {...(props.evmInitial ?? {})}>\n <Main solanaNetwork={props.solanaInitial?.network ?? WalletAdapterNetwork.Devnet}>{props.children}</Main>\n </InitEvm>\n </InitSolana>\n );\n}\n","import React, { PropsWithChildren, useEffect, useState } from \"react\";\nimport { useSimpleDI } from \"@orderly.network/hooks\";\nimport type { InitOptions, OnboardAPI } from \"@web3-onboard/core\";\nimport { Optional } from \"@orderly.network/types\";\nimport { initConfig } from \"./config\";\nimport { merge } from \"lodash\";\n\n\nexport type ConnectorInitOptions = Optional<\n InitOptions,\n | \"apiKey\"\n | \"connect\"\n | \"wallets\"\n | \"chains\"\n | \"appMetadata\"\n | \"accountCenter\"\n | \"theme\"\n>;\n\nexport interface WalletConnectorProviderProps {\n apiKey?: string;\n options?: ConnectorInitOptions;\n // skip board configuration if already initialized\n skipInit?: boolean;\n}\n\nexport function InitEvm(\n props: PropsWithChildren<WalletConnectorProviderProps>\n) {\n const [initialized, setInitialized] = useState(!!props.skipInit);\n\n const { get, register } = useSimpleDI();\n\n useEffect(() => {\n document.body.style.setProperty(\"--onboard-modal-z-index\", \"88\");\n }, []);\n\n useEffect(() => {\n if (props.skipInit) {\n return;\n }\n\n let onboardAPI = get(\"onboardAPI\") as OnboardAPI;\n\n if (onboardAPI) {\n console.log(\"[Orderly SDK]:onboardAPI already initialized\");\n setInitialized(true);\n return;\n }\n\n Promise.all([\n fetchChainInfo('https://testnet-api-evm.orderly.org/v1/public/chain_info'),\n fetchChainInfo('https://api-evm.orderly.org/v1/public/chain_info'),\n ])\n .then(([testChainInfo, mainnetChainInfo]) => {\n const testChains = processChainInfo(testChainInfo);\n const mainnetChains = processChainInfo(mainnetChainInfo);\n\n let options = props.options || {};\n options = merge({ chains: [...testChains, ...mainnetChains] }, options);\n\n onboardAPI = initConfig(props.apiKey, options as InitOptions);\n register('onboardAPI', onboardAPI);\n setInitialized(true);\n })\n .catch((error) => {\n console.error('Error fetching data:', error);\n });\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n\nconst fetchChainInfo = async (url: string) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch data from ${url}`);\n }\n return response.json();\n};\n\nconst processChainInfo = (chainInfo: any) =>\n chainInfo?.data?.rows?.map((row: any) => ({\n id: Number(row.chain_id),\n token: row.currency_symbol,\n label: row.name,\n rpcUrl: row.public_rpc_url,\n blockExplorerUrl: row.explorer_base_url,\n })) || [];\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/wallet-connector",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "",
5
5
  "main": "dist/index.mjs",
6
6
  "module": "dist/index.mjs",
@@ -28,17 +28,17 @@
28
28
  "@solana-mobile/wallet-adapter-mobile": "2.1.4",
29
29
  "@solana/web3.js": "1.95.3",
30
30
  "rxjs": "^7.5.5",
31
- "@orderly.network/types": "2.0.2",
32
- "@orderly.network/core": "2.0.2",
33
- "@orderly.network/utils": "2.0.2",
34
- "@orderly.network/hooks": "2.0.2",
35
- "@orderly.network/ui": "2.0.2"
31
+ "@orderly.network/utils": "2.0.3",
32
+ "@orderly.network/hooks": "2.0.3",
33
+ "@orderly.network/types": "2.0.3",
34
+ "@orderly.network/core": "2.0.3",
35
+ "@orderly.network/ui": "2.0.3"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/react": "^18.2.38",
39
39
  "react": "^18.2.0",
40
40
  "tsup": "^7.1.0",
41
- "tsconfig": "0.3.18"
41
+ "tsconfig": "0.3.19"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "react": ">=18"