@suilend/sui-fe-next 2.0.19 → 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.
- package/contexts/WalletContext.jsx +117 -64
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -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,
|
|
686
|
-
var _a, _b;
|
|
687
|
-
return __generator(this, function (
|
|
688
|
-
switch (
|
|
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
|
-
|
|
697
|
+
_e.label = 1;
|
|
698
698
|
case 1:
|
|
699
|
-
|
|
699
|
+
_e.trys.push([1, 29, , 30]);
|
|
700
700
|
// Gas budget
|
|
701
701
|
if (gasBudget !== "")
|
|
702
702
|
transaction.setGasBudget(+new BigNumber(gasBudget)
|
|
@@ -705,61 +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*/,
|
|
708
|
+
if (!sessionAddress) return [3 /*break*/, 17];
|
|
709
709
|
return [4 /*yield*/, getWalletConnectProvider()];
|
|
710
710
|
case 2:
|
|
711
|
-
provider =
|
|
711
|
+
provider = _e.sent();
|
|
712
712
|
transaction.setSender(sessionAddress);
|
|
713
713
|
return [4 /*yield*/, transaction.build({ client: suiClient })];
|
|
714
714
|
case 3:
|
|
715
|
-
txBytes =
|
|
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
|
-
|
|
721
|
+
topic_1 = (_a = provider.session) === null || _a === void 0 ? void 0 : _a.topic;
|
|
722
|
+
console.log("[WalletContext] WalletConnect — session topic:", topic_1);
|
|
722
723
|
console.log("[WalletContext] WalletConnect — session namespaces:", JSON.stringify((_b = provider.session) === null || _b === void 0 ? void 0 : _b.namespaces));
|
|
723
724
|
console.log("[WalletContext] WalletConnect — request params:", params);
|
|
724
|
-
|
|
725
|
+
if (!topic_1)
|
|
726
|
+
throw new Error("WalletConnect session not found");
|
|
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;
|
|
725
764
|
case 4:
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
method: WC_SUI_METHODS.SIGN_AND_EXECUTE_TRANSACTION,
|
|
730
|
-
params: params,
|
|
731
|
-
}, "sui:mainnet")];
|
|
765
|
+
if (!(_i < methods_1.length)) return [3 /*break*/, 12];
|
|
766
|
+
method = methods_1[_i];
|
|
767
|
+
_e.label = 5;
|
|
732
768
|
case 5:
|
|
733
|
-
|
|
734
|
-
console.log("[WalletContext] WalletConnect
|
|
735
|
-
return [
|
|
736
|
-
|
|
737
|
-
case
|
|
738
|
-
|
|
739
|
-
console.
|
|
740
|
-
return [3 /*break*/,
|
|
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)];
|
|
741
778
|
case 8:
|
|
742
|
-
|
|
743
|
-
console.log("[WalletContext] WalletConnect
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
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");
|
|
748
801
|
return [4 /*yield*/, suiClient.executeTransactionBlock({
|
|
749
802
|
transactionBlock: signRes.transactionBytes,
|
|
750
803
|
signature: signRes.signature,
|
|
751
804
|
})];
|
|
752
|
-
case
|
|
753
|
-
execRes =
|
|
805
|
+
case 15:
|
|
806
|
+
execRes = _e.sent();
|
|
754
807
|
return [4 /*yield*/, waitForTransactionWithCheck(execRes.digest)];
|
|
755
|
-
case
|
|
756
|
-
case
|
|
757
|
-
if (!isInMsafeApp()) return [3 /*break*/,
|
|
808
|
+
case 16: return [2 /*return*/, _e.sent()];
|
|
809
|
+
case 17:
|
|
810
|
+
if (!isInMsafeApp()) return [3 /*break*/, 20];
|
|
758
811
|
msafeWallet = getWallets()
|
|
759
812
|
.get()
|
|
760
813
|
.find(function (w) { return w.name === WalletName.MSAFE_WALLET; });
|
|
761
814
|
msafeFeature = msafeWallet === null || msafeWallet === void 0 ? void 0 : msafeWallet.features["sui:signAndExecuteTransactionBlock"];
|
|
762
|
-
if (!(msafeFeature && account)) return [3 /*break*/,
|
|
815
|
+
if (!(msafeFeature && account)) return [3 /*break*/, 19];
|
|
763
816
|
msafeAccount = msafeWallet.accounts.find(function (a) { return a.address === account.address; });
|
|
764
817
|
if (!msafeAccount)
|
|
765
818
|
throw new Error("MSafe account not found");
|
|
@@ -768,58 +821,58 @@ function Inner(_a) {
|
|
|
768
821
|
account: msafeAccount,
|
|
769
822
|
chain: "sui:mainnet",
|
|
770
823
|
})];
|
|
771
|
-
case
|
|
772
|
-
|
|
824
|
+
case 18:
|
|
825
|
+
_e.sent();
|
|
773
826
|
// MSafe proposes the transaction to the multisig queue;
|
|
774
827
|
// the promise never resolves (only rejects on cancel).
|
|
775
828
|
// If we reach here the proposal was accepted.
|
|
776
829
|
throw new Error("Unreachable");
|
|
777
|
-
case
|
|
778
|
-
case
|
|
830
|
+
case 19: throw new Error("MSafe wallet not found. Please reload the page inside MSafe.");
|
|
831
|
+
case 20:
|
|
779
832
|
usedSignOnly = false;
|
|
780
|
-
|
|
781
|
-
case
|
|
782
|
-
|
|
833
|
+
_e.label = 21;
|
|
834
|
+
case 21:
|
|
835
|
+
_e.trys.push([21, 25, , 26]);
|
|
783
836
|
return [4 /*yield*/, dAppKit.signTransaction({
|
|
784
837
|
transaction: transaction,
|
|
785
838
|
})];
|
|
786
|
-
case
|
|
787
|
-
signedTransaction =
|
|
839
|
+
case 22:
|
|
840
|
+
signedTransaction = _e.sent();
|
|
788
841
|
usedSignOnly = true;
|
|
789
842
|
onSign === null || onSign === void 0 ? void 0 : onSign(signedTransaction);
|
|
790
843
|
return [4 /*yield*/, suiClient.executeTransactionBlock({
|
|
791
844
|
transactionBlock: signedTransaction.bytes,
|
|
792
845
|
signature: signedTransaction.signature,
|
|
793
846
|
})];
|
|
794
|
-
case
|
|
795
|
-
res1 =
|
|
847
|
+
case 23:
|
|
848
|
+
res1 = _e.sent();
|
|
796
849
|
onExecute === null || onExecute === void 0 ? void 0 : onExecute(res1);
|
|
797
850
|
return [4 /*yield*/, waitForTransactionWithCheck(res1.digest)];
|
|
798
|
-
case
|
|
799
|
-
case
|
|
800
|
-
|
|
851
|
+
case 24: return [2 /*return*/, _e.sent()];
|
|
852
|
+
case 25:
|
|
853
|
+
err_6 = _e.sent();
|
|
801
854
|
if (usedSignOnly)
|
|
802
|
-
throw
|
|
803
|
-
message =
|
|
855
|
+
throw err_6;
|
|
856
|
+
message = err_6 instanceof Error ? err_6.message : String(err_6);
|
|
804
857
|
if (!message.includes("does not support"))
|
|
805
|
-
throw
|
|
858
|
+
throw err_6;
|
|
806
859
|
console.warn("[WalletContext] Wallet does not support sign-only, falling back to signAndExecuteTransaction");
|
|
807
|
-
return [3 /*break*/,
|
|
808
|
-
case
|
|
860
|
+
return [3 /*break*/, 26];
|
|
861
|
+
case 26: return [4 /*yield*/, dAppKit.signAndExecuteTransaction({
|
|
809
862
|
transaction: transaction,
|
|
810
863
|
})];
|
|
811
|
-
case
|
|
812
|
-
res =
|
|
864
|
+
case 27:
|
|
865
|
+
res = _e.sent();
|
|
813
866
|
digest = res.$kind === "Transaction"
|
|
814
867
|
? res.Transaction.digest
|
|
815
868
|
: res.FailedTransaction.digest;
|
|
816
869
|
return [4 /*yield*/, waitForTransactionWithCheck(digest)];
|
|
817
|
-
case
|
|
818
|
-
case
|
|
819
|
-
|
|
820
|
-
console.error(
|
|
821
|
-
throw
|
|
822
|
-
case
|
|
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*/];
|
|
823
876
|
}
|
|
824
877
|
});
|
|
825
878
|
}); }, [
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@suilend/sui-fe-next","version":"2.0.
|
|
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"}}
|