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