@suilend/sui-fe-next 2.0.12 → 2.0.13

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.
@@ -66,7 +66,7 @@ import BigNumber from "bignumber.js";
66
66
  import { useLDClient } from "launchdarkly-react-client-sdk";
67
67
  import { useLocalStorage } from "usehooks-ts";
68
68
  import { API_URL, formatAddress, isInMsafeApp } from "@suilend/sui-fe";
69
- import { getUniversalConnector } from "../lib/connector";
69
+ import { WC_SUI_METHODS, getWalletConnectProvider } from "../lib/connector";
70
70
  import { showErrorToast, showInfoToast } from "../lib/toasts";
71
71
  import { useSettingsContext } from "./SettingsContext";
72
72
  export var WalletType;
@@ -211,34 +211,39 @@ export var useWalletContext = function () { return useContext(WalletContext); };
211
211
  function Inner(_a) {
212
212
  var _b;
213
213
  var _this = this;
214
- var _c, _d, _e, _f, _g, _h;
214
+ var _c, _d, _e;
215
215
  var appName = _a.appName, children = _a.children;
216
216
  var router = useRouter();
217
217
  var queryParams = (_b = {},
218
218
  _b[WalletContextQueryParams.WALLET] = router.query[WalletContextQueryParams.WALLET],
219
219
  _b);
220
- var _j = useSettingsContext(), suiClient = _j.suiClient, rpc = _j.rpc;
221
- // Only used for wallet connect
222
- var _k = useState(), universalConnector = _k[0], setUniversalConnector = _k[1];
223
- var _l = useState(), session = _l[0], setSession = _l[1];
224
- var sessionAddressWithout0x = (_e = (_d = (_c = session === null || session === void 0 ? void 0 : session.namespaces) === null || _c === void 0 ? void 0 : _c.sui) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e[0];
225
- var sessionAddress = sessionAddressWithout0x
226
- ? sessionAddressWithout0x.split(":").pop()
227
- : undefined;
220
+ var suiClient = useSettingsContext().suiClient;
221
+ // WalletConnect via @walletconnect/universal-provider
222
+ // Matches the reference implementation: https://github.com/WalletConnect/react-core-up-sui
223
+ var _f = useState(), wcProvider = _f[0], setWcProvider = _f[1];
224
+ var _g = useState(), wcSession = _g[0], setWcSession = _g[1];
225
+ var sessionAddress = useMemo(function () {
226
+ var _a, _b, _c;
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;
229
+ }, [wcSession]);
228
230
  useEffect(function () {
229
231
  (function () { return __awaiter(_this, void 0, void 0, function () {
230
- var connector;
232
+ var provider;
231
233
  return __generator(this, function (_a) {
232
234
  switch (_a.label) {
233
- case 0: return [4 /*yield*/, getUniversalConnector(rpc.url)];
235
+ case 0: return [4 /*yield*/, getWalletConnectProvider()];
234
236
  case 1:
235
- connector = _a.sent();
236
- setUniversalConnector(connector);
237
+ provider = _a.sent();
238
+ setWcProvider(provider);
239
+ if (provider.session) {
240
+ setWcSession(provider.session);
241
+ }
237
242
  return [2 /*return*/];
238
243
  }
239
244
  });
240
245
  }); })();
241
- }, [rpc.url]);
246
+ }, []);
242
247
  // Impersonated address
243
248
  var impersonatedAddress = queryParams[WalletContextQueryParams.WALLET];
244
249
  // Wallets
@@ -352,7 +357,7 @@ function Inner(_a) {
352
357
  wallets__web,
353
358
  ]);
354
359
  // Wallet
355
- var _m = useState(false), isConnectWalletDropdownOpen = _m[0], setIsConnectWalletDropdownOpen = _m[1];
360
+ var _h = useState(false), isConnectWalletDropdownOpen = _h[0], setIsConnectWalletDropdownOpen = _h[1];
356
361
  var rawWallet = useCurrentWallet();
357
362
  var wallet = useMemo(function () {
358
363
  if (sessionAddress) {
@@ -370,11 +375,11 @@ function Inner(_a) {
370
375
  return __generator(this, function (_a) {
371
376
  switch (_a.label) {
372
377
  case 0:
373
- if (!sessionAddress || !universalConnector)
378
+ if (!sessionAddress || !wcProvider)
374
379
  throw new Error("Wallet not connected");
375
- return [4 /*yield*/, universalConnector.request({
376
- method: "sui_signPersonalMessage",
377
- params: { message: message.toString() },
380
+ return [4 /*yield*/, wcProvider.request({
381
+ method: WC_SUI_METHODS.SIGN_PERSONAL_MESSAGE,
382
+ params: { message: message.toString(), address: sessionAddress },
378
383
  }, "sui:mainnet")];
379
384
  case 1:
380
385
  res = _a.sent();
@@ -384,84 +389,109 @@ function Inner(_a) {
384
389
  }];
385
390
  }
386
391
  });
387
- }); }, [sessionAddress, universalConnector]);
392
+ }); }, [sessionAddress, wcProvider]);
388
393
  var connectWalletWrapper = useCallback(function (_wallet) { return __awaiter(_this, void 0, void 0, function () {
389
- var res, _a, err_1;
390
- return __generator(this, function (_b) {
391
- switch (_b.label) {
394
+ var _a, _b, err_1;
395
+ return __generator(this, function (_c) {
396
+ switch (_c.label) {
392
397
  case 0:
393
- _b.trys.push([0, 8, , 9]);
398
+ _c.trys.push([0, 12, , 13]);
394
399
  if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 6];
395
- return [4 /*yield*/, universalConnector.connect()];
400
+ if (!wcProvider)
401
+ throw new Error("WalletConnect provider not ready");
402
+ // Connect with optionalNamespaces — matches the reference app exactly.
403
+ // Methods are declared at connect time, not at init time.
404
+ return [4 /*yield*/, wcProvider.connect({
405
+ optionalNamespaces: {
406
+ sui: {
407
+ methods: [
408
+ WC_SUI_METHODS.SIGN_TRANSACTION,
409
+ WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
410
+ WC_SUI_METHODS.SIGN_PERSONAL_MESSAGE,
411
+ ],
412
+ chains: ["sui:mainnet"],
413
+ events: [],
414
+ },
415
+ },
416
+ })];
396
417
  case 1:
397
- res = _b.sent();
398
- _b.label = 2;
418
+ // Connect with optionalNamespaces — matches the reference app exactly.
419
+ // Methods are declared at connect time, not at init time.
420
+ _c.sent();
421
+ _c.label = 2;
399
422
  case 2:
400
- _b.trys.push([2, 4, , 5]);
423
+ _c.trys.push([2, 4, , 5]);
401
424
  return [4 /*yield*/, disconnectWallet()];
402
425
  case 3:
403
- _b.sent();
426
+ _c.sent();
404
427
  return [3 /*break*/, 5];
405
428
  case 4:
406
- _a = _b.sent();
429
+ _a = _c.sent();
407
430
  return [3 /*break*/, 5];
408
431
  case 5:
409
- setSession(res.session);
432
+ setWcSession(wcProvider.session);
410
433
  return [2 /*return*/];
411
434
  case 6:
412
435
  if (!_wallet.raw)
413
436
  throw new Error("Missing wallet");
414
437
  return [4 /*yield*/, connectWallet({ wallet: _wallet.raw })];
415
438
  case 7:
416
- _b.sent();
417
- try {
418
- universalConnector.disconnect();
419
- }
420
- catch (_c) {
421
- // WalletConnect may not have an active session — safe to ignore
422
- }
423
- setSession(null);
439
+ _c.sent();
440
+ _c.label = 8;
441
+ case 8:
442
+ _c.trys.push([8, 10, , 11]);
443
+ return [4 /*yield*/, (wcProvider === null || wcProvider === void 0 ? void 0 : wcProvider.disconnect())];
444
+ case 9:
445
+ _c.sent();
446
+ return [3 /*break*/, 11];
447
+ case 10:
448
+ _b = _c.sent();
449
+ return [3 /*break*/, 11];
450
+ case 11:
451
+ setWcSession(null);
424
452
  showInfoToast("Connected ".concat(_wallet.name));
425
453
  setIsConnectWalletDropdownOpen(false);
426
- return [3 /*break*/, 9];
427
- case 8:
428
- err_1 = _b.sent();
454
+ return [3 /*break*/, 13];
455
+ case 12:
456
+ err_1 = _c.sent();
429
457
  showErrorToast("Failed to connect ".concat(_wallet.name), err_1);
430
458
  console.error(err_1);
431
- return [3 /*break*/, 9];
432
- case 9: return [2 /*return*/];
459
+ return [3 /*break*/, 13];
460
+ case 13: return [2 /*return*/];
433
461
  }
434
462
  });
435
- }); }, [connectWallet, disconnectWallet, universalConnector]);
463
+ }); }, [connectWallet, disconnectWallet, wcProvider]);
436
464
  var disconnectWalletWrapper = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
437
465
  var err_2;
438
466
  return __generator(this, function (_a) {
439
467
  switch (_a.label) {
440
468
  case 0:
441
- _a.trys.push([0, 4, , 5]);
442
- if (!sessionAddress) return [3 /*break*/, 1];
443
- universalConnector.disconnect();
444
- setSession(null);
445
- return [3 /*break*/, 3];
446
- case 1: return [4 /*yield*/, disconnectWallet()];
447
- case 2:
469
+ _a.trys.push([0, 5, , 6]);
470
+ if (!sessionAddress) return [3 /*break*/, 2];
471
+ return [4 /*yield*/, (wcProvider === null || wcProvider === void 0 ? void 0 : wcProvider.disconnect())];
472
+ case 1:
473
+ _a.sent();
474
+ setWcSession(null);
475
+ return [3 /*break*/, 4];
476
+ case 2: return [4 /*yield*/, disconnectWallet()];
477
+ case 3:
448
478
  _a.sent();
449
479
  showInfoToast("Disconnected wallet");
450
- _a.label = 3;
451
- case 3: return [3 /*break*/, 5];
452
- case 4:
480
+ _a.label = 4;
481
+ case 4: return [3 /*break*/, 6];
482
+ case 5:
453
483
  err_2 = _a.sent();
454
484
  showErrorToast("Failed to disconnect wallet", err_2);
455
485
  console.error(err_2);
456
- return [3 /*break*/, 5];
457
- case 5: return [2 /*return*/];
486
+ return [3 /*break*/, 6];
487
+ case 6: return [2 /*return*/];
458
488
  }
459
489
  });
460
- }); }, [sessionAddress, universalConnector, disconnectWallet]);
490
+ }); }, [sessionAddress, wcProvider, disconnectWallet]);
461
491
  // Accounts
462
492
  var walletConnection = useWalletConnection();
463
- var accountsRes = useMemo(function () { var _a, _b; return (_b = (_a = walletConnection.wallet) === null || _a === void 0 ? void 0 : _a.accounts) !== null && _b !== void 0 ? _b : []; }, [(_f = walletConnection.wallet) === null || _f === void 0 ? void 0 : _f.accounts]);
464
- var accountRes = (_g = useCurrentAccount()) !== null && _g !== void 0 ? _g : undefined;
493
+ var accountsRes = useMemo(function () { var _a, _b; return (_b = (_a = walletConnection.wallet) === null || _a === void 0 ? void 0 : _a.accounts) !== null && _b !== void 0 ? _b : []; }, [(_c = walletConnection.wallet) === null || _c === void 0 ? void 0 : _c.accounts]);
494
+ var accountRes = (_d = useCurrentAccount()) !== null && _d !== void 0 ? _d : undefined;
465
495
  var walletConnectAccount = useMemo(function () {
466
496
  return sessionAddress
467
497
  ? {
@@ -497,7 +527,7 @@ function Inner(_a) {
497
527
  showErrorToast("Failed to switch to ".concat(accountLabel), err);
498
528
  console.error(err);
499
529
  }
500
- }, [dAppKit, (_h = walletConnection.wallet) === null || _h === void 0 ? void 0 : _h.accounts]);
530
+ }, [dAppKit, (_e = walletConnection.wallet) === null || _e === void 0 ? void 0 : _e.accounts]);
501
531
  // LaunchDarkly
502
532
  var ldClient = useLDClient();
503
533
  var ldKeyRef = useRef(undefined);
@@ -643,13 +673,9 @@ function Inner(_a) {
643
673
  onSetGasBudget === null || onSetGasBudget === void 0 ? void 0 : onSetGasBudget(transaction);
644
674
  // Log
645
675
  console.log("[WalletContext] signExecuteAndWaitForTransaction - transaction.getData():", transaction.getData());
646
- if (!(sessionAddress && universalConnector)) return [3 /*break*/, 11];
647
- // WalletConnect Sui spec defines two transaction methods:
648
- // 1. sui_signAndExecuteTransaction wallet signs + submits, returns { digest }
649
- // 2. sui_signTransaction — wallet signs only, returns { transactionBytes, signature }
650
- // Fireblocks and most institutional wallets prefer (1).
651
- // Ref: https://docs.walletconnect.network/wallet-sdk/chain-support/sui
652
- // https://github.com/WalletConnect/react-core-up-sui
676
+ if (!(sessionAddress && wcProvider)) return [3 /*break*/, 11];
677
+ // WalletConnect path uses @walletconnect/universal-provider directly,
678
+ // matching the reference app: https://github.com/WalletConnect/react-core-up-sui
653
679
  transaction.setSender(sessionAddress);
654
680
  return [4 /*yield*/, transaction.build({ client: suiClient })];
655
681
  case 2:
@@ -663,8 +689,8 @@ function Inner(_a) {
663
689
  case 3:
664
690
  _a.trys.push([3, 6, , 7]);
665
691
  console.log("[WalletContext] WalletConnect — trying sui_signAndExecuteTransaction");
666
- return [4 /*yield*/, universalConnector.request({
667
- method: "sui_signAndExecuteTransaction",
692
+ return [4 /*yield*/, wcProvider.request({
693
+ method: WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
668
694
  params: params,
669
695
  }, "sui:mainnet")];
670
696
  case 4:
@@ -679,7 +705,7 @@ function Inner(_a) {
679
705
  case 7:
680
706
  // Fallback: sign-only, then dApp-side execute
681
707
  console.log("[WalletContext] WalletConnect — trying sui_signTransaction (sign-only fallback)");
682
- return [4 /*yield*/, universalConnector.request({ method: "sui_signTransaction", params: params }, "sui:mainnet")];
708
+ return [4 /*yield*/, wcProvider.request({ method: WC_SUI_METHODS.SIGN_TRANSACTION, params: params }, "sui:mainnet")];
683
709
  case 8:
684
710
  signRes = _a.sent();
685
711
  console.log("[WalletContext] WalletConnect — sui_signTransaction succeeded, executing on-chain");
@@ -739,7 +765,7 @@ function Inner(_a) {
739
765
  }
740
766
  });
741
767
  }); }, [
742
- universalConnector,
768
+ wcProvider,
743
769
  sessionAddress,
744
770
  gasBudget,
745
771
  impersonatedAddress,
@@ -750,7 +776,7 @@ function Inner(_a) {
750
776
  waitForTransactionWithCheck,
751
777
  ]);
752
778
  // Using Ledger
753
- var _o = useLocalStorage("isUsingLedger-".concat(impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address), false), isUsingLedger = _o[0], setIsUsingLedger = _o[1];
779
+ 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];
754
780
  // Context
755
781
  var contextValue = useMemo(function () {
756
782
  return {
@@ -1,3 +1,8 @@
1
- import { UniversalConnector } from "@reown/appkit-universal-connector";
1
+ import UniversalProvider from "@walletconnect/universal-provider";
2
2
  export declare const projectId = "eebad6a56ec8b3f08b70175934d35a9d";
3
- export declare function getUniversalConnector(rpcUrl: string): Promise<UniversalConnector>;
3
+ export declare function getWalletConnectProvider(): Promise<UniversalProvider>;
4
+ export declare const WC_SUI_METHODS: {
5
+ readonly SIGN_TRANSACTION: "sui_signTransaction";
6
+ readonly SIGN_AND_EXECUTE_TRANSACTION: "sui_signAndExecuteTransaction";
7
+ readonly SIGN_PERSONAL_MESSAGE: "sui_signPersonalMessage";
8
+ };
package/lib/connector.js CHANGED
@@ -34,48 +34,34 @@ 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 { UniversalConnector } from "@reown/appkit-universal-connector";
38
- // Get projectId from https://dashboard.reown.com
37
+ import UniversalProvider from "@walletconnect/universal-provider";
39
38
  export var projectId = "eebad6a56ec8b3f08b70175934d35a9d";
40
- export function getUniversalConnector(rpcUrl) {
39
+ var provider;
40
+ export function getWalletConnectProvider() {
41
41
  return __awaiter(this, void 0, void 0, function () {
42
- var universalConnector;
43
42
  return __generator(this, function (_a) {
44
43
  switch (_a.label) {
45
- case 0: return [4 /*yield*/, UniversalConnector.init({
46
- projectId: projectId,
47
- metadata: {
48
- name: "Suilend",
49
- description: "Sui's DeFi Suite",
50
- url: "https://suilend.fi/",
51
- icons: ["https://appkit.reown.com/icon.png"],
52
- },
53
- networks: [
54
- {
55
- methods: [
56
- "sui_signPersonalMessage",
57
- "sui_signTransaction",
58
- "sui_signAndExecuteTransaction",
59
- ],
60
- chains: [
61
- {
62
- id: 784,
63
- chainNamespace: "sui",
64
- caipNetworkId: "sui:mainnet",
65
- name: "Sui",
66
- nativeCurrency: { name: "SUI", symbol: "SUI", decimals: 9 },
67
- rpcUrls: { default: { http: [rpcUrl] } },
68
- },
69
- ],
70
- events: [],
71
- namespace: "sui",
44
+ case 0:
45
+ if (!!provider) return [3 /*break*/, 2];
46
+ return [4 /*yield*/, UniversalProvider.init({
47
+ projectId: projectId,
48
+ metadata: {
49
+ name: "Suilend",
50
+ description: "Sui's DeFi Suite",
51
+ url: "https://suilend.fi/",
52
+ icons: ["https://suilend.fi/favicon.ico"],
72
53
  },
73
- ],
74
- })];
54
+ })];
75
55
  case 1:
76
- universalConnector = _a.sent();
77
- return [2 /*return*/, universalConnector];
56
+ provider = _a.sent();
57
+ _a.label = 2;
58
+ case 2: return [2 /*return*/, provider];
78
59
  }
79
60
  });
80
61
  });
81
62
  }
63
+ export var WC_SUI_METHODS = {
64
+ SIGN_TRANSACTION: "sui_signTransaction",
65
+ SIGN_AND_EXECUTE_TRANSACTION: "sui_signAndExecuteTransaction",
66
+ SIGN_PERSONAL_MESSAGE: "sui_signPersonalMessage",
67
+ };
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@suilend/sui-fe-next","version":"2.0.12","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.10","@reown/appkit-common":"^1.8.10","@reown/appkit-universal-connector":"^1.8.19","@tanstack/react-query":"^5.60.2","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.13","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","@walletconnect/universal-provider":"2.21.1","@tanstack/react-query":"^5.60.2","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"}}