@skip-go/client 1.3.7 → 1.5.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 (130) hide show
  1. package/dist/cjs/api/getAssets.cjs +4 -4
  2. package/dist/cjs/api/getAssetsBetweenChains.cjs +3 -3
  3. package/dist/cjs/api/getBridges.cjs +3 -3
  4. package/dist/cjs/api/getChains.cjs +3 -3
  5. package/dist/cjs/api/getVenues.cjs +3 -3
  6. package/dist/cjs/api/postAssetsFromSource.cjs +4 -4
  7. package/dist/cjs/api/postBalances.cjs +3 -3
  8. package/dist/cjs/api/postIbcOriginAssets.cjs +3 -3
  9. package/dist/cjs/api/postMessages.cjs +3 -3
  10. package/dist/cjs/api/postMessagesDirect.cjs +3 -3
  11. package/dist/cjs/api/postRecommendAssets.cjs +3 -3
  12. package/dist/cjs/api/postRoute.cjs +3 -3
  13. package/dist/cjs/api/postSubmitTransaction.cjs +3 -3
  14. package/dist/cjs/api/postTrackTransaction.cjs +3 -3
  15. package/dist/cjs/api/postTransactionStatus.cjs +3 -3
  16. package/dist/cjs/{chunk-2EKCOIWV.cjs → chunk-23YF4LFI.cjs} +185 -154
  17. package/dist/cjs/chunk-3M7YYWGL.cjs +295 -0
  18. package/dist/cjs/chunk-4YTACAVP.cjs +185 -0
  19. package/dist/cjs/{chunk-MW3TE7DC.cjs → chunk-5AYPH3ZR.cjs} +2 -2
  20. package/dist/cjs/{chunk-2CCLIBCC.cjs → chunk-5HDKZVOL.cjs} +2 -2
  21. package/dist/cjs/{chunk-YYBGBKRE.cjs → chunk-A26H4FVN.cjs} +4 -4
  22. package/dist/cjs/{chunk-P7CDAHIX.cjs → chunk-AXYRULAI.cjs} +2 -2
  23. package/dist/cjs/{chunk-E2P5MVX3.cjs → chunk-CUDPMOR6.cjs} +16 -9
  24. package/dist/cjs/{chunk-WMXUOVHN.cjs → chunk-DWOE6N5S.cjs} +248 -532
  25. package/dist/cjs/{chunk-7I2KQNIU.cjs → chunk-EJMC4JXF.cjs} +2 -2
  26. package/dist/cjs/{chunk-HKQ5VION.cjs → chunk-ERGJBZUC.cjs} +5 -1
  27. package/dist/cjs/{chunk-J5RC6ZU5.cjs → chunk-FNB244QI.cjs} +6 -6
  28. package/dist/cjs/chunk-GCJO6DZD.cjs +55 -0
  29. package/dist/cjs/{chunk-OEYY7NXT.cjs → chunk-HHZGD62Y.cjs} +256 -168
  30. package/dist/cjs/{chunk-DBDB2XWX.cjs → chunk-JBKNEFXB.cjs} +3 -3
  31. package/dist/cjs/{chunk-AF7EI5BT.cjs → chunk-K4YAPDUE.cjs} +2 -2
  32. package/dist/cjs/{chunk-MN6HFZJA.cjs → chunk-KM2D7PJL.cjs} +33 -33
  33. package/dist/cjs/{chunk-XGBCEYWI.cjs → chunk-LHY62HPI.cjs} +2 -2
  34. package/dist/cjs/{chunk-EXK2GDR5.cjs → chunk-LUVMRHAJ.cjs} +2 -2
  35. package/dist/cjs/{chunk-QSISUSYP.cjs → chunk-N4UW74AG.cjs} +4 -4
  36. package/dist/cjs/{chunk-FY56EEFB.cjs → chunk-OZUCMWNE.cjs} +2 -2
  37. package/dist/cjs/{chunk-2VQ2TNFM.cjs → chunk-QPM7H2YL.cjs} +2 -2
  38. package/dist/cjs/{chunk-FO25SR66.cjs → chunk-RCGCQD6T.cjs} +6 -6
  39. package/dist/cjs/chunk-UIQML2XG.cjs +455 -0
  40. package/dist/cjs/chunk-VF65UG3E.cjs +214 -0
  41. package/dist/cjs/{chunk-VKVHMUDR.cjs → chunk-W3KF3V57.cjs} +6 -6
  42. package/dist/cjs/{chunk-YN66ABRQ.cjs → chunk-X22PL5T7.cjs} +126 -16
  43. package/dist/cjs/{chunk-DCFIIF7G.cjs → chunk-X5AJHZ2J.cjs} +2 -2
  44. package/dist/cjs/{chunk-MCZ3F457.cjs → chunk-ZBPDDVQ2.cjs} +2 -2
  45. package/dist/cjs/index.cjs +66 -54
  46. package/dist/cjs/public-functions/executeMultipleRoutes.cjs +29 -0
  47. package/dist/cjs/public-functions/executeRoute.cjs +17 -15
  48. package/dist/cjs/public-functions/getCosmosGasAmountForMessage.cjs +5 -4
  49. package/dist/cjs/public-functions/getFeeInfoForChain.cjs +5 -5
  50. package/dist/cjs/public-functions/getRecommendedGasPrice.cjs +6 -6
  51. package/dist/cjs/public-functions/getSigningStargateClient.cjs +6 -5
  52. package/dist/cjs/public-functions/setApiOptions.cjs +3 -3
  53. package/dist/cjs/public-functions/setClientOptions.cjs +6 -5
  54. package/dist/cjs/public-functions/subscribeToRouteStatus.cjs +26 -0
  55. package/dist/cjs/public-functions/validateCosmosGasBalance.cjs +9 -8
  56. package/dist/cjs/public-functions/waitForTransaction.cjs +5 -5
  57. package/dist/esm/api/getAssets.js +2 -2
  58. package/dist/esm/api/getAssetsBetweenChains.js +2 -2
  59. package/dist/esm/api/getBridges.js +2 -2
  60. package/dist/esm/api/getChains.js +2 -2
  61. package/dist/esm/api/getVenues.js +2 -2
  62. package/dist/esm/api/postAssetsFromSource.js +3 -3
  63. package/dist/esm/api/postBalances.js +2 -2
  64. package/dist/esm/api/postIbcOriginAssets.js +2 -2
  65. package/dist/esm/api/postMessages.js +2 -2
  66. package/dist/esm/api/postMessagesDirect.js +2 -2
  67. package/dist/esm/api/postRecommendAssets.js +2 -2
  68. package/dist/esm/api/postRoute.js +2 -2
  69. package/dist/esm/api/postSubmitTransaction.js +2 -2
  70. package/dist/esm/api/postTrackTransaction.d.ts +2 -1
  71. package/dist/esm/api/postTrackTransaction.js +2 -2
  72. package/dist/esm/api/postTransactionStatus.d.ts +1 -1
  73. package/dist/esm/api/postTransactionStatus.js +2 -2
  74. package/dist/esm/callbacks-CvqAtBJq.d.ts +130 -0
  75. package/dist/esm/{chunk-SJP6W2SK.js → chunk-3XOGEVJL.js} +1 -1
  76. package/dist/esm/{chunk-JSY7M43P.js → chunk-52PEBJRQ.js} +1 -1
  77. package/dist/esm/chunk-7RS3YIVC.js +53 -0
  78. package/dist/esm/{chunk-7ITTEUMR.js → chunk-7X4ERB3R.js} +1 -1
  79. package/dist/esm/{chunk-LZI7A4JI.js → chunk-A6KSECAH.js} +5 -1
  80. package/dist/esm/{chunk-7LSTJXAF.js → chunk-AND7HVIU.js} +1 -1
  81. package/dist/esm/{chunk-MXCJ2M3K.js → chunk-APRMN34M.js} +1 -1
  82. package/dist/esm/chunk-AZALP3WR.js +212 -0
  83. package/dist/esm/{chunk-5JZOTYDC.js → chunk-CX5N7ZLJ.js} +1 -1
  84. package/dist/esm/{chunk-JYUNVL4F.js → chunk-FH2YHZVV.js} +1 -1
  85. package/dist/esm/chunk-IUYOY23L.js +180 -0
  86. package/dist/esm/{chunk-IQQDEBLI.js → chunk-JKN4E5VN.js} +11 -4
  87. package/dist/esm/{chunk-OHV2LZEG.js → chunk-JQ4F4WBG.js} +1 -1
  88. package/dist/esm/{chunk-5FKIW2ZL.js → chunk-KLGGCB73.js} +2 -2
  89. package/dist/esm/{chunk-P76IRSIS.js → chunk-KNXMSLOB.js} +2 -2
  90. package/dist/esm/{chunk-IWXRHEX4.js → chunk-LHNGF5J2.js} +2 -2
  91. package/dist/esm/{chunk-KJVD5P3Q.js → chunk-MPSXXWKL.js} +109 -3
  92. package/dist/esm/{chunk-FFFVITWF.js → chunk-MTAS5XMN.js} +219 -132
  93. package/dist/esm/{chunk-JIADJKRD.js → chunk-OTS5KO43.js} +1 -1
  94. package/dist/esm/{chunk-CU6W3622.js → chunk-QIS6ILPS.js} +3 -3
  95. package/dist/esm/chunk-QO2CYYF5.js +278 -0
  96. package/dist/esm/{chunk-XXTECZG3.js → chunk-S4RO2LHD.js} +1 -1
  97. package/dist/esm/{chunk-7YN3UVVF.js → chunk-UI3SIFZN.js} +1 -1
  98. package/dist/esm/{chunk-TD63P2AG.js → chunk-UIDIKXMB.js} +65 -340
  99. package/dist/esm/chunk-VUXLWWLF.js +450 -0
  100. package/dist/esm/{chunk-OL7CWCPB.js → chunk-WBZVMPPV.js} +34 -3
  101. package/dist/esm/{chunk-HT6O3BQ7.js → chunk-Y2YCODZK.js} +1 -1
  102. package/dist/esm/{chunk-IPHFFTGO.js → chunk-ZI3SYUQH.js} +1 -1
  103. package/dist/esm/{chunk-2L7PKZDY.js → chunk-ZOUYAZU6.js} +1 -1
  104. package/dist/esm/client-types-Dk6ypWdO.d.ts +114 -0
  105. package/dist/esm/index.d.ts +5 -5
  106. package/dist/esm/index.js +29 -25
  107. package/dist/esm/public-functions/executeMultipleRoutes.d.ts +60 -0
  108. package/dist/esm/public-functions/executeMultipleRoutes.js +20 -0
  109. package/dist/esm/public-functions/executeRoute.d.ts +7 -76
  110. package/dist/esm/public-functions/executeRoute.js +16 -14
  111. package/dist/esm/public-functions/getCosmosGasAmountForMessage.js +3 -2
  112. package/dist/esm/public-functions/getEvmGasAmountForMessage.d.ts +4 -1
  113. package/dist/esm/public-functions/getFeeInfoForChain.js +4 -4
  114. package/dist/esm/public-functions/getRecommendedGasPrice.js +5 -5
  115. package/dist/esm/public-functions/getSigningStargateClient.js +5 -4
  116. package/dist/esm/public-functions/setApiOptions.js +2 -2
  117. package/dist/esm/public-functions/setClientOptions.d.ts +4 -2
  118. package/dist/esm/public-functions/setClientOptions.js +5 -4
  119. package/dist/esm/public-functions/subscribeToRouteStatus.d.ts +12 -0
  120. package/dist/esm/public-functions/subscribeToRouteStatus.js +5 -0
  121. package/dist/esm/public-functions/validateCosmosGasBalance.d.ts +7 -5
  122. package/dist/esm/public-functions/validateCosmosGasBalance.js +8 -7
  123. package/dist/esm/public-functions/waitForTransaction.d.ts +6 -2
  124. package/dist/esm/public-functions/waitForTransaction.js +4 -4
  125. package/dist/esm/{setClientOptions-BTRwCbmt.d.ts → setClientOptions-BD8e7m2x.d.ts} +1 -1
  126. package/package.json +3 -3
  127. package/dist/cjs/chunk-7H6XRQAX.cjs +0 -185
  128. package/dist/esm/callbacks-CuL50GnB.d.ts +0 -38
  129. package/dist/esm/chunk-U6AH2WOP.js +0 -180
  130. package/dist/esm/client-types-B7Fin0mq.d.ts +0 -61
@@ -0,0 +1,455 @@
1
+ 'use strict';
2
+
3
+ var chunkLUVMRHAJ_cjs = require('./chunk-LUVMRHAJ.cjs');
4
+ var chunkQPM7H2YL_cjs = require('./chunk-QPM7H2YL.cjs');
5
+ var chunkERGJBZUC_cjs = require('./chunk-ERGJBZUC.cjs');
6
+ var uuid = require('uuid');
7
+
8
+ // src/utils/clientType.ts
9
+ function getClientTransferEvent(transferEvent) {
10
+ const combinedTransferEvent = transferEvent;
11
+ const axelarTransfer = combinedTransferEvent?.axelarTransfer;
12
+ const ibcTransfer = combinedTransferEvent?.ibcTransfer;
13
+ const cctpTransfer = combinedTransferEvent?.cctpTransfer;
14
+ const hyperlaneTransfer = combinedTransferEvent?.hyperlaneTransfer;
15
+ const opInitTransfer = combinedTransferEvent?.opInitTransfer;
16
+ const goFastTransfer = combinedTransferEvent?.goFastTransfer;
17
+ const stargateTransfer = combinedTransferEvent?.stargateTransfer;
18
+ const eurekaTransfer = combinedTransferEvent?.eurekaTransfer;
19
+ const layerZeroTransfer = combinedTransferEvent?.layerZeroTransfer;
20
+ let transferType = "";
21
+ if (axelarTransfer) {
22
+ transferType = "axelarTransfer" /* axelarTransfer */;
23
+ } else if (ibcTransfer) {
24
+ transferType = "ibcTransfer" /* ibcTransfer */;
25
+ } else if (cctpTransfer) {
26
+ transferType = "cctpTransfer" /* cctpTransfer */;
27
+ } else if (hyperlaneTransfer) {
28
+ transferType = "hyperlaneTransfer" /* hyperlaneTransfer */;
29
+ } else if (opInitTransfer) {
30
+ transferType = "opInitTransfer" /* opInitTransfer */;
31
+ } else if (goFastTransfer) {
32
+ transferType = "goFastTransfer" /* goFastTransfer */;
33
+ } else if (stargateTransfer) {
34
+ transferType = "stargateTransfer" /* stargateTransfer */;
35
+ } else if (eurekaTransfer) {
36
+ transferType = "eurekaTransfer" /* eurekaTransfer */;
37
+ } else if (layerZeroTransfer) {
38
+ transferType = "layerZeroTransfer" /* layerZeroTransfer */;
39
+ }
40
+ const getExplorerLink = (type) => {
41
+ switch (transferType) {
42
+ case "ibcTransfer" /* ibcTransfer */:
43
+ if (type === "send") {
44
+ return ibcTransfer.packetTxs.sendTx?.explorerLink;
45
+ }
46
+ return ibcTransfer.packetTxs.receiveTx?.explorerLink;
47
+ case "eurekaTransfer" /* eurekaTransfer */:
48
+ if (type === "send") {
49
+ return eurekaTransfer.packetTxs.sendTx?.explorerLink;
50
+ }
51
+ return eurekaTransfer.packetTxs.receiveTx?.explorerLink;
52
+ case "goFastTransfer" /* goFastTransfer */:
53
+ if (type === "send") {
54
+ return goFastTransfer.txs.orderSubmittedTx?.explorerLink;
55
+ }
56
+ return goFastTransfer.txs.orderFilledTx?.explorerLink;
57
+ case "axelarTransfer" /* axelarTransfer */:
58
+ return axelarTransfer?.axelarScanLink;
59
+ default:
60
+ if (type === "send") {
61
+ return combinedTransferEvent[transferType]?.txs?.sendTx?.explorerLink;
62
+ }
63
+ return combinedTransferEvent[transferType]?.txs?.receiveTx?.explorerLink;
64
+ }
65
+ };
66
+ const _result = {
67
+ ...ibcTransfer,
68
+ ...axelarTransfer,
69
+ ...cctpTransfer,
70
+ ...hyperlaneTransfer,
71
+ ...stargateTransfer,
72
+ ...hyperlaneTransfer,
73
+ ...opInitTransfer,
74
+ ...goFastTransfer,
75
+ ...stargateTransfer,
76
+ ...eurekaTransfer,
77
+ ...layerZeroTransfer,
78
+ fromExplorerLink: getExplorerLink("send"),
79
+ toExplorerLink: getExplorerLink("receive")
80
+ };
81
+ const status = getSimpleStatus(_result.state);
82
+ const result = {
83
+ ..._result,
84
+ status
85
+ };
86
+ return result;
87
+ }
88
+ function getTransferEventsFromTxStatusResponse(txStatusResponse) {
89
+ if (!txStatusResponse) return [];
90
+ return txStatusResponse?.flatMap((txStatus) => {
91
+ return (txStatus.transferSequence ?? []).map((transferEvent) => {
92
+ return getClientTransferEvent(transferEvent);
93
+ });
94
+ });
95
+ }
96
+ function getSimpleStatus(state) {
97
+ switch (state) {
98
+ case "TRANSFER_PENDING":
99
+ case "TRANSFER_RECEIVED":
100
+ case "AXELAR_TRANSFER_PENDING_CONFIRMATION":
101
+ case "AXELAR_TRANSFER_PENDING_RECEIPT":
102
+ case "CCTP_TRANSFER_SENT":
103
+ case "CCTP_TRANSFER_PENDING_CONFIRMATION":
104
+ case "CCTP_TRANSFER_CONFIRMED":
105
+ case "HYPERLANE_TRANSFER_SENT":
106
+ case "OPINIT_TRANSFER_SENT":
107
+ case "GO_FAST_TRANSFER_SENT":
108
+ case "STARGATE_TRANSFER_SENT":
109
+ case "LAYER_ZERO_TRANSFER_SENT":
110
+ return "pending";
111
+ case "TRANSFER_SUCCESS":
112
+ case "AXELAR_TRANSFER_SUCCESS":
113
+ case "CCTP_TRANSFER_RECEIVED":
114
+ case "HYPERLANE_TRANSFER_RECEIVED":
115
+ case "OPINIT_TRANSFER_RECEIVED":
116
+ case "STARGATE_TRANSFER_RECEIVED":
117
+ case "GO_FAST_TRANSFER_FILLED":
118
+ case "LAYER_ZERO_TRANSFER_RECEIVED":
119
+ return "completed";
120
+ default:
121
+ return "failed";
122
+ }
123
+ }
124
+ function getTransactionStatus(state) {
125
+ switch (state) {
126
+ case "STATE_SUBMITTED":
127
+ case "STATE_PENDING":
128
+ return "pending";
129
+ case "STATE_COMPLETED_SUCCESS":
130
+ return "success";
131
+ case "STATE_COMPLETED_ERROR":
132
+ case "STATE_PENDING_ERROR":
133
+ return "failed";
134
+ default:
135
+ return "pending";
136
+ }
137
+ }
138
+ var isFinalRouteStatus = (routeDetails) => {
139
+ if (routeDetails.status === "completed" || routeDetails.status === "failed" || routeDetails.status === "incomplete") {
140
+ return true;
141
+ }
142
+ return false;
143
+ };
144
+ var isFinalState = (transaction) => {
145
+ const transactionState = transaction?.statusResponse?.transfers?.[0]?.state;
146
+ const transactionStatus2 = transaction?.status;
147
+ return transactionState === "STATE_COMPLETED_SUCCESS" || transactionState === "STATE_COMPLETED_ERROR" || transactionState === "STATE_ABANDONED" || transactionStatus2 === "failed" || transactionStatus2 === "success";
148
+ };
149
+ var isSuccessState = (transaction) => {
150
+ const transactionState = transaction?.statusResponse?.transfers?.[0]?.state;
151
+ const transactionStatus2 = transaction?.status;
152
+ return transactionState === "STATE_COMPLETED_SUCCESS" || transactionStatus2 === "success";
153
+ };
154
+ var routeDetailsMap = /* @__PURE__ */ new Map();
155
+ var initializeNewRouteDetails = (options) => {
156
+ const newRouteId = uuid.v4();
157
+ const newRouteDetails = {
158
+ id: newRouteId,
159
+ timestamp: Date.now(),
160
+ route: getSimpleRoute(options?.route),
161
+ status: "unconfirmed",
162
+ txsRequired: options?.route?.txsRequired ?? 1,
163
+ txsSigned: 0,
164
+ transactionDetails: [],
165
+ transferEvents: [],
166
+ relatedRoutes: [],
167
+ userAddresses: options?.userAddresses ?? []
168
+ };
169
+ routeDetailsMap.set(newRouteId, newRouteDetails);
170
+ return newRouteDetails;
171
+ };
172
+ var subscribeToRouteStatus = (props) => {
173
+ const { routeDetails, onRouteStatusUpdated } = props;
174
+ const routeList = Array.isArray(routeDetails) ? routeDetails : [routeDetails];
175
+ const cancelFlags = /* @__PURE__ */ new Map();
176
+ const unsubscribers = [];
177
+ for (const route of routeList) {
178
+ const cancelFlag = { cancelled: false };
179
+ cancelFlags.set(route?.id ?? uuid.v4(), cancelFlag);
180
+ const unsubscribe = () => {
181
+ cancelFlag.cancelled = true;
182
+ };
183
+ unsubscribers.push(unsubscribe);
184
+ void executeAndSubscribeToRouteStatus({
185
+ routeDetails: route,
186
+ onRouteStatusUpdated,
187
+ isCancelled: () => cancelFlag.cancelled
188
+ });
189
+ }
190
+ const unsubscribeAll = () => {
191
+ for (const unsubscribe of unsubscribers) {
192
+ unsubscribe();
193
+ }
194
+ };
195
+ return unsubscribeAll;
196
+ };
197
+ var executeAndSubscribeToRouteStatus = async ({
198
+ transactionDetails,
199
+ executeTransaction,
200
+ trackTxPollingOptions,
201
+ onTransactionTracked,
202
+ onTransactionCompleted,
203
+ routeDetails,
204
+ onRouteStatusUpdated,
205
+ options,
206
+ routeId,
207
+ isCancelled
208
+ }) => {
209
+ removeRoutesWithFinalStatus();
210
+ routeId ??= routeDetails?.id;
211
+ const currentRouteDetails = routeDetailsMap.get(routeId ?? "");
212
+ transactionDetails ??= routeDetails?.transactionDetails ?? currentRouteDetails?.transactionDetails ?? [];
213
+ if (routeDetails && isFinalRouteStatus(routeDetails) && routeDetails?.relatedRoutes?.every(
214
+ (relatedRoute) => isFinalRouteStatus(relatedRoute)
215
+ )) {
216
+ return;
217
+ }
218
+ for (const [transactionIndex, transaction] of transactionDetails.entries()) {
219
+ if (executeTransaction && !transaction.txHash) {
220
+ let { txHash, explorerLink } = await executeTransaction?.(transactionIndex);
221
+ transaction.txHash = txHash;
222
+ if (!explorerLink) {
223
+ const trackResponse = await chunkLUVMRHAJ_cjs.trackTransaction({
224
+ chainId: transaction.chainId,
225
+ txHash: transaction.txHash,
226
+ ...trackTxPollingOptions
227
+ });
228
+ explorerLink = trackResponse.explorerLink;
229
+ }
230
+ transaction.explorerLink = explorerLink;
231
+ await onTransactionTracked?.({
232
+ txHash: transaction.txHash,
233
+ chainId: transaction.chainId,
234
+ explorerLink
235
+ });
236
+ }
237
+ if (transaction.txHash === void 0) {
238
+ updateRouteDetails({
239
+ routeId,
240
+ routeDetails,
241
+ transactionDetails,
242
+ options: {
243
+ onRouteStatusUpdated,
244
+ ...options
245
+ }
246
+ });
247
+ return;
248
+ }
249
+ while (true) {
250
+ const updatedRouteDetails = routeDetailsMap.get(routeId ?? "");
251
+ const allRelatedRoutesFinal = updatedRouteDetails?.relatedRoutes?.every(
252
+ (relatedRoute) => relatedRoute && isFinalRouteStatus(relatedRoute)
253
+ );
254
+ if (isFinalState(transaction) && allRelatedRoutesFinal) {
255
+ break;
256
+ }
257
+ if (isCancelled?.()) {
258
+ console.info(`Polling cancelled for route ${routeId}`);
259
+ break;
260
+ }
261
+ try {
262
+ const statusResponse = await chunkQPM7H2YL_cjs.transactionStatus({
263
+ chainId: transaction.chainId,
264
+ txHash: transaction.txHash
265
+ });
266
+ transaction.statusResponse = statusResponse;
267
+ updateRouteDetails({
268
+ routeId,
269
+ routeDetails,
270
+ transactionDetails,
271
+ options: {
272
+ onRouteStatusUpdated,
273
+ ...options
274
+ },
275
+ relatedRoutes: routeDetails?.relatedRoutes
276
+ });
277
+ if (isFinalState(transaction)) {
278
+ onTransactionCompleted?.({
279
+ chainId: transaction.chainId,
280
+ txHash: transaction.txHash,
281
+ status: statusResponse
282
+ });
283
+ if (routeDetails?.relatedRoutes?.every(
284
+ (relatedRoute) => isFinalRouteStatus(relatedRoute)
285
+ )) {
286
+ break;
287
+ }
288
+ }
289
+ } catch (error) {
290
+ console.error(error);
291
+ } finally {
292
+ await chunkERGJBZUC_cjs.wait(1e3);
293
+ }
294
+ }
295
+ }
296
+ };
297
+ var updateRouteDetails = ({
298
+ transactionDetails,
299
+ routeDetails,
300
+ options,
301
+ status,
302
+ routeId,
303
+ mainRouteId,
304
+ transferIndexToRouteKey,
305
+ relatedRoutes
306
+ }) => {
307
+ routeId ??= routeDetails?.id ?? "";
308
+ let currentRouteDetails = routeDetails ?? routeDetailsMap.get(routeId);
309
+ if (!routeId && currentRouteDetails == void 0) {
310
+ currentRouteDetails = initializeNewRouteDetails(options);
311
+ routeId = currentRouteDetails?.id;
312
+ }
313
+ transferIndexToRouteKey ??= currentRouteDetails?.transferIndexToRouteKey;
314
+ if (currentRouteDetails === void 0) {
315
+ throw new Error("No route details found");
316
+ }
317
+ transactionDetails ??= currentRouteDetails?.transactionDetails ?? [];
318
+ const txsRequired = currentRouteDetails?.txsRequired ?? options?.route?.txsRequired ?? 1;
319
+ if (currentRouteDetails?.status === "signing" && status === "pending") {
320
+ currentRouteDetails.txsSigned += 1;
321
+ }
322
+ const transferEvents = routeDetails?.transferEvents ?? getTransferEventsFromTxStatusResponse(
323
+ transactionDetails.map((tx) => tx.statusResponse).filter((status2) => status2 !== void 0)
324
+ );
325
+ const allExpectedTxsStarted = transactionDetails.every(
326
+ (tx) => tx.txHash || tx.status === void 0
327
+ );
328
+ const allKnownDetailsHaveFinalStatus = transactionDetails.every(
329
+ (transaction) => isFinalState(transaction)
330
+ );
331
+ const isAllSettled = allExpectedTxsStarted && allKnownDetailsHaveFinalStatus;
332
+ const someTxSucceeded = transactionDetails.some((tx) => isSuccessState(tx));
333
+ const someTxFailed = transactionDetails.some((tx) => !isSuccessState(tx));
334
+ const getRouteStatus = () => {
335
+ if (status) return status;
336
+ if (someTxSucceeded && !allExpectedTxsStarted) return "incomplete";
337
+ if (isAllSettled) {
338
+ if (!someTxFailed) {
339
+ return "completed";
340
+ } else if (someTxSucceeded && someTxFailed) {
341
+ return "incomplete";
342
+ } else if (someTxFailed) {
343
+ return "failed";
344
+ }
345
+ }
346
+ return currentRouteDetails?.status;
347
+ };
348
+ const transferAssetRelease = transactionDetails?.findLast(
349
+ (i) => i.statusResponse?.transferAssetRelease
350
+ )?.statusResponse?.transferAssetRelease;
351
+ const updatedRelatedRoutes = updateRelatedRoutes({
352
+ relatedRoutes: relatedRoutes ?? currentRouteDetails?.relatedRoutes ?? [],
353
+ transferIndexToRouteKey,
354
+ transactionDetails
355
+ });
356
+ const newRouteDetails = {
357
+ id: routeId,
358
+ timestamp: currentRouteDetails.timestamp,
359
+ status: getRouteStatus(),
360
+ route: getSimpleRoute(currentRouteDetails?.route ?? options?.route),
361
+ txsRequired,
362
+ transactionDetails,
363
+ transferEvents,
364
+ transferAssetRelease,
365
+ userAddresses: (currentRouteDetails?.userAddresses.length > 0 ? currentRouteDetails?.userAddresses : options?.userAddresses) ?? [],
366
+ txsSigned: currentRouteDetails?.txsSigned,
367
+ transferIndexToRouteKey,
368
+ mainRouteId: mainRouteId ?? currentRouteDetails?.mainRouteId,
369
+ relatedRoutes: updatedRelatedRoutes
370
+ };
371
+ const newRouteStatus = getRouteDetailsWithSimpleTransactionDetailsStatus(newRouteDetails);
372
+ const previousRouteStatus = getRouteDetailsWithSimpleTransactionDetailsStatus(currentRouteDetails);
373
+ if (options?.onRouteStatusUpdated && JSON.stringify(newRouteStatus) !== JSON.stringify(previousRouteStatus)) {
374
+ options?.onRouteStatusUpdated?.(newRouteStatus);
375
+ }
376
+ if (routeId) {
377
+ routeDetailsMap.set(routeId, newRouteDetails);
378
+ }
379
+ return newRouteDetails;
380
+ };
381
+ var getSimpleRoute = (route) => {
382
+ return {
383
+ usdAmountOut: route?.usdAmountOut,
384
+ usdAmountIn: route?.usdAmountIn,
385
+ amountIn: route?.amountIn,
386
+ amountOut: route?.amountOut,
387
+ sourceAssetDenom: route?.sourceAssetDenom,
388
+ sourceAssetChainId: route?.sourceAssetChainId,
389
+ destAssetDenom: route?.destAssetDenom,
390
+ destAssetChainId: route?.destAssetChainId,
391
+ estimatedRouteDurationSeconds: route?.estimatedRouteDurationSeconds
392
+ };
393
+ };
394
+ var getRouteDetailsWithSimpleTransactionDetailsStatus = (routeDetails) => {
395
+ return {
396
+ ...routeDetails,
397
+ transactionDetails: routeDetails.transactionDetails.map((txDetails) => {
398
+ const { statusResponse, ...rest } = txDetails;
399
+ const newTxDetails = {
400
+ ...rest,
401
+ status: txDetails?.status ?? getTransactionStatus(statusResponse?.transfers?.[0]?.state)
402
+ };
403
+ return newTxDetails;
404
+ })
405
+ };
406
+ };
407
+ var removeRoutesWithFinalStatus = () => {
408
+ routeDetailsMap.forEach((routeDetails, routeId) => {
409
+ if (routeDetails.status === "completed" || routeDetails.status === "failed" || routeDetails.status === "incomplete") {
410
+ routeDetailsMap.delete(routeId);
411
+ }
412
+ });
413
+ };
414
+ var convertTransactionStatusToRouteStatus = (transactionStatus2) => {
415
+ if (!transactionStatus2) return;
416
+ if (transactionStatus2 === "success") {
417
+ return "completed";
418
+ }
419
+ return transactionStatus2;
420
+ };
421
+ var updateRelatedRoutes = ({
422
+ relatedRoutes,
423
+ transferIndexToRouteKey,
424
+ transactionDetails
425
+ }) => {
426
+ let updatedRelatedRoutes = [
427
+ ...relatedRoutes.map((relatedRoute) => ({ ...relatedRoute }))
428
+ ];
429
+ if (!transferIndexToRouteKey) return updatedRelatedRoutes;
430
+ transactionDetails?.forEach((transaction) => {
431
+ Object.entries(transferIndexToRouteKey).forEach(([indexStr, routeKey]) => {
432
+ const index = Number(indexStr);
433
+ const state = transaction?.statusResponse?.transfers?.[index]?.state;
434
+ const status = convertTransactionStatusToRouteStatus(
435
+ getTransactionStatus(state)
436
+ );
437
+ const transferAssetRelease = transaction?.statusResponse?.transfers?.[index]?.transferAssetRelease;
438
+ const targetRoute = updatedRelatedRoutes.find(
439
+ (r) => r.routeKey === routeKey
440
+ );
441
+ if (targetRoute && state) {
442
+ targetRoute.status = status ?? "failed";
443
+ }
444
+ if (targetRoute && transferAssetRelease) {
445
+ targetRoute.transferAssetRelease = transferAssetRelease;
446
+ }
447
+ });
448
+ });
449
+ return updatedRelatedRoutes;
450
+ };
451
+
452
+ exports.executeAndSubscribeToRouteStatus = executeAndSubscribeToRouteStatus;
453
+ exports.getTransactionStatus = getTransactionStatus;
454
+ exports.subscribeToRouteStatus = subscribeToRouteStatus;
455
+ exports.updateRouteDetails = updateRouteDetails;
@@ -0,0 +1,214 @@
1
+ 'use strict';
2
+
3
+ var chunkHHZGD62Y_cjs = require('./chunk-HHZGD62Y.cjs');
4
+ var chunkUIQML2XG_cjs = require('./chunk-UIQML2XG.cjs');
5
+ var chunkOZUCMWNE_cjs = require('./chunk-OZUCMWNE.cjs');
6
+ var chunkLUVMRHAJ_cjs = require('./chunk-LUVMRHAJ.cjs');
7
+ var chunkERGJBZUC_cjs = require('./chunk-ERGJBZUC.cjs');
8
+ require('uuid');
9
+
10
+ var executeMultipleRoutes = async (options) => {
11
+ const {
12
+ route,
13
+ userAddresses,
14
+ appendCosmosMsgs,
15
+ postRouteHandler,
16
+ slippageTolerancePercent,
17
+ ...restOptions
18
+ } = options;
19
+ const addressList = {};
20
+ for (const [routeKey, routeValue] of Object.entries(route)) {
21
+ const _userAddresses = userAddresses[routeKey];
22
+ if (_userAddresses === void 0) {
23
+ throw new Error(
24
+ `executeMultipleRoutes error: no user addresses found for route: ${routeKey}`
25
+ );
26
+ }
27
+ const routeAddressList = await chunkHHZGD62Y_cjs.createValidAddressList({
28
+ userAddresses: _userAddresses,
29
+ route: routeValue
30
+ });
31
+ addressList[routeKey] = routeAddressList;
32
+ }
33
+ const msgsResponses = await Promise.all(
34
+ Object.entries(route).map(async ([routeKey, routeValue]) => {
35
+ const routeAddressList = addressList[routeKey];
36
+ if (routeAddressList === void 0) {
37
+ throw new Error(
38
+ `executeMultipleRoutes error: address list not found for route ${routeKey}`
39
+ );
40
+ }
41
+ return await chunkOZUCMWNE_cjs.messages({
42
+ timeoutSeconds: options.timeoutSeconds,
43
+ amountIn: routeValue?.amountIn,
44
+ amountOut: routeValue.estimatedAmountOut || "0",
45
+ sourceAssetChainId: routeValue?.sourceAssetChainId,
46
+ sourceAssetDenom: routeValue?.sourceAssetDenom,
47
+ destAssetChainId: routeValue?.destAssetChainId,
48
+ destAssetDenom: routeValue?.destAssetDenom,
49
+ operations: routeValue?.operations,
50
+ addressList: routeAddressList,
51
+ slippageTolerancePercent: slippageTolerancePercent?.[routeKey] || "1",
52
+ chainIdsToAffiliates: chunkERGJBZUC_cjs.ApiState.chainIdsToAffiliates,
53
+ postRouteHandler: postRouteHandler?.[routeKey],
54
+ feePayerAddress: options.svmFeePayer?.address
55
+ });
56
+ })
57
+ );
58
+ let msgsRecord = {};
59
+ msgsResponses.forEach((msg, index2) => {
60
+ const routeKey = Object.keys(route)[index2];
61
+ if (!routeKey) {
62
+ throw new Error(
63
+ `executeMultipleRoutes error: route key not found for index ${index2}`
64
+ );
65
+ }
66
+ const addedCosmosMsgs = appendCosmosMsgs?.[routeKey];
67
+ if (addedCosmosMsgs) {
68
+ Object.entries(addedCosmosMsgs).forEach(([chainId, msgs]) => {
69
+ const txIndex = msg?.txs?.findIndex(
70
+ (tx2) => "cosmosTx" in tx2 && tx2.cosmosTx.chainId === chainId
71
+ );
72
+ if (txIndex === void 0 || txIndex === -1) return;
73
+ const tx = msg?.txs?.[txIndex];
74
+ if (tx && "cosmosTx" in tx) {
75
+ tx.cosmosTx.msgs?.unshift(...msgs);
76
+ }
77
+ });
78
+ }
79
+ msgsRecord[routeKey] = msg;
80
+ });
81
+ let transferIndexToRouteKey = void 0;
82
+ const cosmosTxIndex0Map = /* @__PURE__ */ new Map();
83
+ let transferIndex = 0;
84
+ for (const [routeKey, msgs] of Object.entries(msgsRecord)) {
85
+ const firstTx = msgs?.txs?.[0];
86
+ if (firstTx && "cosmosTx" in firstTx) {
87
+ const { chainId, msgs: firstTxMsgs } = firstTx.cosmosTx;
88
+ if (!transferIndexToRouteKey) {
89
+ transferIndexToRouteKey = {};
90
+ }
91
+ transferIndexToRouteKey[transferIndex] = routeKey;
92
+ transferIndex++;
93
+ if (!cosmosTxIndex0Map.has(chainId)) {
94
+ cosmosTxIndex0Map.set(chainId, {
95
+ routeKey,
96
+ firstCosmosTx: firstTx.cosmosTx
97
+ });
98
+ } else {
99
+ const existing = cosmosTxIndex0Map.get(chainId);
100
+ if (existing && firstTxMsgs) {
101
+ const modifyTarget = msgsRecord[existing.routeKey]?.txs?.[0];
102
+ if (modifyTarget && "cosmosTx" in modifyTarget) {
103
+ modifyTarget.cosmosTx.msgs?.push(...firstTxMsgs);
104
+ msgsRecord[routeKey]?.txs?.shift();
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ Object.entries(msgsRecord).forEach(([routeKey, msgs]) => {
111
+ if (msgs?.txs?.length === 0) {
112
+ delete msgsRecord[routeKey];
113
+ }
114
+ });
115
+ let mainRouteId = void 0;
116
+ let msgsRecordIndexToRouteId = {};
117
+ let index = 0;
118
+ const transactionDetailsList = {};
119
+ const executeTransactionList = {};
120
+ const mergedMainAndSecondaryRoutes = Object.entries(msgsRecord).length !== Object.entries(route).length;
121
+ for (const [routeKey, msgsResponse] of Object.entries(msgsRecord)) {
122
+ const { id: routeId } = chunkUIQML2XG_cjs.updateRouteDetails({
123
+ status: "unconfirmed",
124
+ options: {
125
+ route: route[routeKey],
126
+ ...restOptions
127
+ },
128
+ mainRouteId,
129
+ transferIndexToRouteKey
130
+ });
131
+ msgsRecordIndexToRouteId[index] = routeId;
132
+ if (routeKey === "mainRoute") {
133
+ mainRouteId = routeId;
134
+ }
135
+ const { transactionDetails, executeTransaction: _executeTransaction } = await chunkHHZGD62Y_cjs.executeTransactions({
136
+ ...restOptions,
137
+ routeId,
138
+ txs: msgsResponse?.txs,
139
+ route: route[routeKey],
140
+ userAddresses: userAddresses[routeKey],
141
+ isMultiRoutes: true
142
+ });
143
+ const executeTransaction = async (index2) => {
144
+ const txResult = await _executeTransaction(index2);
145
+ if (routeKey !== "mainRoute" || mergedMainAndSecondaryRoutes) {
146
+ const relatedRoutes = Object.entries(route).filter(([key]) => key !== "mainRoute").map(([key, route2]) => ({ route: route2, routeKey: key, status: "pending" }));
147
+ chunkUIQML2XG_cjs.updateRouteDetails({
148
+ options: {
149
+ route: route[routeKey],
150
+ ...restOptions
151
+ },
152
+ routeId: mainRouteId,
153
+ transferIndexToRouteKey,
154
+ relatedRoutes
155
+ });
156
+ }
157
+ return txResult;
158
+ };
159
+ if (transactionDetails[0]?.chainType === "evm" /* Evm */) {
160
+ for (const [index2, transactionDetail] of transactionDetails.entries()) {
161
+ const txResult = await executeTransaction(index2);
162
+ if (txResult.txHash) {
163
+ const trackResponse = await chunkLUVMRHAJ_cjs.trackTransaction({
164
+ chainId: transactionDetail.chainId,
165
+ txHash: txResult.txHash,
166
+ ...options.trackTxPollingOptions
167
+ });
168
+ await options?.onTransactionTracked?.({
169
+ txHash: txResult.txHash,
170
+ chainId: transactionDetail.chainId,
171
+ explorerLink: trackResponse.explorerLink
172
+ });
173
+ transactionDetail.txHash = txResult.txHash;
174
+ transactionDetail.explorerLink = trackResponse.explorerLink;
175
+ }
176
+ }
177
+ } else {
178
+ executeTransactionList[index] = executeTransaction;
179
+ }
180
+ transactionDetailsList[index] = transactionDetails;
181
+ index++;
182
+ }
183
+ await Promise.all(
184
+ Object.entries(msgsRecord).map(([routeKey, msgsResponse], index2) => {
185
+ return chunkUIQML2XG_cjs.executeAndSubscribeToRouteStatus({
186
+ transactionDetails: transactionDetailsList[index2],
187
+ executeTransaction: executeTransactionList[index2],
188
+ routeId: msgsRecordIndexToRouteId[index2],
189
+ options: {
190
+ route: route[routeKey],
191
+ userAddresses: userAddresses[routeKey],
192
+ ...restOptions,
193
+ onRouteStatusUpdated: (routeStatus) => {
194
+ const relatedRoutes = Object.entries(route).filter(([key]) => key !== "mainRoute").map(([key, route2]) => ({ route: route2, routeKey: key, status: routeStatus.status }));
195
+ if (routeKey !== "mainRoute") {
196
+ chunkUIQML2XG_cjs.updateRouteDetails({
197
+ options: {
198
+ route: route[routeKey],
199
+ ...restOptions
200
+ },
201
+ routeId: mainRouteId,
202
+ transferIndexToRouteKey,
203
+ relatedRoutes
204
+ });
205
+ }
206
+ options.onRouteStatusUpdated?.(routeStatus);
207
+ }
208
+ }
209
+ });
210
+ })
211
+ );
212
+ };
213
+
214
+ exports.executeMultipleRoutes = executeMultipleRoutes;