@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 {
|
|
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 {
|
|
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?:
|
|
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?:
|
|
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:
|
|
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 {
|
|
61
|
-
import {
|
|
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
|
|
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
|
|
220
|
+
var _g = useSettingsContext(), rpc = _g.rpc, suiClient = _g.suiClient;
|
|
221
221
|
// Only used for wallet connect
|
|
222
|
-
var
|
|
223
|
-
var
|
|
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
|
|
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 =
|
|
366
|
-
var disconnectWallet =
|
|
367
|
-
var signPersonalMessageRaw =
|
|
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
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
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
|
-
|
|
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
|
|
428
|
-
var
|
|
429
|
-
var
|
|
430
|
-
var
|
|
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
|
-
:
|
|
439
|
-
}, [sessionAddress]);
|
|
440
|
-
var
|
|
441
|
-
|
|
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
|
-
}, [
|
|
447
|
-
|
|
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
|
|
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
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
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
|
-
}, [
|
|
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*/,
|
|
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
|
-
|
|
699
|
+
signTransaction,
|
|
665
700
|
]);
|
|
666
701
|
// Using Ledger
|
|
667
|
-
var
|
|
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
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
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.
|
|
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"}}
|