@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.
@@ -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, isValidSuiAddress, normalizeSuiAddress, toBase64, } from "@mysten/sui/utils";
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 { WC_SUI_METHODS, getWalletConnectModal, getWalletConnectProvider, } from "../lib/connector";
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 _f = useSettingsContext(), rpc = _f.rpc, suiClient = _f.suiClient;
222
- // WalletConnect via @walletconnect/universal-provider
223
- // Matches the reference implementation: https://github.com/WalletConnect/react-core-up-sui
224
- var _g = useState(), wcSession = _g[0], setWcSession = _g[1];
225
- // Raw address as returned by the wallet (e.g. Fireblocks returns an
226
- // EVM-length address). We must send this back in WalletConnect request
227
- // params so the wallet recognises it as its own account.
228
- var wcRawAddress = useMemo(function () {
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 provider;
230
+ var connector;
246
231
  return __generator(this, function (_a) {
247
232
  switch (_a.label) {
248
- case 0: return [4 /*yield*/, getWalletConnectProvider()];
233
+ case 0: return [4 /*yield*/, getUniversalConnector(rpc.url)];
249
234
  case 1:
250
- provider = _a.sent();
251
- if (provider.session) {
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 _h = useState(false), isConnectWalletDropdownOpen = _h[0], setIsConnectWalletDropdownOpen = _h[1];
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 provider, res;
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*/, getWalletConnectProvider()];
393
- case 1:
394
- provider = _a.sent();
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 2:
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, wcRawAddress]);
411
- var connectWalletWrapper = useCallback(function (_wallet) { return __awaiter(_this, void 0, void 0, function () {
412
- var provider, modal, _a, provider, _b, err_1;
413
- return __generator(this, function (_c) {
414
- switch (_c.label) {
415
- case 0:
416
- _c.trys.push([0, 17, , 18]);
417
- if (!(_wallet === null || _wallet === void 0 ? void 0 : _wallet.walletConnect)) return [3 /*break*/, 10];
418
- return [4 /*yield*/, getWalletConnectProvider()];
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
- }); }, [rpc.url, connectWallet, disconnectWallet]);
492
- var PREFERRED_ACCOUNT_KEY = "suilend:preferred-account-address";
493
- var disconnectWalletWrapper = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
494
- var provider, err_2;
495
- return __generator(this, function (_a) {
496
- switch (_a.label) {
497
- case 0:
498
- _a.trys.push([0, 6, , 7]);
499
- if (!sessionAddress) return [3 /*break*/, 3];
500
- return [4 /*yield*/, getWalletConnectProvider()];
501
- case 1:
502
- provider = _a.sent();
503
- return [4 /*yield*/, provider.disconnect()];
504
- case 2:
505
- _a.sent();
506
- setWcSession(null);
507
- return [3 /*break*/, 5];
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
- }); }, [sessionAddress, disconnectWallet]);
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 : []; }, [(_c = walletConnection.wallet) === null || _c === void 0 ? void 0 : _c.accounts]);
531
- var accountRes = (_d = useCurrentAccount()) !== null && _d !== void 0 ? _d : undefined;
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
- localStorage.setItem(PREFERRED_ACCOUNT_KEY, _account.address);
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 (_d) { }
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, (_e = walletConnection.wallet) === null || _e === void 0 ? void 0 : _e.accounts]);
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 err_3;
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
- err_3 = _a.sent();
638
- console.error(err_3);
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, err_4;
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
- err_4 = _a.sent();
566
+ err_2 = _a.sent();
680
567
  // _transaction.getData().inputs.filter(input=>!!input.Object).map(input=>input.)
681
- console.error(err_4);
682
- throw err_4;
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 waitForTransactionWithCheck = useCallback(function (digest) { return __awaiter(_this, void 0, void 0, function () {
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
- _f.label = 1;
588
+ _c.label = 1;
725
589
  case 1:
726
- _f.trys.push([1, 33, , 34]);
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
- if (!sessionAddress) return [3 /*break*/, 21];
736
- return [4 /*yield*/, getWalletConnectProvider()];
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
- txBytes = _f.sent();
743
- txBase64 = toBase64(txBytes);
744
- wcAddress = wcRawAddress !== null && wcRawAddress !== void 0 ? wcRawAddress : sessionAddress;
745
- params = {
746
- transaction: txBase64,
747
- account: wcAddress,
613
+ res = _c.sent();
614
+ signedTransaction = {
615
+ bytes: res.transactionBytes,
616
+ signature: res.signature,
748
617
  };
749
- topic = (_a = provider_1.session) === null || _a === void 0 ? void 0 : _a.topic;
750
- console.log("[WalletContext] WalletConnect session topic:", topic);
751
- console.log("[WalletContext] WalletConnect — session namespaces:", JSON.stringify((_b = provider_1.session) === null || _b === void 0 ? void 0 : _b.namespaces));
752
- console.log("[WalletContext] WalletConnect — request params:", params);
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
- _f.sent();
765
- console.log("[WalletContext] WalletConnect — ping succeeded (peer is alive)");
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 27:
896
- res1 = _f.sent();
631
+ case 7:
632
+ res1 = _c.sent();
897
633
  onExecute === null || onExecute === void 0 ? void 0 : onExecute(res1);
898
- return [4 /*yield*/, waitForTransactionWithCheck(res1.digest)];
899
- case 28: return [2 /*return*/, _f.sent()];
900
- case 29:
901
- err_6 = _f.sent();
902
- if (usedSignOnly)
903
- throw err_6;
904
- message = err_6 instanceof Error ? err_6.message : String(err_6);
905
- if (!message.includes("does not support"))
906
- throw err_6;
907
- console.warn("[WalletContext] Wallet does not support sign-only, falling back to signAndExecuteTransaction");
908
- return [3 /*break*/, 30];
909
- case 30: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
910
- transaction: transaction,
911
- })];
912
- case 31:
913
- res = _f.sent();
914
- digest = res.$kind === "Transaction"
915
- ? res.Transaction.digest
916
- : res.FailedTransaction.digest;
917
- return [4 /*yield*/, waitForTransactionWithCheck(digest)];
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 _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];
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 {