@multiversx/sdk-dapp-liquidity 1.1.7 → 2.0.0-alpha.0

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.
Files changed (81) hide show
  1. package/index.js +7 -0
  2. package/index.mjs +8 -1
  3. package/package.json +19 -16
  4. package/reactjs/adapters/SuiAdapter.d.ts +60 -0
  5. package/reactjs/adapters/SuiAdapter.js +350 -0
  6. package/reactjs/adapters/SuiAdapter.mjs +349 -0
  7. package/reactjs/components/AmountInput/AmountInput.js +1 -1
  8. package/reactjs/components/AmountInput/AmountInput.mjs +1 -1
  9. package/reactjs/components/BridgeForm/Deposit.js +57 -18
  10. package/reactjs/components/BridgeForm/Deposit.mjs +57 -18
  11. package/reactjs/components/BridgeForm/Transfer.js +17 -10
  12. package/reactjs/components/BridgeForm/Transfer.mjs +17 -10
  13. package/reactjs/components/BridgeForm/hooks/useBridgeTokenSelection.js +31 -9
  14. package/reactjs/components/BridgeForm/hooks/useBridgeTokenSelection.mjs +31 -9
  15. package/reactjs/components/BridgeForm/utils/bridgeFormHelpers.d.ts +6 -0
  16. package/reactjs/components/BridgeForm/utils/bridgeFormHelpers.js +18 -0
  17. package/reactjs/components/BridgeForm/utils/bridgeFormHelpers.mjs +18 -0
  18. package/reactjs/components/BridgeHistory/BridgeHistory.js +2 -2
  19. package/reactjs/components/BridgeHistory/BridgeHistory.mjs +2 -2
  20. package/reactjs/components/Connect/BridgeAccountDisplay.js +77 -25
  21. package/reactjs/components/Connect/BridgeAccountDisplay.mjs +77 -25
  22. package/reactjs/components/Connect/BridgeConnectButton.js +1 -1
  23. package/reactjs/components/Connect/BridgeConnectButton.mjs +1 -1
  24. package/reactjs/components/Connect/ChainSelectConnect.d.ts +7 -0
  25. package/reactjs/components/Connect/ChainSelectConnect.js +144 -0
  26. package/reactjs/components/Connect/ChainSelectConnect.mjs +143 -0
  27. package/reactjs/components/Connect/MvxAccountDisplay.js +17 -3
  28. package/reactjs/components/Connect/MvxAccountDisplay.mjs +17 -3
  29. package/reactjs/components/Connect/MvxConnectButton.js +2 -2
  30. package/reactjs/components/Connect/MvxConnectButton.mjs +2 -2
  31. package/reactjs/components/Connect/index.d.ts +1 -0
  32. package/reactjs/components/Connect/index.js +2 -0
  33. package/reactjs/components/Connect/index.mjs +2 -0
  34. package/reactjs/components/TokenSelector/components/TokenItem.js +11 -1
  35. package/reactjs/components/TokenSelector/components/TokenItem.mjs +11 -1
  36. package/reactjs/components/TrimAddress/TrimAddress.js +1 -1
  37. package/reactjs/components/TrimAddress/TrimAddress.mjs +1 -1
  38. package/reactjs/components/index.js +2 -0
  39. package/reactjs/components/index.mjs +2 -0
  40. package/reactjs/constants/chains.d.ts +7 -1
  41. package/reactjs/constants/chains.js +6 -0
  42. package/reactjs/constants/chains.mjs +6 -0
  43. package/reactjs/helpers/index.d.ts +1 -0
  44. package/reactjs/helpers/index.js +7 -0
  45. package/reactjs/helpers/index.mjs +6 -0
  46. package/reactjs/helpers/resolveBridgeApiChainId.d.ts +18 -0
  47. package/reactjs/helpers/resolveBridgeApiChainId.js +41 -0
  48. package/reactjs/helpers/resolveBridgeApiChainId.mjs +40 -0
  49. package/reactjs/hooks/index.d.ts +2 -0
  50. package/reactjs/hooks/index.js +4 -0
  51. package/reactjs/hooks/index.mjs +4 -0
  52. package/reactjs/hooks/useBridgeApiChainId.d.ts +2 -0
  53. package/reactjs/hooks/useBridgeApiChainId.js +14 -0
  54. package/reactjs/hooks/useBridgeApiChainId.mjs +13 -0
  55. package/reactjs/hooks/useFetchTokens.js +17 -17
  56. package/reactjs/hooks/useFetchTokens.mjs +17 -17
  57. package/reactjs/hooks/useGenericSignMessage.d.ts +1 -1
  58. package/reactjs/hooks/useGenericSignMessage.js +14 -0
  59. package/reactjs/hooks/useGenericSignMessage.mjs +14 -0
  60. package/reactjs/hooks/useSignTransaction.d.ts +418 -3
  61. package/reactjs/hooks/useSignTransaction.js +28 -0
  62. package/reactjs/hooks/useSignTransaction.mjs +28 -0
  63. package/reactjs/hooks/useSuiConnect.d.ts +8 -0
  64. package/reactjs/hooks/useSuiConnect.js +87 -0
  65. package/reactjs/hooks/useSuiConnect.mjs +86 -0
  66. package/reactjs/index.js +7 -0
  67. package/reactjs/index.mjs +8 -1
  68. package/reactjs/init/index.js +1 -0
  69. package/reactjs/init/index.mjs +2 -1
  70. package/reactjs/init/init.d.ts +9 -30
  71. package/reactjs/init/init.js +90 -9
  72. package/reactjs/init/init.mjs +91 -10
  73. package/reactjs/queries/useCheckAccount.query.js +4 -14
  74. package/reactjs/queries/useCheckAccount.query.mjs +4 -14
  75. package/reactjs/queries/useGetNonMvxTokensBalances.query.js +1 -0
  76. package/reactjs/queries/useGetNonMvxTokensBalances.query.mjs +1 -0
  77. package/style.css +51 -0
  78. package/types/chainType.d.ts +2 -1
  79. package/types/chainType.js +1 -0
  80. package/types/chainType.mjs +1 -0
  81. package/types/transaction.d.ts +5 -0
@@ -0,0 +1,349 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import { AdapterBlueprint, WalletConnectConnector, WcHelpersUtil } from "@reown/appkit-controllers";
5
+ const WC_ID = "walletConnect";
6
+ const DEFAULT_SUI_CAIP_CHAINS = ["sui:mainnet", "sui:testnet", "sui:devnet"];
7
+ class SuiAdapter extends AdapterBlueprint {
8
+ constructor(opts) {
9
+ super({
10
+ namespace: "sui",
11
+ adapterType: "sui"
12
+ });
13
+ /**
14
+ * AppKit’s single WalletConnect UniversalProvider (same instance as Wagmi/EVM).
15
+ * @see @reown/appkit-adapter-solana — adapters must NOT call UniversalProvider.init() again
16
+ * (duplicate Core breaks pairing / QR). `listenWalletConnect` attaches `display_uri` here only.
17
+ */
18
+ __publicField(this, "sharedWcProvider");
19
+ __publicField(this, "explicitCaipChainsFromInit");
20
+ /**
21
+ * AppKit passes `networks` here from `createAppKit({ networks })` filtered by namespace.
22
+ * `ChainController.getRequestedCaipNetworks('sui')` is often still empty → we must keep this.
23
+ */
24
+ __publicField(this, "suiNetworksFromConfig", []);
25
+ this.explicitCaipChainsFromInit = (opts == null ? void 0 : opts.explicitCaipChains) ?? [];
26
+ }
27
+ construct(params) {
28
+ super.construct(params);
29
+ this.suiNetworksFromConfig = params.networks ?? [];
30
+ }
31
+ /**
32
+ * Resolves CAIP-2 chain ids for the WC session. Never return [] (breaks pairing + QR UI).
33
+ */
34
+ pickChainsFromExplicit(explicit, chainId) {
35
+ if (explicit.length === 0) {
36
+ return DEFAULT_SUI_CAIP_CHAINS;
37
+ }
38
+ if (chainId !== void 0 && chainId !== null) {
39
+ const cid = chainId.toString();
40
+ const match = explicit.find(
41
+ (c) => c === `sui:${cid}` || c.endsWith(`:${cid}`)
42
+ );
43
+ if (match) {
44
+ return [match];
45
+ }
46
+ }
47
+ return explicit;
48
+ }
49
+ resolveSuiChainsForConnect(chainId) {
50
+ const fromController = this.getCaipNetworks("sui");
51
+ const source = fromController.length > 0 ? fromController : this.suiNetworksFromConfig;
52
+ if (source.length === 0) {
53
+ return this.pickChainsFromExplicit(
54
+ this.explicitCaipChainsFromInit,
55
+ chainId
56
+ );
57
+ }
58
+ const toCaip = (n) => n.caipNetworkId || `sui:${n.id}`;
59
+ if (chainId !== void 0 && chainId !== null) {
60
+ const match = source.find((n) => {
61
+ var _a;
62
+ return ((_a = n.id) == null ? void 0 : _a.toString()) === chainId.toString();
63
+ });
64
+ if (match) {
65
+ return [toCaip(match)];
66
+ }
67
+ }
68
+ return source.map(toCaip);
69
+ }
70
+ /**
71
+ * `WalletConnectConnector` typings require `caipNetworks` (ChainController may still be empty
72
+ * when this runs). Prefer networks from `construct`, else explicit/init CAIP ids.
73
+ */
74
+ getCaipNetworksForWalletConnectConnector() {
75
+ if (this.suiNetworksFromConfig.length > 0) {
76
+ return this.suiNetworksFromConfig;
77
+ }
78
+ const caipIds = this.explicitCaipChainsFromInit.length > 0 ? this.explicitCaipChainsFromInit : DEFAULT_SUI_CAIP_CHAINS;
79
+ return caipIds.map((caip) => {
80
+ const id = caip.startsWith("sui:") ? caip.slice(4) : caip;
81
+ return {
82
+ id,
83
+ chainNamespace: "sui",
84
+ caipNetworkId: caip,
85
+ name: "Sui",
86
+ nativeCurrency: { name: "SUI", symbol: "SUI", decimals: 9 },
87
+ rpcUrls: {
88
+ default: { http: [`https://fullnode.${id}.sui.io:443`] }
89
+ }
90
+ };
91
+ });
92
+ }
93
+ syncConnectors() {
94
+ }
95
+ async setUniversalProvider(sharedProvider) {
96
+ this.sharedWcProvider = sharedProvider;
97
+ const wcConnector = new WalletConnectConnector({
98
+ provider: sharedProvider,
99
+ namespace: "sui",
100
+ caipNetworks: this.getCaipNetworksForWalletConnectConnector()
101
+ });
102
+ this.addConnector(wcConnector);
103
+ WcHelpersUtil.listenWcProvider({
104
+ universalProvider: sharedProvider,
105
+ namespace: "sui",
106
+ onConnect: (accounts) => this.onConnect(accounts, WC_ID),
107
+ onDisconnect: () => this.onDisconnect(WC_ID),
108
+ onAccountsChanged: (accounts) => this.onAccountsChanged(accounts, WC_ID, false)
109
+ });
110
+ }
111
+ getWcProvider() {
112
+ if (!this.sharedWcProvider) {
113
+ throw new Error(
114
+ "SuiAdapter: UniversalProvider not ready — setUniversalProvider must run before connect"
115
+ );
116
+ }
117
+ return this.sharedWcProvider;
118
+ }
119
+ async connectWalletConnect(chainId) {
120
+ var _a, _b;
121
+ const wc = this.getWcProvider();
122
+ if ((_b = (_a = wc.session) == null ? void 0 : _a.namespaces) == null ? void 0 : _b["sui"]) {
123
+ const clientId2 = await wc.client.core.crypto.getClientId();
124
+ return { clientId: clientId2 };
125
+ }
126
+ const chains = this.resolveSuiChainsForConnect(chainId);
127
+ const safeChains = chains.length > 0 ? chains : DEFAULT_SUI_CAIP_CHAINS;
128
+ await wc.connect({
129
+ optionalNamespaces: {
130
+ sui: {
131
+ methods: [
132
+ "sui_signPersonalMessage",
133
+ "sui_signTransaction",
134
+ "sui_signAndExecuteTransaction"
135
+ ],
136
+ chains: safeChains,
137
+ events: []
138
+ }
139
+ }
140
+ });
141
+ const clientId = await wc.client.core.crypto.getClientId();
142
+ return { clientId };
143
+ }
144
+ async connect(params) {
145
+ var _a, _b, _c;
146
+ const connector = this.connectors.find((c) => c.id === params.id);
147
+ if (!connector) {
148
+ throw new Error("Sui connector not found");
149
+ }
150
+ const existingConnection = this.getConnection({
151
+ address: params.address,
152
+ connectorId: connector.id,
153
+ connections: this.connections,
154
+ connectors: this.connectors
155
+ });
156
+ if (existingConnection == null ? void 0 : existingConnection.account) {
157
+ const chainId2 = ((_a = existingConnection.caipNetwork) == null ? void 0 : _a.id) ?? params.chainId ?? "mainnet";
158
+ this.emit("accountChanged", {
159
+ address: existingConnection.account.address,
160
+ chainId: chainId2,
161
+ connector
162
+ });
163
+ return {
164
+ id: connector.id,
165
+ address: existingConnection.account.address,
166
+ chainId: chainId2,
167
+ provider: connector.provider,
168
+ type: connector.type
169
+ };
170
+ }
171
+ const wc = this.getWcProvider();
172
+ const accounts = WcHelpersUtil.getWalletConnectAccounts(
173
+ wc,
174
+ "sui"
175
+ );
176
+ const address = (_b = accounts[0]) == null ? void 0 : _b.address;
177
+ if (!address) {
178
+ throw new Error("No Sui account found after WalletConnect session");
179
+ }
180
+ const caipNetwork = (_c = this.getCaipNetworks()) == null ? void 0 : _c.find(
181
+ (n) => n.id === params.chainId
182
+ );
183
+ this.addConnection({
184
+ connectorId: connector.id,
185
+ accounts: [{ address }],
186
+ caipNetwork
187
+ });
188
+ const chainId = params.chainId ?? (caipNetwork == null ? void 0 : caipNetwork.id) ?? "mainnet";
189
+ this.emit("accountChanged", {
190
+ address,
191
+ chainId,
192
+ connector
193
+ });
194
+ return {
195
+ id: connector.id,
196
+ address,
197
+ chainId,
198
+ provider: connector.provider,
199
+ type: connector.type
200
+ };
201
+ }
202
+ async disconnect(params) {
203
+ if (params == null ? void 0 : params.id) {
204
+ if (this.sharedWcProvider) {
205
+ try {
206
+ await this.sharedWcProvider.disconnect();
207
+ } catch {
208
+ }
209
+ }
210
+ this.deleteConnection(params.id);
211
+ }
212
+ if (this.connections.length === 0) {
213
+ this.emit("disconnect");
214
+ } else {
215
+ this.emitFirstAvailableConnection();
216
+ }
217
+ return { connections: this.connections };
218
+ }
219
+ async getAccounts(params) {
220
+ if (!this.sharedWcProvider) {
221
+ return { accounts: [] };
222
+ }
223
+ const accounts = WcHelpersUtil.getWalletConnectAccounts(
224
+ this.sharedWcProvider,
225
+ "sui"
226
+ );
227
+ return {
228
+ accounts: accounts.map((a) => ({
229
+ namespace: "sui",
230
+ address: a.address,
231
+ type: "eoa"
232
+ }))
233
+ };
234
+ }
235
+ async getBalance(params) {
236
+ var _a, _b, _c;
237
+ if (!params.address) {
238
+ return { balance: "0", symbol: "SUI" };
239
+ }
240
+ try {
241
+ const caipNetwork = (_a = this.getCaipNetworks()) == null ? void 0 : _a.find(
242
+ (n) => n.id === params.chainId
243
+ );
244
+ const rpcUrl = `https://fullnode.${caipNetwork == null ? void 0 : caipNetwork.id}.sui.io:443`;
245
+ if (!rpcUrl) {
246
+ return { balance: "0", symbol: "SUI" };
247
+ }
248
+ const res = await fetch(rpcUrl, {
249
+ method: "POST",
250
+ headers: { "Content-Type": "application/json" },
251
+ body: JSON.stringify({
252
+ jsonrpc: "2.0",
253
+ id: 1,
254
+ method: "suix_getBalance",
255
+ params: [params.address, "0x2::sui::SUI"]
256
+ })
257
+ });
258
+ const data = await res.json();
259
+ const totalBalance = ((_b = data == null ? void 0 : data.result) == null ? void 0 : _b.totalBalance) ?? "0";
260
+ const formatted = (parseInt(totalBalance, 10) / 1e9).toString();
261
+ return {
262
+ balance: formatted,
263
+ symbol: ((_c = caipNetwork == null ? void 0 : caipNetwork.nativeCurrency) == null ? void 0 : _c.symbol) || "SUI"
264
+ };
265
+ } catch {
266
+ return { balance: "0", symbol: "SUI" };
267
+ }
268
+ }
269
+ async switchNetwork(params) {
270
+ await super.switchNetwork(params);
271
+ }
272
+ async syncConnection(params) {
273
+ return this.connect({ ...params, type: "" });
274
+ }
275
+ async syncConnections({
276
+ connectToFirstConnector,
277
+ caipNetwork
278
+ }) {
279
+ if (!this.sharedWcProvider) {
280
+ return;
281
+ }
282
+ const accounts = WcHelpersUtil.getWalletConnectAccounts(
283
+ this.sharedWcProvider,
284
+ "sui"
285
+ );
286
+ if (accounts.length > 0) {
287
+ this.addConnection({
288
+ connectorId: WC_ID,
289
+ accounts: accounts.map((a) => ({ address: a.address })),
290
+ caipNetwork
291
+ });
292
+ }
293
+ if (connectToFirstConnector) {
294
+ this.emitFirstAvailableConnection();
295
+ }
296
+ }
297
+ getWalletConnectProvider(params) {
298
+ return params.provider;
299
+ }
300
+ async signMessage(params) {
301
+ const wc = this.getWcProvider();
302
+ const result = await wc.request(
303
+ {
304
+ method: "sui_signPersonalMessage",
305
+ params: { message: params.message, address: params.address }
306
+ },
307
+ "sui:mainnet"
308
+ );
309
+ return { signature: result.signature };
310
+ }
311
+ async sendTransaction(params) {
312
+ const wc = this.getWcProvider();
313
+ const result = await wc.request(
314
+ {
315
+ method: "sui_signAndExecuteTransaction",
316
+ params: { transaction: params.data, address: params.to }
317
+ },
318
+ "sui:mainnet"
319
+ );
320
+ return { hash: result.digest };
321
+ }
322
+ async estimateGas() {
323
+ return { gas: 0n };
324
+ }
325
+ async writeContract() {
326
+ return { hash: "" };
327
+ }
328
+ parseUnits() {
329
+ return 0n;
330
+ }
331
+ formatUnits() {
332
+ return "";
333
+ }
334
+ async getCapabilities() {
335
+ return {};
336
+ }
337
+ async grantPermissions() {
338
+ return {};
339
+ }
340
+ async revokePermissions() {
341
+ return "0x";
342
+ }
343
+ async walletGetAssets() {
344
+ return {};
345
+ }
346
+ }
347
+ export {
348
+ SuiAdapter
349
+ };
@@ -50,7 +50,7 @@ const AmountInput = ({
50
50
  allowNegative: false,
51
51
  disabled,
52
52
  className: reactjs_utils_mxClsx.mxClsx(
53
- "liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent",
53
+ "liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent focus-visible:liq-outline-none",
54
54
  {
55
55
  "liq-disabled liq-animate-pulse": disabled && !omitDisableClass
56
56
  },
@@ -47,7 +47,7 @@ const AmountInput = ({
47
47
  allowNegative: false,
48
48
  disabled,
49
49
  className: mxClsx(
50
- "liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent",
50
+ "liq-text-3xl liq-leading-9 liq-min-h-12 liq-py-0 liq-w-full liq-h-full liq-border-none liq-font-medium liq-px-0 liq-outline-0 liq-bg-transparent focus-visible:liq-outline-none",
51
51
  {
52
52
  "liq-disabled liq-animate-pulse": disabled && !omitDisableClass
53
53
  },
@@ -11,11 +11,14 @@ const debounce = require("lodash/debounce");
11
11
  const React = require("react");
12
12
  const reactToastify = require("react-toastify");
13
13
  const reactjs_components_BridgeForm_hooks_useBridgeTokenSelection = require("./hooks/useBridgeTokenSelection.js");
14
+ const reactjs_components_BridgeForm_utils_bridgeFormHelpers = require("./utils/bridgeFormHelpers.js");
14
15
  const constants_index = require("../../../constants/index.js");
15
16
  const helpers_getApiURL = require("../../../helpers/getApiURL.js");
16
17
  const types_chainType = require("../../../types/chainType.js");
17
18
  const reactjs_context_useWeb3App = require("../../context/useWeb3App.js");
19
+ const reactjs_helpers_resolveBridgeApiChainId = require("../../helpers/resolveBridgeApiChainId.js");
18
20
  const reactjs_hooks_useAccount = require("../../hooks/useAccount.js");
21
+ const reactjs_hooks_useBridgeApiChainId = require("../../hooks/useBridgeApiChainId.js");
19
22
  const reactjs_hooks_useBridgeFormik = require("../../hooks/useBridgeFormik.js");
20
23
  const reactjs_hooks_useFetchBridgeData = require("../../hooks/useFetchBridgeData.js");
21
24
  const reactjs_hooks_useGetChainId = require("../../hooks/useGetChainId.js");
@@ -42,6 +45,7 @@ require("wagmi");
42
45
  const reactjs_components_Connect_MvxConnectButton = require("../Connect/MvxConnectButton.js");
43
46
  const reactjs_components_Connect_BridgeAccountDisplay = require("../Connect/BridgeAccountDisplay.js");
44
47
  const reactjs_components_Connect_MvxAccountDisplay = require("../Connect/MvxAccountDisplay.js");
48
+ require("@reown/appkit-controllers");
45
49
  const reactjs_components_ToggleDirection_ToggleDirection = require("../ToggleDirection/ToggleDirection.js");
46
50
  const reactjs_components_TokenSelector_TokenSelector = require("../TokenSelector/TokenSelector.js");
47
51
  let fetchRateInterval;
@@ -81,6 +85,7 @@ const Deposit = ({
81
85
  bridgeOnly
82
86
  } = reactjs_context_useWeb3App.useWeb3App();
83
87
  const chainId = reactjs_hooks_useGetChainId.useGetChainId();
88
+ const bridgeApiChainId = reactjs_hooks_useBridgeApiChainId.useBridgeApiChainId();
84
89
  const {
85
90
  evmTokensWithBalances,
86
91
  mvxTokensWithBalances,
@@ -96,16 +101,14 @@ const Deposit = ({
96
101
  });
97
102
  const isTokensLoading = tokensLoading || isLoadingEvmTokensBalances || isLoadingMvxTokensBalances || isChainsLoading;
98
103
  const activeChain = React.useMemo(() => {
99
- return sdkChains.find(
100
- (chain) => chain.id.toString() === (chainId == null ? void 0 : chainId.toString())
101
- );
104
+ return sdkChains.find((chain) => reactjs_helpers_resolveBridgeApiChainId.sameBridgeApiChainId(chain.id, chainId));
102
105
  }, [chainId, sdkChains]);
103
106
  const mvxChain = React.useMemo(() => {
104
107
  return chains.find(
105
108
  (chain) => chain.chainId.toString() === mvxChainId.toString()
106
109
  );
107
110
  }, [chainId, chains]);
108
- const { evm, solana, bitcoin } = reactjs_hooks_useSignTransaction.useSignTransaction();
111
+ const { evm, solana, bitcoin, sui } = reactjs_hooks_useSignTransaction.useSignTransaction();
109
112
  const sendTransactions = reactjs_hooks_useSendTransactions.useSendTransactions();
110
113
  const {
111
114
  mutate: getRate,
@@ -117,7 +120,7 @@ const Deposit = ({
117
120
  const handleSwitchNetwork = React.useCallback(
118
121
  (chain) => {
119
122
  const sdkChain = sdkChains.find(
120
- (c) => c.id.toString() === chain.id.toString()
123
+ (c) => reactjs_helpers_resolveBridgeApiChainId.sameBridgeApiChainId(c.id, chain.id)
121
124
  );
122
125
  if (sdkChain) {
123
126
  switchNetwork(sdkChain);
@@ -161,15 +164,19 @@ const Deposit = ({
161
164
  return selectedChainOption;
162
165
  }
163
166
  return chains.find(
164
- (chain) => chain.chainId.toString() === firstToken.chainId.toString()
167
+ (chain) => reactjs_helpers_resolveBridgeApiChainId.sameBridgeApiChainId(chain.chainId, firstToken.chainId)
165
168
  ) ?? selectedChainOption;
166
169
  }, [firstToken == null ? void 0 : firstToken.chainId, chains, selectedChainOption]);
170
+ const bridgeFromChainId = React.useMemo(
171
+ () => reactjs_helpers_resolveBridgeApiChainId.toBridgeApiChainId(firstToken == null ? void 0 : firstToken.chainId) ?? bridgeApiChainId,
172
+ [firstToken == null ? void 0 : firstToken.chainId, bridgeApiChainId]
173
+ );
167
174
  const bridgeAddress = account.address;
168
175
  const isAuthenticated = account.isConnected && Boolean(bridgeAddress);
169
176
  const hasAmounts = firstAmount !== "" && secondAmount !== "";
170
177
  const fetchRateDebounced = React.useCallback(
171
178
  debounce(async (amount) => {
172
- if (!amount || !Number(amount) || !account.address || !(firstToken == null ? void 0 : firstToken.address) || !(secondToken == null ? void 0 : secondToken.address) || !selectedChainOption || !chainId) {
179
+ if (!amount || !Number(amount) || !account.address || !(firstToken == null ? void 0 : firstToken.address) || !(secondToken == null ? void 0 : secondToken.address) || !selectedChainOption || !bridgeFromChainId) {
173
180
  return;
174
181
  }
175
182
  getRate({
@@ -177,7 +184,7 @@ const Deposit = ({
177
184
  body: {
178
185
  tokenIn: firstToken.address,
179
186
  amountIn: amount,
180
- fromChainId: chainId.toString(),
187
+ fromChainId: bridgeFromChainId,
181
188
  tokenOut: secondToken.address,
182
189
  toChainId: mvxChainId
183
190
  }
@@ -185,6 +192,7 @@ const Deposit = ({
185
192
  }, 500),
186
193
  [
187
194
  account.address,
195
+ bridgeFromChainId,
188
196
  firstToken == null ? void 0 : firstToken.address,
189
197
  secondToken == null ? void 0 : secondToken.address,
190
198
  selectedChainOption
@@ -243,6 +251,7 @@ const Deposit = ({
243
251
  transactions,
244
252
  provider
245
253
  }) => {
254
+ var _a2, _b2, _c;
246
255
  const signedTransactions = [];
247
256
  setPendingSigning(true);
248
257
  setSigningTransactionsCount(() => transactions.length);
@@ -251,8 +260,8 @@ const Deposit = ({
251
260
  for (const transaction of transactions) {
252
261
  ++txIndex;
253
262
  try {
254
- switch (selectedChainOption == null ? void 0 : selectedChainOption.chainType) {
255
- case types_chainType.ChainType.evm:
263
+ switch (reactjs_components_BridgeForm_utils_bridgeFormHelpers.resolveSigningChainType(transaction, firstTokenChain)) {
264
+ case types_chainType.ChainType.evm: {
256
265
  const hash = await evm.signTransaction({
257
266
  ...transaction,
258
267
  value: BigInt(transaction.value),
@@ -281,6 +290,7 @@ const Deposit = ({
281
290
  hash
282
291
  });
283
292
  break;
293
+ }
284
294
  case types_chainType.ChainType.sol:
285
295
  if (!transaction.instructions || !transaction.feePayer) {
286
296
  break;
@@ -311,6 +321,29 @@ const Deposit = ({
311
321
  txHash: psbt
312
322
  });
313
323
  break;
324
+ case types_chainType.ChainType.sui: {
325
+ const serializedTx = (_a2 = transaction.suiParams) == null ? void 0 : _a2.transactionBytes;
326
+ const sender = (_b2 = transaction.suiParams) == null ? void 0 : _b2.sender;
327
+ if (!serializedTx || !sender) {
328
+ console.error("No Sui transaction bytes or sender address");
329
+ break;
330
+ }
331
+ const signature = await sui.signTransaction({
332
+ transaction: serializedTx,
333
+ address: sender
334
+ });
335
+ if (!signature) {
336
+ break;
337
+ }
338
+ signedTransactions.push({
339
+ ...transaction,
340
+ suiParams: {
341
+ ...transaction.suiParams,
342
+ signature
343
+ }
344
+ });
345
+ break;
346
+ }
314
347
  default:
315
348
  reactToastify.toast.error("Provider not supported");
316
349
  setPendingSigning(false);
@@ -327,13 +360,15 @@ const Deposit = ({
327
360
  return;
328
361
  }
329
362
  }
330
- await sendTransactions({
363
+ const { data: batch } = await sendTransactions({
331
364
  transactions: signedTransactions,
332
365
  provider,
333
366
  url: helpers_getApiURL.getApiURL() ?? "",
334
367
  token: nativeAuthToken ?? ""
335
368
  });
336
- const txHashes = signedTransactions.map((tx) => tx.txHash);
369
+ const apiHashes = ((_c = batch.transactions) == null ? void 0 : _c.map((tx) => tx.txHash).filter((h) => Boolean(h))) ?? [];
370
+ const localHashes = signedTransactions.map((tx) => tx.txHash).filter((h) => Boolean(h));
371
+ const txHashes = apiHashes.length > 0 ? apiHashes : localHashes.length > 0 ? localHashes : batch.batchId ? [batch.batchId] : [];
337
372
  onSuccess(txHashes);
338
373
  setPendingSigning(false);
339
374
  } catch (e) {
@@ -349,14 +384,18 @@ const Deposit = ({
349
384
  }
350
385
  },
351
386
  [
352
- selectedChainOption,
387
+ firstTokenChain == null ? void 0 : firstTokenChain.chainType,
353
388
  bridgeAddress,
389
+ config,
354
390
  handleOnChangeFirstAmount,
355
391
  handleOnChangeSecondAmount,
356
392
  nativeAuthToken,
357
393
  onSuccess,
358
394
  sendTransactions,
359
- evm.signTransaction
395
+ bitcoin.signTransaction,
396
+ evm.signTransaction,
397
+ solana.signTransaction,
398
+ sui.signTransaction
360
399
  ]
361
400
  );
362
401
  const {
@@ -375,7 +414,7 @@ const Deposit = ({
375
414
  receiver: mvxAddress ?? "",
376
415
  firstToken,
377
416
  firstAmount,
378
- fromChainId: chainId == null ? void 0 : chainId.toString(),
417
+ fromChainId: bridgeFromChainId,
379
418
  toChainId: mvxChainId,
380
419
  secondToken,
381
420
  secondAmount,
@@ -583,14 +622,14 @@ const Deposit = ({
583
622
  className: "liq-w-full disabled:liq-bg-neutral-850/50 liq-py-3 hover:enabled:liq-bg-primary !liq-text-primary-200",
584
623
  disabled: !hasAmounts || isPendingRate || !mvxAddress || !account.address || hasError || pendingSigning,
585
624
  children: [
586
- hasAmounts && !pendingSigning && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liq-flex liq-justify-center liq-gap-2", children: [
625
+ hasAmounts && !pendingSigning && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liq-flex liq-justify-center liq-items-center liq-gap-2", children: [
587
626
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Deposit on " }),
588
627
  /* @__PURE__ */ jsxRuntime.jsx(
589
628
  "img",
590
629
  {
591
630
  src: (mvxChain == null ? void 0 : mvxChain.pngUrl) ?? "",
592
631
  alt: "",
593
- className: "liq-h-[1.5rem] liq-w-[1.5rem]"
632
+ className: "liq-h-[1.5rem] liq-w-[1.5rem] liq-rounded-lg"
594
633
  }
595
634
  ),
596
635
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: "MultiversX" })
@@ -611,7 +650,7 @@ const Deposit = ({
611
650
  {
612
651
  src: (mvxChain == null ? void 0 : mvxChain.pngUrl) ?? "",
613
652
  alt: "",
614
- className: "liq-h-[1.5rem] liq-w-[1.5rem]"
653
+ className: "liq-h-[1.5rem] liq-w-[1.5rem] liq-rounded-lg"
615
654
  }
616
655
  ),
617
656
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: "MultiversX" })