@suilend/sui-fe-next 2.0.29 → 2.0.31

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.
@@ -1,14 +1,14 @@
1
1
  import { Dispatch, PropsWithChildren, SetStateAction } from "react";
2
- import { type UiWallet } from "@mysten/dapp-kit-core";
2
+ import { SignatureWithBytes } from "@mysten/sui/cryptography";
3
3
  import { DevInspectResults, SuiTransactionBlockResponse } from "@mysten/sui/jsonRpc";
4
4
  import { Transaction } from "@mysten/sui/transactions";
5
- import { type SignedTransaction, type WalletIcon, type WalletAccount as WalletStandardWalletAccount } from "@mysten/wallet-standard";
5
+ import { ReadonlyUint8Array, WalletIcon, WalletAccount as WalletStandardWalletAccount, WalletWithRequiredFeatures } from "@mysten/wallet-standard";
6
6
  export declare enum WalletType {
7
7
  EXTENSION = "extension",
8
8
  WEB = "web"
9
9
  }
10
10
  export type WalletAccount = Omit<WalletStandardWalletAccount, "publicKey"> & {
11
- publicKey?: WalletStandardWalletAccount["publicKey"];
11
+ publicKey?: ReadonlyUint8Array;
12
12
  };
13
13
  type WalletPlatform = "iOS" | "android" | "extension";
14
14
  export type Wallet = {
@@ -17,7 +17,7 @@ export type Wallet = {
17
17
  iconUrl?: WalletIcon;
18
18
  type: WalletType;
19
19
  downloadUrls?: Record<WalletPlatform, string | undefined>;
20
- raw?: UiWallet;
20
+ raw?: WalletWithRequiredFeatures;
21
21
  walletConnect?: boolean;
22
22
  };
23
23
  declare enum WalletName {
@@ -51,7 +51,7 @@ export interface WalletContext {
51
51
  switchAccount: (account: WalletAccount, addressNameServiceName?: string) => void;
52
52
  address?: string;
53
53
  dryRunTransaction: (transaction: Transaction, setGasBudget?: boolean) => Promise<DevInspectResults>;
54
- signExecuteAndWaitForTransaction: (transaction: Transaction, onSetGasBudget?: (transaction: Transaction) => void, onSign?: (signedTransaction: SignedTransaction) => void, onExecute?: (res: SuiTransactionBlockResponse) => void) => Promise<SuiTransactionBlockResponse>;
54
+ signExecuteAndWaitForTransaction: (transaction: Transaction, onSetGasBudget?: (transaction: Transaction) => void, onSign?: (signedTransaction: SignatureWithBytes) => void, onExecute?: (res: SuiTransactionBlockResponse) => void) => Promise<SuiTransactionBlockResponse>;
55
55
  isUsingLedger: boolean;
56
56
  setIsUsingLedger: (isUsingLedger: boolean) => void;
57
57
  signPersonalMessage: (message: Uint8Array) => Promise<{
@@ -57,11 +57,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
57
57
  var _a, _b;
58
58
  import { useRouter } from "next/router";
59
59
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
60
- import { createDAppKit, getWalletUniqueIdentifier, } from "@mysten/dapp-kit-core";
61
- import { DAppKitProvider, useCurrentAccount, useCurrentWallet, useDAppKit, useWalletConnection, useWallets, } from "@mysten/dapp-kit-react";
62
- import { SuiJsonRpcClient, } from "@mysten/sui/jsonRpc";
60
+ import { WalletProvider as MystenWalletProvider, SuiClientProvider, createNetworkConfig, useSignPersonalMessage, } from "@mysten/dapp-kit";
61
+ import { useAccounts, useConnectWallet, useCurrentAccount, useCurrentWallet, useDisconnectWallet, useSignTransaction, useSwitchAccount, useWallets, } from "@mysten/dapp-kit";
63
62
  import { Transaction } from "@mysten/sui/transactions";
64
63
  import { SUI_DECIMALS, toBase64 } from "@mysten/sui/utils";
64
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
65
65
  import BigNumber from "bignumber.js";
66
66
  import { useLDClient } from "launchdarkly-react-client-sdk";
67
67
  import { useLocalStorage } from "usehooks-ts";
@@ -211,16 +211,16 @@ 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;
214
+ var _c, _d, _e, _f;
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 _h = useSettingsContext(), rpc = _h.rpc, suiClient = _h.suiClient;
220
+ var _g = useSettingsContext(), rpc = _g.rpc, suiClient = _g.suiClient;
221
221
  // Only used for wallet connect
222
- var _j = useState(), universalConnector = _j[0], setUniversalConnector = _j[1];
223
- var _k = useState(), session = _k[0], setSession = _k[1];
222
+ var _h = useState(), universalConnector = _h[0], setUniversalConnector = _h[1];
223
+ var _j = useState(), session = _j[0], setSession = _j[1];
224
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
225
  var sessionAddress = sessionAddressWithout0x
226
226
  ? sessionAddressWithout0x.split(":").pop()
@@ -242,7 +242,6 @@ function Inner(_a) {
242
242
  // Impersonated address
243
243
  var impersonatedAddress = queryParams[WalletContextQueryParams.WALLET];
244
244
  // Wallets
245
- var dAppKit = useDAppKit();
246
245
  var wallets__installed = useWallets();
247
246
  var getInstalledWallet = useCallback(function (name) { return wallets__installed.find(function (w) { return w.name === name; }); }, [wallets__installed]);
248
247
  var wallets__extension_default = useMemo(function () {
@@ -352,8 +351,8 @@ function Inner(_a) {
352
351
  wallets__web,
353
352
  ]);
354
353
  // Wallet
355
- var _l = useState(false), isConnectWalletDropdownOpen = _l[0], setIsConnectWalletDropdownOpen = _l[1];
356
- var rawWallet = useCurrentWallet();
354
+ var _k = useState(false), isConnectWalletDropdownOpen = _k[0], setIsConnectWalletDropdownOpen = _k[1];
355
+ var rawWallet = useCurrentWallet().currentWallet;
357
356
  var wallet = useMemo(function () {
358
357
  if (sessionAddress) {
359
358
  return WALLET_CONNECT_WALLET;
@@ -362,9 +361,9 @@ function Inner(_a) {
362
361
  ? wallets.find(function (w) { return w.name === rawWallet.name; })
363
362
  : undefined;
364
363
  }, [rawWallet, wallets, sessionAddress]);
365
- var connectWallet = dAppKit.connectWallet;
366
- var disconnectWallet = dAppKit.disconnectWallet;
367
- var signPersonalMessageRaw = dAppKit.signPersonalMessage;
364
+ var connectWallet = useConnectWallet().mutate;
365
+ var disconnectWallet = useDisconnectWallet().mutate;
366
+ var signPersonalMessageRaw = useSignPersonalMessage().mutateAsync;
368
367
  var walletConnectSignPersonalMessage = useCallback(function (message) { return __awaiter(_this, void 0, void 0, function () {
369
368
  var res;
370
369
  return __generator(this, function (_a) {
@@ -396,11 +395,18 @@ function Inner(_a) {
396
395
  }
397
396
  if (!_wallet.raw)
398
397
  throw new Error("Missing wallet");
399
- connectWallet({ wallet: _wallet.raw });
400
- universalConnector.disconnect();
401
- setSession(null);
402
- showInfoToast("Connected ".concat(_wallet.name));
403
- setIsConnectWalletDropdownOpen(false);
398
+ connectWallet({ wallet: _wallet.raw }, {
399
+ onSuccess: function () {
400
+ universalConnector.disconnect();
401
+ setSession(null);
402
+ showInfoToast("Connected ".concat(_wallet.name));
403
+ setIsConnectWalletDropdownOpen(false);
404
+ },
405
+ onError: function (err) {
406
+ showErrorToast("Failed to connect ".concat(_wallet.name), err);
407
+ console.error(err);
408
+ },
409
+ });
404
410
  }
405
411
  catch (err) {
406
412
  showErrorToast("Failed to connect ".concat(_wallet.name), err);
@@ -414,8 +420,15 @@ function Inner(_a) {
414
420
  setSession(null);
415
421
  }
416
422
  else {
417
- disconnectWallet();
418
- showInfoToast("Disconnected wallet");
423
+ disconnectWallet(undefined, {
424
+ onSuccess: function () {
425
+ showInfoToast("Disconnected wallet");
426
+ },
427
+ onError: function (err) {
428
+ showErrorToast("Failed to disconnect wallet", err);
429
+ console.error(err);
430
+ },
431
+ });
419
432
  }
420
433
  }
421
434
  catch (err) {
@@ -424,10 +437,10 @@ function Inner(_a) {
424
437
  }
425
438
  }, [sessionAddress, universalConnector, disconnectWallet]);
426
439
  // Accounts
427
- var walletConnection = useWalletConnection();
428
- 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]);
429
- var accountRes = (_g = useCurrentAccount()) !== null && _g !== void 0 ? _g : undefined;
430
- var walletConnectAccount = useMemo(function () {
440
+ var accountsRes = useAccounts();
441
+ var accountRes = (_f = useCurrentAccount()) !== null && _f !== void 0 ? _f : undefined;
442
+ var switchAccount = useSwitchAccount().mutate;
443
+ var account = useMemo(function () {
431
444
  return sessionAddress
432
445
  ? {
433
446
  address: sessionAddress,
@@ -435,44 +448,63 @@ function Inner(_a) {
435
448
  chains: ["sui:mainnet"],
436
449
  features: [],
437
450
  }
438
- : undefined;
439
- }, [sessionAddress]);
440
- var account = useMemo(function () { return walletConnectAccount !== null && walletConnectAccount !== void 0 ? walletConnectAccount : accountRes; }, [walletConnectAccount, accountRes]);
441
- var accounts = useMemo(function () { return (walletConnectAccount ? [walletConnectAccount] : accountsRes); }, [walletConnectAccount, accountsRes]);
451
+ : accountRes;
452
+ }, [sessionAddress, accountRes]);
453
+ var accounts = useMemo(function () {
454
+ return sessionAddress
455
+ ? [
456
+ {
457
+ address: sessionAddress,
458
+ publicKey: new Uint8Array(),
459
+ chains: ["sui:mainnet"],
460
+ features: [],
461
+ },
462
+ ]
463
+ : accountsRes;
464
+ }, [sessionAddress, accountsRes]);
442
465
  var signPersonalMessage = useMemo(function () {
443
466
  return sessionAddress
444
467
  ? walletConnectSignPersonalMessage
445
- : function (message) { return signPersonalMessageRaw({ message: message }); };
446
- }, [sessionAddress, walletConnectSignPersonalMessage, signPersonalMessageRaw]);
447
- var DAPP_KIT_STORAGE_KEY = "mysten-dapp-kit:selected-wallet-and-address";
468
+ : function (message) { return signPersonalMessageRaw({ message: message, account: account }); };
469
+ }, [
470
+ sessionAddress,
471
+ walletConnectSignPersonalMessage,
472
+ signPersonalMessageRaw,
473
+ account,
474
+ ]);
448
475
  var switchAccountWrapper = useCallback(function (_account, addressNameServiceName) {
449
- var _a, _b, _c, _d;
476
+ var _a, _b, _c;
450
477
  var accountLabel = (_b = (_a = _account === null || _account === void 0 ? void 0 : _account.label) !== null && _a !== void 0 ? _a : addressNameServiceName) !== null && _b !== void 0 ? _b : formatAddress(_account.address);
451
478
  try {
452
- var matchingAccount = (_c = walletConnection.wallet) === null || _c === void 0 ? void 0 : _c.accounts.find(function (a) { return a.address === _account.address; });
453
- if (!matchingAccount)
454
- throw new Error("Account not found");
455
- dAppKit.switchAccount({ account: matchingAccount });
456
- // Persist to dapp-kit's own storage key so autoconnect restores
457
- // the correct account on page reload.
458
- try {
459
- var walletId = getWalletUniqueIdentifier(matchingAccount);
460
- var intents = (_d = walletConnection.supportedIntents) !== null && _d !== void 0 ? _d : [];
461
- var storageValue = "".concat(walletId.replace(":", "_"), ":").concat(matchingAccount.address, ":").concat(intents.join(","), ":");
462
- localStorage.setItem(DAPP_KIT_STORAGE_KEY, storageValue);
463
- }
464
- catch (_e) { }
465
- showInfoToast("Switched to ".concat(accountLabel), {
466
- description: (_account === null || _account === void 0 ? void 0 : _account.label)
467
- ? (addressNameServiceName !== null && addressNameServiceName !== void 0 ? addressNameServiceName : formatAddress(_account.address))
468
- : undefined,
479
+ switchAccount(
480
+ // only address needed here. rest for type compatibility
481
+ {
482
+ account: {
483
+ address: _account.address,
484
+ chains: _account.chains,
485
+ features: _account.features,
486
+ icon: _account.icon,
487
+ label: _account.label,
488
+ publicKey: (_c = _account.publicKey) !== null && _c !== void 0 ? _c : new Uint8Array(),
489
+ },
490
+ }, {
491
+ onSuccess: function () {
492
+ showInfoToast("Switched to ".concat(accountLabel), {
493
+ description: (_account === null || _account === void 0 ? void 0 : _account.label)
494
+ ? (addressNameServiceName !== null && addressNameServiceName !== void 0 ? addressNameServiceName : formatAddress(_account.address))
495
+ : undefined,
496
+ });
497
+ },
498
+ onError: function (err) {
499
+ showErrorToast("Failed to switch to ".concat(accountLabel), err);
500
+ },
469
501
  });
470
502
  }
471
503
  catch (err) {
472
504
  showErrorToast("Failed to switch to ".concat(accountLabel), err);
473
505
  console.error(err);
474
506
  }
475
- }, [dAppKit, walletConnection]);
507
+ }, [switchAccount]);
476
508
  // LaunchDarkly
477
509
  var ldClient = useLDClient();
478
510
  var ldKeyRef = useRef(undefined);
@@ -531,6 +563,7 @@ function Inner(_a) {
531
563
  }, [impersonatedAddress, account === null || account === void 0 ? void 0 : account.address, wallet === null || wallet === void 0 ? void 0 : wallet.name, appName]);
532
564
  // Tx
533
565
  var gasBudget = useSettingsContext().gasBudget;
566
+ var signTransaction = useSignTransaction().mutateAsync;
534
567
  var dryRunTransaction = useCallback(function (transaction_1) {
535
568
  var args_1 = [];
536
569
  for (var _i = 1; _i < arguments.length; _i++) {
@@ -616,10 +649,12 @@ function Inner(_a) {
616
649
  signature: res.signature,
617
650
  };
618
651
  return [3 /*break*/, 6];
619
- case 4: return [4 /*yield*/, dAppKit.signTransaction({
652
+ case 4: return [4 /*yield*/, signTransaction({
620
653
  transaction: transaction,
654
+ chain: "sui:mainnet",
621
655
  })];
622
656
  case 5:
657
+ // Sign
623
658
  signedTransaction = _c.sent();
624
659
  _c.label = 6;
625
660
  case 6:
@@ -661,10 +696,10 @@ function Inner(_a) {
661
696
  account === null || account === void 0 ? void 0 : account.address,
662
697
  dryRunTransaction,
663
698
  suiClient,
664
- dAppKit,
699
+ signTransaction,
665
700
  ]);
666
701
  // Using Ledger
667
- var _m = useLocalStorage("isUsingLedger-".concat(impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address), false), isUsingLedger = _m[0], setIsUsingLedger = _m[1];
702
+ var _l = useLocalStorage("isUsingLedger-".concat(impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address), false), isUsingLedger = _l[0], setIsUsingLedger = _l[1];
668
703
  // Context
669
704
  var contextValue = useMemo(function () {
670
705
  return {
@@ -708,18 +743,15 @@ function Inner(_a) {
708
743
  export function WalletContextProvider(_a) {
709
744
  var appName = _a.appName, children = _a.children;
710
745
  var rpc = useSettingsContext().rpc;
711
- var dAppKitInstance = useMemo(function () {
712
- return createDAppKit({
713
- networks: ["mainnet"],
714
- createClient: function () {
715
- return new SuiJsonRpcClient({ url: rpc.url, network: "mainnet" });
716
- },
717
- defaultNetwork: "mainnet",
718
- autoConnect: true,
719
- slushWalletConfig: { appName: appName },
720
- });
721
- }, [rpc.url, appName]);
722
- return (<DAppKitProvider dAppKit={dAppKitInstance}>
723
- <Inner appName={appName}>{children}</Inner>
724
- </DAppKitProvider>);
746
+ var networkConfig = createNetworkConfig({
747
+ mainnet: { url: rpc.url },
748
+ }).networkConfig;
749
+ var queryClient = new QueryClient();
750
+ return (<QueryClientProvider client={queryClient}>
751
+ <SuiClientProvider networks={networkConfig} defaultNetwork="mainnet">
752
+ <MystenWalletProvider preferredWallets={DEFAULT_EXTENSION_WALLET_NAMES} autoConnect slushWallet={{ name: appName }}>
753
+ <Inner appName={appName}>{children}</Inner>
754
+ </MystenWalletProvider>
755
+ </SuiClientProvider>
756
+ </QueryClientProvider>);
725
757
  }
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@suilend/sui-fe-next","version":"2.0.29","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.10","@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.31","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.10","@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":"0.19.4","@mysten/sui":"2.3.1","@mysten/wallet-standard":"0.19.2","@suilend/sui-fe":"^2.0.10"}}