@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.
- package/contexts/WalletContext.jsx +120 -93
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -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(),
|
|
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
|
|
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
|
|
377
|
+
if (!sessionAddress)
|
|
379
378
|
throw new Error("Wallet not connected");
|
|
380
|
-
return [4 /*yield*/,
|
|
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
|
|
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
|
|
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,
|
|
399
|
-
if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/,
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
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
|
-
|
|
420
|
+
_c.label = 3;
|
|
421
|
+
case 3:
|
|
422
|
+
_c.trys.push([3, 5, , 6]);
|
|
423
|
+
return [4 /*yield*/, disconnectWallet()];
|
|
428
424
|
case 4:
|
|
429
|
-
|
|
430
|
-
return [3 /*break*/,
|
|
425
|
+
_c.sent();
|
|
426
|
+
return [3 /*break*/, 6];
|
|
431
427
|
case 5:
|
|
432
|
-
|
|
433
|
-
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
|
-
|
|
439
|
+
_c.label = 9;
|
|
440
|
+
case 9:
|
|
441
|
+
_c.trys.push([9, 12, , 13]);
|
|
442
|
+
return [4 /*yield*/, getWalletConnectProvider()];
|
|
447
443
|
case 10:
|
|
448
|
-
|
|
449
|
-
return [
|
|
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*/,
|
|
455
|
-
case
|
|
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*/,
|
|
460
|
-
case
|
|
461
|
+
return [3 /*break*/, 15];
|
|
462
|
+
case 15: return [2 /*return*/];
|
|
461
463
|
}
|
|
462
464
|
});
|
|
463
|
-
}); }, [connectWallet, disconnectWallet
|
|
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,
|
|
470
|
-
if (!sessionAddress) return [3 /*break*/,
|
|
471
|
-
return [4 /*yield*/, (
|
|
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*/,
|
|
476
|
-
case
|
|
477
|
-
case
|
|
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 =
|
|
481
|
-
case
|
|
482
|
-
case
|
|
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*/,
|
|
487
|
-
case
|
|
491
|
+
return [3 /*break*/, 7];
|
|
492
|
+
case 7: return [2 /*return*/];
|
|
488
493
|
}
|
|
489
494
|
});
|
|
490
|
-
}); }, [sessionAddress,
|
|
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,
|
|
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 (!
|
|
677
|
-
|
|
678
|
-
|
|
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
|
|
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 =
|
|
689
|
-
case
|
|
690
|
-
_a.trys.push([
|
|
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*/,
|
|
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
|
|
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
|
|
701
|
-
case
|
|
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*/,
|
|
705
|
-
case
|
|
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*/,
|
|
709
|
-
case
|
|
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
|
|
722
|
+
case 10:
|
|
717
723
|
execRes = _a.sent();
|
|
718
724
|
return [4 /*yield*/, waitForTransactionWithCheck(execRes.digest)];
|
|
719
|
-
case
|
|
720
|
-
case 11:
|
|
721
|
-
usedSignOnly = false;
|
|
722
|
-
_a.label = 12;
|
|
725
|
+
case 11: return [2 /*return*/, _a.sent()];
|
|
723
726
|
case 12:
|
|
724
|
-
|
|
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
|
|
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
|
|
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
|
|
741
|
-
case
|
|
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*/,
|
|
750
|
-
case
|
|
777
|
+
return [3 /*break*/, 21];
|
|
778
|
+
case 21: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
|
|
751
779
|
transaction: transaction,
|
|
752
780
|
})];
|
|
753
|
-
case
|
|
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
|
|
760
|
-
case
|
|
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
|
|
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
|
|
799
|
+
account,
|
|
773
800
|
dryRunTransaction,
|
|
774
801
|
suiClient,
|
|
775
802
|
dAppKit,
|
|
776
803
|
waitForTransactionWithCheck,
|
|
777
804
|
]);
|
|
778
805
|
// Using Ledger
|
|
779
|
-
var
|
|
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.
|
|
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"}}
|