@suilend/sui-fe-next 2.0.27 → 2.0.29
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 +130 -401
- package/lib/connector.d.ts +2 -9
- package/lib/connector.js +31 -56
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -57,17 +57,16 @@ 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 { createDAppKit } from "@mysten/dapp-kit-core";
|
|
60
|
+
import { createDAppKit, getWalletUniqueIdentifier, } 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,
|
|
65
|
-
import { getWallets } from "@wallet-standard/app";
|
|
64
|
+
import { SUI_DECIMALS, toBase64 } from "@mysten/sui/utils";
|
|
66
65
|
import BigNumber from "bignumber.js";
|
|
67
66
|
import { useLDClient } from "launchdarkly-react-client-sdk";
|
|
68
67
|
import { useLocalStorage } from "usehooks-ts";
|
|
69
68
|
import { API_URL, formatAddress, isInMsafeApp } from "@suilend/sui-fe";
|
|
70
|
-
import {
|
|
69
|
+
import { getUniversalConnector } from "../lib/connector";
|
|
71
70
|
import { showErrorToast, showInfoToast } from "../lib/toasts";
|
|
72
71
|
import { useSettingsContext } from "./SettingsContext";
|
|
73
72
|
export var WalletType;
|
|
@@ -212,50 +211,34 @@ export var useWalletContext = function () { return useContext(WalletContext); };
|
|
|
212
211
|
function Inner(_a) {
|
|
213
212
|
var _b;
|
|
214
213
|
var _this = this;
|
|
215
|
-
var _c, _d, _e;
|
|
214
|
+
var _c, _d, _e, _f, _g;
|
|
216
215
|
var appName = _a.appName, children = _a.children;
|
|
217
216
|
var router = useRouter();
|
|
218
217
|
var queryParams = (_b = {},
|
|
219
218
|
_b[WalletContextQueryParams.WALLET] = router.query[WalletContextQueryParams.WALLET],
|
|
220
219
|
_b);
|
|
221
|
-
var
|
|
222
|
-
//
|
|
223
|
-
|
|
224
|
-
var
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
var _a, _b, _c;
|
|
230
|
-
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];
|
|
231
|
-
if (!raw)
|
|
232
|
-
return undefined;
|
|
233
|
-
return raw.split(":").pop();
|
|
234
|
-
}, [wcSession]);
|
|
235
|
-
// Normalised Sui address (zero-padded to 32 bytes) for on-chain use:
|
|
236
|
-
// transaction sender, RPC queries, etc.
|
|
237
|
-
var sessionAddress = useMemo(function () {
|
|
238
|
-
if (!wcRawAddress)
|
|
239
|
-
return undefined;
|
|
240
|
-
var normalized = normalizeSuiAddress(wcRawAddress);
|
|
241
|
-
return isValidSuiAddress(normalized) ? normalized : undefined;
|
|
242
|
-
}, [wcRawAddress]);
|
|
220
|
+
var _h = useSettingsContext(), rpc = _h.rpc, suiClient = _h.suiClient;
|
|
221
|
+
// Only used for wallet connect
|
|
222
|
+
var _j = useState(), universalConnector = _j[0], setUniversalConnector = _j[1];
|
|
223
|
+
var _k = useState(), session = _k[0], setSession = _k[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;
|
|
243
228
|
useEffect(function () {
|
|
244
229
|
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
245
|
-
var
|
|
230
|
+
var connector;
|
|
246
231
|
return __generator(this, function (_a) {
|
|
247
232
|
switch (_a.label) {
|
|
248
|
-
case 0: return [4 /*yield*/,
|
|
233
|
+
case 0: return [4 /*yield*/, getUniversalConnector(rpc.url)];
|
|
249
234
|
case 1:
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
setWcSession(provider.session);
|
|
253
|
-
}
|
|
235
|
+
connector = _a.sent();
|
|
236
|
+
setUniversalConnector(connector);
|
|
254
237
|
return [2 /*return*/];
|
|
255
238
|
}
|
|
256
239
|
});
|
|
257
240
|
}); })();
|
|
258
|
-
}, []);
|
|
241
|
+
}, [rpc.url]);
|
|
259
242
|
// Impersonated address
|
|
260
243
|
var impersonatedAddress = queryParams[WalletContextQueryParams.WALLET];
|
|
261
244
|
// Wallets
|
|
@@ -369,7 +352,7 @@ function Inner(_a) {
|
|
|
369
352
|
wallets__web,
|
|
370
353
|
]);
|
|
371
354
|
// Wallet
|
|
372
|
-
var
|
|
355
|
+
var _l = useState(false), isConnectWalletDropdownOpen = _l[0], setIsConnectWalletDropdownOpen = _l[1];
|
|
373
356
|
var rawWallet = useCurrentWallet();
|
|
374
357
|
var wallet = useMemo(function () {
|
|
375
358
|
if (sessionAddress) {
|
|
@@ -383,23 +366,17 @@ function Inner(_a) {
|
|
|
383
366
|
var disconnectWallet = dAppKit.disconnectWallet;
|
|
384
367
|
var signPersonalMessageRaw = dAppKit.signPersonalMessage;
|
|
385
368
|
var walletConnectSignPersonalMessage = useCallback(function (message) { return __awaiter(_this, void 0, void 0, function () {
|
|
386
|
-
var
|
|
369
|
+
var res;
|
|
387
370
|
return __generator(this, function (_a) {
|
|
388
371
|
switch (_a.label) {
|
|
389
372
|
case 0:
|
|
390
|
-
if (!sessionAddress)
|
|
373
|
+
if (!sessionAddress || !universalConnector)
|
|
391
374
|
throw new Error("Wallet not connected");
|
|
392
|
-
return [4 /*yield*/,
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
return [4 /*yield*/, provider.request({
|
|
396
|
-
method: WC_SUI_METHODS.SIGN_PERSONAL_MESSAGE,
|
|
397
|
-
params: {
|
|
398
|
-
message: message.toString(),
|
|
399
|
-
account: wcRawAddress !== null && wcRawAddress !== void 0 ? wcRawAddress : sessionAddress,
|
|
400
|
-
},
|
|
375
|
+
return [4 /*yield*/, universalConnector.request({
|
|
376
|
+
method: "sui_signPersonalMessage",
|
|
377
|
+
params: { message: message.toString() },
|
|
401
378
|
}, "sui:mainnet")];
|
|
402
|
-
case
|
|
379
|
+
case 1:
|
|
403
380
|
res = _a.sent();
|
|
404
381
|
return [2 /*return*/, {
|
|
405
382
|
signature: res.signature,
|
|
@@ -407,128 +384,49 @@ function Inner(_a) {
|
|
|
407
384
|
}];
|
|
408
385
|
}
|
|
409
386
|
});
|
|
410
|
-
}); }, [sessionAddress,
|
|
411
|
-
var connectWalletWrapper = useCallback(function (_wallet) {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
case 1:
|
|
420
|
-
provider = _c.sent();
|
|
421
|
-
return [4 /*yield*/, getWalletConnectModal(rpc.url)];
|
|
422
|
-
case 2:
|
|
423
|
-
modal = _c.sent();
|
|
424
|
-
modal.open();
|
|
425
|
-
_c.label = 3;
|
|
426
|
-
case 3:
|
|
427
|
-
_c.trys.push([3, , 5, 6]);
|
|
428
|
-
return [4 /*yield*/, provider.connect({
|
|
429
|
-
namespaces: {
|
|
430
|
-
sui: {
|
|
431
|
-
methods: [
|
|
432
|
-
WC_SUI_METHODS.SIGN_TRANSACTION,
|
|
433
|
-
WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
|
|
434
|
-
WC_SUI_METHODS.SIGN_PERSONAL_MESSAGE,
|
|
435
|
-
],
|
|
436
|
-
chains: ["sui:mainnet"],
|
|
437
|
-
events: [],
|
|
438
|
-
},
|
|
439
|
-
},
|
|
440
|
-
})];
|
|
441
|
-
case 4:
|
|
442
|
-
_c.sent();
|
|
443
|
-
return [3 /*break*/, 6];
|
|
444
|
-
case 5:
|
|
445
|
-
modal.close();
|
|
446
|
-
return [7 /*endfinally*/];
|
|
447
|
-
case 6:
|
|
448
|
-
_c.trys.push([6, 8, , 9]);
|
|
449
|
-
return [4 /*yield*/, disconnectWallet()];
|
|
450
|
-
case 7:
|
|
451
|
-
_c.sent();
|
|
452
|
-
return [3 /*break*/, 9];
|
|
453
|
-
case 8:
|
|
454
|
-
_a = _c.sent();
|
|
455
|
-
return [3 /*break*/, 9];
|
|
456
|
-
case 9:
|
|
457
|
-
setWcSession(provider.session);
|
|
458
|
-
return [2 /*return*/];
|
|
459
|
-
case 10:
|
|
460
|
-
if (!_wallet.raw)
|
|
461
|
-
throw new Error("Missing wallet");
|
|
462
|
-
return [4 /*yield*/, connectWallet({ wallet: _wallet.raw })];
|
|
463
|
-
case 11:
|
|
464
|
-
_c.sent();
|
|
465
|
-
_c.label = 12;
|
|
466
|
-
case 12:
|
|
467
|
-
_c.trys.push([12, 15, , 16]);
|
|
468
|
-
return [4 /*yield*/, getWalletConnectProvider()];
|
|
469
|
-
case 13:
|
|
470
|
-
provider = _c.sent();
|
|
471
|
-
return [4 /*yield*/, provider.disconnect()];
|
|
472
|
-
case 14:
|
|
473
|
-
_c.sent();
|
|
474
|
-
return [3 /*break*/, 16];
|
|
475
|
-
case 15:
|
|
476
|
-
_b = _c.sent();
|
|
477
|
-
return [3 /*break*/, 16];
|
|
478
|
-
case 16:
|
|
479
|
-
setWcSession(null);
|
|
480
|
-
showInfoToast("Connected ".concat(_wallet.name));
|
|
481
|
-
setIsConnectWalletDropdownOpen(false);
|
|
482
|
-
return [3 /*break*/, 18];
|
|
483
|
-
case 17:
|
|
484
|
-
err_1 = _c.sent();
|
|
485
|
-
showErrorToast("Failed to connect ".concat(_wallet.name), err_1);
|
|
486
|
-
console.error(err_1);
|
|
487
|
-
return [3 /*break*/, 18];
|
|
488
|
-
case 18: return [2 /*return*/];
|
|
387
|
+
}); }, [sessionAddress, universalConnector]);
|
|
388
|
+
var connectWalletWrapper = useCallback(function (_wallet) {
|
|
389
|
+
try {
|
|
390
|
+
if (_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect) {
|
|
391
|
+
universalConnector.connect().then(function (res) {
|
|
392
|
+
disconnectWallet();
|
|
393
|
+
setSession(res.session);
|
|
394
|
+
});
|
|
395
|
+
return;
|
|
489
396
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
case 3: return [4 /*yield*/, disconnectWallet()];
|
|
509
|
-
case 4:
|
|
510
|
-
_a.sent();
|
|
511
|
-
showInfoToast("Disconnected wallet");
|
|
512
|
-
_a.label = 5;
|
|
513
|
-
case 5:
|
|
514
|
-
try {
|
|
515
|
-
localStorage.removeItem(PREFERRED_ACCOUNT_KEY);
|
|
516
|
-
}
|
|
517
|
-
catch (_b) { }
|
|
518
|
-
return [3 /*break*/, 7];
|
|
519
|
-
case 6:
|
|
520
|
-
err_2 = _a.sent();
|
|
521
|
-
showErrorToast("Failed to disconnect wallet", err_2);
|
|
522
|
-
console.error(err_2);
|
|
523
|
-
return [3 /*break*/, 7];
|
|
524
|
-
case 7: return [2 /*return*/];
|
|
397
|
+
if (!_wallet.raw)
|
|
398
|
+
throw new Error("Missing wallet");
|
|
399
|
+
connectWallet({ wallet: _wallet.raw });
|
|
400
|
+
universalConnector.disconnect();
|
|
401
|
+
setSession(null);
|
|
402
|
+
showInfoToast("Connected ".concat(_wallet.name));
|
|
403
|
+
setIsConnectWalletDropdownOpen(false);
|
|
404
|
+
}
|
|
405
|
+
catch (err) {
|
|
406
|
+
showErrorToast("Failed to connect ".concat(_wallet.name), err);
|
|
407
|
+
console.error(err);
|
|
408
|
+
}
|
|
409
|
+
}, [connectWallet, disconnectWallet, universalConnector]);
|
|
410
|
+
var disconnectWalletWrapper = useCallback(function () {
|
|
411
|
+
try {
|
|
412
|
+
if (sessionAddress) {
|
|
413
|
+
universalConnector.disconnect();
|
|
414
|
+
setSession(null);
|
|
525
415
|
}
|
|
526
|
-
|
|
527
|
-
|
|
416
|
+
else {
|
|
417
|
+
disconnectWallet();
|
|
418
|
+
showInfoToast("Disconnected wallet");
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
catch (err) {
|
|
422
|
+
showErrorToast("Failed to disconnect wallet", err);
|
|
423
|
+
console.error(err);
|
|
424
|
+
}
|
|
425
|
+
}, [sessionAddress, universalConnector, disconnectWallet]);
|
|
528
426
|
// Accounts
|
|
529
427
|
var walletConnection = useWalletConnection();
|
|
530
|
-
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 : []; }, [(
|
|
531
|
-
var accountRes = (
|
|
428
|
+
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]);
|
|
429
|
+
var accountRes = (_g = useCurrentAccount()) !== null && _g !== void 0 ? _g : undefined;
|
|
532
430
|
var walletConnectAccount = useMemo(function () {
|
|
533
431
|
return sessionAddress
|
|
534
432
|
? {
|
|
@@ -546,18 +444,24 @@ function Inner(_a) {
|
|
|
546
444
|
? walletConnectSignPersonalMessage
|
|
547
445
|
: function (message) { return signPersonalMessageRaw({ message: message }); };
|
|
548
446
|
}, [sessionAddress, walletConnectSignPersonalMessage, signPersonalMessageRaw]);
|
|
447
|
+
var DAPP_KIT_STORAGE_KEY = "mysten-dapp-kit:selected-wallet-and-address";
|
|
549
448
|
var switchAccountWrapper = useCallback(function (_account, addressNameServiceName) {
|
|
550
|
-
var _a, _b, _c;
|
|
449
|
+
var _a, _b, _c, _d;
|
|
551
450
|
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);
|
|
552
451
|
try {
|
|
553
452
|
var matchingAccount = (_c = walletConnection.wallet) === null || _c === void 0 ? void 0 : _c.accounts.find(function (a) { return a.address === _account.address; });
|
|
554
453
|
if (!matchingAccount)
|
|
555
454
|
throw new Error("Account not found");
|
|
556
455
|
dAppKit.switchAccount({ account: matchingAccount });
|
|
456
|
+
// Persist to dapp-kit's own storage key so autoconnect restores
|
|
457
|
+
// the correct account on page reload.
|
|
557
458
|
try {
|
|
558
|
-
|
|
459
|
+
var walletId = getWalletUniqueIdentifier(matchingAccount);
|
|
460
|
+
var intents = (_d = walletConnection.supportedIntents) !== null && _d !== void 0 ? _d : [];
|
|
461
|
+
var storageValue = "".concat(walletId.replace(":", "_"), ":").concat(matchingAccount.address, ":").concat(intents.join(","), ":");
|
|
462
|
+
localStorage.setItem(DAPP_KIT_STORAGE_KEY, storageValue);
|
|
559
463
|
}
|
|
560
|
-
catch (
|
|
464
|
+
catch (_e) { }
|
|
561
465
|
showInfoToast("Switched to ".concat(accountLabel), {
|
|
562
466
|
description: (_account === null || _account === void 0 ? void 0 : _account.label)
|
|
563
467
|
? (addressNameServiceName !== null && addressNameServiceName !== void 0 ? addressNameServiceName : formatAddress(_account.address))
|
|
@@ -568,24 +472,7 @@ function Inner(_a) {
|
|
|
568
472
|
showErrorToast("Failed to switch to ".concat(accountLabel), err);
|
|
569
473
|
console.error(err);
|
|
570
474
|
}
|
|
571
|
-
}, [dAppKit,
|
|
572
|
-
// After autoconnect restores the wallet, check if the user had previously
|
|
573
|
-
// selected a different account and switch to it.
|
|
574
|
-
var hasRestoredPreferredAccount = useRef(false);
|
|
575
|
-
useEffect(function () {
|
|
576
|
-
if (hasRestoredPreferredAccount.current)
|
|
577
|
-
return;
|
|
578
|
-
if (!walletConnection.wallet || !accountRes)
|
|
579
|
-
return;
|
|
580
|
-
var preferred = localStorage.getItem(PREFERRED_ACCOUNT_KEY);
|
|
581
|
-
if (!preferred || preferred === accountRes.address)
|
|
582
|
-
return;
|
|
583
|
-
var match = walletConnection.wallet.accounts.find(function (a) { return a.address === preferred; });
|
|
584
|
-
if (!match)
|
|
585
|
-
return;
|
|
586
|
-
hasRestoredPreferredAccount.current = true;
|
|
587
|
-
dAppKit.switchAccount({ account: match });
|
|
588
|
-
}, [walletConnection.wallet, accountRes, dAppKit]);
|
|
475
|
+
}, [dAppKit, walletConnection]);
|
|
589
476
|
// LaunchDarkly
|
|
590
477
|
var ldClient = useLDClient();
|
|
591
478
|
var ldKeyRef = useRef(undefined);
|
|
@@ -614,7 +501,7 @@ function Inner(_a) {
|
|
|
614
501
|
if (!(wallet === null || wallet === void 0 ? void 0 : wallet.name))
|
|
615
502
|
return;
|
|
616
503
|
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
617
|
-
var
|
|
504
|
+
var err_1;
|
|
618
505
|
return __generator(this, function (_a) {
|
|
619
506
|
switch (_a.label) {
|
|
620
507
|
case 0:
|
|
@@ -634,8 +521,8 @@ function Inner(_a) {
|
|
|
634
521
|
_a.sent();
|
|
635
522
|
return [3 /*break*/, 3];
|
|
636
523
|
case 2:
|
|
637
|
-
|
|
638
|
-
console.error(
|
|
524
|
+
err_1 = _a.sent();
|
|
525
|
+
console.error(err_1);
|
|
639
526
|
return [3 /*break*/, 3];
|
|
640
527
|
case 3: return [2 /*return*/];
|
|
641
528
|
}
|
|
@@ -650,7 +537,7 @@ function Inner(_a) {
|
|
|
650
537
|
args_1[_i - 1] = arguments[_i];
|
|
651
538
|
}
|
|
652
539
|
return __awaiter(_this, __spreadArray([transaction_1], args_1, true), void 0, function (transaction, setGasBudget) {
|
|
653
|
-
var _address, _transaction, inspectResults,
|
|
540
|
+
var _address, _transaction, inspectResults, err_2;
|
|
654
541
|
if (setGasBudget === void 0) { setGasBudget = true; }
|
|
655
542
|
return __generator(this, function (_a) {
|
|
656
543
|
switch (_a.label) {
|
|
@@ -676,43 +563,20 @@ function Inner(_a) {
|
|
|
676
563
|
throw new Error(inspectResults.error);
|
|
677
564
|
return [2 /*return*/, inspectResults];
|
|
678
565
|
case 3:
|
|
679
|
-
|
|
566
|
+
err_2 = _a.sent();
|
|
680
567
|
// _transaction.getData().inputs.filter(input=>!!input.Object).map(input=>input.)
|
|
681
|
-
console.error(
|
|
682
|
-
throw
|
|
568
|
+
console.error(err_2);
|
|
569
|
+
throw err_2;
|
|
683
570
|
case 4: return [2 /*return*/];
|
|
684
571
|
}
|
|
685
572
|
});
|
|
686
573
|
});
|
|
687
574
|
}, [impersonatedAddress, account === null || account === void 0 ? void 0 : account.address, gasBudget, suiClient]);
|
|
688
|
-
var
|
|
689
|
-
var res;
|
|
575
|
+
var signExecuteAndWaitForTransaction = useCallback(function (transaction, onSetGasBudget, onSign, onExecute) { return __awaiter(_this, void 0, void 0, function () {
|
|
576
|
+
var _address, signedTransaction, txBytes, res, res1, res2, err_3;
|
|
690
577
|
var _a, _b;
|
|
691
578
|
return __generator(this, function (_c) {
|
|
692
579
|
switch (_c.label) {
|
|
693
|
-
case 0: return [4 /*yield*/, suiClient.waitForTransaction({
|
|
694
|
-
digest: digest,
|
|
695
|
-
options: {
|
|
696
|
-
showBalanceChanges: true,
|
|
697
|
-
showEffects: true,
|
|
698
|
-
showEvents: true,
|
|
699
|
-
showObjectChanges: true,
|
|
700
|
-
},
|
|
701
|
-
})];
|
|
702
|
-
case 1:
|
|
703
|
-
res = _c.sent();
|
|
704
|
-
if (((_a = res.effects) === null || _a === void 0 ? void 0 : _a.status) !== undefined &&
|
|
705
|
-
res.effects.status.status === "failure")
|
|
706
|
-
throw new Error((_b = res.effects.status.error) !== null && _b !== void 0 ? _b : "Transaction failed");
|
|
707
|
-
return [2 /*return*/, res];
|
|
708
|
-
}
|
|
709
|
-
});
|
|
710
|
-
}); }, [suiClient]);
|
|
711
|
-
var signExecuteAndWaitForTransaction = useCallback(function (transaction, onSetGasBudget, onSign, onExecute) { return __awaiter(_this, void 0, void 0, function () {
|
|
712
|
-
var _address, provider_1, txBytes, txBase64, wcAddress, params, topic, signClient, pingErr_1, debugHandler, pendingBefore, wcRequest, methods, signRes, execDigest, _i, methods_1, method, res_1, err_5, execRes, msafeWallet, msafeFeature, msafeAccount, usedSignOnly, signedTransaction, res1, err_6, message, res, digest, err_7;
|
|
713
|
-
var _a, _b, _c, _d, _e;
|
|
714
|
-
return __generator(this, function (_f) {
|
|
715
|
-
switch (_f.label) {
|
|
716
580
|
case 0:
|
|
717
581
|
_address = impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address;
|
|
718
582
|
if (_address) {
|
|
@@ -721,9 +585,9 @@ function Inner(_a) {
|
|
|
721
585
|
}
|
|
722
586
|
catch (err) { }
|
|
723
587
|
}
|
|
724
|
-
|
|
588
|
+
_c.label = 1;
|
|
725
589
|
case 1:
|
|
726
|
-
|
|
590
|
+
_c.trys.push([1, 9, , 10]);
|
|
727
591
|
// Gas budget
|
|
728
592
|
if (gasBudget !== "")
|
|
729
593
|
transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
@@ -732,210 +596,75 @@ function Inner(_a) {
|
|
|
732
596
|
onSetGasBudget === null || onSetGasBudget === void 0 ? void 0 : onSetGasBudget(transaction);
|
|
733
597
|
// Log
|
|
734
598
|
console.log("[WalletContext] signExecuteAndWaitForTransaction - transaction.getData():", transaction.getData());
|
|
735
|
-
|
|
736
|
-
return [
|
|
737
|
-
case 2:
|
|
738
|
-
provider_1 = _f.sent();
|
|
599
|
+
signedTransaction = void 0;
|
|
600
|
+
if (!(sessionAddress && universalConnector)) return [3 /*break*/, 4];
|
|
739
601
|
transaction.setSender(sessionAddress);
|
|
740
602
|
return [4 /*yield*/, transaction.build({ client: suiClient })];
|
|
603
|
+
case 2:
|
|
604
|
+
txBytes = _c.sent();
|
|
605
|
+
return [4 /*yield*/, universalConnector.request({
|
|
606
|
+
method: "sui_signTransaction",
|
|
607
|
+
params: {
|
|
608
|
+
transaction: toBase64(txBytes),
|
|
609
|
+
address: sessionAddress,
|
|
610
|
+
},
|
|
611
|
+
}, "sui:mainnet")];
|
|
741
612
|
case 3:
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
transaction: txBase64,
|
|
747
|
-
account: wcAddress,
|
|
613
|
+
res = _c.sent();
|
|
614
|
+
signedTransaction = {
|
|
615
|
+
bytes: res.transactionBytes,
|
|
616
|
+
signature: res.signature,
|
|
748
617
|
};
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
if (!topic)
|
|
754
|
-
throw new Error("WalletConnect session not found");
|
|
755
|
-
signClient = provider_1.client;
|
|
756
|
-
// Debug: full session dump
|
|
757
|
-
console.log("[WalletContext] WalletConnect — full session:", JSON.stringify(provider_1.session, null, 2));
|
|
758
|
-
console.log("[WalletContext] WalletConnect — relay connected:", signClient.core.relayer.connected);
|
|
759
|
-
_f.label = 4;
|
|
760
|
-
case 4:
|
|
761
|
-
_f.trys.push([4, 6, , 7]);
|
|
762
|
-
return [4 /*yield*/, signClient.ping({ topic: topic })];
|
|
618
|
+
return [3 /*break*/, 6];
|
|
619
|
+
case 4: return [4 /*yield*/, dAppKit.signTransaction({
|
|
620
|
+
transaction: transaction,
|
|
621
|
+
})];
|
|
763
622
|
case 5:
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
return [3 /*break*/, 7];
|
|
623
|
+
signedTransaction = _c.sent();
|
|
624
|
+
_c.label = 6;
|
|
767
625
|
case 6:
|
|
768
|
-
pingErr_1 = _f.sent();
|
|
769
|
-
console.error("[WalletContext] WalletConnect — ping FAILED (peer may be offline):", pingErr_1);
|
|
770
|
-
return [3 /*break*/, 7];
|
|
771
|
-
case 7:
|
|
772
|
-
debugHandler = function (event) {
|
|
773
|
-
console.log("[WalletContext] WalletConnect — relay message received:", event);
|
|
774
|
-
};
|
|
775
|
-
signClient.core.relayer.on("message", debugHandler);
|
|
776
|
-
pendingBefore = (_e = (_d = (_c = signClient.pendingRequest).getAll) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : [];
|
|
777
|
-
console.log("[WalletContext] WalletConnect — pending requests before:", Array.isArray(pendingBefore) ? pendingBefore.length : pendingBefore);
|
|
778
|
-
wcRequest = function (method, requestParams, timeoutMs) {
|
|
779
|
-
if (timeoutMs === void 0) { timeoutMs = 15000; }
|
|
780
|
-
return new Promise(function (resolve, reject) {
|
|
781
|
-
var timer = setTimeout(function () {
|
|
782
|
-
reject(new Error("WalletConnect request \"".concat(method, "\" timed out after ").concat(timeoutMs / 1000, "s \u2014 the wallet did not respond. ") +
|
|
783
|
-
"This usually means the wallet does not support this method."));
|
|
784
|
-
}, timeoutMs);
|
|
785
|
-
console.log("[WalletContext] WalletConnect \u2014 sending request:", JSON.stringify({
|
|
786
|
-
method: method,
|
|
787
|
-
params: requestParams,
|
|
788
|
-
chainId: "sui:mainnet",
|
|
789
|
-
}));
|
|
790
|
-
provider_1
|
|
791
|
-
.request({ method: method, params: requestParams }, "sui:mainnet")
|
|
792
|
-
.then(function (res) {
|
|
793
|
-
clearTimeout(timer);
|
|
794
|
-
resolve(res);
|
|
795
|
-
})
|
|
796
|
-
.catch(function (err) {
|
|
797
|
-
clearTimeout(timer);
|
|
798
|
-
reject(err);
|
|
799
|
-
});
|
|
800
|
-
});
|
|
801
|
-
};
|
|
802
|
-
methods = [
|
|
803
|
-
WC_SUI_METHODS.SIGN_TRANSACTION,
|
|
804
|
-
WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
|
|
805
|
-
];
|
|
806
|
-
signRes = null;
|
|
807
|
-
execDigest = null;
|
|
808
|
-
_i = 0, methods_1 = methods;
|
|
809
|
-
_f.label = 8;
|
|
810
|
-
case 8:
|
|
811
|
-
if (!(_i < methods_1.length)) return [3 /*break*/, 16];
|
|
812
|
-
method = methods_1[_i];
|
|
813
|
-
_f.label = 9;
|
|
814
|
-
case 9:
|
|
815
|
-
_f.trys.push([9, 14, , 15]);
|
|
816
|
-
console.log("[WalletContext] WalletConnect \u2014 trying ".concat(method));
|
|
817
|
-
if (!(method === WC_SUI_METHODS.SIGN_TRANSACTION)) return [3 /*break*/, 11];
|
|
818
|
-
return [4 /*yield*/, wcRequest(method, params)];
|
|
819
|
-
case 10:
|
|
820
|
-
signRes = _f.sent();
|
|
821
|
-
console.log("[WalletContext] WalletConnect \u2014 ".concat(method, " succeeded"));
|
|
822
|
-
return [3 /*break*/, 16];
|
|
823
|
-
case 11: return [4 /*yield*/, wcRequest(method, params)];
|
|
824
|
-
case 12:
|
|
825
|
-
res_1 = _f.sent();
|
|
826
|
-
console.log("[WalletContext] WalletConnect \u2014 ".concat(method, " succeeded, digest:"), res_1.digest);
|
|
827
|
-
execDigest = res_1.digest;
|
|
828
|
-
return [3 /*break*/, 16];
|
|
829
|
-
case 13: return [3 /*break*/, 15];
|
|
830
|
-
case 14:
|
|
831
|
-
err_5 = _f.sent();
|
|
832
|
-
console.warn("[WalletContext] WalletConnect \u2014 ".concat(method, " failed:"), err_5);
|
|
833
|
-
return [3 /*break*/, 15];
|
|
834
|
-
case 15:
|
|
835
|
-
_i++;
|
|
836
|
-
return [3 /*break*/, 8];
|
|
837
|
-
case 16:
|
|
838
|
-
// Cleanup debug listener
|
|
839
|
-
signClient.core.relayer.off("message", debugHandler);
|
|
840
|
-
if (!execDigest) return [3 /*break*/, 18];
|
|
841
|
-
return [4 /*yield*/, waitForTransactionWithCheck(execDigest)];
|
|
842
|
-
case 17: return [2 /*return*/, _f.sent()];
|
|
843
|
-
case 18:
|
|
844
|
-
if (!signRes) {
|
|
845
|
-
throw new Error("WalletConnect: wallet did not respond to any signing method. " +
|
|
846
|
-
"Check that the wallet supports Sui transactions and that the session is active.");
|
|
847
|
-
}
|
|
848
|
-
console.log("[WalletContext] WalletConnect — executing signed transaction on-chain");
|
|
849
|
-
return [4 /*yield*/, suiClient.executeTransactionBlock({
|
|
850
|
-
transactionBlock: signRes.transactionBytes,
|
|
851
|
-
signature: signRes.signature,
|
|
852
|
-
})];
|
|
853
|
-
case 19:
|
|
854
|
-
execRes = _f.sent();
|
|
855
|
-
return [4 /*yield*/, waitForTransactionWithCheck(execRes.digest)];
|
|
856
|
-
case 20: return [2 /*return*/, _f.sent()];
|
|
857
|
-
case 21:
|
|
858
|
-
if (!isInMsafeApp()) return [3 /*break*/, 24];
|
|
859
|
-
msafeWallet = getWallets()
|
|
860
|
-
.get()
|
|
861
|
-
.find(function (w) { return w.name === WalletName.MSAFE_WALLET; });
|
|
862
|
-
msafeFeature = msafeWallet === null || msafeWallet === void 0 ? void 0 : msafeWallet.features["sui:signAndExecuteTransactionBlock"];
|
|
863
|
-
if (!(msafeFeature && account)) return [3 /*break*/, 23];
|
|
864
|
-
msafeAccount = msafeWallet.accounts.find(function (a) { return a.address === account.address; });
|
|
865
|
-
if (!msafeAccount)
|
|
866
|
-
throw new Error("MSafe account not found");
|
|
867
|
-
return [4 /*yield*/, msafeFeature.signAndExecuteTransactionBlock({
|
|
868
|
-
transactionBlock: transaction,
|
|
869
|
-
account: msafeAccount,
|
|
870
|
-
chain: "sui:mainnet",
|
|
871
|
-
})];
|
|
872
|
-
case 22:
|
|
873
|
-
_f.sent();
|
|
874
|
-
// MSafe proposes the transaction to the multisig queue;
|
|
875
|
-
// the promise never resolves (only rejects on cancel).
|
|
876
|
-
// If we reach here the proposal was accepted.
|
|
877
|
-
throw new Error("Unreachable");
|
|
878
|
-
case 23: throw new Error("MSafe wallet not found. Please reload the page inside MSafe.");
|
|
879
|
-
case 24:
|
|
880
|
-
usedSignOnly = false;
|
|
881
|
-
_f.label = 25;
|
|
882
|
-
case 25:
|
|
883
|
-
_f.trys.push([25, 29, , 30]);
|
|
884
|
-
return [4 /*yield*/, dAppKit.signTransaction({
|
|
885
|
-
transaction: transaction,
|
|
886
|
-
})];
|
|
887
|
-
case 26:
|
|
888
|
-
signedTransaction = _f.sent();
|
|
889
|
-
usedSignOnly = true;
|
|
890
626
|
onSign === null || onSign === void 0 ? void 0 : onSign(signedTransaction);
|
|
891
627
|
return [4 /*yield*/, suiClient.executeTransactionBlock({
|
|
892
628
|
transactionBlock: signedTransaction.bytes,
|
|
893
629
|
signature: signedTransaction.signature,
|
|
894
630
|
})];
|
|
895
|
-
case
|
|
896
|
-
res1 =
|
|
631
|
+
case 7:
|
|
632
|
+
res1 = _c.sent();
|
|
897
633
|
onExecute === null || onExecute === void 0 ? void 0 : onExecute(res1);
|
|
898
|
-
return [4 /*yield*/,
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
case 32: return [2 /*return*/, _f.sent()];
|
|
919
|
-
case 33:
|
|
920
|
-
err_7 = _f.sent();
|
|
921
|
-
console.error(err_7);
|
|
922
|
-
throw err_7;
|
|
923
|
-
case 34: return [2 /*return*/];
|
|
634
|
+
return [4 /*yield*/, suiClient.waitForTransaction({
|
|
635
|
+
digest: res1.digest,
|
|
636
|
+
options: {
|
|
637
|
+
showBalanceChanges: true,
|
|
638
|
+
showEffects: true,
|
|
639
|
+
showEvents: true,
|
|
640
|
+
showObjectChanges: true,
|
|
641
|
+
},
|
|
642
|
+
})];
|
|
643
|
+
case 8:
|
|
644
|
+
res2 = _c.sent();
|
|
645
|
+
if (((_a = res2.effects) === null || _a === void 0 ? void 0 : _a.status) !== undefined &&
|
|
646
|
+
res2.effects.status.status === "failure")
|
|
647
|
+
throw new Error((_b = res2.effects.status.error) !== null && _b !== void 0 ? _b : "Transaction failed");
|
|
648
|
+
return [2 /*return*/, res2];
|
|
649
|
+
case 9:
|
|
650
|
+
err_3 = _c.sent();
|
|
651
|
+
console.error(err_3);
|
|
652
|
+
throw err_3;
|
|
653
|
+
case 10: return [2 /*return*/];
|
|
924
654
|
}
|
|
925
655
|
});
|
|
926
656
|
}); }, [
|
|
657
|
+
universalConnector,
|
|
927
658
|
sessionAddress,
|
|
928
|
-
wcRawAddress,
|
|
929
659
|
gasBudget,
|
|
930
660
|
impersonatedAddress,
|
|
931
|
-
account,
|
|
661
|
+
account === null || account === void 0 ? void 0 : account.address,
|
|
932
662
|
dryRunTransaction,
|
|
933
663
|
suiClient,
|
|
934
664
|
dAppKit,
|
|
935
|
-
waitForTransactionWithCheck,
|
|
936
665
|
]);
|
|
937
666
|
// Using Ledger
|
|
938
|
-
var
|
|
667
|
+
var _m = useLocalStorage("isUsingLedger-".concat(impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address), false), isUsingLedger = _m[0], setIsUsingLedger = _m[1];
|
|
939
668
|
// Context
|
|
940
669
|
var contextValue = useMemo(function () {
|
|
941
670
|
return {
|