@suilend/sui-fe-next 2.0.15 → 2.0.17

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.
@@ -61,13 +61,13 @@ import { createDAppKit } from "@mysten/dapp-kit-core";
61
61
  import { DAppKitProvider, useCurrentAccount, useCurrentWallet, useDAppKit, useWalletConnection, useWallets, } from "@mysten/dapp-kit-react";
62
62
  import { SuiJsonRpcClient, } from "@mysten/sui/jsonRpc";
63
63
  import { Transaction } from "@mysten/sui/transactions";
64
- import { SUI_DECIMALS, toBase64 } from "@mysten/sui/utils";
64
+ import { SUI_DECIMALS, isValidSuiAddress, normalizeSuiAddress, toBase64, } from "@mysten/sui/utils";
65
65
  import { getWallets } from "@wallet-standard/app";
66
66
  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,14 +218,20 @@ 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];
228
- return raw ? raw.split(":").pop() : undefined;
228
+ if (!raw)
229
+ return undefined;
230
+ var addr = raw.split(":").pop();
231
+ if (!addr)
232
+ return undefined;
233
+ var normalized = normalizeSuiAddress(addr);
234
+ return isValidSuiAddress(normalized) ? normalized : undefined;
229
235
  }, [wcSession]);
230
236
  useEffect(function () {
231
237
  (function () { return __awaiter(_this, void 0, void 0, function () {
@@ -356,7 +362,7 @@ function Inner(_a) {
356
362
  wallets__web,
357
363
  ]);
358
364
  // Wallet
359
- var _g = useState(false), isConnectWalletDropdownOpen = _g[0], setIsConnectWalletDropdownOpen = _g[1];
365
+ var _h = useState(false), isConnectWalletDropdownOpen = _h[0], setIsConnectWalletDropdownOpen = _h[1];
360
366
  var rawWallet = useCurrentWallet();
361
367
  var wallet = useMemo(function () {
362
368
  if (sessionAddress) {
@@ -393,15 +399,22 @@ function Inner(_a) {
393
399
  });
394
400
  }); }, [sessionAddress]);
395
401
  var connectWalletWrapper = useCallback(function (_wallet) { return __awaiter(_this, void 0, void 0, function () {
396
- var provider, _a, provider, _b, err_1;
402
+ var provider, modal, _a, provider, _b, err_1;
397
403
  return __generator(this, function (_c) {
398
404
  switch (_c.label) {
399
405
  case 0:
400
- _c.trys.push([0, 14, , 15]);
401
- if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 7];
406
+ _c.trys.push([0, 17, , 18]);
407
+ if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 10];
402
408
  return [4 /*yield*/, getWalletConnectProvider()];
403
409
  case 1:
404
410
  provider = _c.sent();
411
+ return [4 /*yield*/, getWalletConnectModal(rpc.url)];
412
+ case 2:
413
+ modal = _c.sent();
414
+ modal.open();
415
+ _c.label = 3;
416
+ case 3:
417
+ _c.trys.push([3, , 5, 6]);
405
418
  return [4 /*yield*/, provider.connect({
406
419
  optionalNamespaces: {
407
420
  sui: {
@@ -415,54 +428,57 @@ function Inner(_a) {
415
428
  },
416
429
  },
417
430
  })];
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
431
  case 4:
425
432
  _c.sent();
426
433
  return [3 /*break*/, 6];
427
434
  case 5:
428
- _a = _c.sent();
429
- return [3 /*break*/, 6];
435
+ modal.close();
436
+ return [7 /*endfinally*/];
430
437
  case 6:
438
+ _c.trys.push([6, 8, , 9]);
439
+ return [4 /*yield*/, disconnectWallet()];
440
+ case 7:
441
+ _c.sent();
442
+ return [3 /*break*/, 9];
443
+ case 8:
444
+ _a = _c.sent();
445
+ return [3 /*break*/, 9];
446
+ case 9:
431
447
  setWcSession(provider.session);
432
448
  return [2 /*return*/];
433
- case 7:
449
+ case 10:
434
450
  if (!_wallet.raw)
435
451
  throw new Error("Missing wallet");
436
452
  return [4 /*yield*/, connectWallet({ wallet: _wallet.raw })];
437
- case 8:
453
+ case 11:
438
454
  _c.sent();
439
- _c.label = 9;
440
- case 9:
441
- _c.trys.push([9, 12, , 13]);
455
+ _c.label = 12;
456
+ case 12:
457
+ _c.trys.push([12, 15, , 16]);
442
458
  return [4 /*yield*/, getWalletConnectProvider()];
443
- case 10:
459
+ case 13:
444
460
  provider = _c.sent();
445
461
  return [4 /*yield*/, provider.disconnect()];
446
- case 11:
462
+ case 14:
447
463
  _c.sent();
448
- return [3 /*break*/, 13];
449
- case 12:
464
+ return [3 /*break*/, 16];
465
+ case 15:
450
466
  _b = _c.sent();
451
- return [3 /*break*/, 13];
452
- case 13:
467
+ return [3 /*break*/, 16];
468
+ case 16:
453
469
  setWcSession(null);
454
470
  showInfoToast("Connected ".concat(_wallet.name));
455
471
  setIsConnectWalletDropdownOpen(false);
456
- return [3 /*break*/, 15];
457
- case 14:
472
+ return [3 /*break*/, 18];
473
+ case 17:
458
474
  err_1 = _c.sent();
459
475
  showErrorToast("Failed to connect ".concat(_wallet.name), err_1);
460
476
  console.error(err_1);
461
- return [3 /*break*/, 15];
462
- case 15: return [2 /*return*/];
477
+ return [3 /*break*/, 18];
478
+ case 18: return [2 /*return*/];
463
479
  }
464
480
  });
465
- }); }, [connectWallet, disconnectWallet]);
481
+ }); }, [rpc.url, connectWallet, disconnectWallet]);
466
482
  var disconnectWalletWrapper = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
467
483
  var provider, err_2;
468
484
  return __generator(this, function (_a) {
@@ -803,7 +819,7 @@ function Inner(_a) {
803
819
  waitForTransactionWithCheck,
804
820
  ]);
805
821
  // 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];
822
+ 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
823
  // Context
808
824
  var contextValue = useMemo(function () {
809
825
  return {
@@ -817,7 +833,13 @@ function Inner(_a) {
817
833
  accounts: accounts,
818
834
  account: account,
819
835
  switchAccount: switchAccountWrapper,
820
- address: impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address,
836
+ address: (function () {
837
+ var raw = impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address;
838
+ if (!raw)
839
+ return undefined;
840
+ var normalized = normalizeSuiAddress(raw);
841
+ return isValidSuiAddress(normalized) ? normalized : undefined;
842
+ })(),
821
843
  dryRunTransaction: dryRunTransaction,
822
844
  signExecuteAndWaitForTransaction: signExecuteAndWaitForTransaction,
823
845
  isUsingLedger: isUsingLedger,
@@ -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.17","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"}}