@suilend/sui-fe-next 2.0.15 → 2.0.16

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.
@@ -67,7 +67,7 @@ import BigNumber from "bignumber.js";
67
67
  import { useLDClient } from "launchdarkly-react-client-sdk";
68
68
  import { useLocalStorage } from "usehooks-ts";
69
69
  import { API_URL, formatAddress, isInMsafeApp } from "@suilend/sui-fe";
70
- import { WC_SUI_METHODS, getWalletConnectProvider } from "../lib/connector";
70
+ import { WC_SUI_METHODS, getWalletConnectModal, getWalletConnectProvider, } from "../lib/connector";
71
71
  import { showErrorToast, showInfoToast } from "../lib/toasts";
72
72
  import { useSettingsContext } from "./SettingsContext";
73
73
  export var WalletType;
@@ -218,10 +218,10 @@ function Inner(_a) {
218
218
  var queryParams = (_b = {},
219
219
  _b[WalletContextQueryParams.WALLET] = router.query[WalletContextQueryParams.WALLET],
220
220
  _b);
221
- var suiClient = useSettingsContext().suiClient;
221
+ var _f = useSettingsContext(), rpc = _f.rpc, suiClient = _f.suiClient;
222
222
  // WalletConnect via @walletconnect/universal-provider
223
223
  // Matches the reference implementation: https://github.com/WalletConnect/react-core-up-sui
224
- var _f = useState(), wcSession = _f[0], setWcSession = _f[1];
224
+ var _g = useState(), wcSession = _g[0], setWcSession = _g[1];
225
225
  var sessionAddress = useMemo(function () {
226
226
  var _a, _b, _c;
227
227
  var raw = (_c = (_b = (_a = wcSession === null || wcSession === void 0 ? void 0 : wcSession.namespaces) === null || _a === void 0 ? void 0 : _a.sui) === null || _b === void 0 ? void 0 : _b.accounts) === null || _c === void 0 ? void 0 : _c[0];
@@ -356,7 +356,7 @@ function Inner(_a) {
356
356
  wallets__web,
357
357
  ]);
358
358
  // Wallet
359
- var _g = useState(false), isConnectWalletDropdownOpen = _g[0], setIsConnectWalletDropdownOpen = _g[1];
359
+ var _h = useState(false), isConnectWalletDropdownOpen = _h[0], setIsConnectWalletDropdownOpen = _h[1];
360
360
  var rawWallet = useCurrentWallet();
361
361
  var wallet = useMemo(function () {
362
362
  if (sessionAddress) {
@@ -393,15 +393,22 @@ function Inner(_a) {
393
393
  });
394
394
  }); }, [sessionAddress]);
395
395
  var connectWalletWrapper = useCallback(function (_wallet) { return __awaiter(_this, void 0, void 0, function () {
396
- var provider, _a, provider, _b, err_1;
396
+ var provider, modal, _a, provider, _b, err_1;
397
397
  return __generator(this, function (_c) {
398
398
  switch (_c.label) {
399
399
  case 0:
400
- _c.trys.push([0, 14, , 15]);
401
- if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 7];
400
+ _c.trys.push([0, 17, , 18]);
401
+ if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 10];
402
402
  return [4 /*yield*/, getWalletConnectProvider()];
403
403
  case 1:
404
404
  provider = _c.sent();
405
+ return [4 /*yield*/, getWalletConnectModal(rpc.url)];
406
+ case 2:
407
+ modal = _c.sent();
408
+ modal.open();
409
+ _c.label = 3;
410
+ case 3:
411
+ _c.trys.push([3, , 5, 6]);
405
412
  return [4 /*yield*/, provider.connect({
406
413
  optionalNamespaces: {
407
414
  sui: {
@@ -415,54 +422,57 @@ function Inner(_a) {
415
422
  },
416
423
  },
417
424
  })];
418
- case 2:
419
- _c.sent();
420
- _c.label = 3;
421
- case 3:
422
- _c.trys.push([3, 5, , 6]);
423
- return [4 /*yield*/, disconnectWallet()];
424
425
  case 4:
425
426
  _c.sent();
426
427
  return [3 /*break*/, 6];
427
428
  case 5:
428
- _a = _c.sent();
429
- return [3 /*break*/, 6];
429
+ modal.close();
430
+ return [7 /*endfinally*/];
430
431
  case 6:
432
+ _c.trys.push([6, 8, , 9]);
433
+ return [4 /*yield*/, disconnectWallet()];
434
+ case 7:
435
+ _c.sent();
436
+ return [3 /*break*/, 9];
437
+ case 8:
438
+ _a = _c.sent();
439
+ return [3 /*break*/, 9];
440
+ case 9:
431
441
  setWcSession(provider.session);
432
442
  return [2 /*return*/];
433
- case 7:
443
+ case 10:
434
444
  if (!_wallet.raw)
435
445
  throw new Error("Missing wallet");
436
446
  return [4 /*yield*/, connectWallet({ wallet: _wallet.raw })];
437
- case 8:
447
+ case 11:
438
448
  _c.sent();
439
- _c.label = 9;
440
- case 9:
441
- _c.trys.push([9, 12, , 13]);
449
+ _c.label = 12;
450
+ case 12:
451
+ _c.trys.push([12, 15, , 16]);
442
452
  return [4 /*yield*/, getWalletConnectProvider()];
443
- case 10:
453
+ case 13:
444
454
  provider = _c.sent();
445
455
  return [4 /*yield*/, provider.disconnect()];
446
- case 11:
456
+ case 14:
447
457
  _c.sent();
448
- return [3 /*break*/, 13];
449
- case 12:
458
+ return [3 /*break*/, 16];
459
+ case 15:
450
460
  _b = _c.sent();
451
- return [3 /*break*/, 13];
452
- case 13:
461
+ return [3 /*break*/, 16];
462
+ case 16:
453
463
  setWcSession(null);
454
464
  showInfoToast("Connected ".concat(_wallet.name));
455
465
  setIsConnectWalletDropdownOpen(false);
456
- return [3 /*break*/, 15];
457
- case 14:
466
+ return [3 /*break*/, 18];
467
+ case 17:
458
468
  err_1 = _c.sent();
459
469
  showErrorToast("Failed to connect ".concat(_wallet.name), err_1);
460
470
  console.error(err_1);
461
- return [3 /*break*/, 15];
462
- case 15: return [2 /*return*/];
471
+ return [3 /*break*/, 18];
472
+ case 18: return [2 /*return*/];
463
473
  }
464
474
  });
465
- }); }, [connectWallet, disconnectWallet]);
475
+ }); }, [rpc.url, connectWallet, disconnectWallet]);
466
476
  var disconnectWalletWrapper = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
467
477
  var provider, err_2;
468
478
  return __generator(this, function (_a) {
@@ -803,7 +813,7 @@ function Inner(_a) {
803
813
  waitForTransactionWithCheck,
804
814
  ]);
805
815
  // Using Ledger
806
- var _h = useLocalStorage("isUsingLedger-".concat(impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address), false), isUsingLedger = _h[0], setIsUsingLedger = _h[1];
816
+ var _j = useLocalStorage("isUsingLedger-".concat(impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address), false), isUsingLedger = _j[0], setIsUsingLedger = _j[1];
807
817
  // Context
808
818
  var contextValue = useMemo(function () {
809
819
  return {
@@ -1,6 +1,8 @@
1
+ import { type AppKit } from "@reown/appkit/core";
1
2
  import UniversalProvider from "@walletconnect/universal-provider";
2
3
  export declare const projectId = "eebad6a56ec8b3f08b70175934d35a9d";
3
4
  export declare function getWalletConnectProvider(): Promise<UniversalProvider>;
5
+ export declare function getWalletConnectModal(rpcUrl: string): Promise<AppKit>;
4
6
  export declare const WC_SUI_METHODS: {
5
7
  readonly SIGN_TRANSACTION: "sui_signTransaction";
6
8
  readonly SIGN_AND_EXECUTE_TRANSACTION: "sui_signAndExecuteTransaction";
package/lib/connector.js CHANGED
@@ -34,6 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
+ import { createAppKit } from "@reown/appkit/core";
37
38
  import UniversalProvider from "@walletconnect/universal-provider";
38
39
  export var projectId = "eebad6a56ec8b3f08b70175934d35a9d";
39
40
  var provider;
@@ -60,6 +61,44 @@ export function getWalletConnectProvider() {
60
61
  });
61
62
  });
62
63
  }
64
+ var modal;
65
+ var modalRpcUrl;
66
+ export function getWalletConnectModal(rpcUrl) {
67
+ return __awaiter(this, void 0, void 0, function () {
68
+ var universalProvider;
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0:
72
+ if (!(!modal || modalRpcUrl !== rpcUrl)) return [3 /*break*/, 2];
73
+ return [4 /*yield*/, getWalletConnectProvider()];
74
+ case 1:
75
+ universalProvider = _a.sent();
76
+ modal = createAppKit({
77
+ projectId: projectId,
78
+ networks: [
79
+ {
80
+ id: 784,
81
+ chainNamespace: "sui",
82
+ caipNetworkId: "sui:mainnet",
83
+ name: "Sui",
84
+ nativeCurrency: { name: "SUI", symbol: "SUI", decimals: 9 },
85
+ rpcUrls: {
86
+ default: {
87
+ http: [rpcUrl],
88
+ },
89
+ },
90
+ },
91
+ ],
92
+ universalProvider: universalProvider,
93
+ manualWCControl: true,
94
+ });
95
+ modalRpcUrl = rpcUrl;
96
+ _a.label = 2;
97
+ case 2: return [2 /*return*/, modal];
98
+ }
99
+ });
100
+ });
101
+ }
63
102
  export var WC_SUI_METHODS = {
64
103
  SIGN_TRANSACTION: "sui_signTransaction",
65
104
  SIGN_AND_EXECUTE_TRANSACTION: "sui_signAndExecuteTransaction",
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@suilend/sui-fe-next","version":"2.0.15","private":false,"description":"A collection of TypeScript frontend components and hooks","author":"Suilend","license":"MIT","main":"./index.js","exports":{".":"./index.js","./contexts/WalletContext":"./contexts/WalletContext.jsx","./contexts/SettingsContext":"./contexts/SettingsContext.jsx","./contexts":"./contexts/index.js","./fetchers":"./fetchers/index.js","./fetchers/useFetchBalances":"./fetchers/useFetchBalances.js","./hooks/useRefreshOnBalancesChange":"./hooks/useRefreshOnBalancesChange.js","./hooks/useLedgerHashDialog":"./hooks/useLedgerHashDialog.js","./hooks/useIsAndroid":"./hooks/useIsAndroid.jsx","./hooks/useCoinMetadataMap":"./hooks/useCoinMetadataMap.js","./hooks":"./hooks/index.js","./hooks/useIsTouchscreen":"./hooks/useIsTouchscreen.jsx","./hooks/useIsiOS":"./hooks/useIsiOS.jsx","./hooks/keypair":"./hooks/keypair.js","./lib/track":"./lib/track.js","./lib":"./lib/index.js","./lib/router":"./lib/router.js","./lib/toasts":"./lib/toasts.jsx","./lib/connector":"./lib/connector.js"},"types":"./index.js","scripts":{"build":"rm -rf ./dist && bun tsc","eslint":"eslint --fix src/","prettier":"prettier --write src/","lint":"bun eslint && bun prettier && bun tsc --noEmit","release":"bun run build && bun ./release.js && cd ./dist && npm publish --access public"},"repository":{"type":"git","url":"git+https://github.com/suilend/sui-fe.git"},"bugs":{"url":"https://github.com/suilend/sui-fe/issues"},"dependencies":{"@reown/appkit":"1.8.2","@tanstack/react-query":"^5.60.2","@wallet-standard/app":"^1.1.0","@walletconnect/universal-provider":"2.21.1","bignumber.js":"^9.1.2","launchdarkly-react-client-sdk":"^3.6.0","lodash":"^4.17.21","mixpanel-browser":"^2.72.0","next":"^15.0.3","react":"18.3.1","react-dom":"18.3.1","react-responsive":"^10.0.0","sonner":"1.4.41","swr":"^2.2.5","tailwind-merge":"^2.5.4","usehooks-ts":"^3.1.1"},"devDependencies":{"@tsconfig/next":"^2.0.3","@types/lodash":"^4.17.13","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@typescript-eslint/eslint-plugin":"^8.14.0","@typescript-eslint/parser":"^8.14.0","eslint":"^9.14.0","eslint-config-next":"^15.0.3","eslint-config-prettier":"^9.1.0","eslint-plugin-import":"^2.31.0","eslint-plugin-prettier":"^5.2.1","prettier":"^3.3.3","ts-node":"^10.9.2","typescript":"^5.6.3"},"peerDependencies":{"@mysten/dapp-kit-core":"1.0.3","@mysten/dapp-kit-react":"1.0.1","@mysten/sui":"2.3.1","@mysten/wallet-standard":"0.20.0","@suilend/sui-fe":"^2.0.10"}}
1
+ {"name":"@suilend/sui-fe-next","version":"2.0.16","private":false,"description":"A collection of TypeScript frontend components and hooks","author":"Suilend","license":"MIT","main":"./index.js","exports":{".":"./index.js","./contexts/WalletContext":"./contexts/WalletContext.jsx","./contexts/SettingsContext":"./contexts/SettingsContext.jsx","./contexts":"./contexts/index.js","./fetchers":"./fetchers/index.js","./fetchers/useFetchBalances":"./fetchers/useFetchBalances.js","./hooks/useRefreshOnBalancesChange":"./hooks/useRefreshOnBalancesChange.js","./hooks/useLedgerHashDialog":"./hooks/useLedgerHashDialog.js","./hooks/useIsAndroid":"./hooks/useIsAndroid.jsx","./hooks/useCoinMetadataMap":"./hooks/useCoinMetadataMap.js","./hooks":"./hooks/index.js","./hooks/useIsTouchscreen":"./hooks/useIsTouchscreen.jsx","./hooks/useIsiOS":"./hooks/useIsiOS.jsx","./hooks/keypair":"./hooks/keypair.js","./lib/track":"./lib/track.js","./lib":"./lib/index.js","./lib/router":"./lib/router.js","./lib/toasts":"./lib/toasts.jsx","./lib/connector":"./lib/connector.js"},"types":"./index.js","scripts":{"build":"rm -rf ./dist && bun tsc","eslint":"eslint --fix src/","prettier":"prettier --write src/","lint":"bun eslint && bun prettier && bun tsc --noEmit","release":"bun run build && bun ./release.js && cd ./dist && npm publish --access public"},"repository":{"type":"git","url":"git+https://github.com/suilend/sui-fe.git"},"bugs":{"url":"https://github.com/suilend/sui-fe/issues"},"dependencies":{"@reown/appkit":"1.8.2","@tanstack/react-query":"^5.60.2","@wallet-standard/app":"^1.1.0","@walletconnect/universal-provider":"2.21.1","bignumber.js":"^9.1.2","launchdarkly-react-client-sdk":"^3.6.0","lodash":"^4.17.21","mixpanel-browser":"^2.72.0","next":"^15.0.3","react":"18.3.1","react-dom":"18.3.1","react-responsive":"^10.0.0","sonner":"1.4.41","swr":"^2.2.5","tailwind-merge":"^2.5.4","usehooks-ts":"^3.1.1"},"devDependencies":{"@tsconfig/next":"^2.0.3","@types/lodash":"^4.17.13","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@typescript-eslint/eslint-plugin":"^8.14.0","@typescript-eslint/parser":"^8.14.0","eslint":"^9.14.0","eslint-config-next":"^15.0.3","eslint-config-prettier":"^9.1.0","eslint-plugin-import":"^2.31.0","eslint-plugin-prettier":"^5.2.1","prettier":"^3.3.3","ts-node":"^10.9.2","typescript":"^5.6.3"},"peerDependencies":{"@mysten/dapp-kit-core":"1.0.3","@mysten/dapp-kit-react":"1.0.1","@mysten/sui":"2.3.1","@mysten/wallet-standard":"0.20.0","@suilend/sui-fe":"^2.0.10"}}