@orderly.network/wallet-connector 2.0.1-alpha.3 → 2.0.1-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +46 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +46 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.d.mts
CHANGED
|
@@ -7,6 +7,8 @@ type ConnectorInitOptions = Optional<InitOptions, "apiKey" | "connect" | "wallet
|
|
|
7
7
|
type SolanaInitialProps = PropsWithChildren<{
|
|
8
8
|
network?: WalletAdapterNetwork;
|
|
9
9
|
endPoint?: string;
|
|
10
|
+
mainnetRpc?: string;
|
|
11
|
+
devnetRpc?: string;
|
|
10
12
|
wallets?: Adapter[];
|
|
11
13
|
onError?: (error: WalletError, adapter?: Adapter) => void;
|
|
12
14
|
}>;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ type ConnectorInitOptions = Optional<InitOptions, "apiKey" | "connect" | "wallet
|
|
|
7
7
|
type SolanaInitialProps = PropsWithChildren<{
|
|
8
8
|
network?: WalletAdapterNetwork;
|
|
9
9
|
endPoint?: string;
|
|
10
|
+
mainnetRpc?: string;
|
|
11
|
+
devnetRpc?: string;
|
|
10
12
|
wallets?: Adapter[];
|
|
11
13
|
onError?: (error: WalletError, adapter?: Adapter) => void;
|
|
12
14
|
}>;
|
package/dist/index.js
CHANGED
|
@@ -27,8 +27,14 @@ var binanceModule__default = /*#__PURE__*/_interopDefault(binanceModule);
|
|
|
27
27
|
function InitSolana({ children, ...props }) {
|
|
28
28
|
const network = props.network ?? walletAdapterBase.WalletAdapterNetwork.Devnet;
|
|
29
29
|
const endPoint = React.useMemo(() => {
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
if (network === walletAdapterBase.WalletAdapterNetwork.Mainnet) {
|
|
31
|
+
return props.mainnetRpc ?? web3_js.clusterApiUrl(network);
|
|
32
|
+
}
|
|
33
|
+
if (network === walletAdapterBase.WalletAdapterNetwork.Devnet) {
|
|
34
|
+
return props.devnetRpc ?? web3_js.clusterApiUrl(network);
|
|
35
|
+
}
|
|
36
|
+
return web3_js.clusterApiUrl(network);
|
|
37
|
+
}, [network, props.mainnetRpc, props.devnetRpc]);
|
|
32
38
|
const mobileWalletNotFoundHanlder = (adapter) => {
|
|
33
39
|
console.log("-- mobile wallet adapter", adapter);
|
|
34
40
|
return Promise.reject(new walletAdapterBase.WalletNotReadyError("wallet not ready"));
|
|
@@ -169,7 +175,9 @@ function useSOL({ network }) {
|
|
|
169
175
|
console.log("solan connect error", e);
|
|
170
176
|
if (e instanceof walletAdapterBase.WalletNotReadyError) {
|
|
171
177
|
console.log("-- need toast wallet not ready");
|
|
172
|
-
ee.emit("wallet:connect-error", {
|
|
178
|
+
ee.emit("wallet:connect-error", {
|
|
179
|
+
message: "Please open the wallet app and use the in-app browser."
|
|
180
|
+
});
|
|
173
181
|
}
|
|
174
182
|
solanaDisconnect().then();
|
|
175
183
|
};
|
|
@@ -246,14 +254,17 @@ function useSOL({ network }) {
|
|
|
246
254
|
return null;
|
|
247
255
|
}
|
|
248
256
|
return {
|
|
249
|
-
id: 901901901
|
|
257
|
+
id: network === walletAdapterBase.WalletAdapterNetwork.Mainnet ? 900900900 /* MAINNET */ : 901901901 /* DEVNET */,
|
|
250
258
|
namespace: types.ChainNamespace.solana
|
|
251
259
|
};
|
|
252
260
|
}, [publicKey]);
|
|
253
261
|
React.useEffect(() => {
|
|
254
262
|
if (selectModalVisibleRef.current) {
|
|
255
263
|
if (!visible && !solanaWallet && solanaPromiseRef.current) {
|
|
256
|
-
console.log(
|
|
264
|
+
console.log(
|
|
265
|
+
"-- select modal visible ref",
|
|
266
|
+
selectModalVisibleRef.current
|
|
267
|
+
);
|
|
257
268
|
console.log("-- use reject solana select modal");
|
|
258
269
|
solanaPromiseRef.current.walletSelectReject("user reject");
|
|
259
270
|
selectModalVisibleRef.current = false;
|
|
@@ -261,7 +272,12 @@ function useSOL({ network }) {
|
|
|
261
272
|
selectModalVisibleRef.current = false;
|
|
262
273
|
}
|
|
263
274
|
}
|
|
264
|
-
}, [
|
|
275
|
+
}, [
|
|
276
|
+
visible,
|
|
277
|
+
solanaWallet,
|
|
278
|
+
solanaPromiseRef.current,
|
|
279
|
+
selectModalVisibleRef.current
|
|
280
|
+
]);
|
|
265
281
|
React.useEffect(() => {
|
|
266
282
|
if (!solanaWallet || !publicKey) {
|
|
267
283
|
console.log("--- not connect sol", solanaWallet, publicKey);
|
|
@@ -304,14 +320,26 @@ function useSOL({ network }) {
|
|
|
304
320
|
]
|
|
305
321
|
});
|
|
306
322
|
setConnected(true);
|
|
307
|
-
}, [
|
|
323
|
+
}, [
|
|
324
|
+
publicKey,
|
|
325
|
+
solanaWallet,
|
|
326
|
+
signMessage,
|
|
327
|
+
isManual,
|
|
328
|
+
connection,
|
|
329
|
+
sendTransaction,
|
|
330
|
+
network
|
|
331
|
+
]);
|
|
308
332
|
React.useEffect(() => {
|
|
309
333
|
if (!publicKey) {
|
|
310
334
|
return;
|
|
311
335
|
}
|
|
312
|
-
const id = connection.onAccountChange(
|
|
313
|
-
|
|
314
|
-
|
|
336
|
+
const id = connection.onAccountChange(
|
|
337
|
+
publicKey,
|
|
338
|
+
(updatedAccountInfo, context) => {
|
|
339
|
+
console.log("--- account change", updatedAccountInfo, context);
|
|
340
|
+
},
|
|
341
|
+
{ commitment: "confirmed" }
|
|
342
|
+
);
|
|
315
343
|
return () => {
|
|
316
344
|
if (id) {
|
|
317
345
|
connection.removeAccountChangeListener(id).then();
|
|
@@ -337,7 +365,14 @@ function useSOL({ network }) {
|
|
|
337
365
|
solanaPromiseRef.current.connectReject(e);
|
|
338
366
|
handleSolanaError(e);
|
|
339
367
|
});
|
|
340
|
-
}, [
|
|
368
|
+
}, [
|
|
369
|
+
solanaWallet,
|
|
370
|
+
solanaConnect,
|
|
371
|
+
publicKey,
|
|
372
|
+
solanaDisconnect,
|
|
373
|
+
handleSolanaError,
|
|
374
|
+
isMobile
|
|
375
|
+
]);
|
|
341
376
|
return {
|
|
342
377
|
connected,
|
|
343
378
|
connect,
|
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/chains.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletNotReadyError","WalletAdapterNetwork","wallet","signMessage","sendTransaction"],"mappings":";AAAA,OAAO,SAAQ,eAAe;AAC9B,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;AAEjB,SAAR,WAA4B,EAAE,UAAU,GAAG,MAAM,GAAsB;AAC5E,QAAM,UAAS,MAAM,WAAW,qBAAqB;AACrD,QAAM,WAAW,QAAQ,MAAM;AAC7B,WAAO,MAAM,YAAY,cAAc,OAAO;AAAA,EAChD,GAAG,CAAC,OAAO,CAAC;AAEZ,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;AAAA,EAC1C;AAEA,QAAM,UAAW,QAAQ,MAAM;AAC7B,QAAI,MAAM;AACV,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,WAAW,gBAAgB,EAAU;AAC3C,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;;;ACpEA,OAAOA;AAAA,EAEL,aAAAC;AAAA,EAEA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AACP,SAAS,8BAA8B;AACvC,SAAS,eAAwB;AACjC,SAAS,kBAAAC,uBAAsB;;;ACT/B,SAAgB,WAAW,WAAAC,UAAS,QAAQ,gBAAgB;AAC5D,SAAS,eAAe,iBAAiB;AACzC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAQ,iBAAgB;AACxB,SAAS,uBAAoC;AAC7C,SAA+B,uBAAAC,sBAAqB,wBAAwB;;;ACN5E,OAAO,oBAAoB;AAC3B,SAAS,YAAY;;;ACDrB,SAAS,qBAAqB;AAYvB,IAAM,iBAAiB,MAAM;AAClC,SAAO,MAAM,KAAK,cAAc,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU;AACvD,WAAO;AAAA,MACL,IAAI,MAAM,UAAU;AAAA,MACpB,OAAO,MAAM,UAAU,eAAe;AAAA,MACtC,OAAO,MAAM,UAAU;AAAA,MACvB,QAAQ,MAAM,UAAU,QAAQ,CAAC;AAAA,MACjC,kBAAkB,MAAM,UAAU,kBAAkB,CAAC;AAAA,IACvD;AAAA,EACF,CAAC;AACH;;;ADlBA,OAAO,mBAAmB;AAE1B,SAAS,aAAa;AACtB,SAAS,wBAAAC,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,eAAe;AAAA,IACvB,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;AAEO,IAAM,eAAe,oBAAI,IAAI,CAAC,CAACA,sBAAqB,QAAS,SAAS,GAAG,CAACA,sBAAqB,SAAS,SAAS,CAAC,CAAC;;;ADjDnH,SAAS,OAAO,EAAC,QAAO,GAAoC;AACjE,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA4B,IAAI;AAC5D,QAAM,EAAC,SAAQ,IAAI,UAAU;AAC7B,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,EAAE,YAAY,iBAAiB,QAAQ,IAAI,eAAe;AAChE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ;AAAA,EACF,IAAI,UAAU;AAId,QAAM,wBAAwB,OAAgB,KAAK;AAEnD,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,aAAaD,sBAAqB;AACpC,cAAQ,IAAI,gCAAgC;AAC5C,SAAG,KAAK,wBAAwB,EAAC,SAAS,yDAAwD,CAAC;AAAA,IAErG;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,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,CAACE,SAAQ,EAAC,aAAa,aAAAC,cAAa,iBAAAC,iBAAe,CAAC,MAAM;AAK/D,YAAM,aAAa;AAAA,QAEjB,OAAMF,QAAO,QAAQ;AAAA,QACrB,MAAM;AAAA,QACN,UAAU;AAAA,UACR,aAAaC;AAAA,UACb;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,gBAAU,UAAU;AACpB,mBAAa,IAAI;AACjB,aAAO,CAAC,UAAU;AAAA,IAEpB,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,iBAAiBL,SAAQ,MAAM;AACnC,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,WAAW,eAAe;AAAA,IAC5B;AAAA,EAGF,GAAG,CAAC,SAAS,CAAC;AAKd,YAAU,MAAM;AAEd,QAAI,sBAAsB,SAAS;AACjC,UACE,CAAC,WACD,CAAC,gBACD,iBAAiB,SACjB;AACA,gBAAQ,IAAI,+BAA+B,sBAAsB,OAAO;AACxE,gBAAQ,IAAI,mCAAmC;AAC/C,yBAAiB,QAAQ,mBAAmB,aAAa;AACzD,8BAAsB,UAAS;AAAA,MACjC,WAAW,cAAc;AACvB,8BAAsB,UAAU;AAAA,MAClC;AAAA,IACF;AAAA,EAEF,GAAG,CAAC,SAAQ,cAAc,iBAAiB,SAAS,sBAAsB,OAAO,CAAC;AAGlF,YAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,CAAC,WAAW;AAC/B,cAAQ,IAAI,uBAAuB,cAAc,SAAS;AAC1D,mBAAa,KAAK;AAClB;AAAA,IACF;AACA,YAAQ,IAAI,cAAa;AAAA,MACvB,WAAW,UAAU,SAAS;AAAA,MAC9B,UAAU,SAAS;AAAA,IAErB,CAAC;AAGD,QAAI,SAAS,SAAS;AACpB,UAAI,iBAAiB,SAAS;AAC5B,yBAAiB,QAAQ,eAAe;AAAA,UACtC,aAAa,WAAW,SAAS;AAAA,UACjC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AACA;AAAA,IACF;AACA,YAAQ,IAAI,OAAO;AACnB,cAAU;AAAA,MACR,OAAO,aAAa,QAAQ;AAAA,MAC5B,MAAM;AAAA,MACN,UAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR;AAAA,UACE,SAAS,UAAU,SAAS;AAAA,QAC9B;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,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAC,WAAW,cAAc,aAAa,UAAU,YAAY,iBAAiB,OAAO,CAAC;AAEzF,YAAU,MAAM;AACd,QAAI,CAAC,WAAW;AACf;AAAA,IACD;AACA,UAAM,KAAK,WAAW,gBAAgB,WAAW,CAAC,oBAAoB,YAAY;AAChF,cAAQ,IAAI,sBAAsB,oBAAoB,OAAO;AAAA,IAE/D,GAAG,EAAC,YAAY,YAAW,CAAC;AAE5B,WAAO,MAAM;AACX,UAAI,IAAI;AAEN,mBAAW,4BAA4B,EAAE,EAAE,KAAK;AAAA,MAClD;AAAA,IAEF;AAAA,EAEF,GAAG,CAAC,YAAY,SAAS,CAAC;AAE1B,YAAU,MAAM;AACd,QAAI,CAAC,cAAc;AACjB;AAAA,IACF;AACA,YAAQ,IAAI,iBAAiB,WAAW,EAAC,SAAQ,CAAC;AAClD,QAAI,YAAY,aAAa,eAAe,iBAAiB,YAAY,CAAC,SAAS,SAAS;AAC1F,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,CAAC,cAAc,eAAe,WAAW,kBAAkB,mBAAmB,QAAQ,CAAC;AAG1F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AGvSA,SAAS,kBAAkB,mBAAmB;AAC9C,SAAS,WAAAA,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;;;AJ5CO,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;;;AK9JA,OAAOA,YAAuC;;;ACF9C,SAAmC,aAAAC,YAAW,YAAAE,iBAAgB;AAC9D,SAAS,mBAAmB;AAwBrB,SAAS,QACd,OACA;AACA,QAAM,CAAC,aAAa,cAAc,IAAIA,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,iBAAa,WAAW,MAAM,QAAQ,MAAM,OAAsB;AAClE,aAAS,cAAc,UAAU;AACjC,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC;AAAa,WAAO;AAEzB,SAAO,MAAM;AACf;;;ADpDA,SAAS,wBAAAM,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\";\n\nexport default function InitSolana({ children, ...props }:SolanaInitialProps) {\n const network =props.network ?? WalletAdapterNetwork.Devnet;\n const endPoint = useMemo(() => {\n return props.endPoint ?? clusterApiUrl(network)\n }, [network]);\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 React, { 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 { WalletAdapterNetwork, WalletNotReadyError, WalletReadyState } from \"@solana/wallet-adapter-base\";\nimport { 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 sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\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', {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\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 })\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: 901901901,\n namespace: ChainNamespace.solana,\n }\n\n\n }, [publicKey]);\n\n\n\n \n useEffect(() => {\n\n if (selectModalVisibleRef.current) {\n if (\n !visible &&\n !solanaWallet&&\n solanaPromiseRef.current\n ) {\n console.log('-- select modal visible ref', selectModalVisibleRef.current);\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,solanaWallet, solanaPromiseRef.current, 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\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 }, [publicKey, solanaWallet, signMessage, isManual, connection, sendTransaction, network]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(publicKey, (updatedAccountInfo, context) => {\n console.log('--- account change', updatedAccountInfo, context);\n\n }, {commitment: 'confirmed'})\n\n return () => {\n if (id) {\n\n connection.removeAccountChangeListener(id).then();\n }\n\n }\n\n }, [connection, publicKey])\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log('-- public key', publicKey, {isMobile});\n if (isMobile && solanaWallet.readyState === WalletReadyState.Loadable && !isManual.current) {\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 }, [solanaWallet, solanaConnect, publicKey, solanaDisconnect, handleSolanaError, 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 { getChainsArray } from \"./chains\";\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: getChainsArray(),\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 const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { chainsInfoMap } from \"@orderly.network/types\";\n\nexport interface NetworkInterface {\n name: string;\n logo: string;\n chainId: string;\n label: string;\n token: string;\n requestRpc: string;\n explorerUrls: string[];\n}\n\nexport const getChainsArray = () => {\n return Array.from(chainsInfoMap.values()).map((chain) => {\n return {\n id: chain.chainInfo.chainId,\n token: chain.chainInfo.nativeCurrency.symbol,\n label: chain.chainInfo.chainName,\n rpcUrl: chain.chainInfo.rpcUrls[0],\n blockExplorerUrl: chain.chainInfo.blockExplorerUrls[0],\n };\n });\n};\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import 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\";\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 onboardAPI = initConfig(props.apiKey, props.options as InitOptions);\n register(\"onboardAPI\", onboardAPI);\n setInitialized(true);\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/chains.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","sendTransaction"],"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 { getChainsArray } from \"./chains\";\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: getChainsArray(),\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 { chainsInfoMap } from \"@orderly.network/types\";\n\nexport interface NetworkInterface {\n name: string;\n logo: string;\n chainId: string;\n label: string;\n token: string;\n requestRpc: string;\n explorerUrls: string[];\n}\n\nexport const getChainsArray = () => {\n return Array.from(chainsInfoMap.values()).map((chain) => {\n return {\n id: chain.chainInfo.chainId,\n token: chain.chainInfo.nativeCurrency.symbol,\n label: chain.chainInfo.chainName,\n rpcUrl: chain.chainInfo.rpcUrls[0],\n blockExplorerUrl: chain.chainInfo.blockExplorerUrls[0],\n };\n });\n};\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import 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\";\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 onboardAPI = initConfig(props.apiKey, props.options as InitOptions);\n register(\"onboardAPI\", onboardAPI);\n setInitialized(true);\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -19,8 +19,14 @@ import { merge } from 'lodash';
|
|
|
19
19
|
function InitSolana({ children, ...props }) {
|
|
20
20
|
const network = props.network ?? WalletAdapterNetwork.Devnet;
|
|
21
21
|
const endPoint = useMemo(() => {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
if (network === WalletAdapterNetwork.Mainnet) {
|
|
23
|
+
return props.mainnetRpc ?? clusterApiUrl(network);
|
|
24
|
+
}
|
|
25
|
+
if (network === WalletAdapterNetwork.Devnet) {
|
|
26
|
+
return props.devnetRpc ?? clusterApiUrl(network);
|
|
27
|
+
}
|
|
28
|
+
return clusterApiUrl(network);
|
|
29
|
+
}, [network, props.mainnetRpc, props.devnetRpc]);
|
|
24
30
|
const mobileWalletNotFoundHanlder = (adapter) => {
|
|
25
31
|
console.log("-- mobile wallet adapter", adapter);
|
|
26
32
|
return Promise.reject(new WalletNotReadyError("wallet not ready"));
|
|
@@ -161,7 +167,9 @@ function useSOL({ network }) {
|
|
|
161
167
|
console.log("solan connect error", e);
|
|
162
168
|
if (e instanceof WalletNotReadyError) {
|
|
163
169
|
console.log("-- need toast wallet not ready");
|
|
164
|
-
ee.emit("wallet:connect-error", {
|
|
170
|
+
ee.emit("wallet:connect-error", {
|
|
171
|
+
message: "Please open the wallet app and use the in-app browser."
|
|
172
|
+
});
|
|
165
173
|
}
|
|
166
174
|
solanaDisconnect().then();
|
|
167
175
|
};
|
|
@@ -238,14 +246,17 @@ function useSOL({ network }) {
|
|
|
238
246
|
return null;
|
|
239
247
|
}
|
|
240
248
|
return {
|
|
241
|
-
id: 901901901
|
|
249
|
+
id: network === WalletAdapterNetwork.Mainnet ? 900900900 /* MAINNET */ : 901901901 /* DEVNET */,
|
|
242
250
|
namespace: ChainNamespace.solana
|
|
243
251
|
};
|
|
244
252
|
}, [publicKey]);
|
|
245
253
|
useEffect(() => {
|
|
246
254
|
if (selectModalVisibleRef.current) {
|
|
247
255
|
if (!visible && !solanaWallet && solanaPromiseRef.current) {
|
|
248
|
-
console.log(
|
|
256
|
+
console.log(
|
|
257
|
+
"-- select modal visible ref",
|
|
258
|
+
selectModalVisibleRef.current
|
|
259
|
+
);
|
|
249
260
|
console.log("-- use reject solana select modal");
|
|
250
261
|
solanaPromiseRef.current.walletSelectReject("user reject");
|
|
251
262
|
selectModalVisibleRef.current = false;
|
|
@@ -253,7 +264,12 @@ function useSOL({ network }) {
|
|
|
253
264
|
selectModalVisibleRef.current = false;
|
|
254
265
|
}
|
|
255
266
|
}
|
|
256
|
-
}, [
|
|
267
|
+
}, [
|
|
268
|
+
visible,
|
|
269
|
+
solanaWallet,
|
|
270
|
+
solanaPromiseRef.current,
|
|
271
|
+
selectModalVisibleRef.current
|
|
272
|
+
]);
|
|
257
273
|
useEffect(() => {
|
|
258
274
|
if (!solanaWallet || !publicKey) {
|
|
259
275
|
console.log("--- not connect sol", solanaWallet, publicKey);
|
|
@@ -296,14 +312,26 @@ function useSOL({ network }) {
|
|
|
296
312
|
]
|
|
297
313
|
});
|
|
298
314
|
setConnected(true);
|
|
299
|
-
}, [
|
|
315
|
+
}, [
|
|
316
|
+
publicKey,
|
|
317
|
+
solanaWallet,
|
|
318
|
+
signMessage,
|
|
319
|
+
isManual,
|
|
320
|
+
connection,
|
|
321
|
+
sendTransaction,
|
|
322
|
+
network
|
|
323
|
+
]);
|
|
300
324
|
useEffect(() => {
|
|
301
325
|
if (!publicKey) {
|
|
302
326
|
return;
|
|
303
327
|
}
|
|
304
|
-
const id = connection.onAccountChange(
|
|
305
|
-
|
|
306
|
-
|
|
328
|
+
const id = connection.onAccountChange(
|
|
329
|
+
publicKey,
|
|
330
|
+
(updatedAccountInfo, context) => {
|
|
331
|
+
console.log("--- account change", updatedAccountInfo, context);
|
|
332
|
+
},
|
|
333
|
+
{ commitment: "confirmed" }
|
|
334
|
+
);
|
|
307
335
|
return () => {
|
|
308
336
|
if (id) {
|
|
309
337
|
connection.removeAccountChangeListener(id).then();
|
|
@@ -329,7 +357,14 @@ function useSOL({ network }) {
|
|
|
329
357
|
solanaPromiseRef.current.connectReject(e);
|
|
330
358
|
handleSolanaError(e);
|
|
331
359
|
});
|
|
332
|
-
}, [
|
|
360
|
+
}, [
|
|
361
|
+
solanaWallet,
|
|
362
|
+
solanaConnect,
|
|
363
|
+
publicKey,
|
|
364
|
+
solanaDisconnect,
|
|
365
|
+
handleSolanaError,
|
|
366
|
+
isMobile
|
|
367
|
+
]);
|
|
333
368
|
return {
|
|
334
369
|
connected,
|
|
335
370
|
connect,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/chains.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletNotReadyError","WalletAdapterNetwork","wallet","signMessage","sendTransaction"],"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 return props.endPoint ?? clusterApiUrl(network)\n }, [network]);\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 React, { 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 { WalletAdapterNetwork, WalletNotReadyError, WalletReadyState } from \"@solana/wallet-adapter-base\";\nimport { 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 sendTransaction,\n publicKey,\n wallet: solanaWallet,\n connect: solanaConnect,\n disconnect: solanaDisconnect,\n connecting,\n } = useWallet();\n\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', {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\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 })\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: 901901901,\n namespace: ChainNamespace.solana,\n }\n\n\n }, [publicKey]);\n\n\n\n \n useEffect(() => {\n\n if (selectModalVisibleRef.current) {\n if (\n !visible &&\n !solanaWallet&&\n solanaPromiseRef.current\n ) {\n console.log('-- select modal visible ref', selectModalVisibleRef.current);\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,solanaWallet, solanaPromiseRef.current, 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\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 }, [publicKey, solanaWallet, signMessage, isManual, connection, sendTransaction, network]);\n\n useEffect(() => {\n if (!publicKey) {\n return;\n }\n const id = connection.onAccountChange(publicKey, (updatedAccountInfo, context) => {\n console.log('--- account change', updatedAccountInfo, context);\n\n }, {commitment: 'confirmed'})\n\n return () => {\n if (id) {\n\n connection.removeAccountChangeListener(id).then();\n }\n\n }\n\n }, [connection, publicKey])\n\n useEffect(() => {\n if (!solanaWallet) {\n return;\n }\n console.log('-- public key', publicKey, {isMobile});\n if (isMobile && solanaWallet.readyState === WalletReadyState.Loadable && !isManual.current) {\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 }, [solanaWallet, solanaConnect, publicKey, solanaDisconnect, handleSolanaError, 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 { getChainsArray } from \"./chains\";\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: getChainsArray(),\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 const SolanaChains = new Map([[WalletAdapterNetwork.Devnet, 901901901], [WalletAdapterNetwork.Mainnet, 900900900]]);\n\n","import { chainsInfoMap } from \"@orderly.network/types\";\n\nexport interface NetworkInterface {\n name: string;\n logo: string;\n chainId: string;\n label: string;\n token: string;\n requestRpc: string;\n explorerUrls: string[];\n}\n\nexport const getChainsArray = () => {\n return Array.from(chainsInfoMap.values()).map((chain) => {\n return {\n id: chain.chainInfo.chainId,\n token: chain.chainInfo.nativeCurrency.symbol,\n label: chain.chainInfo.chainName,\n rpcUrl: chain.chainInfo.rpcUrls[0],\n blockExplorerUrl: chain.chainInfo.blockExplorerUrls[0],\n };\n });\n};\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import 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\";\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 onboardAPI = initConfig(props.apiKey, props.options as InitOptions);\n register(\"onboardAPI\", onboardAPI);\n setInitialized(true);\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/initSolana.tsx","../src/main.tsx","../src/useSOL.tsx","../src/config.ts","../src/chains.ts","../src/useEvm.tsx","../src/provider.tsx","../src/initEvm.tsx"],"names":["React","useEffect","useRef","useState","ChainNamespace","useMemo","WalletAdapterNetwork","WalletNotReadyError","wallet","signMessage","sendTransaction"],"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 { getChainsArray } from \"./chains\";\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: getChainsArray(),\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 { chainsInfoMap } from \"@orderly.network/types\";\n\nexport interface NetworkInterface {\n name: string;\n logo: string;\n chainId: string;\n label: string;\n token: string;\n requestRpc: string;\n explorerUrls: string[];\n}\n\nexport const getChainsArray = () => {\n return Array.from(chainsInfoMap.values()).map((chain) => {\n return {\n id: chain.chainInfo.chainId,\n token: chain.chainInfo.nativeCurrency.symbol,\n label: chain.chainInfo.chainName,\n rpcUrl: chain.chainInfo.rpcUrls[0],\n blockExplorerUrl: chain.chainInfo.blockExplorerUrls[0],\n };\n });\n};\n","import { useConnectWallet, useSetChain } from \"@web3-onboard/react\";\nimport { useMemo } from \"react\";\n\nexport function useEvm() {\n const [\n {\n wallet, // the wallet that has been connected or null if not yet connected\n connecting, // boolean indicating if connection is in progress\n },\n connect, // function to call to initiate user to connect wallet\n evmDisconnect, // function to call with wallet<DisconnectOptions> to disconnect wallet\n updateBalances, // function to be called with an optional array of wallet addresses connected through Onboard to update balance or empty/no params to update all connected wallets\n setWalletModules, // function to be called with an array of wallet modules to conditionally allow connection of wallet types i.e. setWalletModules([ledger, trezor, injected])\n setPrimaryWallet, // function that can set the primary wallet and/or primary account within that wallet. The wallet that is set needs to be passed in for the first parameter and if you would like to set the primary account, the address of that account also needs to be passed in\n ] = useConnectWallet();\n\n const [\n {\n chains, // the list of chains that web3-onboard was initialized with\n connectedChain: evmConnectChain, // the current chain the user's wallet is connected to\n settingChain, // boolean indicating if the chain is in the process of being set\n },\n setChain, // function to call to initiate user to switch chains in their wallet\n ] = useSetChain();\n\n const connected = useMemo(() => {\n return !!(wallet && wallet.accounts && wallet.accounts[0] && wallet.accounts[0].address);\n }, [wallet]);\n\n const disconnect = async () => {\n console.log('-- disconnect evm xxxxxxxxxxxx');\n if (!wallet) {\n return;\n }\n return evmDisconnect({\n label: wallet.label,\n });\n };\n\n const connectedChain = useMemo(() => {\n return evmConnectChain\n ? { ...evmConnectChain, id: parseInt(evmConnectChain.id) }\n : null;\n }, [evmConnectChain]);\n\n const changeChain = (chain: { chainId: string}): Promise<any> =>{\n return setChain(chain);\n }\n\n return {\n connect,\n connected,\n disconnect,\n connecting,\n wallet,\n connectedChain,\n changeChain,\n\n };\n}\n","import 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\";\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 onboardAPI = initConfig(props.apiKey, props.options as InitOptions);\n register(\"onboardAPI\", onboardAPI);\n setInitialized(true);\n }, []);\n\n if (!initialized) return null;\n\n return props.children\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orderly.network/wallet-connector",
|
|
3
|
-
"version": "2.0.1-alpha.
|
|
3
|
+
"version": "2.0.1-alpha.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.mjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"@solana-mobile/wallet-adapter-mobile": "2.1.4",
|
|
29
29
|
"@solana/web3.js": "1.95.3",
|
|
30
30
|
"rxjs": "^7.5.5",
|
|
31
|
-
"@orderly.network/hooks": "2.0.1-alpha.
|
|
32
|
-
"@orderly.network/
|
|
33
|
-
"@orderly.network/
|
|
34
|
-
"@orderly.network/
|
|
35
|
-
"@orderly.network/
|
|
31
|
+
"@orderly.network/hooks": "2.0.1-alpha.5",
|
|
32
|
+
"@orderly.network/core": "2.0.1-alpha.5",
|
|
33
|
+
"@orderly.network/utils": "2.0.1-alpha.5",
|
|
34
|
+
"@orderly.network/types": "2.0.1-alpha.5",
|
|
35
|
+
"@orderly.network/ui": "2.0.1-alpha.5"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/react": "^18.2.38",
|