@suilend/sui-fe-next 2.0.15 → 2.0.17
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 +57 -35
- package/lib/connector.d.ts +2 -0
- package/lib/connector.js +39 -0
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -61,13 +61,13 @@ import { createDAppKit } from "@mysten/dapp-kit-core";
|
|
|
61
61
|
import { DAppKitProvider, useCurrentAccount, useCurrentWallet, useDAppKit, useWalletConnection, useWallets, } from "@mysten/dapp-kit-react";
|
|
62
62
|
import { SuiJsonRpcClient, } from "@mysten/sui/jsonRpc";
|
|
63
63
|
import { Transaction } from "@mysten/sui/transactions";
|
|
64
|
-
import { SUI_DECIMALS, toBase64 } from "@mysten/sui/utils";
|
|
64
|
+
import { SUI_DECIMALS, isValidSuiAddress, normalizeSuiAddress, toBase64, } from "@mysten/sui/utils";
|
|
65
65
|
import { getWallets } from "@wallet-standard/app";
|
|
66
66
|
import BigNumber from "bignumber.js";
|
|
67
67
|
import { useLDClient } from "launchdarkly-react-client-sdk";
|
|
68
68
|
import { useLocalStorage } from "usehooks-ts";
|
|
69
69
|
import { API_URL, formatAddress, isInMsafeApp } from "@suilend/sui-fe";
|
|
70
|
-
import { WC_SUI_METHODS, getWalletConnectProvider } from "../lib/connector";
|
|
70
|
+
import { WC_SUI_METHODS, getWalletConnectModal, getWalletConnectProvider, } from "../lib/connector";
|
|
71
71
|
import { showErrorToast, showInfoToast } from "../lib/toasts";
|
|
72
72
|
import { useSettingsContext } from "./SettingsContext";
|
|
73
73
|
export var WalletType;
|
|
@@ -218,14 +218,20 @@ function Inner(_a) {
|
|
|
218
218
|
var queryParams = (_b = {},
|
|
219
219
|
_b[WalletContextQueryParams.WALLET] = router.query[WalletContextQueryParams.WALLET],
|
|
220
220
|
_b);
|
|
221
|
-
var
|
|
221
|
+
var _f = useSettingsContext(), rpc = _f.rpc, suiClient = _f.suiClient;
|
|
222
222
|
// WalletConnect via @walletconnect/universal-provider
|
|
223
223
|
// Matches the reference implementation: https://github.com/WalletConnect/react-core-up-sui
|
|
224
|
-
var
|
|
224
|
+
var _g = useState(), wcSession = _g[0], setWcSession = _g[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];
|
|
228
|
-
|
|
228
|
+
if (!raw)
|
|
229
|
+
return undefined;
|
|
230
|
+
var addr = raw.split(":").pop();
|
|
231
|
+
if (!addr)
|
|
232
|
+
return undefined;
|
|
233
|
+
var normalized = normalizeSuiAddress(addr);
|
|
234
|
+
return isValidSuiAddress(normalized) ? normalized : undefined;
|
|
229
235
|
}, [wcSession]);
|
|
230
236
|
useEffect(function () {
|
|
231
237
|
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -356,7 +362,7 @@ function Inner(_a) {
|
|
|
356
362
|
wallets__web,
|
|
357
363
|
]);
|
|
358
364
|
// Wallet
|
|
359
|
-
var
|
|
365
|
+
var _h = useState(false), isConnectWalletDropdownOpen = _h[0], setIsConnectWalletDropdownOpen = _h[1];
|
|
360
366
|
var rawWallet = useCurrentWallet();
|
|
361
367
|
var wallet = useMemo(function () {
|
|
362
368
|
if (sessionAddress) {
|
|
@@ -393,15 +399,22 @@ function Inner(_a) {
|
|
|
393
399
|
});
|
|
394
400
|
}); }, [sessionAddress]);
|
|
395
401
|
var connectWalletWrapper = useCallback(function (_wallet) { return __awaiter(_this, void 0, void 0, function () {
|
|
396
|
-
var provider, _a, provider, _b, err_1;
|
|
402
|
+
var provider, modal, _a, provider, _b, err_1;
|
|
397
403
|
return __generator(this, function (_c) {
|
|
398
404
|
switch (_c.label) {
|
|
399
405
|
case 0:
|
|
400
|
-
_c.trys.push([0,
|
|
401
|
-
if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/,
|
|
406
|
+
_c.trys.push([0, 17, , 18]);
|
|
407
|
+
if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 10];
|
|
402
408
|
return [4 /*yield*/, getWalletConnectProvider()];
|
|
403
409
|
case 1:
|
|
404
410
|
provider = _c.sent();
|
|
411
|
+
return [4 /*yield*/, getWalletConnectModal(rpc.url)];
|
|
412
|
+
case 2:
|
|
413
|
+
modal = _c.sent();
|
|
414
|
+
modal.open();
|
|
415
|
+
_c.label = 3;
|
|
416
|
+
case 3:
|
|
417
|
+
_c.trys.push([3, , 5, 6]);
|
|
405
418
|
return [4 /*yield*/, provider.connect({
|
|
406
419
|
optionalNamespaces: {
|
|
407
420
|
sui: {
|
|
@@ -415,54 +428,57 @@ function Inner(_a) {
|
|
|
415
428
|
},
|
|
416
429
|
},
|
|
417
430
|
})];
|
|
418
|
-
case 2:
|
|
419
|
-
_c.sent();
|
|
420
|
-
_c.label = 3;
|
|
421
|
-
case 3:
|
|
422
|
-
_c.trys.push([3, 5, , 6]);
|
|
423
|
-
return [4 /*yield*/, disconnectWallet()];
|
|
424
431
|
case 4:
|
|
425
432
|
_c.sent();
|
|
426
433
|
return [3 /*break*/, 6];
|
|
427
434
|
case 5:
|
|
428
|
-
|
|
429
|
-
return [
|
|
435
|
+
modal.close();
|
|
436
|
+
return [7 /*endfinally*/];
|
|
430
437
|
case 6:
|
|
438
|
+
_c.trys.push([6, 8, , 9]);
|
|
439
|
+
return [4 /*yield*/, disconnectWallet()];
|
|
440
|
+
case 7:
|
|
441
|
+
_c.sent();
|
|
442
|
+
return [3 /*break*/, 9];
|
|
443
|
+
case 8:
|
|
444
|
+
_a = _c.sent();
|
|
445
|
+
return [3 /*break*/, 9];
|
|
446
|
+
case 9:
|
|
431
447
|
setWcSession(provider.session);
|
|
432
448
|
return [2 /*return*/];
|
|
433
|
-
case
|
|
449
|
+
case 10:
|
|
434
450
|
if (!_wallet.raw)
|
|
435
451
|
throw new Error("Missing wallet");
|
|
436
452
|
return [4 /*yield*/, connectWallet({ wallet: _wallet.raw })];
|
|
437
|
-
case
|
|
453
|
+
case 11:
|
|
438
454
|
_c.sent();
|
|
439
|
-
_c.label =
|
|
440
|
-
case
|
|
441
|
-
_c.trys.push([
|
|
455
|
+
_c.label = 12;
|
|
456
|
+
case 12:
|
|
457
|
+
_c.trys.push([12, 15, , 16]);
|
|
442
458
|
return [4 /*yield*/, getWalletConnectProvider()];
|
|
443
|
-
case
|
|
459
|
+
case 13:
|
|
444
460
|
provider = _c.sent();
|
|
445
461
|
return [4 /*yield*/, provider.disconnect()];
|
|
446
|
-
case
|
|
462
|
+
case 14:
|
|
447
463
|
_c.sent();
|
|
448
|
-
return [3 /*break*/,
|
|
449
|
-
case
|
|
464
|
+
return [3 /*break*/, 16];
|
|
465
|
+
case 15:
|
|
450
466
|
_b = _c.sent();
|
|
451
|
-
return [3 /*break*/,
|
|
452
|
-
case
|
|
467
|
+
return [3 /*break*/, 16];
|
|
468
|
+
case 16:
|
|
453
469
|
setWcSession(null);
|
|
454
470
|
showInfoToast("Connected ".concat(_wallet.name));
|
|
455
471
|
setIsConnectWalletDropdownOpen(false);
|
|
456
|
-
return [3 /*break*/,
|
|
457
|
-
case
|
|
472
|
+
return [3 /*break*/, 18];
|
|
473
|
+
case 17:
|
|
458
474
|
err_1 = _c.sent();
|
|
459
475
|
showErrorToast("Failed to connect ".concat(_wallet.name), err_1);
|
|
460
476
|
console.error(err_1);
|
|
461
|
-
return [3 /*break*/,
|
|
462
|
-
case
|
|
477
|
+
return [3 /*break*/, 18];
|
|
478
|
+
case 18: return [2 /*return*/];
|
|
463
479
|
}
|
|
464
480
|
});
|
|
465
|
-
}); }, [connectWallet, disconnectWallet]);
|
|
481
|
+
}); }, [rpc.url, connectWallet, disconnectWallet]);
|
|
466
482
|
var disconnectWalletWrapper = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
467
483
|
var provider, err_2;
|
|
468
484
|
return __generator(this, function (_a) {
|
|
@@ -803,7 +819,7 @@ function Inner(_a) {
|
|
|
803
819
|
waitForTransactionWithCheck,
|
|
804
820
|
]);
|
|
805
821
|
// Using Ledger
|
|
806
|
-
var
|
|
822
|
+
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];
|
|
807
823
|
// Context
|
|
808
824
|
var contextValue = useMemo(function () {
|
|
809
825
|
return {
|
|
@@ -817,7 +833,13 @@ function Inner(_a) {
|
|
|
817
833
|
accounts: accounts,
|
|
818
834
|
account: account,
|
|
819
835
|
switchAccount: switchAccountWrapper,
|
|
820
|
-
address:
|
|
836
|
+
address: (function () {
|
|
837
|
+
var raw = impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address;
|
|
838
|
+
if (!raw)
|
|
839
|
+
return undefined;
|
|
840
|
+
var normalized = normalizeSuiAddress(raw);
|
|
841
|
+
return isValidSuiAddress(normalized) ? normalized : undefined;
|
|
842
|
+
})(),
|
|
821
843
|
dryRunTransaction: dryRunTransaction,
|
|
822
844
|
signExecuteAndWaitForTransaction: signExecuteAndWaitForTransaction,
|
|
823
845
|
isUsingLedger: isUsingLedger,
|
package/lib/connector.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { type AppKit } from "@reown/appkit/core";
|
|
1
2
|
import UniversalProvider from "@walletconnect/universal-provider";
|
|
2
3
|
export declare const projectId = "eebad6a56ec8b3f08b70175934d35a9d";
|
|
3
4
|
export declare function getWalletConnectProvider(): Promise<UniversalProvider>;
|
|
5
|
+
export declare function getWalletConnectModal(rpcUrl: string): Promise<AppKit>;
|
|
4
6
|
export declare const WC_SUI_METHODS: {
|
|
5
7
|
readonly SIGN_TRANSACTION: "sui_signTransaction";
|
|
6
8
|
readonly SIGN_AND_EXECUTE_TRANSACTION: "sui_signAndExecuteTransaction";
|
package/lib/connector.js
CHANGED
|
@@ -34,6 +34,7 @@ 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 { createAppKit } from "@reown/appkit/core";
|
|
37
38
|
import UniversalProvider from "@walletconnect/universal-provider";
|
|
38
39
|
export var projectId = "eebad6a56ec8b3f08b70175934d35a9d";
|
|
39
40
|
var provider;
|
|
@@ -60,6 +61,44 @@ export function getWalletConnectProvider() {
|
|
|
60
61
|
});
|
|
61
62
|
});
|
|
62
63
|
}
|
|
64
|
+
var modal;
|
|
65
|
+
var modalRpcUrl;
|
|
66
|
+
export function getWalletConnectModal(rpcUrl) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
68
|
+
var universalProvider;
|
|
69
|
+
return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0:
|
|
72
|
+
if (!(!modal || modalRpcUrl !== rpcUrl)) return [3 /*break*/, 2];
|
|
73
|
+
return [4 /*yield*/, getWalletConnectProvider()];
|
|
74
|
+
case 1:
|
|
75
|
+
universalProvider = _a.sent();
|
|
76
|
+
modal = createAppKit({
|
|
77
|
+
projectId: projectId,
|
|
78
|
+
networks: [
|
|
79
|
+
{
|
|
80
|
+
id: 784,
|
|
81
|
+
chainNamespace: "sui",
|
|
82
|
+
caipNetworkId: "sui:mainnet",
|
|
83
|
+
name: "Sui",
|
|
84
|
+
nativeCurrency: { name: "SUI", symbol: "SUI", decimals: 9 },
|
|
85
|
+
rpcUrls: {
|
|
86
|
+
default: {
|
|
87
|
+
http: [rpcUrl],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
universalProvider: universalProvider,
|
|
93
|
+
manualWCControl: true,
|
|
94
|
+
});
|
|
95
|
+
modalRpcUrl = rpcUrl;
|
|
96
|
+
_a.label = 2;
|
|
97
|
+
case 2: return [2 /*return*/, modal];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
63
102
|
export var WC_SUI_METHODS = {
|
|
64
103
|
SIGN_TRANSACTION: "sui_signTransaction",
|
|
65
104
|
SIGN_AND_EXECUTE_TRANSACTION: "sui_signAndExecuteTransaction",
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@suilend/sui-fe-next","version":"2.0.
|
|
1
|
+
{"name":"@suilend/sui-fe-next","version":"2.0.17","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"}}
|