@suilend/sui-fe-next 2.0.13 → 2.0.15

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.
@@ -62,6 +62,7 @@ import { DAppKitProvider, useCurrentAccount, useCurrentWallet, useDAppKit, useWa
62
62
  import { SuiJsonRpcClient, } from "@mysten/sui/jsonRpc";
63
63
  import { Transaction } from "@mysten/sui/transactions";
64
64
  import { SUI_DECIMALS, toBase64 } from "@mysten/sui/utils";
65
+ import { getWallets } from "@wallet-standard/app";
65
66
  import BigNumber from "bignumber.js";
66
67
  import { useLDClient } from "launchdarkly-react-client-sdk";
67
68
  import { useLocalStorage } from "usehooks-ts";
@@ -220,8 +221,7 @@ function Inner(_a) {
220
221
  var suiClient = useSettingsContext().suiClient;
221
222
  // WalletConnect via @walletconnect/universal-provider
222
223
  // 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];
224
+ var _f = useState(), wcSession = _f[0], setWcSession = _f[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];
@@ -235,7 +235,6 @@ function Inner(_a) {
235
235
  case 0: return [4 /*yield*/, getWalletConnectProvider()];
236
236
  case 1:
237
237
  provider = _a.sent();
238
- setWcProvider(provider);
239
238
  if (provider.session) {
240
239
  setWcSession(provider.session);
241
240
  }
@@ -357,7 +356,7 @@ function Inner(_a) {
357
356
  wallets__web,
358
357
  ]);
359
358
  // Wallet
360
- var _h = useState(false), isConnectWalletDropdownOpen = _h[0], setIsConnectWalletDropdownOpen = _h[1];
359
+ var _g = useState(false), isConnectWalletDropdownOpen = _g[0], setIsConnectWalletDropdownOpen = _g[1];
361
360
  var rawWallet = useCurrentWallet();
362
361
  var wallet = useMemo(function () {
363
362
  if (sessionAddress) {
@@ -371,17 +370,20 @@ function Inner(_a) {
371
370
  var disconnectWallet = dAppKit.disconnectWallet;
372
371
  var signPersonalMessageRaw = dAppKit.signPersonalMessage;
373
372
  var walletConnectSignPersonalMessage = useCallback(function (message) { return __awaiter(_this, void 0, void 0, function () {
374
- var res;
373
+ var provider, res;
375
374
  return __generator(this, function (_a) {
376
375
  switch (_a.label) {
377
376
  case 0:
378
- if (!sessionAddress || !wcProvider)
377
+ if (!sessionAddress)
379
378
  throw new Error("Wallet not connected");
380
- return [4 /*yield*/, wcProvider.request({
379
+ return [4 /*yield*/, getWalletConnectProvider()];
380
+ case 1:
381
+ provider = _a.sent();
382
+ return [4 /*yield*/, provider.request({
381
383
  method: WC_SUI_METHODS.SIGN_PERSONAL_MESSAGE,
382
384
  params: { message: message.toString(), address: sessionAddress },
383
385
  }, "sui:mainnet")];
384
- case 1:
386
+ case 2:
385
387
  res = _a.sent();
386
388
  return [2 /*return*/, {
387
389
  signature: res.signature,
@@ -389,19 +391,18 @@ function Inner(_a) {
389
391
  }];
390
392
  }
391
393
  });
392
- }); }, [sessionAddress, wcProvider]);
394
+ }); }, [sessionAddress]);
393
395
  var connectWalletWrapper = useCallback(function (_wallet) { return __awaiter(_this, void 0, void 0, function () {
394
- var _a, _b, err_1;
396
+ var provider, _a, provider, _b, err_1;
395
397
  return __generator(this, function (_c) {
396
398
  switch (_c.label) {
397
399
  case 0:
398
- _c.trys.push([0, 12, , 13]);
399
- if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 6];
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({
400
+ _c.trys.push([0, 14, , 15]);
401
+ if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 7];
402
+ return [4 /*yield*/, getWalletConnectProvider()];
403
+ case 1:
404
+ provider = _c.sent();
405
+ return [4 /*yield*/, provider.connect({
405
406
  optionalNamespaces: {
406
407
  sui: {
407
408
  methods: [
@@ -414,80 +415,84 @@ function Inner(_a) {
414
415
  },
415
416
  },
416
417
  })];
417
- case 1:
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;
422
418
  case 2:
423
- _c.trys.push([2, 4, , 5]);
424
- return [4 /*yield*/, disconnectWallet()];
425
- case 3:
426
419
  _c.sent();
427
- return [3 /*break*/, 5];
420
+ _c.label = 3;
421
+ case 3:
422
+ _c.trys.push([3, 5, , 6]);
423
+ return [4 /*yield*/, disconnectWallet()];
428
424
  case 4:
429
- _a = _c.sent();
430
- return [3 /*break*/, 5];
425
+ _c.sent();
426
+ return [3 /*break*/, 6];
431
427
  case 5:
432
- setWcSession(wcProvider.session);
433
- return [2 /*return*/];
428
+ _a = _c.sent();
429
+ return [3 /*break*/, 6];
434
430
  case 6:
431
+ setWcSession(provider.session);
432
+ return [2 /*return*/];
433
+ case 7:
435
434
  if (!_wallet.raw)
436
435
  throw new Error("Missing wallet");
437
436
  return [4 /*yield*/, connectWallet({ wallet: _wallet.raw })];
438
- case 7:
439
- _c.sent();
440
- _c.label = 8;
441
437
  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
438
  _c.sent();
446
- return [3 /*break*/, 11];
439
+ _c.label = 9;
440
+ case 9:
441
+ _c.trys.push([9, 12, , 13]);
442
+ return [4 /*yield*/, getWalletConnectProvider()];
447
443
  case 10:
448
- _b = _c.sent();
449
- return [3 /*break*/, 11];
444
+ provider = _c.sent();
445
+ return [4 /*yield*/, provider.disconnect()];
450
446
  case 11:
447
+ _c.sent();
448
+ return [3 /*break*/, 13];
449
+ case 12:
450
+ _b = _c.sent();
451
+ return [3 /*break*/, 13];
452
+ case 13:
451
453
  setWcSession(null);
452
454
  showInfoToast("Connected ".concat(_wallet.name));
453
455
  setIsConnectWalletDropdownOpen(false);
454
- return [3 /*break*/, 13];
455
- case 12:
456
+ return [3 /*break*/, 15];
457
+ case 14:
456
458
  err_1 = _c.sent();
457
459
  showErrorToast("Failed to connect ".concat(_wallet.name), err_1);
458
460
  console.error(err_1);
459
- return [3 /*break*/, 13];
460
- case 13: return [2 /*return*/];
461
+ return [3 /*break*/, 15];
462
+ case 15: return [2 /*return*/];
461
463
  }
462
464
  });
463
- }); }, [connectWallet, disconnectWallet, wcProvider]);
465
+ }); }, [connectWallet, disconnectWallet]);
464
466
  var disconnectWalletWrapper = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
465
- var err_2;
467
+ var provider, err_2;
466
468
  return __generator(this, function (_a) {
467
469
  switch (_a.label) {
468
470
  case 0:
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())];
471
+ _a.trys.push([0, 6, , 7]);
472
+ if (!sessionAddress) return [3 /*break*/, 3];
473
+ return [4 /*yield*/, getWalletConnectProvider()];
472
474
  case 1:
475
+ provider = _a.sent();
476
+ return [4 /*yield*/, provider.disconnect()];
477
+ case 2:
473
478
  _a.sent();
474
479
  setWcSession(null);
475
- return [3 /*break*/, 4];
476
- case 2: return [4 /*yield*/, disconnectWallet()];
477
- case 3:
480
+ return [3 /*break*/, 5];
481
+ case 3: return [4 /*yield*/, disconnectWallet()];
482
+ case 4:
478
483
  _a.sent();
479
484
  showInfoToast("Disconnected wallet");
480
- _a.label = 4;
481
- case 4: return [3 /*break*/, 6];
482
- case 5:
485
+ _a.label = 5;
486
+ case 5: return [3 /*break*/, 7];
487
+ case 6:
483
488
  err_2 = _a.sent();
484
489
  showErrorToast("Failed to disconnect wallet", err_2);
485
490
  console.error(err_2);
486
- return [3 /*break*/, 6];
487
- case 6: return [2 /*return*/];
491
+ return [3 /*break*/, 7];
492
+ case 7: return [2 /*return*/];
488
493
  }
489
494
  });
490
- }); }, [sessionAddress, wcProvider, disconnectWallet]);
495
+ }); }, [sessionAddress, disconnectWallet]);
491
496
  // Accounts
492
497
  var walletConnection = useWalletConnection();
493
498
  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]);
@@ -651,7 +656,7 @@ function Inner(_a) {
651
656
  });
652
657
  }); }, [suiClient]);
653
658
  var signExecuteAndWaitForTransaction = useCallback(function (transaction, onSetGasBudget, onSign, onExecute) { return __awaiter(_this, void 0, void 0, function () {
654
- var _address, txBytes, txBase64, params, res_1, signAndExecErr_1, signRes, execRes, usedSignOnly, signedTransaction, res1, err_5, message, res, digest, err_6;
659
+ var _address, provider, txBytes, txBase64, params, res_1, signAndExecErr_1, signRes, execRes, msafeWallet, msafeFeature, msafeAccount, usedSignOnly, signedTransaction, res1, err_5, message, res, digest, err_6;
655
660
  return __generator(this, function (_a) {
656
661
  switch (_a.label) {
657
662
  case 0:
@@ -664,7 +669,7 @@ function Inner(_a) {
664
669
  }
665
670
  _a.label = 1;
666
671
  case 1:
667
- _a.trys.push([1, 20, , 21]);
672
+ _a.trys.push([1, 24, , 25]);
668
673
  // Gas budget
669
674
  if (gasBudget !== "")
670
675
  transaction.setGasBudget(+new BigNumber(gasBudget)
@@ -673,59 +678,82 @@ function Inner(_a) {
673
678
  onSetGasBudget === null || onSetGasBudget === void 0 ? void 0 : onSetGasBudget(transaction);
674
679
  // Log
675
680
  console.log("[WalletContext] signExecuteAndWaitForTransaction - transaction.getData():", transaction.getData());
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
681
+ if (!sessionAddress) return [3 /*break*/, 12];
682
+ return [4 /*yield*/, getWalletConnectProvider()];
683
+ case 2:
684
+ provider = _a.sent();
679
685
  transaction.setSender(sessionAddress);
680
686
  return [4 /*yield*/, transaction.build({ client: suiClient })];
681
- case 2:
687
+ case 3:
682
688
  txBytes = _a.sent();
683
689
  txBase64 = toBase64(txBytes);
684
690
  params = {
685
691
  transaction: txBase64,
686
692
  address: sessionAddress,
687
693
  };
688
- _a.label = 3;
689
- case 3:
690
- _a.trys.push([3, 6, , 7]);
694
+ _a.label = 4;
695
+ case 4:
696
+ _a.trys.push([4, 7, , 8]);
691
697
  console.log("[WalletContext] WalletConnect — trying sui_signAndExecuteTransaction");
692
- return [4 /*yield*/, wcProvider.request({
698
+ return [4 /*yield*/, provider.request({
693
699
  method: WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
694
700
  params: params,
695
701
  }, "sui:mainnet")];
696
- case 4:
702
+ case 5:
697
703
  res_1 = _a.sent();
698
704
  console.log("[WalletContext] WalletConnect — sui_signAndExecuteTransaction succeeded, digest:", res_1.digest);
699
705
  return [4 /*yield*/, waitForTransactionWithCheck(res_1.digest)];
700
- case 5: return [2 /*return*/, _a.sent()];
701
- case 6:
706
+ case 6: return [2 /*return*/, _a.sent()];
707
+ case 7:
702
708
  signAndExecErr_1 = _a.sent();
703
709
  console.warn("[WalletContext] WalletConnect — sui_signAndExecuteTransaction failed:", signAndExecErr_1);
704
- return [3 /*break*/, 7];
705
- case 7:
710
+ return [3 /*break*/, 8];
711
+ case 8:
706
712
  // Fallback: sign-only, then dApp-side execute
707
713
  console.log("[WalletContext] WalletConnect — trying sui_signTransaction (sign-only fallback)");
708
- return [4 /*yield*/, wcProvider.request({ method: WC_SUI_METHODS.SIGN_TRANSACTION, params: params }, "sui:mainnet")];
709
- case 8:
714
+ return [4 /*yield*/, provider.request({ method: WC_SUI_METHODS.SIGN_TRANSACTION, params: params }, "sui:mainnet")];
715
+ case 9:
710
716
  signRes = _a.sent();
711
717
  console.log("[WalletContext] WalletConnect — sui_signTransaction succeeded, executing on-chain");
712
718
  return [4 /*yield*/, suiClient.executeTransactionBlock({
713
719
  transactionBlock: signRes.transactionBytes,
714
720
  signature: signRes.signature,
715
721
  })];
716
- case 9:
722
+ case 10:
717
723
  execRes = _a.sent();
718
724
  return [4 /*yield*/, waitForTransactionWithCheck(execRes.digest)];
719
- case 10: return [2 /*return*/, _a.sent()];
720
- case 11:
721
- usedSignOnly = false;
722
- _a.label = 12;
725
+ case 11: return [2 /*return*/, _a.sent()];
723
726
  case 12:
724
- _a.trys.push([12, 16, , 17]);
727
+ if (!isInMsafeApp()) return [3 /*break*/, 15];
728
+ msafeWallet = getWallets()
729
+ .get()
730
+ .find(function (w) { return w.name === WalletName.MSAFE_WALLET; });
731
+ msafeFeature = msafeWallet === null || msafeWallet === void 0 ? void 0 : msafeWallet.features["sui:signAndExecuteTransactionBlock"];
732
+ if (!(msafeFeature && account)) return [3 /*break*/, 14];
733
+ msafeAccount = msafeWallet.accounts.find(function (a) { return a.address === account.address; });
734
+ if (!msafeAccount)
735
+ throw new Error("MSafe account not found");
736
+ return [4 /*yield*/, msafeFeature.signAndExecuteTransactionBlock({
737
+ transactionBlock: transaction,
738
+ account: msafeAccount,
739
+ chain: "sui:mainnet",
740
+ })];
741
+ case 13:
742
+ _a.sent();
743
+ // MSafe proposes the transaction to the multisig queue;
744
+ // the promise never resolves (only rejects on cancel).
745
+ // If we reach here the proposal was accepted.
746
+ throw new Error("Unreachable");
747
+ case 14: throw new Error("MSafe wallet not found. Please reload the page inside MSafe.");
748
+ case 15:
749
+ usedSignOnly = false;
750
+ _a.label = 16;
751
+ case 16:
752
+ _a.trys.push([16, 20, , 21]);
725
753
  return [4 /*yield*/, dAppKit.signTransaction({
726
754
  transaction: transaction,
727
755
  })];
728
- case 13:
756
+ case 17:
729
757
  signedTransaction = _a.sent();
730
758
  usedSignOnly = true;
731
759
  onSign === null || onSign === void 0 ? void 0 : onSign(signedTransaction);
@@ -733,12 +761,12 @@ function Inner(_a) {
733
761
  transactionBlock: signedTransaction.bytes,
734
762
  signature: signedTransaction.signature,
735
763
  })];
736
- case 14:
764
+ case 18:
737
765
  res1 = _a.sent();
738
766
  onExecute === null || onExecute === void 0 ? void 0 : onExecute(res1);
739
767
  return [4 /*yield*/, waitForTransactionWithCheck(res1.digest)];
740
- case 15: return [2 /*return*/, _a.sent()];
741
- case 16:
768
+ case 19: return [2 /*return*/, _a.sent()];
769
+ case 20:
742
770
  err_5 = _a.sent();
743
771
  if (usedSignOnly)
744
772
  throw err_5;
@@ -746,37 +774,36 @@ function Inner(_a) {
746
774
  if (!message.includes("does not support"))
747
775
  throw err_5;
748
776
  console.warn("[WalletContext] Wallet does not support sign-only, falling back to signAndExecuteTransaction");
749
- return [3 /*break*/, 17];
750
- case 17: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
777
+ return [3 /*break*/, 21];
778
+ case 21: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
751
779
  transaction: transaction,
752
780
  })];
753
- case 18:
781
+ case 22:
754
782
  res = _a.sent();
755
783
  digest = res.$kind === "Transaction"
756
784
  ? res.Transaction.digest
757
785
  : res.FailedTransaction.digest;
758
786
  return [4 /*yield*/, waitForTransactionWithCheck(digest)];
759
- case 19: return [2 /*return*/, _a.sent()];
760
- case 20:
787
+ case 23: return [2 /*return*/, _a.sent()];
788
+ case 24:
761
789
  err_6 = _a.sent();
762
790
  console.error(err_6);
763
791
  throw err_6;
764
- case 21: return [2 /*return*/];
792
+ case 25: return [2 /*return*/];
765
793
  }
766
794
  });
767
795
  }); }, [
768
- wcProvider,
769
796
  sessionAddress,
770
797
  gasBudget,
771
798
  impersonatedAddress,
772
- account === null || account === void 0 ? void 0 : account.address,
799
+ account,
773
800
  dryRunTransaction,
774
801
  suiClient,
775
802
  dAppKit,
776
803
  waitForTransactionWithCheck,
777
804
  ]);
778
805
  // Using Ledger
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];
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];
780
807
  // Context
781
808
  var contextValue = useMemo(function () {
782
809
  return {
package/package.json CHANGED
@@ -1 +1 @@
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"}}
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"}}