@suilend/sui-fe-next 2.0.11 → 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);
@@ -621,7 +651,7 @@ function Inner(_a) {
621
651
  });
622
652
  }); }, [suiClient]);
623
653
  var signExecuteAndWaitForTransaction = useCallback(function (transaction, onSetGasBudget, onSign, onExecute) { return __awaiter(_this, void 0, void 0, function () {
624
- var _address, txBytes, res_1, usedSignOnly, signedTransaction, res1, err_5, message, res, digest, err_6;
654
+ var _address, txBytes, txBase64, params, res_1, signAndExecErr_1, signRes, execRes, usedSignOnly, signedTransaction, res1, err_5, message, res, digest, err_6;
625
655
  return __generator(this, function (_a) {
626
656
  switch (_a.label) {
627
657
  case 0:
@@ -634,7 +664,7 @@ function Inner(_a) {
634
664
  }
635
665
  _a.label = 1;
636
666
  case 1:
637
- _a.trys.push([1, 14, , 15]);
667
+ _a.trys.push([1, 20, , 21]);
638
668
  // Gas budget
639
669
  if (gasBudget !== "")
640
670
  transaction.setGasBudget(+new BigNumber(gasBudget)
@@ -643,33 +673,59 @@ 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*/, 5];
647
- // WalletConnect: use combined sign+execute so institutional
648
- // wallets (e.g. Fireblocks) don't drop the channel.
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
649
679
  transaction.setSender(sessionAddress);
650
680
  return [4 /*yield*/, transaction.build({ client: suiClient })];
651
681
  case 2:
652
682
  txBytes = _a.sent();
653
- return [4 /*yield*/, universalConnector.request({
654
- method: "sui_signAndExecuteTransaction",
655
- params: {
656
- transaction: toBase64(txBytes),
657
- address: sessionAddress,
658
- },
659
- }, "sui:mainnet")];
683
+ txBase64 = toBase64(txBytes);
684
+ params = {
685
+ transaction: txBase64,
686
+ address: sessionAddress,
687
+ };
688
+ _a.label = 3;
660
689
  case 3:
690
+ _a.trys.push([3, 6, , 7]);
691
+ console.log("[WalletContext] WalletConnect — trying sui_signAndExecuteTransaction");
692
+ return [4 /*yield*/, wcProvider.request({
693
+ method: WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
694
+ params: params,
695
+ }, "sui:mainnet")];
696
+ case 4:
661
697
  res_1 = _a.sent();
698
+ console.log("[WalletContext] WalletConnect — sui_signAndExecuteTransaction succeeded, digest:", res_1.digest);
662
699
  return [4 /*yield*/, waitForTransactionWithCheck(res_1.digest)];
663
- case 4: return [2 /*return*/, _a.sent()];
664
- case 5:
665
- usedSignOnly = false;
666
- _a.label = 6;
700
+ case 5: return [2 /*return*/, _a.sent()];
667
701
  case 6:
668
- _a.trys.push([6, 10, , 11]);
702
+ signAndExecErr_1 = _a.sent();
703
+ console.warn("[WalletContext] WalletConnect — sui_signAndExecuteTransaction failed:", signAndExecErr_1);
704
+ return [3 /*break*/, 7];
705
+ case 7:
706
+ // Fallback: sign-only, then dApp-side execute
707
+ 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:
710
+ signRes = _a.sent();
711
+ console.log("[WalletContext] WalletConnect — sui_signTransaction succeeded, executing on-chain");
712
+ return [4 /*yield*/, suiClient.executeTransactionBlock({
713
+ transactionBlock: signRes.transactionBytes,
714
+ signature: signRes.signature,
715
+ })];
716
+ case 9:
717
+ execRes = _a.sent();
718
+ return [4 /*yield*/, waitForTransactionWithCheck(execRes.digest)];
719
+ case 10: return [2 /*return*/, _a.sent()];
720
+ case 11:
721
+ usedSignOnly = false;
722
+ _a.label = 12;
723
+ case 12:
724
+ _a.trys.push([12, 16, , 17]);
669
725
  return [4 /*yield*/, dAppKit.signTransaction({
670
726
  transaction: transaction,
671
727
  })];
672
- case 7:
728
+ case 13:
673
729
  signedTransaction = _a.sent();
674
730
  usedSignOnly = true;
675
731
  onSign === null || onSign === void 0 ? void 0 : onSign(signedTransaction);
@@ -677,12 +733,12 @@ function Inner(_a) {
677
733
  transactionBlock: signedTransaction.bytes,
678
734
  signature: signedTransaction.signature,
679
735
  })];
680
- case 8:
736
+ case 14:
681
737
  res1 = _a.sent();
682
738
  onExecute === null || onExecute === void 0 ? void 0 : onExecute(res1);
683
739
  return [4 /*yield*/, waitForTransactionWithCheck(res1.digest)];
684
- case 9: return [2 /*return*/, _a.sent()];
685
- case 10:
740
+ case 15: return [2 /*return*/, _a.sent()];
741
+ case 16:
686
742
  err_5 = _a.sent();
687
743
  if (usedSignOnly)
688
744
  throw err_5;
@@ -690,26 +746,26 @@ function Inner(_a) {
690
746
  if (!message.includes("does not support"))
691
747
  throw err_5;
692
748
  console.warn("[WalletContext] Wallet does not support sign-only, falling back to signAndExecuteTransaction");
693
- return [3 /*break*/, 11];
694
- case 11: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
749
+ return [3 /*break*/, 17];
750
+ case 17: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
695
751
  transaction: transaction,
696
752
  })];
697
- case 12:
753
+ case 18:
698
754
  res = _a.sent();
699
755
  digest = res.$kind === "Transaction"
700
756
  ? res.Transaction.digest
701
757
  : res.FailedTransaction.digest;
702
758
  return [4 /*yield*/, waitForTransactionWithCheck(digest)];
703
- case 13: return [2 /*return*/, _a.sent()];
704
- case 14:
759
+ case 19: return [2 /*return*/, _a.sent()];
760
+ case 20:
705
761
  err_6 = _a.sent();
706
762
  console.error(err_6);
707
763
  throw err_6;
708
- case 15: return [2 /*return*/];
764
+ case 21: return [2 /*return*/];
709
765
  }
710
766
  });
711
767
  }); }, [
712
- universalConnector,
768
+ wcProvider,
713
769
  sessionAddress,
714
770
  gasBudget,
715
771
  impersonatedAddress,
@@ -720,7 +776,7 @@ function Inner(_a) {
720
776
  waitForTransactionWithCheck,
721
777
  ]);
722
778
  // Using Ledger
723
- 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];
724
780
  // Context
725
781
  var contextValue = useMemo(function () {
726
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.11","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"}}