@suilend/sui-fe-next 2.0.20 → 2.0.21

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.
@@ -682,10 +682,10 @@ function Inner(_a) {
682
682
  });
683
683
  }); }, [suiClient]);
684
684
  var signExecuteAndWaitForTransaction = useCallback(function (transaction, onSetGasBudget, onSign, onExecute) { return __awaiter(_this, void 0, void 0, function () {
685
- var _address, provider, txBytes, txBase64, params, topic, signClient, res_1, signAndExecErr_1, signRes, execRes, msafeWallet, msafeFeature, msafeAccount, usedSignOnly, signedTransaction, res1, err_5, message, res, digest, err_6;
686
- var _a, _b;
687
- return __generator(this, function (_c) {
688
- switch (_c.label) {
685
+ var _address, provider, txBytes, txBase64, params, topic_1, signClient_1, 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;
686
+ var _a, _b, _c, _d;
687
+ return __generator(this, function (_e) {
688
+ switch (_e.label) {
689
689
  case 0:
690
690
  _address = impersonatedAddress !== null && impersonatedAddress !== void 0 ? impersonatedAddress : account === null || account === void 0 ? void 0 : account.address;
691
691
  if (_address) {
@@ -694,9 +694,9 @@ function Inner(_a) {
694
694
  }
695
695
  catch (err) { }
696
696
  }
697
- _c.label = 1;
697
+ _e.label = 1;
698
698
  case 1:
699
- _c.trys.push([1, 24, , 25]);
699
+ _e.trys.push([1, 29, , 30]);
700
700
  // Gas budget
701
701
  if (gasBudget !== "")
702
702
  transaction.setGasBudget(+new BigNumber(gasBudget)
@@ -705,76 +705,114 @@ function Inner(_a) {
705
705
  onSetGasBudget === null || onSetGasBudget === void 0 ? void 0 : onSetGasBudget(transaction);
706
706
  // Log
707
707
  console.log("[WalletContext] signExecuteAndWaitForTransaction - transaction.getData():", transaction.getData());
708
- if (!sessionAddress) return [3 /*break*/, 12];
708
+ if (!sessionAddress) return [3 /*break*/, 17];
709
709
  return [4 /*yield*/, getWalletConnectProvider()];
710
710
  case 2:
711
- provider = _c.sent();
711
+ provider = _e.sent();
712
712
  transaction.setSender(sessionAddress);
713
713
  return [4 /*yield*/, transaction.build({ client: suiClient })];
714
714
  case 3:
715
- txBytes = _c.sent();
715
+ txBytes = _e.sent();
716
716
  txBase64 = toBase64(txBytes);
717
717
  params = {
718
718
  transaction: txBase64,
719
719
  address: wcRawAddress !== null && wcRawAddress !== void 0 ? wcRawAddress : sessionAddress,
720
720
  };
721
- topic = (_a = provider.session) === null || _a === void 0 ? void 0 : _a.topic;
722
- console.log("[WalletContext] WalletConnect — session topic:", topic);
721
+ topic_1 = (_a = provider.session) === null || _a === void 0 ? void 0 : _a.topic;
722
+ console.log("[WalletContext] WalletConnect — session topic:", topic_1);
723
723
  console.log("[WalletContext] WalletConnect — session namespaces:", JSON.stringify((_b = provider.session) === null || _b === void 0 ? void 0 : _b.namespaces));
724
724
  console.log("[WalletContext] WalletConnect — request params:", params);
725
- if (!topic)
725
+ if (!topic_1)
726
726
  throw new Error("WalletConnect session not found");
727
- signClient = provider.client;
728
- _c.label = 4;
727
+ signClient_1 = provider.client;
728
+ // Debug: check relay connectivity and session health
729
+ console.log("[WalletContext] WalletConnect — relay connected:", signClient_1.core.relayer.connected);
730
+ console.log("[WalletContext] WalletConnect — session expiry:", (_c = provider.session) === null || _c === void 0 ? void 0 : _c.expiry, "now:", Math.floor(Date.now() / 1000), "expired:", ((_d = provider.session) === null || _d === void 0 ? void 0 : _d.expiry)
731
+ ? provider.session.expiry < Math.floor(Date.now() / 1000)
732
+ : "unknown");
733
+ wcRequest = function (method, requestParams, timeoutMs) {
734
+ if (timeoutMs === void 0) { timeoutMs = 120000; }
735
+ return new Promise(function (resolve, reject) {
736
+ var timer = setTimeout(function () {
737
+ reject(new Error("WalletConnect request \"".concat(method, "\" timed out after ").concat(timeoutMs / 1000, "s \u2014 the wallet did not respond. ") +
738
+ "This usually means the wallet does not support this method."));
739
+ }, timeoutMs);
740
+ signClient_1
741
+ .request({
742
+ topic: topic_1,
743
+ chainId: "sui:mainnet",
744
+ request: { method: method, params: requestParams },
745
+ })
746
+ .then(function (res) {
747
+ clearTimeout(timer);
748
+ resolve(res);
749
+ })
750
+ .catch(function (err) {
751
+ clearTimeout(timer);
752
+ reject(err);
753
+ });
754
+ });
755
+ };
756
+ methods = [
757
+ WC_SUI_METHODS.SIGN_TRANSACTION,
758
+ WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
759
+ ];
760
+ signRes = null;
761
+ execDigest = null;
762
+ _i = 0, methods_1 = methods;
763
+ _e.label = 4;
729
764
  case 4:
730
- _c.trys.push([4, 7, , 8]);
731
- console.log("[WalletContext] WalletConnect — trying sui_signAndExecuteTransaction via SignClient");
732
- return [4 /*yield*/, signClient.request({
733
- topic: topic,
734
- chainId: "sui:mainnet",
735
- request: {
736
- method: WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
737
- params: params,
738
- },
739
- })];
765
+ if (!(_i < methods_1.length)) return [3 /*break*/, 12];
766
+ method = methods_1[_i];
767
+ _e.label = 5;
740
768
  case 5:
741
- res_1 = _c.sent();
742
- console.log("[WalletContext] WalletConnect sui_signAndExecuteTransaction succeeded, digest:", res_1.digest);
743
- return [4 /*yield*/, waitForTransactionWithCheck(res_1.digest)];
744
- case 6: return [2 /*return*/, _c.sent()];
745
- case 7:
746
- signAndExecErr_1 = _c.sent();
747
- console.warn("[WalletContext] WalletConnect sui_signAndExecuteTransaction failed:", signAndExecErr_1);
748
- return [3 /*break*/, 8];
769
+ _e.trys.push([5, 10, , 11]);
770
+ console.log("[WalletContext] WalletConnect \u2014 trying ".concat(method));
771
+ if (!(method === WC_SUI_METHODS.SIGN_TRANSACTION)) return [3 /*break*/, 7];
772
+ return [4 /*yield*/, wcRequest(method, params)];
773
+ case 6:
774
+ signRes = _e.sent();
775
+ console.log("[WalletContext] WalletConnect \u2014 ".concat(method, " succeeded"));
776
+ return [3 /*break*/, 12];
777
+ case 7: return [4 /*yield*/, wcRequest(method, params)];
749
778
  case 8:
750
- // Fallback: sign-only, then dApp-side execute
751
- console.log("[WalletContext] WalletConnect trying sui_signTransaction (sign-only fallback)");
752
- return [4 /*yield*/, signClient.request({
753
- topic: topic,
754
- chainId: "sui:mainnet",
755
- request: {
756
- method: WC_SUI_METHODS.SIGN_TRANSACTION,
757
- params: params,
758
- },
759
- })];
760
- case 9:
761
- signRes = _c.sent();
762
- console.log("[WalletContext] WalletConnect — sui_signTransaction succeeded, executing on-chain");
779
+ res_1 = _e.sent();
780
+ console.log("[WalletContext] WalletConnect \u2014 ".concat(method, " succeeded, digest:"), res_1.digest);
781
+ execDigest = res_1.digest;
782
+ return [3 /*break*/, 12];
783
+ case 9: return [3 /*break*/, 11];
784
+ case 10:
785
+ err_5 = _e.sent();
786
+ console.warn("[WalletContext] WalletConnect \u2014 ".concat(method, " failed:"), err_5);
787
+ return [3 /*break*/, 11];
788
+ case 11:
789
+ _i++;
790
+ return [3 /*break*/, 4];
791
+ case 12:
792
+ if (!execDigest) return [3 /*break*/, 14];
793
+ return [4 /*yield*/, waitForTransactionWithCheck(execDigest)];
794
+ case 13: return [2 /*return*/, _e.sent()];
795
+ case 14:
796
+ if (!signRes) {
797
+ throw new Error("WalletConnect: wallet did not respond to any signing method. " +
798
+ "Check that the wallet supports Sui transactions and that the session is active.");
799
+ }
800
+ console.log("[WalletContext] WalletConnect — executing signed transaction on-chain");
763
801
  return [4 /*yield*/, suiClient.executeTransactionBlock({
764
802
  transactionBlock: signRes.transactionBytes,
765
803
  signature: signRes.signature,
766
804
  })];
767
- case 10:
768
- execRes = _c.sent();
805
+ case 15:
806
+ execRes = _e.sent();
769
807
  return [4 /*yield*/, waitForTransactionWithCheck(execRes.digest)];
770
- case 11: return [2 /*return*/, _c.sent()];
771
- case 12:
772
- if (!isInMsafeApp()) return [3 /*break*/, 15];
808
+ case 16: return [2 /*return*/, _e.sent()];
809
+ case 17:
810
+ if (!isInMsafeApp()) return [3 /*break*/, 20];
773
811
  msafeWallet = getWallets()
774
812
  .get()
775
813
  .find(function (w) { return w.name === WalletName.MSAFE_WALLET; });
776
814
  msafeFeature = msafeWallet === null || msafeWallet === void 0 ? void 0 : msafeWallet.features["sui:signAndExecuteTransactionBlock"];
777
- if (!(msafeFeature && account)) return [3 /*break*/, 14];
815
+ if (!(msafeFeature && account)) return [3 /*break*/, 19];
778
816
  msafeAccount = msafeWallet.accounts.find(function (a) { return a.address === account.address; });
779
817
  if (!msafeAccount)
780
818
  throw new Error("MSafe account not found");
@@ -783,58 +821,58 @@ function Inner(_a) {
783
821
  account: msafeAccount,
784
822
  chain: "sui:mainnet",
785
823
  })];
786
- case 13:
787
- _c.sent();
824
+ case 18:
825
+ _e.sent();
788
826
  // MSafe proposes the transaction to the multisig queue;
789
827
  // the promise never resolves (only rejects on cancel).
790
828
  // If we reach here the proposal was accepted.
791
829
  throw new Error("Unreachable");
792
- case 14: throw new Error("MSafe wallet not found. Please reload the page inside MSafe.");
793
- case 15:
830
+ case 19: throw new Error("MSafe wallet not found. Please reload the page inside MSafe.");
831
+ case 20:
794
832
  usedSignOnly = false;
795
- _c.label = 16;
796
- case 16:
797
- _c.trys.push([16, 20, , 21]);
833
+ _e.label = 21;
834
+ case 21:
835
+ _e.trys.push([21, 25, , 26]);
798
836
  return [4 /*yield*/, dAppKit.signTransaction({
799
837
  transaction: transaction,
800
838
  })];
801
- case 17:
802
- signedTransaction = _c.sent();
839
+ case 22:
840
+ signedTransaction = _e.sent();
803
841
  usedSignOnly = true;
804
842
  onSign === null || onSign === void 0 ? void 0 : onSign(signedTransaction);
805
843
  return [4 /*yield*/, suiClient.executeTransactionBlock({
806
844
  transactionBlock: signedTransaction.bytes,
807
845
  signature: signedTransaction.signature,
808
846
  })];
809
- case 18:
810
- res1 = _c.sent();
847
+ case 23:
848
+ res1 = _e.sent();
811
849
  onExecute === null || onExecute === void 0 ? void 0 : onExecute(res1);
812
850
  return [4 /*yield*/, waitForTransactionWithCheck(res1.digest)];
813
- case 19: return [2 /*return*/, _c.sent()];
814
- case 20:
815
- err_5 = _c.sent();
851
+ case 24: return [2 /*return*/, _e.sent()];
852
+ case 25:
853
+ err_6 = _e.sent();
816
854
  if (usedSignOnly)
817
- throw err_5;
818
- message = err_5 instanceof Error ? err_5.message : String(err_5);
855
+ throw err_6;
856
+ message = err_6 instanceof Error ? err_6.message : String(err_6);
819
857
  if (!message.includes("does not support"))
820
- throw err_5;
858
+ throw err_6;
821
859
  console.warn("[WalletContext] Wallet does not support sign-only, falling back to signAndExecuteTransaction");
822
- return [3 /*break*/, 21];
823
- case 21: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
860
+ return [3 /*break*/, 26];
861
+ case 26: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
824
862
  transaction: transaction,
825
863
  })];
826
- case 22:
827
- res = _c.sent();
864
+ case 27:
865
+ res = _e.sent();
828
866
  digest = res.$kind === "Transaction"
829
867
  ? res.Transaction.digest
830
868
  : res.FailedTransaction.digest;
831
869
  return [4 /*yield*/, waitForTransactionWithCheck(digest)];
832
- case 23: return [2 /*return*/, _c.sent()];
833
- case 24:
834
- err_6 = _c.sent();
835
- console.error(err_6);
836
- throw err_6;
837
- case 25: return [2 /*return*/];
870
+ case 28: return [2 /*return*/, _e.sent()];
871
+ case 29:
872
+ err_7 = _e.sent();
873
+ console.error(err_7);
874
+ throw err_7;
875
+ case 30: return [2 /*return*/];
838
876
  }
839
877
  });
840
878
  }); }, [
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@suilend/sui-fe-next","version":"2.0.20","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"}}
1
+ {"name":"@suilend/sui-fe-next","version":"2.0.21","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"}}