@skip-go/client 1.5.2 → 1.5.3-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 (155) hide show
  1. package/dist/cjs/api/getAssets.cjs +5 -5
  2. package/dist/cjs/api/getAssetsBetweenChains.cjs +4 -4
  3. package/dist/cjs/api/getBridges.cjs +4 -4
  4. package/dist/cjs/api/getChains.cjs +4 -4
  5. package/dist/cjs/api/getVenues.cjs +4 -4
  6. package/dist/cjs/api/postAssetsFromSource.cjs +5 -5
  7. package/dist/cjs/api/postBalances.cjs +4 -4
  8. package/dist/cjs/api/postIbcOriginAssets.cjs +4 -4
  9. package/dist/cjs/api/postMessages.cjs +4 -4
  10. package/dist/cjs/api/postMessagesDirect.cjs +4 -4
  11. package/dist/cjs/api/postRecommendAssets.cjs +4 -4
  12. package/dist/cjs/api/postRoute.cjs +4 -4
  13. package/dist/cjs/api/postSubmitTransaction.cjs +4 -4
  14. package/dist/cjs/api/postTrackTransaction.cjs +4 -4
  15. package/dist/cjs/api/postTransactionStatus.cjs +4 -4
  16. package/dist/cjs/{chunk-EI4ZWAEU.cjs → chunk-262HFM6V.cjs} +2 -2
  17. package/dist/cjs/{chunk-XPQRSO4J.cjs → chunk-3NHW3XWK.cjs} +2 -2
  18. package/dist/cjs/{chunk-XEBVLUYW.cjs → chunk-4MV4GLIA.cjs} +2 -2
  19. package/dist/cjs/{chunk-MHVCR4QO.cjs → chunk-4NGHNHAS.cjs} +6 -6
  20. package/dist/cjs/{chunk-3IWLZ562.cjs → chunk-7SZZBUBD.cjs} +3 -3
  21. package/dist/cjs/{chunk-HEYFLFKD.cjs → chunk-ARCCHERF.cjs} +55 -55
  22. package/dist/cjs/{chunk-R3TSJPKH.cjs → chunk-AW6IQ7JH.cjs} +2 -2
  23. package/dist/cjs/{chunk-7D433NQ5.cjs → chunk-BCX2D6TE.cjs} +91 -18
  24. package/dist/cjs/{chunk-D57TNRV3.cjs → chunk-BQDOKZFX.cjs} +15 -15
  25. package/dist/cjs/{chunk-LARLMUFZ.cjs → chunk-CZKIE576.cjs} +10 -10
  26. package/dist/cjs/chunk-EVEVOW2U.cjs +2179 -0
  27. package/dist/cjs/{chunk-JUKPQLLQ.cjs → chunk-FF5UWES6.cjs} +4 -4
  28. package/dist/cjs/chunk-GGSF5JZH.cjs +101 -0
  29. package/dist/cjs/chunk-GWRZ6MPC.cjs +2179 -0
  30. package/dist/cjs/{chunk-Q33F7U2Y.cjs → chunk-H2T4LMS2.cjs} +10 -10
  31. package/dist/cjs/{chunk-MMGVGXA5.cjs → chunk-HFEMNOJS.cjs} +7 -1
  32. package/dist/cjs/chunk-I6VYDEUV.cjs +454 -0
  33. package/dist/cjs/{chunk-66VIHDGM.cjs → chunk-J7HZ6VJE.cjs} +10 -10
  34. package/dist/cjs/{chunk-MFJ6S6TL.cjs → chunk-JWWJIJUE.cjs} +2 -2
  35. package/dist/cjs/{chunk-5RP766TT.cjs → chunk-KWH6S7PB.cjs} +6 -6
  36. package/dist/cjs/{chunk-ULD54VE4.cjs → chunk-MOWOIPUG.cjs} +4 -4
  37. package/dist/cjs/{chunk-2MAYN27U.cjs → chunk-PLO5CVGN.cjs} +2 -2
  38. package/dist/cjs/{chunk-5HZLL5KD.cjs → chunk-QAHHTQ7V.cjs} +4 -4
  39. package/dist/cjs/{chunk-AJYZ5GAD.cjs → chunk-RBM66GW6.cjs} +2 -2
  40. package/dist/cjs/{chunk-N2RG3CRN.cjs → chunk-S3BKLN4L.cjs} +2 -2
  41. package/dist/cjs/{chunk-KPV3PGBG.cjs → chunk-T5EGKQAT.cjs} +2 -2
  42. package/dist/cjs/{chunk-GO4BJ6G2.cjs → chunk-UY5LWG5D.cjs} +2 -2
  43. package/dist/cjs/chunk-W6ID22B6.cjs +24 -0
  44. package/dist/cjs/{chunk-4R6OCWRR.cjs → chunk-WKYP2NMS.cjs} +8 -6
  45. package/dist/cjs/{chunk-VMWCRZVT.cjs → chunk-XCFPRLX3.cjs} +8 -8
  46. package/dist/cjs/{chunk-XDKONUY6.cjs → chunk-ZBJZTBIW.cjs} +2 -2
  47. package/dist/cjs/index.cjs +188 -250
  48. package/dist/cjs/public-functions/executeMultipleRoutes.cjs +26 -16
  49. package/dist/cjs/public-functions/executeRoute.cjs +26 -16
  50. package/dist/cjs/public-functions/getEvmGasAmountForMessage.cjs +1 -1
  51. package/dist/cjs/public-functions/getFeeInfoForChain.cjs +5 -6
  52. package/dist/cjs/public-functions/getRecommendedGasPrice.cjs +7 -8
  53. package/dist/cjs/public-functions/getRouteWithGasOnReceive.cjs +39 -0
  54. package/dist/cjs/public-functions/getSigningStargateClient.cjs +5 -5
  55. package/dist/cjs/public-functions/setApiOptions.cjs +4 -4
  56. package/dist/cjs/public-functions/setClientOptions.cjs +5 -5
  57. package/dist/cjs/public-functions/subscribeToRouteStatus.cjs +9 -9
  58. package/dist/cjs/public-functions/validateCosmosGasBalance.cjs +7 -7
  59. package/dist/cjs/public-functions/waitForTransaction.cjs +6 -6
  60. package/dist/esm/api/getAssets.d.ts +1 -1
  61. package/dist/esm/api/getAssets.js +3 -3
  62. package/dist/esm/api/getAssetsBetweenChains.d.ts +21 -21
  63. package/dist/esm/api/getAssetsBetweenChains.js +3 -3
  64. package/dist/esm/api/getBridges.d.ts +1 -1
  65. package/dist/esm/api/getBridges.js +3 -3
  66. package/dist/esm/api/getChains.d.ts +1 -1
  67. package/dist/esm/api/getChains.js +3 -3
  68. package/dist/esm/api/getVenues.js +3 -3
  69. package/dist/esm/api/postAssetsFromSource.d.ts +1 -1
  70. package/dist/esm/api/postAssetsFromSource.js +4 -4
  71. package/dist/esm/api/postBalances.d.ts +2 -2
  72. package/dist/esm/api/postBalances.js +3 -3
  73. package/dist/esm/api/postIbcOriginAssets.d.ts +10 -10
  74. package/dist/esm/api/postIbcOriginAssets.js +3 -3
  75. package/dist/esm/api/postMessages.d.ts +12 -12
  76. package/dist/esm/api/postMessages.js +3 -3
  77. package/dist/esm/api/postMessagesDirect.d.ts +163 -161
  78. package/dist/esm/api/postMessagesDirect.js +3 -3
  79. package/dist/esm/api/postRecommendAssets.d.ts +11 -11
  80. package/dist/esm/api/postRecommendAssets.js +3 -3
  81. package/dist/esm/api/postRoute.d.ts +161 -159
  82. package/dist/esm/api/postRoute.js +3 -3
  83. package/dist/esm/api/postSubmitTransaction.d.ts +2 -2
  84. package/dist/esm/api/postSubmitTransaction.js +3 -3
  85. package/dist/esm/api/postTrackTransaction.d.ts +2 -2
  86. package/dist/esm/api/postTrackTransaction.js +3 -3
  87. package/dist/esm/api/postTransactionStatus.d.ts +36 -36
  88. package/dist/esm/api/postTransactionStatus.js +3 -3
  89. package/dist/esm/{callbacks-DCqqd0D9.d.ts → callbacks-C-KUJnDv.d.ts} +34 -4
  90. package/dist/esm/{chunk-MFHZBJGQ.js → chunk-3WFXBPS2.js} +1 -1
  91. package/dist/esm/{chunk-B36HVX2L.js → chunk-44IX6KPJ.js} +1 -1
  92. package/dist/esm/{chunk-A4MFVNZO.js → chunk-47HN6VKU.js} +3 -3
  93. package/dist/esm/{chunk-WSAZDCXR.js → chunk-5IXH2QPF.js} +86 -16
  94. package/dist/esm/{chunk-Z2HSHJLW.js → chunk-6M7N6EAO.js} +3 -3
  95. package/dist/esm/{chunk-6HKZYODA.js → chunk-AUNRER4I.js} +1 -1
  96. package/dist/esm/{chunk-CP55HI6R.js → chunk-DL374PFE.js} +4 -4
  97. package/dist/esm/chunk-FDRLM2JD.js +431 -0
  98. package/dist/esm/{chunk-H2HTF2UF.js → chunk-FNTPI2AV.js} +1 -1
  99. package/dist/esm/{chunk-BNMWBXN3.js → chunk-H3MY23AH.js} +1 -1
  100. package/dist/esm/{chunk-W5AA7QOQ.js → chunk-HDW6XFWX.js} +1 -1
  101. package/dist/esm/{chunk-RXZJUE4K.js → chunk-HELQO7PA.js} +2 -2
  102. package/dist/esm/{chunk-JQOJIEZA.js → chunk-IGK7LJCM.js} +8 -8
  103. package/dist/esm/{chunk-45B6E7AT.js → chunk-IHSSWY3M.js} +1 -1
  104. package/dist/esm/{chunk-DQXGZGNJ.js → chunk-JNVGNIOE.js} +2 -2
  105. package/dist/esm/{chunk-VQ5SIQWU.js → chunk-JYYCFKB4.js} +8 -7
  106. package/dist/esm/chunk-KNXMSLOB.js +1 -1
  107. package/dist/esm/{chunk-HPA2XUA3.js → chunk-KXQ2ASHQ.js} +1 -1
  108. package/dist/esm/{chunk-263RYJUL.js → chunk-MYGJGC62.js} +1 -1
  109. package/dist/esm/{chunk-VG3G5QHN.js → chunk-RFJYCJK4.js} +1 -1
  110. package/dist/esm/{chunk-4YTLUDRU.js → chunk-RHLE3EW7.js} +6 -6
  111. package/dist/esm/chunk-RJ35JBT4.js +2154 -0
  112. package/dist/esm/{chunk-GU3UHER5.js → chunk-SOVU5NCL.js} +2 -2
  113. package/dist/esm/{chunk-7WXPBTSR.js → chunk-TNIGHYH2.js} +3 -3
  114. package/dist/esm/{chunk-EJZGYHGH.js → chunk-UBVBVJPY.js} +1 -1
  115. package/dist/esm/chunk-UIDIKXMB.js +1 -1
  116. package/dist/esm/{chunk-X3PQKUOS.js → chunk-VGCTTJO7.js} +7 -1
  117. package/dist/esm/{chunk-TLVHKYQ3.js → chunk-VWOMKMH2.js} +1 -1
  118. package/dist/esm/chunk-X2IBEHMZ.js +2154 -0
  119. package/dist/esm/chunk-XHLXJGVB.js +22 -0
  120. package/dist/esm/{chunk-AGHQ7SIE.js → chunk-YGQ4NKTM.js} +1 -1
  121. package/dist/esm/{chunk-A35RPDUV.js → chunk-YLVUKXLR.js} +1 -1
  122. package/dist/esm/chunk-YWG4XR5A.js +98 -0
  123. package/dist/esm/{client-types-BSZasIDd.d.ts → client-types-CGMuZ3zo.d.ts} +2 -2
  124. package/dist/esm/{generateApi-CwM4Ca30.d.ts → generateApi-D_-Gso-x.d.ts} +1 -1
  125. package/dist/esm/index.d.ts +166 -143
  126. package/dist/esm/index.js +25 -174
  127. package/dist/esm/public-functions/executeMultipleRoutes.d.ts +30 -10
  128. package/dist/esm/public-functions/executeMultipleRoutes.js +25 -15
  129. package/dist/esm/public-functions/executeRoute.d.ts +4 -4
  130. package/dist/esm/public-functions/executeRoute.js +25 -15
  131. package/dist/esm/public-functions/getCosmosGasAmountForMessage.d.ts +1 -1
  132. package/dist/esm/public-functions/getEvmGasAmountForMessage.d.ts +3 -3
  133. package/dist/esm/public-functions/getEvmGasAmountForMessage.js +1 -1
  134. package/dist/esm/public-functions/getFeeInfoForChain.d.ts +1 -1
  135. package/dist/esm/public-functions/getFeeInfoForChain.js +4 -5
  136. package/dist/esm/public-functions/getRecommendedGasPrice.js +6 -7
  137. package/dist/esm/public-functions/getRouteWithGasOnReceive.d.ts +20 -0
  138. package/dist/esm/public-functions/getRouteWithGasOnReceive.js +30 -0
  139. package/dist/esm/public-functions/getSigningStargateClient.js +4 -4
  140. package/dist/esm/public-functions/setApiOptions.d.ts +1 -1
  141. package/dist/esm/public-functions/setApiOptions.js +3 -3
  142. package/dist/esm/public-functions/setClientOptions.d.ts +4 -4
  143. package/dist/esm/public-functions/setClientOptions.js +4 -4
  144. package/dist/esm/public-functions/subscribeToRouteStatus.d.ts +4 -4
  145. package/dist/esm/public-functions/subscribeToRouteStatus.js +5 -5
  146. package/dist/esm/public-functions/validateCosmosGasBalance.d.ts +4 -4
  147. package/dist/esm/public-functions/validateCosmosGasBalance.js +6 -6
  148. package/dist/esm/public-functions/waitForTransaction.d.ts +38 -38
  149. package/dist/esm/public-functions/waitForTransaction.js +5 -5
  150. package/dist/esm/setClientOptions-C8g92xTm.d.ts +76 -0
  151. package/dist/esm/{swaggerTypes-Bh6hu5Q-.d.ts → swaggerTypes-B_jKfpvz.d.ts} +154 -132
  152. package/package.json +1 -1
  153. package/dist/esm/setClientOptions-CrXIODm0.d.ts +0 -19
  154. package/dist/cjs/{chunk-IDDRJJO5.cjs → chunk-DLT6Q6RB.cjs} +1 -1
  155. package/dist/esm/{chunk-OQDBWVET.js → chunk-QL423UEF.js} +1 -1
@@ -0,0 +1,2179 @@
1
+ 'use strict';
2
+
3
+ var chunkBCX2D6TE_cjs = require('./chunk-BCX2D6TE.cjs');
4
+ var chunkCZKIE576_cjs = require('./chunk-CZKIE576.cjs');
5
+ var chunkKM2D7PJL_cjs = require('./chunk-KM2D7PJL.cjs');
6
+ var chunkF3EB2AQG_cjs = require('./chunk-F3EB2AQG.cjs');
7
+ var chunkWKYP2NMS_cjs = require('./chunk-WKYP2NMS.cjs');
8
+ var chunkGGSF5JZH_cjs = require('./chunk-GGSF5JZH.cjs');
9
+ var chunkJ7HZ6VJE_cjs = require('./chunk-J7HZ6VJE.cjs');
10
+ var chunkKSJ5QYMR_cjs = require('./chunk-KSJ5QYMR.cjs');
11
+ var chunk3NHW3XWK_cjs = require('./chunk-3NHW3XWK.cjs');
12
+ var chunk7SZZBUBD_cjs = require('./chunk-7SZZBUBD.cjs');
13
+ var chunk262HFM6V_cjs = require('./chunk-262HFM6V.cjs');
14
+ var chunkPLO5CVGN_cjs = require('./chunk-PLO5CVGN.cjs');
15
+ var chunkT5EGKQAT_cjs = require('./chunk-T5EGKQAT.cjs');
16
+ var chunkQAHHTQ7V_cjs = require('./chunk-QAHHTQ7V.cjs');
17
+ var chunkHFEMNOJS_cjs = require('./chunk-HFEMNOJS.cjs');
18
+ var stargate = require('@cosmjs/stargate');
19
+ var tx_js = require('cosmjs-types/cosmos/tx/v1beta1/tx.js');
20
+ var protoSigning = require('@cosmjs/proto-signing');
21
+ var amino = require('@cosmjs/amino');
22
+ var encoding = require('@cosmjs/encoding');
23
+ var keys_js = require('cosmjs-types/cosmos/crypto/secp256k1/keys.js');
24
+ var any_js = require('cosmjs-types/google/protobuf/any.js');
25
+ var math = require('@cosmjs/math');
26
+ var signing_js = require('cosmjs-types/cosmos/tx/signing/v1beta1/signing.js');
27
+ var viem = require('viem');
28
+ var web3_js = require('@solana/web3.js');
29
+ var bech32 = require('bech32');
30
+ var chains = require('viem/chains');
31
+
32
+ // src/types/swaggerTypesJson.ts
33
+ var AutopilotActionJson = /* @__PURE__ */ ((AutopilotActionJson2) => {
34
+ AutopilotActionJson2["LIQUID_STAKE"] = "LIQUID_STAKE";
35
+ AutopilotActionJson2["CLAIM"] = "CLAIM";
36
+ return AutopilotActionJson2;
37
+ })(AutopilotActionJson || {});
38
+ var AxelarTransferStateJson = /* @__PURE__ */ ((AxelarTransferStateJson2) => {
39
+ AxelarTransferStateJson2["AXELAR_TRANSFER_UNKNOWN"] = "AXELAR_TRANSFER_UNKNOWN";
40
+ AxelarTransferStateJson2["AXELAR_TRANSFER_PENDING_CONFIRMATION"] = "AXELAR_TRANSFER_PENDING_CONFIRMATION";
41
+ AxelarTransferStateJson2["AXELAR_TRANSFER_PENDING_RECEIPT"] = "AXELAR_TRANSFER_PENDING_RECEIPT";
42
+ AxelarTransferStateJson2["AXELAR_TRANSFER_SUCCESS"] = "AXELAR_TRANSFER_SUCCESS";
43
+ AxelarTransferStateJson2["AXELAR_TRANSFER_FAILURE"] = "AXELAR_TRANSFER_FAILURE";
44
+ return AxelarTransferStateJson2;
45
+ })(AxelarTransferStateJson || {});
46
+ var AxelarTransferTypeJson = /* @__PURE__ */ ((AxelarTransferTypeJson2) => {
47
+ AxelarTransferTypeJson2["AXELAR_TRANSFER_CONTRACT_CALL_WITH_TOKEN"] = "AXELAR_TRANSFER_CONTRACT_CALL_WITH_TOKEN";
48
+ AxelarTransferTypeJson2["AXELAR_TRANSFER_SEND_TOKEN"] = "AXELAR_TRANSFER_SEND_TOKEN";
49
+ return AxelarTransferTypeJson2;
50
+ })(AxelarTransferTypeJson || {});
51
+ var CCTPTransferStateJson = /* @__PURE__ */ ((CCTPTransferStateJson2) => {
52
+ CCTPTransferStateJson2["CCTP_TRANSFER_UNKNOWN"] = "CCTP_TRANSFER_UNKNOWN";
53
+ CCTPTransferStateJson2["CCTP_TRANSFER_SENT"] = "CCTP_TRANSFER_SENT";
54
+ CCTPTransferStateJson2["CCTP_TRANSFER_PENDING_CONFIRMATION"] = "CCTP_TRANSFER_PENDING_CONFIRMATION";
55
+ CCTPTransferStateJson2["CCTP_TRANSFER_CONFIRMED"] = "CCTP_TRANSFER_CONFIRMED";
56
+ CCTPTransferStateJson2["CCTP_TRANSFER_RECEIVED"] = "CCTP_TRANSFER_RECEIVED";
57
+ return CCTPTransferStateJson2;
58
+ })(CCTPTransferStateJson || {});
59
+ var StargateTransferStateJson = /* @__PURE__ */ ((StargateTransferStateJson2) => {
60
+ StargateTransferStateJson2["STARGATE_TRANSFER_UNKNOWN"] = "STARGATE_TRANSFER_UNKNOWN";
61
+ StargateTransferStateJson2["STARGATE_TRANSFER_SENT"] = "STARGATE_TRANSFER_SENT";
62
+ StargateTransferStateJson2["STARGATE_TRANSFER_PENDING_CONFIRMATION"] = "STARGATE_TRANSFER_PENDING_CONFIRMATION";
63
+ StargateTransferStateJson2["STARGATE_TRANSFER_CONFIRMED"] = "STARGATE_TRANSFER_CONFIRMED";
64
+ StargateTransferStateJson2["STARGATE_TRANSFER_RECEIVED"] = "STARGATE_TRANSFER_RECEIVED";
65
+ StargateTransferStateJson2["STARGATE_TRANSFER_FAILED"] = "STARGATE_TRANSFER_FAILED";
66
+ return StargateTransferStateJson2;
67
+ })(StargateTransferStateJson || {});
68
+ var GoFastTransferStateJson = /* @__PURE__ */ ((GoFastTransferStateJson2) => {
69
+ GoFastTransferStateJson2["GO_FAST_TRANSFER_UNKNOWN"] = "GO_FAST_TRANSFER_UNKNOWN";
70
+ GoFastTransferStateJson2["GO_FAST_TRANSFER_SENT"] = "GO_FAST_TRANSFER_SENT";
71
+ GoFastTransferStateJson2["GO_FAST_POST_ACTION_FAILED"] = "GO_FAST_POST_ACTION_FAILED";
72
+ GoFastTransferStateJson2["GO_FAST_TRANSFER_TIMEOUT"] = "GO_FAST_TRANSFER_TIMEOUT";
73
+ GoFastTransferStateJson2["GO_FAST_TRANSFER_FILLED"] = "GO_FAST_TRANSFER_FILLED";
74
+ GoFastTransferStateJson2["GO_FAST_TRANSFER_REFUNDED"] = "GO_FAST_TRANSFER_REFUNDED";
75
+ return GoFastTransferStateJson2;
76
+ })(GoFastTransferStateJson || {});
77
+ var BridgeTypeJson = /* @__PURE__ */ ((BridgeTypeJson2) => {
78
+ BridgeTypeJson2["IBC"] = "IBC";
79
+ BridgeTypeJson2["AXELAR"] = "AXELAR";
80
+ BridgeTypeJson2["CCTP"] = "CCTP";
81
+ BridgeTypeJson2["HYPERLANE"] = "HYPERLANE";
82
+ BridgeTypeJson2["OPINIT"] = "OPINIT";
83
+ BridgeTypeJson2["GO_FAST"] = "GO_FAST";
84
+ BridgeTypeJson2["STARGATE"] = "STARGATE";
85
+ BridgeTypeJson2["LAYER_ZERO"] = "LAYER_ZERO";
86
+ BridgeTypeJson2["EUREKA"] = "EUREKA";
87
+ return BridgeTypeJson2;
88
+ })(BridgeTypeJson || {});
89
+ var ChainTypeJson = /* @__PURE__ */ ((ChainTypeJson2) => {
90
+ ChainTypeJson2["Cosmos"] = "cosmos";
91
+ ChainTypeJson2["Evm"] = "evm";
92
+ ChainTypeJson2["Svm"] = "svm";
93
+ return ChainTypeJson2;
94
+ })(ChainTypeJson || {});
95
+ var ContractCallWithTokenErrorTypeJson = /* @__PURE__ */ ((ContractCallWithTokenErrorTypeJson2) => {
96
+ ContractCallWithTokenErrorTypeJson2["CONTRACT_CALL_WITH_TOKEN_EXECUTION_ERROR"] = "CONTRACT_CALL_WITH_TOKEN_EXECUTION_ERROR";
97
+ return ContractCallWithTokenErrorTypeJson2;
98
+ })(ContractCallWithTokenErrorTypeJson || {});
99
+ var HyperlaneTransferStateJson = /* @__PURE__ */ ((HyperlaneTransferStateJson2) => {
100
+ HyperlaneTransferStateJson2["HYPERLANE_TRANSFER_UNKNOWN"] = "HYPERLANE_TRANSFER_UNKNOWN";
101
+ HyperlaneTransferStateJson2["HYPERLANE_TRANSFER_SENT"] = "HYPERLANE_TRANSFER_SENT";
102
+ HyperlaneTransferStateJson2["HYPERLANE_TRANSFER_FAILED"] = "HYPERLANE_TRANSFER_FAILED";
103
+ HyperlaneTransferStateJson2["HYPERLANE_TRANSFER_RECEIVED"] = "HYPERLANE_TRANSFER_RECEIVED";
104
+ return HyperlaneTransferStateJson2;
105
+ })(HyperlaneTransferStateJson || {});
106
+ var PacketErrorTypeJson = /* @__PURE__ */ ((PacketErrorTypeJson2) => {
107
+ PacketErrorTypeJson2["PACKET_ERROR_UNKNOWN"] = "PACKET_ERROR_UNKNOWN";
108
+ PacketErrorTypeJson2["PACKET_ERROR_ACKNOWLEDGEMENT"] = "PACKET_ERROR_ACKNOWLEDGEMENT";
109
+ PacketErrorTypeJson2["PACKET_ERROR_TIMEOUT"] = "PACKET_ERROR_TIMEOUT";
110
+ return PacketErrorTypeJson2;
111
+ })(PacketErrorTypeJson || {});
112
+ var ReasonJson = /* @__PURE__ */ ((ReasonJson2) => {
113
+ ReasonJson2["UNKNOWN"] = "UNKNOWN";
114
+ ReasonJson2["MOST_LIQUID"] = "MOST_LIQUID";
115
+ ReasonJson2["BASE_TOKEN"] = "BASE_TOKEN";
116
+ ReasonJson2["DIRECT"] = "DIRECT";
117
+ return ReasonJson2;
118
+ })(ReasonJson || {});
119
+ var RoutePriceWarningTypeJson = /* @__PURE__ */ ((RoutePriceWarningTypeJson2) => {
120
+ RoutePriceWarningTypeJson2["LOW_INFO_WARNING"] = "LOW_INFO_WARNING";
121
+ RoutePriceWarningTypeJson2["BAD_PRICE_WARNING"] = "BAD_PRICE_WARNING";
122
+ return RoutePriceWarningTypeJson2;
123
+ })(RoutePriceWarningTypeJson || {});
124
+ var SendTokenErrorTypeJson = /* @__PURE__ */ ((SendTokenErrorTypeJson2) => {
125
+ SendTokenErrorTypeJson2["SEND_TOKEN_EXECUTION_ERROR"] = "SEND_TOKEN_EXECUTION_ERROR";
126
+ return SendTokenErrorTypeJson2;
127
+ })(SendTokenErrorTypeJson || {});
128
+ var StatusErrorTypeJson = /* @__PURE__ */ ((StatusErrorTypeJson2) => {
129
+ StatusErrorTypeJson2["STATUS_ERROR_UNKNOWN"] = "STATUS_ERROR_UNKNOWN";
130
+ StatusErrorTypeJson2["STATUS_ERROR_TRANSACTION_EXECUTION"] = "STATUS_ERROR_TRANSACTION_EXECUTION";
131
+ StatusErrorTypeJson2["STATUS_ERROR_INDEXING"] = "STATUS_ERROR_INDEXING";
132
+ StatusErrorTypeJson2["STATUS_ERROR_TRANSFER"] = "STATUS_ERROR_TRANSFER";
133
+ return StatusErrorTypeJson2;
134
+ })(StatusErrorTypeJson || {});
135
+ var TransactionStateJson = /* @__PURE__ */ ((TransactionStateJson2) => {
136
+ TransactionStateJson2["STATE_SUBMITTED"] = "STATE_SUBMITTED";
137
+ TransactionStateJson2["STATE_PENDING"] = "STATE_PENDING";
138
+ TransactionStateJson2["STATE_ABANDONED"] = "STATE_ABANDONED";
139
+ TransactionStateJson2["STATE_COMPLETED_SUCCESS"] = "STATE_COMPLETED_SUCCESS";
140
+ TransactionStateJson2["STATE_COMPLETED_ERROR"] = "STATE_COMPLETED_ERROR";
141
+ TransactionStateJson2["STATE_PENDING_ERROR"] = "STATE_PENDING_ERROR";
142
+ return TransactionStateJson2;
143
+ })(TransactionStateJson || {});
144
+ var OPInitTransferStateJson = /* @__PURE__ */ ((OPInitTransferStateJson2) => {
145
+ OPInitTransferStateJson2["OPINIT_TRANSFER_UNKNOWN"] = "OPINIT_TRANSFER_UNKNOWN";
146
+ OPInitTransferStateJson2["OPINIT_TRANSFER_SENT"] = "OPINIT_TRANSFER_SENT";
147
+ OPInitTransferStateJson2["OPINIT_TRANSFER_RECEIVED"] = "OPINIT_TRANSFER_RECEIVED";
148
+ return OPInitTransferStateJson2;
149
+ })(OPInitTransferStateJson || {});
150
+ var LayerZeroTransferStateJson = /* @__PURE__ */ ((LayerZeroTransferStateJson2) => {
151
+ LayerZeroTransferStateJson2["LAYER_ZERO_TRANSFER_UNKNOWN"] = "LAYER_ZERO_TRANSFER_UNKNOWN";
152
+ LayerZeroTransferStateJson2["LAYER_ZERO_TRANSFER_SENT"] = "LAYER_ZERO_TRANSFER_SENT";
153
+ LayerZeroTransferStateJson2["LAYER_ZERO_TRANSFER_WAITING_FOR_COMPOSE"] = "LAYER_ZERO_TRANSFER_WAITING_FOR_COMPOSE";
154
+ LayerZeroTransferStateJson2["LAYER_ZERO_TRANSFER_RECEIVED"] = "LAYER_ZERO_TRANSFER_RECEIVED";
155
+ LayerZeroTransferStateJson2["LAYER_ZERO_TRANSFER_FAILED"] = "LAYER_ZERO_TRANSFER_FAILED";
156
+ return LayerZeroTransferStateJson2;
157
+ })(LayerZeroTransferStateJson || {});
158
+ var TransferStateJson = /* @__PURE__ */ ((TransferStateJson2) => {
159
+ TransferStateJson2["TRANSFER_UNKNOWN"] = "TRANSFER_UNKNOWN";
160
+ TransferStateJson2["TRANSFER_PENDING"] = "TRANSFER_PENDING";
161
+ TransferStateJson2["TRANSFER_RECEIVED"] = "TRANSFER_RECEIVED";
162
+ TransferStateJson2["TRANSFER_SUCCESS"] = "TRANSFER_SUCCESS";
163
+ TransferStateJson2["TRANSFER_FAILURE"] = "TRANSFER_FAILURE";
164
+ return TransferStateJson2;
165
+ })(TransferStateJson || {});
166
+ var FeeTypeJson = /* @__PURE__ */ ((FeeTypeJson2) => {
167
+ FeeTypeJson2["SMART_RELAY"] = "SMART_RELAY";
168
+ return FeeTypeJson2;
169
+ })(FeeTypeJson || {});
170
+ var FeeBehaviorJson = /* @__PURE__ */ ((FeeBehaviorJson2) => {
171
+ FeeBehaviorJson2["FEE_BEHAVIOR_DEDUCTED"] = "FEE_BEHAVIOR_DEDUCTED";
172
+ FeeBehaviorJson2["FEE_BEHAVIOR_ADDITIONAL"] = "FEE_BEHAVIOR_ADDITIONAL";
173
+ return FeeBehaviorJson2;
174
+ })(FeeBehaviorJson || {});
175
+
176
+ // src/private-functions/getRestEndpointForChain.ts
177
+ var getRestEndpointForChain = async (chainId) => {
178
+ if (chunkQAHHTQ7V_cjs.ClientState.endpointOptions.getRestEndpointForChain) {
179
+ return chunkQAHHTQ7V_cjs.ClientState.endpointOptions.getRestEndpointForChain(chainId);
180
+ }
181
+ if (chunkQAHHTQ7V_cjs.ClientState.endpointOptions.endpoints && chunkQAHHTQ7V_cjs.ClientState.endpointOptions.endpoints[chainId]) {
182
+ const endpointOptions = chunkQAHHTQ7V_cjs.ClientState.endpointOptions.endpoints[chainId];
183
+ if (endpointOptions?.rest) {
184
+ return endpointOptions.rest;
185
+ }
186
+ }
187
+ const chain = chunkKSJ5QYMR_cjs.chains().find((chain2) => chain2.chainId === chainId);
188
+ if (!chain) {
189
+ throw new Error(
190
+ `getRestEndpointForChain error: failed to find chain id '${chainId}' in registry`
191
+ );
192
+ }
193
+ if (chain.apis?.rest?.length === 0 || !chain.apis?.rest) {
194
+ throw new Error(
195
+ `getRestEndpointForChain error: failed to find REST endpoint for chain id '${chainId}'`
196
+ );
197
+ }
198
+ const endpoints = chain.apis?.rest?.map((api) => api.address);
199
+ const endpoint = await chunkKSJ5QYMR_cjs.findFirstWorkingEndpoint(endpoints, "rest");
200
+ if (!endpoint) {
201
+ throw new Error(
202
+ `getRestEndpointForChain error: failed to find REST endpoint for chain id '${chainId}'`
203
+ );
204
+ }
205
+ return endpoint;
206
+ };
207
+
208
+ // src/private-functions/getAccountNumberAndSequence.ts
209
+ var getAccountNumberAndSequence = async (address, chainId) => {
210
+ if (chainId.includes("dymension")) {
211
+ return getAccountNumberAndSequenceFromDymension(address, chainId);
212
+ }
213
+ const endpoint = await chunkJ7HZ6VJE_cjs.getRpcEndpointForChain(chainId);
214
+ const client = chunkQAHHTQ7V_cjs.ClientState.signingStargateClientByChainId[chainId] ?? await stargate.StargateClient.connect(endpoint, {
215
+ accountParser: chunkJ7HZ6VJE_cjs.accountParser
216
+ });
217
+ const account = await client.getAccount(address);
218
+ if (!account) {
219
+ throw new Error("getAccountNumberAndSequence: failed to retrieve account");
220
+ }
221
+ client.disconnect();
222
+ return {
223
+ accountNumber: account.accountNumber,
224
+ sequence: account.sequence
225
+ };
226
+ };
227
+ var getAccountNumberAndSequenceFromDymension = async (address, chainId) => {
228
+ const endpoint = await getRestEndpointForChain(chainId);
229
+ const res = await fetch(
230
+ `${endpoint}/cosmos/auth/v1beta1/accounts/${address}`,
231
+ {
232
+ headers: {
233
+ "Content-Type": "application/json"
234
+ }
235
+ }
236
+ );
237
+ if (!res.ok) {
238
+ throw new Error(`Failed to fetch account data: ${res.statusText}`);
239
+ }
240
+ const jsonResponse = await res.json();
241
+ const response = chunkHFEMNOJS_cjs.toCamel(jsonResponse);
242
+ let sequence = 0;
243
+ let accountNumber = 0;
244
+ if (response.account.baseAccount) {
245
+ sequence = response.account.baseAccount.sequence;
246
+ accountNumber = response.account.baseAccount.accountNumber;
247
+ } else {
248
+ sequence = response.account.sequence;
249
+ accountNumber = response.account.accountNumber;
250
+ }
251
+ return {
252
+ accountNumber,
253
+ sequence
254
+ };
255
+ };
256
+ var pubkeyType = {
257
+ ethsecp256k1: "ethermint/PubKeyEthSecp256k1",
258
+ ...amino.pubkeyType
259
+ };
260
+
261
+ // src/amino/encoding.ts
262
+ function encodeEthSecp256k1Pubkey(pubkey) {
263
+ if (pubkey.length !== 33 || pubkey[0] !== 2 && pubkey[0] !== 3) {
264
+ throw new Error(
265
+ "Public key must be compressed secp256k1, i.e. 33 bytes starting with 0x02 or 0x03"
266
+ );
267
+ }
268
+ return {
269
+ type: pubkeyType.ethsecp256k1,
270
+ value: encoding.toBase64(pubkey)
271
+ };
272
+ }
273
+
274
+ // src/proto-signing/pubkey.ts
275
+ function makePubkeyAnyFromAccount(account, chainId) {
276
+ const isEthermint = chunkKSJ5QYMR_cjs.getIsEthermint(chainId);
277
+ const pubkey = isEthermint ? encodeEthSecp256k1Pubkey(account.pubkey) : amino.encodeSecp256k1Pubkey(account.pubkey);
278
+ const pubkeyAny = encodePubkeyToAny(pubkey, chainId, isEthermint);
279
+ return pubkeyAny;
280
+ }
281
+ function encodePubkeyToAny(pubkey, chainId, isEthermint) {
282
+ if (isEthermint) {
283
+ const pubkeyProto = keys_js.PubKey.fromPartial({
284
+ key: encoding.fromBase64(pubkey.value)
285
+ });
286
+ let typeUrl = "";
287
+ if (chainId?.includes("injective")) {
288
+ typeUrl = "/injective.crypto.v1beta1.ethsecp256k1.PubKey";
289
+ } else {
290
+ typeUrl = "/ethermint.crypto.v1.ethsecp256k1.PubKey";
291
+ }
292
+ return any_js.Any.fromPartial({
293
+ typeUrl,
294
+ value: Uint8Array.from(keys_js.PubKey.encode(pubkeyProto).finish())
295
+ });
296
+ } else {
297
+ const isInitia = chunkKSJ5QYMR_cjs.getIsInitia(chainId);
298
+ const pubkeyProto = keys_js.PubKey.fromPartial({
299
+ key: encoding.fromBase64(pubkey.value)
300
+ });
301
+ if (isInitia) {
302
+ return any_js.Any.fromPartial({
303
+ typeUrl: "/initia.crypto.v1beta1.ethsecp256k1.PubKey",
304
+ value: Uint8Array.from(keys_js.PubKey.encode(pubkeyProto).finish())
305
+ });
306
+ }
307
+ return protoSigning.encodePubkey(pubkey);
308
+ }
309
+ }
310
+ var signCosmosMessageDirect = async (options) => {
311
+ const {
312
+ signer,
313
+ signerAddress,
314
+ chainId,
315
+ cosmosMsgs,
316
+ fee,
317
+ signerData: { accountNumber, sequence, chainId: signerChainId }
318
+ } = options;
319
+ const accounts = await signer.getAccounts();
320
+ const accountFromSigner = accounts.find((account) => account.address === signerAddress);
321
+ if (!accountFromSigner) {
322
+ throw new Error("signCosmosMessageDirect error: failed to retrieve account from signer");
323
+ }
324
+ const messages2 = cosmosMsgs.map((cosmosMsg) => chunkKM2D7PJL_cjs.getEncodeObjectFromCosmosMessage(cosmosMsg));
325
+ const txBodyEncodeObject = {
326
+ typeUrl: "/cosmos.tx.v1beta1.TxBody",
327
+ value: {
328
+ messages: messages2
329
+ }
330
+ };
331
+ const txBodyBytes = chunkQAHHTQ7V_cjs.ClientState.registry.encode(txBodyEncodeObject);
332
+ const gasLimit = math.Int53.fromString(fee.gas).toNumber();
333
+ const pubkeyAny = makePubkeyAnyFromAccount(accountFromSigner, chainId);
334
+ const authInfoBytes = protoSigning.makeAuthInfoBytes(
335
+ [{ pubkey: pubkeyAny, sequence }],
336
+ fee.amount,
337
+ gasLimit,
338
+ fee.granter,
339
+ fee.payer
340
+ );
341
+ const signDoc = protoSigning.makeSignDoc(txBodyBytes, authInfoBytes, chainId, accountNumber);
342
+ const { signature, signed } = await signer.signDirect(signerAddress, signDoc);
343
+ return tx_js.TxRaw.fromPartial({
344
+ bodyBytes: signed.bodyBytes,
345
+ authInfoBytes: signed.authInfoBytes,
346
+ signatures: [encoding.fromBase64(signature.signature)]
347
+ });
348
+ };
349
+ var signCosmosMessageAmino = async (options) => {
350
+ const {
351
+ signer,
352
+ signerAddress,
353
+ chainId,
354
+ cosmosMsgs,
355
+ fee,
356
+ signerData: { accountNumber, sequence, chainId: signerChainId }
357
+ } = options;
358
+ const accounts = await signer.getAccounts();
359
+ const accountFromSigner = accounts.find(
360
+ (account) => account.address === signerAddress
361
+ );
362
+ if (!accountFromSigner) {
363
+ throw new Error(
364
+ "signCosmosMessageAmino: failed to retrieve account from signer"
365
+ );
366
+ }
367
+ const messages2 = cosmosMsgs.map(
368
+ (cosmosMsg) => chunkKM2D7PJL_cjs.getEncodeObjectFromCosmosMessage(cosmosMsg)
369
+ );
370
+ const signMode = signing_js.SignMode.SIGN_MODE_LEGACY_AMINO_JSON;
371
+ const msgs = messages2.map((msg) => chunkQAHHTQ7V_cjs.ClientState.aminoTypes.toAmino(msg));
372
+ const signDoc = amino.makeSignDoc(
373
+ msgs,
374
+ fee,
375
+ signerChainId,
376
+ "",
377
+ accountNumber,
378
+ sequence
379
+ );
380
+ const { signature, signed } = await signer.signAmino(signerAddress, signDoc);
381
+ const signedTxBody = {
382
+ messages: signed.msgs.map((msg) => chunkQAHHTQ7V_cjs.ClientState.aminoTypes.fromAmino(msg)),
383
+ memo: signed.memo
384
+ };
385
+ signedTxBody.messages[0].value.memo = messages2[0].value.memo;
386
+ const signedTxBodyEncodeObject = {
387
+ typeUrl: "/cosmos.tx.v1beta1.TxBody",
388
+ value: signedTxBody
389
+ };
390
+ const signedTxBodyBytes = chunkQAHHTQ7V_cjs.ClientState.registry.encode(
391
+ signedTxBodyEncodeObject
392
+ );
393
+ const signedGasLimit = math.Int53.fromString(signed.fee.gas).toNumber();
394
+ const signedSequence = math.Int53.fromString(signed.sequence).toNumber();
395
+ const pubkeyAny = makePubkeyAnyFromAccount(accountFromSigner, chainId);
396
+ const signedAuthInfoBytes = protoSigning.makeAuthInfoBytes(
397
+ [{ pubkey: pubkeyAny, sequence: signedSequence }],
398
+ signed.fee.amount,
399
+ signedGasLimit,
400
+ signed.fee.granter,
401
+ signed.fee.payer,
402
+ signMode
403
+ );
404
+ return tx_js.TxRaw.fromPartial({
405
+ bodyBytes: signedTxBodyBytes,
406
+ authInfoBytes: signedAuthInfoBytes,
407
+ signatures: [encoding.fromBase64(signature.signature)]
408
+ });
409
+ };
410
+
411
+ // src/private-functions/cosmos/signCosmosTransaction.ts
412
+ var signCosmosTransaction = async ({
413
+ tx,
414
+ options,
415
+ index,
416
+ routeId
417
+ }) => {
418
+ const { userAddresses } = options;
419
+ if (tx === void 0) {
420
+ throw new Error("executeCosmosTransaction error: tx is undefined");
421
+ }
422
+ const chainId = tx.cosmosTx?.chainId;
423
+ const messages2 = tx.cosmosTx?.msgs;
424
+ const currentUserAddress = userAddresses.find((x) => x.chainId === tx.cosmosTx?.chainId)?.address;
425
+ const gasArray = chunkQAHHTQ7V_cjs.ClientState.validateGasResults;
426
+ const gas = gasArray?.find((gas2) => gas2?.error !== null && gas2?.error !== void 0);
427
+ if (typeof gas?.error === "string") {
428
+ throw new Error(gas?.error);
429
+ }
430
+ const gasUsed = gasArray?.[index];
431
+ if (!gasUsed) {
432
+ throw new Error(`executeRoute error: invalid gas at index ${index}`);
433
+ }
434
+ if (chainId === void 0) {
435
+ throw new Error("no chainId found for tx");
436
+ }
437
+ if (messages2 === void 0) {
438
+ throw new Error("no messages found for tx");
439
+ }
440
+ const { signer } = await chunkJ7HZ6VJE_cjs.getSigningStargateClient({
441
+ chainId,
442
+ getOfflineSigner: options?.getCosmosSigner
443
+ });
444
+ if (!currentUserAddress) {
445
+ throw new Error(
446
+ `executeCosmosTransaction error: invalid address for chain '${tx.cosmosTx?.chainId}'`
447
+ );
448
+ }
449
+ const accounts = await signer.getAccounts();
450
+ const accountFromSigner = accounts.find((account) => account.address === currentUserAddress);
451
+ if (!accountFromSigner) {
452
+ throw new Error("executeCosmosTransaction error: failed to retrieve account from signer");
453
+ }
454
+ const fee = gasUsed?.fee;
455
+ if (!fee) {
456
+ throw new Error("executeCosmosTransaction error: failed to retrieve fee from gas");
457
+ }
458
+ const { accountNumber, sequence } = await getAccountNumberAndSequence(
459
+ currentUserAddress,
460
+ chainId
461
+ );
462
+ let rawTx;
463
+ const commonRawTxBody = {
464
+ signerAddress: currentUserAddress,
465
+ chainId,
466
+ cosmosMsgs: messages2,
467
+ fee,
468
+ signerData: {
469
+ accountNumber,
470
+ sequence,
471
+ chainId
472
+ }
473
+ };
474
+ options.onTransactionSignRequested?.({
475
+ chainId,
476
+ txIndex: index,
477
+ signerAddress: currentUserAddress
478
+ });
479
+ chunkBCX2D6TE_cjs.updateRouteDetails({
480
+ status: "signing",
481
+ routeId,
482
+ options
483
+ });
484
+ if (protoSigning.isOfflineDirectSigner(signer)) {
485
+ rawTx = await signCosmosMessageDirect({
486
+ ...commonRawTxBody,
487
+ signer
488
+ });
489
+ } else {
490
+ rawTx = await signCosmosMessageAmino({ ...commonRawTxBody, signer });
491
+ }
492
+ options?.onTransactionSigned?.({
493
+ chainId
494
+ });
495
+ chunkBCX2D6TE_cjs.updateRouteDetails({
496
+ status: "pending",
497
+ routeId,
498
+ options
499
+ });
500
+ const txBytes = tx_js.TxRaw.encode(rawTx).finish();
501
+ const rawTxBase64 = Buffer.from(txBytes).toString("base64");
502
+ return rawTxBase64;
503
+ };
504
+
505
+ // src/private-functions/cosmos/executeCosmosTransaction.ts
506
+ var executeCosmosTransaction = async ({
507
+ tx,
508
+ options,
509
+ index,
510
+ routeId
511
+ }) => {
512
+ if (tx === void 0) {
513
+ throw new Error("executeCosmosTransaction error: tx is undefined");
514
+ }
515
+ const rawTxBase64 = await signCosmosTransaction({
516
+ tx,
517
+ options,
518
+ index,
519
+ routeId
520
+ });
521
+ const chainId = tx.cosmosTx?.chainId;
522
+ const txResponse = await chunk262HFM6V_cjs.submitTransaction({
523
+ chainId,
524
+ tx: rawTxBase64
525
+ });
526
+ return {
527
+ chainId: tx?.cosmosTx?.chainId ?? "",
528
+ txHash: txResponse?.txHash ?? "",
529
+ explorerLink: txResponse?.explorerLink ?? ""
530
+ };
531
+ };
532
+ function createAbi(abi) {
533
+ return abi;
534
+ }
535
+ var erc20ABI = /* @__PURE__ */ createAbi([
536
+ {
537
+ type: "event",
538
+ name: "Approval",
539
+ inputs: [
540
+ {
541
+ indexed: true,
542
+ name: "owner",
543
+ type: "address"
544
+ },
545
+ {
546
+ indexed: true,
547
+ name: "spender",
548
+ type: "address"
549
+ },
550
+ {
551
+ indexed: false,
552
+ name: "value",
553
+ type: "uint256"
554
+ }
555
+ ]
556
+ },
557
+ {
558
+ type: "event",
559
+ name: "Transfer",
560
+ inputs: [
561
+ {
562
+ indexed: true,
563
+ name: "from",
564
+ type: "address"
565
+ },
566
+ {
567
+ indexed: true,
568
+ name: "to",
569
+ type: "address"
570
+ },
571
+ {
572
+ indexed: false,
573
+ name: "value",
574
+ type: "uint256"
575
+ }
576
+ ]
577
+ },
578
+ {
579
+ type: "function",
580
+ name: "allowance",
581
+ stateMutability: "view",
582
+ inputs: [
583
+ {
584
+ name: "owner",
585
+ type: "address"
586
+ },
587
+ {
588
+ name: "spender",
589
+ type: "address"
590
+ }
591
+ ],
592
+ outputs: [
593
+ {
594
+ name: "",
595
+ type: "uint256"
596
+ }
597
+ ]
598
+ },
599
+ {
600
+ type: "function",
601
+ name: "approve",
602
+ stateMutability: "nonpayable",
603
+ inputs: [
604
+ {
605
+ name: "spender",
606
+ type: "address"
607
+ },
608
+ {
609
+ name: "amount",
610
+ type: "uint256"
611
+ }
612
+ ],
613
+ outputs: [
614
+ {
615
+ name: "",
616
+ type: "bool"
617
+ }
618
+ ]
619
+ },
620
+ {
621
+ type: "function",
622
+ name: "balanceOf",
623
+ stateMutability: "view",
624
+ inputs: [
625
+ {
626
+ name: "account",
627
+ type: "address"
628
+ }
629
+ ],
630
+ outputs: [
631
+ {
632
+ name: "",
633
+ type: "uint256"
634
+ }
635
+ ]
636
+ },
637
+ {
638
+ type: "function",
639
+ name: "decimals",
640
+ stateMutability: "view",
641
+ inputs: [],
642
+ outputs: [
643
+ {
644
+ name: "",
645
+ type: "uint8"
646
+ }
647
+ ]
648
+ },
649
+ {
650
+ type: "function",
651
+ name: "name",
652
+ stateMutability: "view",
653
+ inputs: [],
654
+ outputs: [
655
+ {
656
+ name: "",
657
+ type: "string"
658
+ }
659
+ ]
660
+ },
661
+ {
662
+ type: "function",
663
+ name: "symbol",
664
+ stateMutability: "view",
665
+ inputs: [],
666
+ outputs: [
667
+ {
668
+ name: "",
669
+ type: "string"
670
+ }
671
+ ]
672
+ },
673
+ {
674
+ type: "function",
675
+ name: "totalSupply",
676
+ stateMutability: "view",
677
+ inputs: [],
678
+ outputs: [
679
+ {
680
+ name: "",
681
+ type: "uint256"
682
+ }
683
+ ]
684
+ },
685
+ {
686
+ type: "function",
687
+ name: "transfer",
688
+ stateMutability: "nonpayable",
689
+ inputs: [
690
+ {
691
+ name: "recipient",
692
+ type: "address"
693
+ },
694
+ {
695
+ name: "amount",
696
+ type: "uint256"
697
+ }
698
+ ],
699
+ outputs: [
700
+ {
701
+ name: "",
702
+ type: "bool"
703
+ }
704
+ ]
705
+ },
706
+ {
707
+ type: "function",
708
+ name: "transferFrom",
709
+ stateMutability: "nonpayable",
710
+ inputs: [
711
+ {
712
+ name: "sender",
713
+ type: "address"
714
+ },
715
+ {
716
+ name: "recipient",
717
+ type: "address"
718
+ },
719
+ {
720
+ name: "amount",
721
+ type: "uint256"
722
+ }
723
+ ],
724
+ outputs: [
725
+ {
726
+ name: "",
727
+ type: "bool"
728
+ }
729
+ ]
730
+ }
731
+ ]);
732
+
733
+ // src/private-functions/evm/executeEvmTransaction.ts
734
+ var executeEvmTransaction = async (message, options, index, routeId) => {
735
+ const gasArray = chunkQAHHTQ7V_cjs.ClientState.validateGasResults;
736
+ const gas = gasArray?.find((gas2) => gas2?.error !== null && gas2?.error !== void 0);
737
+ if (typeof gas?.error === "string") {
738
+ throw new Error(gas?.error);
739
+ }
740
+ const { evmTx } = message;
741
+ const getEvmSigner = options.getEvmSigner;
742
+ if (!getEvmSigner) {
743
+ throw new Error("executeEVMTransaction error: getEvmSigner is not provided");
744
+ }
745
+ if (!evmTx?.chainId) {
746
+ throw new Error("chain id not found in evmTx");
747
+ }
748
+ const evmSigner = await getEvmSigner(evmTx.chainId);
749
+ if (!evmSigner.account) {
750
+ throw new Error("executeEVMTransaction error: failed to retrieve account from signer");
751
+ }
752
+ if (!evmTx.chainId) {
753
+ throw new Error("executeEVMTransaction error: chainId not found for evmTx");
754
+ }
755
+ if (!evmTx.value && evmTx.value !== "") {
756
+ throw new Error("executeEVMTransaction error: no value found in evmTx");
757
+ }
758
+ const { onApproveAllowance, onTransactionSigned, bypassApprovalCheck, useUnlimitedApproval } = options;
759
+ const extendedSigner = evmSigner.extend(viem.publicActions);
760
+ if (!bypassApprovalCheck && evmTx.requiredErc20Approvals) {
761
+ for (const requiredApproval of evmTx.requiredErc20Approvals) {
762
+ const allowance = await extendedSigner.readContract({
763
+ address: requiredApproval.tokenContract,
764
+ abi: erc20ABI,
765
+ functionName: "allowance",
766
+ args: [
767
+ evmSigner.account.address,
768
+ requiredApproval.spender
769
+ ]
770
+ });
771
+ if (!requiredApproval.amount) {
772
+ throw new Error("executeEVMTransaction error: no amount found in a requiredApproval");
773
+ }
774
+ if (allowance > BigInt(requiredApproval.amount)) {
775
+ continue;
776
+ }
777
+ onApproveAllowance?.({
778
+ status: "pending",
779
+ allowance: requiredApproval
780
+ });
781
+ chunkBCX2D6TE_cjs.updateRouteDetails({
782
+ status: "allowance",
783
+ routeId,
784
+ options
785
+ });
786
+ const txHash2 = await extendedSigner.writeContract({
787
+ account: evmSigner.account,
788
+ address: requiredApproval.tokenContract,
789
+ abi: erc20ABI,
790
+ functionName: "approve",
791
+ args: [
792
+ requiredApproval.spender,
793
+ useUnlimitedApproval ? viem.maxUint256 : BigInt(requiredApproval.amount) + BigInt(1e3)
794
+ ],
795
+ chain: evmSigner.chain
796
+ });
797
+ const receipt2 = await extendedSigner.waitForTransactionReceipt({
798
+ hash: txHash2
799
+ });
800
+ if (receipt2.status === "reverted") {
801
+ throw new Error(
802
+ `executeEVMTransaction error: evm tx reverted for hash ${receipt2.transactionHash}`
803
+ );
804
+ }
805
+ }
806
+ onApproveAllowance?.({
807
+ status: "completed"
808
+ });
809
+ }
810
+ options?.onTransactionSignRequested?.({
811
+ chainId: evmTx.chainId,
812
+ signerAddress: evmSigner.account.address,
813
+ txIndex: index
814
+ });
815
+ chunkBCX2D6TE_cjs.updateRouteDetails({
816
+ status: "signing",
817
+ routeId,
818
+ options
819
+ });
820
+ const txHash = await extendedSigner.sendTransaction({
821
+ account: evmSigner.account,
822
+ to: evmTx.to,
823
+ data: `0x${evmTx.data}`,
824
+ chain: evmSigner.chain,
825
+ value: evmTx.value === "" ? void 0 : BigInt(evmTx.value)
826
+ });
827
+ chunkBCX2D6TE_cjs.updateRouteDetails({
828
+ status: "pending",
829
+ routeId,
830
+ options
831
+ });
832
+ onTransactionSigned?.({
833
+ chainId: evmTx.chainId
834
+ });
835
+ const receipt = await extendedSigner.waitForTransactionReceipt({
836
+ hash: txHash
837
+ });
838
+ return receipt;
839
+ };
840
+ var signSvmTransaction = async ({
841
+ tx,
842
+ options,
843
+ index,
844
+ routeId
845
+ }) => {
846
+ const gasArray = chunkQAHHTQ7V_cjs.ClientState.validateGasResults;
847
+ if (tx === void 0) {
848
+ throw new Error("executeSvmTransaction error: tx is undefined");
849
+ }
850
+ const gas = gasArray?.find(
851
+ (gas2) => gas2?.error !== null && gas2?.error !== void 0
852
+ );
853
+ if (typeof gas?.error === "string") {
854
+ throw new Error(gas?.error);
855
+ }
856
+ const svmTx = tx?.svmTx;
857
+ const getSvmSigner = options?.getSvmSigner;
858
+ if (!getSvmSigner) {
859
+ throw new Error(
860
+ "executeSvmTransaction error: getSvmSigner is not provided"
861
+ );
862
+ }
863
+ const signer = await getSvmSigner();
864
+ if (!svmTx?.chainId) {
865
+ throw new Error("executeSvmTransaction error: chainId not found in svmTx");
866
+ }
867
+ const txBuffer = Buffer.from(svmTx.tx ?? "", "base64");
868
+ const transaction = web3_js.Transaction.from(txBuffer);
869
+ if (options.svmFeePayer) {
870
+ const message = transaction.serializeMessage();
871
+ const resSignTx = await options.svmFeePayer.signTransaction(message);
872
+ transaction.addSignature(
873
+ new web3_js.PublicKey(options.svmFeePayer.address),
874
+ Buffer.from(resSignTx)
875
+ );
876
+ }
877
+ if (!("signTransaction" in signer)) return;
878
+ options?.onTransactionSignRequested?.({
879
+ chainId: svmTx.chainId,
880
+ signerAddress: signer.publicKey?.toBase58(),
881
+ txIndex: index
882
+ });
883
+ chunkBCX2D6TE_cjs.updateRouteDetails({
884
+ status: "signing",
885
+ routeId,
886
+ options
887
+ });
888
+ const signedTx = await signer.signTransaction(transaction);
889
+ options?.onTransactionSigned?.({ chainId: svmTx.chainId });
890
+ chunkBCX2D6TE_cjs.updateRouteDetails({
891
+ status: "pending",
892
+ routeId,
893
+ options
894
+ });
895
+ const serializedTx = signedTx.serialize();
896
+ return serializedTx;
897
+ };
898
+
899
+ // src/private-functions/svm/executeSvmTransaction.ts
900
+ var executeSvmTransaction = async (tx, options, index, routeId) => {
901
+ const svmTx = tx?.svmTx;
902
+ if (!svmTx?.chainId) {
903
+ throw new Error("executeSvmTransaction error: chainId not found in svmTx");
904
+ }
905
+ const signedTx = await signSvmTransaction({ tx, options, index, routeId });
906
+ if (!signedTx) {
907
+ throw new Error("executeSvmTransaction error: signedTx is undefined");
908
+ }
909
+ const endpoint = await chunkJ7HZ6VJE_cjs.getRpcEndpointForChain(svmTx.chainId);
910
+ const connection = new web3_js.Connection(endpoint);
911
+ let signature;
912
+ const submitTxResponse = await chunk262HFM6V_cjs.submitTransaction({
913
+ chainId: svmTx.chainId,
914
+ tx: signedTx.toString("base64")
915
+ });
916
+ signature = submitTxResponse?.txHash;
917
+ const rpcSig = await connection.sendRawTransaction(signedTx, {
918
+ preflightCommitment: "confirmed",
919
+ maxRetries: 5
920
+ });
921
+ signature = rpcSig;
922
+ if (!signature) {
923
+ throw new Error("executeSvmTransaction error: signature not found");
924
+ }
925
+ let getStatusCount = 0;
926
+ let errorCount = 0;
927
+ while (true) {
928
+ try {
929
+ const status = await connection.getSignatureStatus(signature, {
930
+ searchTransactionHistory: true
931
+ });
932
+ if (status?.value?.confirmationStatus === "confirmed") {
933
+ return {
934
+ chainId: svmTx.chainId,
935
+ txHash: signature,
936
+ explorerLink: submitTxResponse?.explorerLink ?? ""
937
+ };
938
+ }
939
+ if (getStatusCount > 12) {
940
+ await chunkHFEMNOJS_cjs.wait(3e3);
941
+ throw new Error(
942
+ `executeSvmTransaction error: waiting finalized status timed out for ${signature}`
943
+ );
944
+ }
945
+ getStatusCount++;
946
+ await chunkHFEMNOJS_cjs.wait(3e3);
947
+ } catch (error) {
948
+ errorCount++;
949
+ if (errorCount > 12) {
950
+ throw error;
951
+ }
952
+ }
953
+ }
954
+ };
955
+ var validateEvmTokenApproval = async ({
956
+ requiredErc20Approvals,
957
+ signer,
958
+ chain,
959
+ gasBalance,
960
+ tx,
961
+ useUnlimitedApproval
962
+ }) => {
963
+ if (!signer.account?.address) {
964
+ throw new Error("validateEvmGasBalance: Signer address not found");
965
+ }
966
+ for (const requiredApproval of requiredErc20Approvals) {
967
+ const extendedSigner = signer.extend(viem.publicActions);
968
+ const allowance = await extendedSigner.readContract({
969
+ address: requiredApproval.tokenContract,
970
+ abi: erc20ABI,
971
+ functionName: "allowance",
972
+ args: [signer.account?.address, requiredApproval.spender]
973
+ });
974
+ if (allowance > BigInt(requiredApproval.amount)) {
975
+ continue;
976
+ }
977
+ const fee = await extendedSigner.estimateFeesPerGas();
978
+ const allowanceGasFee = BigInt(fee.maxFeePerGas) * BigInt(1e5);
979
+ if (!gasBalance) {
980
+ const chainAssets = (await chunkQAHHTQ7V_cjs.ClientState.getSkipAssets({ chainId: tx.chainId }))[tx.chainId];
981
+ const nativeAsset = chainAssets?.find((x) => x.denom.includes("-native"));
982
+ const zeroAddressAsset = chainAssets?.find(
983
+ (x) => x.denom.toLowerCase() === "0x0000000000000000000000000000000000000000"
984
+ );
985
+ const asset = nativeAsset || zeroAddressAsset;
986
+ if (!asset?.decimals) {
987
+ throw new Error(
988
+ `Insufficient balance for gas on ${chain.prettyName}. Need ${allowanceGasFee} gwei.`
989
+ );
990
+ }
991
+ const formattedGasAmount = viem.formatUnits(allowanceGasFee, asset?.decimals);
992
+ throw new Error(
993
+ `Insufficient balance for gas on ${chain.prettyName}. Need ${formattedGasAmount} ${asset.symbol}.`
994
+ );
995
+ }
996
+ if (chunkWKYP2NMS_cjs.BigNumber(gasBalance.amount).lt(Number(allowanceGasFee))) {
997
+ const chainAssets = (await chunkQAHHTQ7V_cjs.ClientState.getSkipAssets({ chainId: tx.chainId }))[tx.chainId];
998
+ const asset = chainAssets?.find(
999
+ (x) => x.denom.includes("-native") || x.denom.toLowerCase() === "0x0000000000000000000000000000000000000000"
1000
+ );
1001
+ if (!asset?.decimals) {
1002
+ return {
1003
+ error: `Insufficient balance for gas on ${chain.prettyName}. Need ${allowanceGasFee} gwei but only have ${gasBalance.amount} gwei.`,
1004
+ asset: null,
1005
+ fee: null
1006
+ };
1007
+ }
1008
+ const formattedGasAmount = viem.formatUnits(allowanceGasFee, asset?.decimals);
1009
+ return {
1010
+ error: `Insufficient balance for gas on ${chain.prettyName}. Need ${formattedGasAmount} ${asset.symbol} but only have ${gasBalance.formattedAmount} ${asset.symbol}.`,
1011
+ asset: null,
1012
+ fee: null
1013
+ };
1014
+ }
1015
+ const txHash = await extendedSigner.writeContract({
1016
+ account: signer.account,
1017
+ address: requiredApproval.tokenContract,
1018
+ abi: erc20ABI,
1019
+ functionName: "approve",
1020
+ args: [
1021
+ requiredApproval.spender,
1022
+ useUnlimitedApproval ? viem.maxUint256 : BigInt(requiredApproval.amount) + BigInt(1e3)
1023
+ ],
1024
+ chain: signer.chain
1025
+ });
1026
+ const receipt = await extendedSigner.waitForTransactionReceipt({
1027
+ hash: txHash
1028
+ });
1029
+ if (receipt.status === "reverted") {
1030
+ throw new Error(
1031
+ `executeEVMTransaction error: evm tx reverted for hash ${receipt.transactionHash}`
1032
+ );
1033
+ }
1034
+ }
1035
+ };
1036
+
1037
+ // src/private-functions/evm/validateEvmGasBalance.ts
1038
+ var validateEvmGasBalance = async ({
1039
+ signer,
1040
+ tx,
1041
+ getFallbackGasAmount,
1042
+ useUnlimitedApproval,
1043
+ bypassApprovalCheck
1044
+ }) => {
1045
+ const chainId = tx?.chainId ?? "";
1046
+ const skipAssets = (await chunkQAHHTQ7V_cjs.ClientState.getSkipAssets({ chainId }))?.[chainId];
1047
+ const skipChains = await chunkQAHHTQ7V_cjs.ClientState.getSkipChains();
1048
+ const chain = skipChains?.find?.((chain2) => chain2.chainId === chainId);
1049
+ if (!chain) {
1050
+ throw new Error(`failed to find chain for chainId: '${chainId}'`);
1051
+ }
1052
+ if (!signer.account?.address) {
1053
+ throw new Error("validateEvmGasBalance: Signer address not found");
1054
+ }
1055
+ const skipBalances = (await chunkQAHHTQ7V_cjs.balances({
1056
+ chains: {
1057
+ [tx?.chainId ?? ""]: {
1058
+ address: signer.account?.address
1059
+ }
1060
+ }
1061
+ }))?.chains?.[tx?.chainId ?? ""]?.denoms;
1062
+ const nativeGasBalance = skipBalances && Object.entries(skipBalances).find(([denom]) => denom.includes("-native"))?.[1];
1063
+ const zeroAddressGasBalance = skipBalances && Object.entries(skipBalances).find(
1064
+ ([denom]) => denom.toLowerCase() === "0x0000000000000000000000000000000000000000"
1065
+ )?.[1];
1066
+ const gasBalance = nativeGasBalance || zeroAddressGasBalance;
1067
+ const { requiredErc20Approvals } = tx;
1068
+ if (!bypassApprovalCheck && requiredErc20Approvals) {
1069
+ try {
1070
+ await validateEvmTokenApproval({
1071
+ requiredErc20Approvals,
1072
+ signer,
1073
+ chain,
1074
+ gasBalance,
1075
+ tx,
1076
+ useUnlimitedApproval
1077
+ });
1078
+ } catch (error) {
1079
+ const err = error;
1080
+ return {
1081
+ error: err.message,
1082
+ asset: null,
1083
+ fee: null
1084
+ };
1085
+ }
1086
+ }
1087
+ const gasAmount = await chunkF3EB2AQG_cjs.getEVMGasAmountForMessage(signer, tx, getFallbackGasAmount);
1088
+ if (!gasBalance) {
1089
+ const nativeAsset = skipAssets?.find((x) => x.denom?.includes("-native"));
1090
+ const zeroAddressAsset = skipAssets?.find(
1091
+ (x) => x.denom?.toLowerCase() === "0x0000000000000000000000000000000000000000"
1092
+ );
1093
+ const asset = nativeAsset || zeroAddressAsset;
1094
+ if (!asset?.decimals) {
1095
+ return {
1096
+ error: `Insufficient balance for gas on ${chain.prettyName}. Need ${gasAmount} gwei.`,
1097
+ asset: null,
1098
+ fee: null
1099
+ };
1100
+ }
1101
+ const formattedGasAmount = viem.formatUnits(gasAmount, asset?.decimals);
1102
+ return {
1103
+ error: `Insufficient balance for gas on ${chain.prettyName}. Need ${formattedGasAmount} ${asset.symbol}.`,
1104
+ asset: null,
1105
+ fee: null
1106
+ };
1107
+ }
1108
+ if (chunkWKYP2NMS_cjs.BigNumber(gasBalance.amount ?? "").lt(Number(gasAmount))) {
1109
+ const asset = skipAssets?.find(
1110
+ (x) => x.denom?.includes("-native") || x.denom?.toLowerCase() === "0x0000000000000000000000000000000000000000"
1111
+ );
1112
+ if (!asset?.decimals) {
1113
+ return {
1114
+ error: `Insufficient balance for gas on ${chain.prettyName}. Need ${gasAmount} gwei but only have ${gasBalance.amount} gwei.`,
1115
+ asset: null,
1116
+ fee: null
1117
+ };
1118
+ }
1119
+ const formattedGasAmount = viem.formatUnits(gasAmount, asset?.decimals);
1120
+ return {
1121
+ error: `Insufficient balance for gas on ${chain.prettyName}. Need ${formattedGasAmount} ${asset.symbol} but only have ${gasBalance.formattedAmount} ${asset.symbol}.`,
1122
+ asset: null,
1123
+ fee: null
1124
+ };
1125
+ }
1126
+ };
1127
+ var validateSvmGasBalance = async ({
1128
+ tx,
1129
+ simulate,
1130
+ feePayerAddress
1131
+ }) => {
1132
+ if (!tx) throw new Error("Transaction is required");
1133
+ if (simulate === false) {
1134
+ return {
1135
+ success: true,
1136
+ logs: [],
1137
+ error: null,
1138
+ asset: null,
1139
+ fee: null
1140
+ };
1141
+ }
1142
+ const endpoint = await chunkJ7HZ6VJE_cjs.getRpcEndpointForChain(tx.chainId ?? "");
1143
+ const connection = new web3_js.Connection(endpoint);
1144
+ if (!connection) throw new Error(`Failed to connect to ${tx.chainId}`);
1145
+ const gasAmount = await getSVMGasAmountForMessage(connection, tx);
1146
+ const skipBalances = await chunkQAHHTQ7V_cjs.balances({
1147
+ chains: {
1148
+ solana: {
1149
+ address: feePayerAddress ?? tx?.signerAddress,
1150
+ denoms: ["solana-native"]
1151
+ }
1152
+ }
1153
+ });
1154
+ const gasBalance = skipBalances?.chains?.["solana"]?.denoms?.["solana-native"];
1155
+ if (!gasBalance) {
1156
+ return {
1157
+ success: false,
1158
+ error: `Insufficient balance for gas on Solana. Need ${gasAmount / web3_js.LAMPORTS_PER_SOL} SOL.`,
1159
+ asset: null,
1160
+ fee: null
1161
+ };
1162
+ }
1163
+ if (chunkWKYP2NMS_cjs.bignumber_default(gasBalance.amount ?? "").lt(gasAmount)) {
1164
+ return {
1165
+ success: false,
1166
+ error: `Insufficient balance for gas on Solana. Need ${gasAmount / web3_js.LAMPORTS_PER_SOL} SOL but only have ${gasBalance.formattedAmount} SOL.`,
1167
+ asset: null,
1168
+ fee: null
1169
+ };
1170
+ }
1171
+ return {
1172
+ success: true,
1173
+ error: null,
1174
+ asset: null,
1175
+ fee: null
1176
+ };
1177
+ };
1178
+ async function getSVMGasAmountForMessage(connection, tx) {
1179
+ const _tx = Buffer.from(tx?.tx ?? "", "base64");
1180
+ const transaction = web3_js.Transaction.from(_tx);
1181
+ const gas = await connection.getFeeForMessage(
1182
+ transaction.compileMessage(),
1183
+ "confirmed"
1184
+ );
1185
+ if (!gas.value) {
1186
+ throw new Error(
1187
+ `estimateGasForSVMTx error: unable to get gas for transaction on ${tx?.chainId}`
1188
+ );
1189
+ }
1190
+ return gas.value;
1191
+ }
1192
+
1193
+ // src/private-functions/validateGasBalances.ts
1194
+ var validateGasBalances = async ({
1195
+ txs,
1196
+ onValidateGasBalance,
1197
+ getFallbackGasAmount,
1198
+ getCosmosSigner,
1199
+ getEvmSigner,
1200
+ simulate,
1201
+ disabledChainIds,
1202
+ enabledChainIds,
1203
+ getCosmosPriorityFeeDenom,
1204
+ routeId,
1205
+ options,
1206
+ isMultiRoutes
1207
+ }) => {
1208
+ const validateResult = await Promise.all(
1209
+ txs.map(async (tx, i) => {
1210
+ if (!tx) {
1211
+ throw new Error(`invalid tx at index ${i}`);
1212
+ }
1213
+ if ("cosmosTx" in tx && !disabledChainIds?.includes(tx?.cosmosTx?.chainId ?? "") && (enabledChainIds === void 0 || enabledChainIds.includes(tx?.cosmosTx?.chainId ?? ""))) {
1214
+ onValidateGasBalance?.({
1215
+ status: "pending"
1216
+ });
1217
+ chunkBCX2D6TE_cjs.updateRouteDetails({
1218
+ status: "validating",
1219
+ routeId,
1220
+ options
1221
+ });
1222
+ if (!tx?.cosmosTx?.msgs) {
1223
+ throw new Error(`invalid msgs ${tx?.cosmosTx?.msgs}`);
1224
+ }
1225
+ try {
1226
+ const res = await chunkCZKIE576_cjs.validateCosmosGasBalance({
1227
+ chainId: tx.cosmosTx.chainId ?? "",
1228
+ signerAddress: tx.cosmosTx.signerAddress ?? "",
1229
+ messages: tx.cosmosTx.msgs,
1230
+ getFallbackGasAmount,
1231
+ getOfflineSigner: getCosmosSigner,
1232
+ txIndex: i,
1233
+ simulate,
1234
+ getCosmosPriorityFeeDenom,
1235
+ isMultiRoutes
1236
+ });
1237
+ return res;
1238
+ } catch (e) {
1239
+ const error = e;
1240
+ return {
1241
+ error: error.message,
1242
+ asset: null,
1243
+ fee: null
1244
+ };
1245
+ }
1246
+ }
1247
+ if ("evmTx" in tx && !disabledChainIds?.includes(tx?.evmTx?.chainId ?? "") && (enabledChainIds === void 0 || enabledChainIds.includes(tx?.evmTx?.chainId ?? ""))) {
1248
+ onValidateGasBalance?.({
1249
+ status: "pending"
1250
+ });
1251
+ chunkBCX2D6TE_cjs.updateRouteDetails({
1252
+ status: "validating",
1253
+ routeId,
1254
+ options
1255
+ });
1256
+ const signer = await getEvmSigner?.(tx?.evmTx?.chainId ?? "");
1257
+ if (!signer) {
1258
+ throw new Error(
1259
+ `failed to get signer for chain ${tx?.evmTx?.chainId}`
1260
+ );
1261
+ }
1262
+ try {
1263
+ const res = await validateEvmGasBalance({
1264
+ tx: tx.evmTx,
1265
+ signer,
1266
+ getFallbackGasAmount,
1267
+ useUnlimitedApproval: options?.useUnlimitedApproval,
1268
+ bypassApprovalCheck: options?.bypassApprovalCheck
1269
+ });
1270
+ return res;
1271
+ } catch (e) {
1272
+ const error = e;
1273
+ return {
1274
+ error: error.message,
1275
+ asset: null,
1276
+ fee: null
1277
+ };
1278
+ }
1279
+ }
1280
+ if ("svmTx" in tx && !disabledChainIds?.includes(tx?.svmTx?.chainId ?? "") && (enabledChainIds === void 0 || enabledChainIds.includes(tx?.svmTx?.chainId ?? ""))) {
1281
+ onValidateGasBalance?.({
1282
+ status: "pending"
1283
+ });
1284
+ chunkBCX2D6TE_cjs.updateRouteDetails({
1285
+ status: "validating",
1286
+ routeId,
1287
+ options
1288
+ });
1289
+ try {
1290
+ const res = await validateSvmGasBalance({
1291
+ tx: tx.svmTx,
1292
+ simulate,
1293
+ feePayerAddress: options.svmFeePayer?.address
1294
+ });
1295
+ return res;
1296
+ } catch (e) {
1297
+ const error = e;
1298
+ return {
1299
+ error: error.message,
1300
+ asset: null,
1301
+ fee: null
1302
+ };
1303
+ }
1304
+ }
1305
+ })
1306
+ );
1307
+ if (validateResult.filter(Boolean).length === 0) {
1308
+ return;
1309
+ }
1310
+ const txError = validateResult.find((res) => res && res?.error !== null);
1311
+ if (txError) {
1312
+ onValidateGasBalance?.({
1313
+ status: "error"
1314
+ });
1315
+ chunkQAHHTQ7V_cjs.ClientState.validateGasResults = validateResult;
1316
+ throw new Error(`${txError.error}`);
1317
+ }
1318
+ onValidateGasBalance?.({
1319
+ status: "completed"
1320
+ });
1321
+ chunkQAHHTQ7V_cjs.ClientState.validateGasResults = validateResult;
1322
+ };
1323
+
1324
+ // src/private-functions/getChainIdsFromTxs.ts
1325
+ var getChainIdsFromTxs = (txs) => {
1326
+ return txs.map((tx) => {
1327
+ if ("cosmosTx" in tx) {
1328
+ return {
1329
+ chainType: "cosmos" /* Cosmos */,
1330
+ chainId: tx.cosmosTx?.chainId
1331
+ };
1332
+ }
1333
+ if ("svmTx" in tx) {
1334
+ return {
1335
+ chainType: "svm" /* Svm */,
1336
+ chainId: tx.svmTx?.chainId
1337
+ };
1338
+ }
1339
+ if ("evmTx" in tx) {
1340
+ return {
1341
+ chainType: "evm" /* Evm */,
1342
+ chainId: tx.evmTx?.chainId
1343
+ };
1344
+ }
1345
+ });
1346
+ };
1347
+
1348
+ // src/private-functions/executeTransactions.ts
1349
+ var executeTransactions = async (options) => {
1350
+ const {
1351
+ txs,
1352
+ onTransactionBroadcast,
1353
+ simulate = true,
1354
+ batchSimulate = true,
1355
+ getFallbackGasAmount = getDefaultFallbackGasAmount,
1356
+ getCosmosSigner,
1357
+ getEvmSigner,
1358
+ onValidateGasBalance,
1359
+ trackTxPollingOptions,
1360
+ batchSignTxs = true,
1361
+ routeId,
1362
+ isMultiRoutes
1363
+ } = options;
1364
+ if (txs === void 0) {
1365
+ throw new Error(
1366
+ "executeTransactions error: txs is undefined in executeTransactions"
1367
+ );
1368
+ }
1369
+ const chainIds = getChainIdsFromTxs(txs);
1370
+ const transactionDetails = txs.map((tx) => {
1371
+ if ("cosmosTx" in tx) {
1372
+ return { chainId: tx.cosmosTx?.chainId, chainType: "cosmos" /* Cosmos */ };
1373
+ } else if ("evmTx" in tx) {
1374
+ return { chainId: tx.evmTx?.chainId, chainType: "evm" /* Evm */ };
1375
+ } else if ("svmTx" in tx) {
1376
+ return { chainId: tx.svmTx?.chainId, chainType: "svm" /* Svm */ };
1377
+ } else {
1378
+ throw new Error("executeRoute error: invalid message type");
1379
+ }
1380
+ });
1381
+ chunkBCX2D6TE_cjs.updateRouteDetails({
1382
+ transactionDetails,
1383
+ routeId,
1384
+ options
1385
+ });
1386
+ const isGasStationSourceEVM = chainIds.find((item, i, array) => {
1387
+ return chunkGGSF5JZH_cjs.GAS_STATION_CHAIN_IDS.includes(item?.chainId ?? "") && array[i - 1]?.chainType === "evm" /* Evm */;
1388
+ });
1389
+ chunkQAHHTQ7V_cjs.ClientState.validateGasResults = void 0;
1390
+ const validateChainIds = !batchSimulate ? chainIds.map((x) => x?.chainId ?? "") : isGasStationSourceEVM ? chunkGGSF5JZH_cjs.GAS_STATION_CHAIN_IDS : [];
1391
+ await validateGasBalances({
1392
+ txs,
1393
+ getFallbackGasAmount,
1394
+ getCosmosSigner,
1395
+ getEvmSigner,
1396
+ onValidateGasBalance,
1397
+ simulate,
1398
+ disabledChainIds: validateChainIds,
1399
+ getCosmosPriorityFeeDenom: options.getCosmosPriorityFeeDenom,
1400
+ options,
1401
+ routeId,
1402
+ isMultiRoutes
1403
+ });
1404
+ const validateEnabledChainIds = async (chainId) => {
1405
+ await validateGasBalances({
1406
+ txs,
1407
+ getFallbackGasAmount,
1408
+ getCosmosSigner,
1409
+ getEvmSigner,
1410
+ onValidateGasBalance,
1411
+ simulate,
1412
+ enabledChainIds: !batchSimulate ? [chainId] : validateChainIds,
1413
+ getCosmosPriorityFeeDenom: options.getCosmosPriorityFeeDenom,
1414
+ options,
1415
+ routeId,
1416
+ isMultiRoutes
1417
+ });
1418
+ };
1419
+ let signedTxs = [];
1420
+ if (batchSignTxs) {
1421
+ for (let i = 0; i < txs.length; i++) {
1422
+ const tx = txs[i];
1423
+ if (!tx) {
1424
+ throw new Error(`executeRoute error: invalid message at index ${i}`);
1425
+ }
1426
+ if ("cosmosTx" in tx) {
1427
+ await validateEnabledChainIds(tx.cosmosTx?.chainId ?? "");
1428
+ const isAllowedToBatchSignTxsUpfront = await (async () => {
1429
+ try {
1430
+ const currentUserAddress = options.userAddresses.find(
1431
+ (x) => x.chainId === tx.cosmosTx?.chainId
1432
+ )?.address;
1433
+ if (!currentUserAddress) {
1434
+ return false;
1435
+ }
1436
+ const { accountNumber } = await getAccountNumberAndSequence(
1437
+ currentUserAddress,
1438
+ tx.cosmosTx?.chainId
1439
+ );
1440
+ if (accountNumber) {
1441
+ return true;
1442
+ }
1443
+ return false;
1444
+ } catch (_error) {
1445
+ return false;
1446
+ }
1447
+ })();
1448
+ if (!isAllowedToBatchSignTxsUpfront) {
1449
+ continue;
1450
+ }
1451
+ const signedTx = await signCosmosTransaction({
1452
+ tx,
1453
+ options,
1454
+ index: i,
1455
+ routeId
1456
+ });
1457
+ signedTxs.push({
1458
+ index: i,
1459
+ chainId: tx.cosmosTx?.chainId ?? "",
1460
+ tx: signedTx,
1461
+ chainType: "cosmos" /* Cosmos */
1462
+ });
1463
+ }
1464
+ if ("svmTx" in tx) {
1465
+ await validateEnabledChainIds(tx.svmTx?.chainId ?? "");
1466
+ const signedTx = await signSvmTransaction({
1467
+ tx,
1468
+ options,
1469
+ index: i,
1470
+ routeId
1471
+ });
1472
+ if (!signedTx) {
1473
+ throw new Error(`executeRoute error: signedTx is undefined`);
1474
+ }
1475
+ signedTxs.push({
1476
+ index: i,
1477
+ chainId: tx.svmTx?.chainId ?? "",
1478
+ tx: signedTx.toString("base64"),
1479
+ chainType: "svm" /* Svm */
1480
+ });
1481
+ }
1482
+ }
1483
+ }
1484
+ const executeTransaction = async (index) => {
1485
+ const tx = txs[index];
1486
+ if (!tx) {
1487
+ throw new Error(`executeRoute error: invalid message at index ${index}`);
1488
+ }
1489
+ let txResult;
1490
+ const txSigned = signedTxs.find((item) => item.index === index);
1491
+ if (txSigned) {
1492
+ const txResponse = await chunk262HFM6V_cjs.submitTransaction({
1493
+ chainId: txSigned.chainId,
1494
+ tx: txSigned.tx
1495
+ });
1496
+ txResult = {
1497
+ chainId: txSigned.chainId,
1498
+ txHash: txResponse?.txHash ?? "",
1499
+ explorerLink: txResponse?.explorerLink ?? ""
1500
+ };
1501
+ } else {
1502
+ if ("cosmosTx" in tx) {
1503
+ await validateEnabledChainIds(tx.cosmosTx?.chainId ?? "");
1504
+ txResult = await executeCosmosTransaction({
1505
+ tx,
1506
+ options,
1507
+ index,
1508
+ routeId
1509
+ });
1510
+ } else if ("evmTx" in tx) {
1511
+ await validateEnabledChainIds(tx.evmTx?.chainId ?? "");
1512
+ const txResponse = await executeEvmTransaction(
1513
+ tx,
1514
+ options,
1515
+ index,
1516
+ routeId
1517
+ );
1518
+ txResult = {
1519
+ chainId: tx?.evmTx?.chainId ?? "",
1520
+ txHash: txResponse.transactionHash
1521
+ };
1522
+ } else if ("svmTx" in tx) {
1523
+ await validateEnabledChainIds(tx.svmTx?.chainId ?? "");
1524
+ txResult = await executeSvmTransaction(tx, options, index, routeId);
1525
+ } else {
1526
+ throw new Error("executeRoute error: invalid message type");
1527
+ }
1528
+ }
1529
+ await onTransactionBroadcast?.({ ...txResult });
1530
+ return txResult;
1531
+ };
1532
+ return {
1533
+ transactionDetails,
1534
+ executeTransaction
1535
+ };
1536
+ };
1537
+ var EVM_GAS_AMOUNT = 15e4;
1538
+ var COSMOS_GAS_AMOUNT = {
1539
+ DEFAULT: 3e5,
1540
+ SWAP: 28e5,
1541
+ CARBON: 1e6
1542
+ };
1543
+ var getDefaultFallbackGasAmount = async (chainId, chainType) => {
1544
+ if (chainType === "evm" /* Evm */) {
1545
+ return EVM_GAS_AMOUNT;
1546
+ }
1547
+ if (chainType !== "cosmos" /* Cosmos */) return void 0;
1548
+ const venuesResult = await chunkT5EGKQAT_cjs.venues();
1549
+ const isSwapChain = venuesResult?.some(
1550
+ (venue) => venue.chainId === chainId
1551
+ ) ?? false;
1552
+ const defaultGasAmount = Math.ceil(
1553
+ isSwapChain ? COSMOS_GAS_AMOUNT.SWAP : COSMOS_GAS_AMOUNT.DEFAULT
1554
+ );
1555
+ if (chainId === "carbon-1") {
1556
+ return COSMOS_GAS_AMOUNT.CARBON;
1557
+ }
1558
+ return defaultGasAmount;
1559
+ };
1560
+ var validateUserAddresses = async (userAddresses) => {
1561
+ const chains3 = await chunkQAHHTQ7V_cjs.ClientState.getSkipChains();
1562
+ const validations = userAddresses.map((userAddress) => {
1563
+ const chain = chains3.find((chain2) => chain2.chainId === userAddress.chainId);
1564
+ switch (chain?.chainType) {
1565
+ case "cosmos" /* Cosmos */:
1566
+ try {
1567
+ if (chain.chainId?.includes("penumbra")) {
1568
+ try {
1569
+ return chain.bech32Prefix === bech32.bech32m.decode(userAddress.address, 143)?.prefix;
1570
+ } catch {
1571
+ return ["penumbracompat1", "tpenumbra"].includes(
1572
+ bech32.bech32.decode(userAddress.address, 1023).prefix
1573
+ );
1574
+ }
1575
+ }
1576
+ return chain.bech32Prefix === bech32.bech32.decode(userAddress.address, 1023).prefix;
1577
+ } catch {
1578
+ return false;
1579
+ }
1580
+ case "evm" /* Evm */:
1581
+ try {
1582
+ return viem.isAddress(userAddress.address);
1583
+ } catch (_error) {
1584
+ return false;
1585
+ }
1586
+ case "svm" /* Svm */:
1587
+ try {
1588
+ const publicKey = new web3_js.PublicKey(userAddress.address);
1589
+ return web3_js.PublicKey.isOnCurve(publicKey);
1590
+ } catch (_error) {
1591
+ return false;
1592
+ }
1593
+ default:
1594
+ return false;
1595
+ }
1596
+ });
1597
+ return validations.every((validation) => validation);
1598
+ };
1599
+ var createValidAddressList = async ({
1600
+ userAddresses,
1601
+ route: route2
1602
+ }) => {
1603
+ let addressList = [];
1604
+ userAddresses.forEach((userAddress, index) => {
1605
+ const requiredChainAddress = route2.requiredChainAddresses[index];
1606
+ if (requiredChainAddress === userAddress?.chainId) {
1607
+ addressList.push(userAddress.address);
1608
+ }
1609
+ });
1610
+ if (addressList.length !== route2.requiredChainAddresses.length) {
1611
+ addressList = userAddresses.map((x) => x.address);
1612
+ }
1613
+ const validLength = addressList.length === route2.requiredChainAddresses.length || addressList.length === route2.chainIds?.length;
1614
+ if (!validLength) {
1615
+ throw new Error("createValidAddressList error: invalid address list");
1616
+ }
1617
+ const isUserAddressesValid = await validateUserAddresses(userAddresses);
1618
+ if (!isUserAddressesValid) {
1619
+ throw new Error("createValidAddressList error: invalid user addresses");
1620
+ }
1621
+ return addressList;
1622
+ };
1623
+
1624
+ // src/public-functions/executeRoute.ts
1625
+ var executeRoute = async (options) => {
1626
+ const { route: route2, userAddresses, appendCosmosMsgs, timeoutSeconds } = options;
1627
+ const { id: routeId } = chunkBCX2D6TE_cjs.updateRouteDetails({
1628
+ status: "unconfirmed",
1629
+ options
1630
+ });
1631
+ const addressList = await createValidAddressList({
1632
+ userAddresses,
1633
+ route: route2
1634
+ });
1635
+ const response = await chunk3NHW3XWK_cjs.messages({
1636
+ timeoutSeconds,
1637
+ amountIn: route2?.amountIn,
1638
+ amountOut: route2.estimatedAmountOut || "0",
1639
+ sourceAssetChainId: route2?.sourceAssetChainId,
1640
+ sourceAssetDenom: route2?.sourceAssetDenom,
1641
+ destAssetChainId: route2?.destAssetChainId,
1642
+ destAssetDenom: route2?.destAssetDenom,
1643
+ operations: route2?.operations,
1644
+ addressList,
1645
+ slippageTolerancePercent: options.slippageTolerancePercent || "1",
1646
+ chainIdsToAffiliates: chunkHFEMNOJS_cjs.ApiState.chainIdsToAffiliates,
1647
+ postRouteHandler: options.postRouteHandler,
1648
+ feePayerAddress: options.svmFeePayer?.address
1649
+ });
1650
+ if (appendCosmosMsgs) {
1651
+ Object.entries(appendCosmosMsgs).forEach(([chainId, msgs]) => {
1652
+ const txIndex = response?.txs?.findIndex(
1653
+ (tx2) => "cosmosTx" in tx2 && tx2.cosmosTx.chainId === chainId
1654
+ );
1655
+ if (txIndex === void 0 || txIndex === -1) return;
1656
+ const tx = response?.txs?.[txIndex];
1657
+ if (tx && "cosmosTx" in tx) {
1658
+ tx.cosmosTx.msgs?.unshift(...msgs);
1659
+ }
1660
+ });
1661
+ }
1662
+ const { transactionDetails, executeTransaction } = await executeTransactions({ ...options, routeId, txs: response?.txs });
1663
+ await chunkBCX2D6TE_cjs.executeAndSubscribeToRouteStatus({
1664
+ transactionDetails,
1665
+ executeTransaction,
1666
+ routeId,
1667
+ options
1668
+ });
1669
+ };
1670
+
1671
+ // src/public-functions/executeMultipleRoutes.ts
1672
+ var executeMultipleRoutes = async (options) => {
1673
+ const {
1674
+ route: route2,
1675
+ userAddresses,
1676
+ appendCosmosMsgs,
1677
+ postRouteHandler,
1678
+ slippageTolerancePercent,
1679
+ ...restOptions
1680
+ } = options;
1681
+ const addressList = {};
1682
+ for (const [routeKey, routeValue] of Object.entries(route2)) {
1683
+ const _userAddresses = userAddresses[routeKey];
1684
+ if (_userAddresses === void 0) {
1685
+ throw new Error(
1686
+ `executeMultipleRoutes error: no user addresses found for route: ${routeKey}`
1687
+ );
1688
+ }
1689
+ const routeAddressList = await createValidAddressList({
1690
+ userAddresses: _userAddresses,
1691
+ route: routeValue
1692
+ });
1693
+ addressList[routeKey] = routeAddressList;
1694
+ }
1695
+ const msgsResponses = await Promise.all(
1696
+ Object.entries(route2).map(async ([routeKey, routeValue]) => {
1697
+ const routeAddressList = addressList[routeKey];
1698
+ if (routeAddressList === void 0) {
1699
+ throw new Error(
1700
+ `executeMultipleRoutes error: address list not found for route ${routeKey}`
1701
+ );
1702
+ }
1703
+ return await chunk3NHW3XWK_cjs.messages({
1704
+ timeoutSeconds: options.timeoutSeconds,
1705
+ amountIn: routeValue?.amountIn,
1706
+ amountOut: routeValue.estimatedAmountOut || "0",
1707
+ sourceAssetChainId: routeValue?.sourceAssetChainId,
1708
+ sourceAssetDenom: routeValue?.sourceAssetDenom,
1709
+ destAssetChainId: routeValue?.destAssetChainId,
1710
+ destAssetDenom: routeValue?.destAssetDenom,
1711
+ operations: routeValue?.operations,
1712
+ addressList: routeAddressList,
1713
+ slippageTolerancePercent: slippageTolerancePercent?.[routeKey] || "1",
1714
+ chainIdsToAffiliates: chunkHFEMNOJS_cjs.ApiState.chainIdsToAffiliates,
1715
+ postRouteHandler: postRouteHandler?.[routeKey],
1716
+ feePayerAddress: options.svmFeePayer?.address
1717
+ });
1718
+ })
1719
+ );
1720
+ let msgsRecord = {};
1721
+ msgsResponses.forEach((msg, index2) => {
1722
+ const routeKey = Object.keys(route2)[index2];
1723
+ if (!routeKey) {
1724
+ throw new Error(
1725
+ `executeMultipleRoutes error: route key not found for index ${index2}`
1726
+ );
1727
+ }
1728
+ const addedCosmosMsgs = appendCosmosMsgs?.[routeKey];
1729
+ if (addedCosmosMsgs) {
1730
+ Object.entries(addedCosmosMsgs).forEach(([chainId, msgs]) => {
1731
+ const txIndex = msg?.txs?.findIndex(
1732
+ (tx2) => "cosmosTx" in tx2 && tx2.cosmosTx.chainId === chainId
1733
+ );
1734
+ if (txIndex === void 0 || txIndex === -1) return;
1735
+ const tx = msg?.txs?.[txIndex];
1736
+ if (tx && "cosmosTx" in tx) {
1737
+ tx.cosmosTx.msgs?.unshift(...msgs);
1738
+ }
1739
+ });
1740
+ }
1741
+ msgsRecord[routeKey] = msg;
1742
+ });
1743
+ let transferIndexToRouteKey = void 0;
1744
+ const cosmosTxIndex0Map = /* @__PURE__ */ new Map();
1745
+ let transferIndex = 0;
1746
+ for (const [routeKey, msgs] of Object.entries(msgsRecord)) {
1747
+ const firstTx = msgs?.txs?.[0];
1748
+ if (firstTx && "cosmosTx" in firstTx) {
1749
+ const { chainId, msgs: firstTxMsgs } = firstTx.cosmosTx;
1750
+ if (!transferIndexToRouteKey) {
1751
+ transferIndexToRouteKey = {};
1752
+ }
1753
+ transferIndexToRouteKey[transferIndex] = routeKey;
1754
+ transferIndex++;
1755
+ if (!cosmosTxIndex0Map.has(chainId)) {
1756
+ cosmosTxIndex0Map.set(chainId, {
1757
+ routeKey,
1758
+ firstCosmosTx: firstTx.cosmosTx
1759
+ });
1760
+ } else {
1761
+ const existing = cosmosTxIndex0Map.get(chainId);
1762
+ if (existing && firstTxMsgs) {
1763
+ const modifyTarget = msgsRecord[existing.routeKey]?.txs?.[0];
1764
+ if (modifyTarget && "cosmosTx" in modifyTarget) {
1765
+ modifyTarget.cosmosTx.msgs?.push(...firstTxMsgs);
1766
+ msgsRecord[routeKey]?.txs?.shift();
1767
+ }
1768
+ }
1769
+ }
1770
+ }
1771
+ }
1772
+ Object.entries(msgsRecord).forEach(([routeKey, msgs]) => {
1773
+ if (msgs?.txs?.length === 0) {
1774
+ delete msgsRecord[routeKey];
1775
+ }
1776
+ });
1777
+ let mainRouteId = void 0;
1778
+ let msgsRecordIndexToRouteId = {};
1779
+ let index = 0;
1780
+ const transactionDetailsList = {};
1781
+ const executeTransactionList = {};
1782
+ const mergedMainAndSecondaryRoutes = Object.entries(msgsRecord).length !== Object.entries(route2).length;
1783
+ for (const [routeKey, msgsResponse] of Object.entries(msgsRecord)) {
1784
+ const { id: routeId } = chunkBCX2D6TE_cjs.updateRouteDetails({
1785
+ status: "unconfirmed",
1786
+ options: {
1787
+ route: route2[routeKey],
1788
+ ...restOptions
1789
+ },
1790
+ mainRouteId,
1791
+ transferIndexToRouteKey
1792
+ });
1793
+ msgsRecordIndexToRouteId[index] = routeId;
1794
+ if (routeKey === "mainRoute") {
1795
+ mainRouteId = routeId;
1796
+ }
1797
+ const { transactionDetails, executeTransaction: _executeTransaction } = await executeTransactions({
1798
+ ...restOptions,
1799
+ routeId,
1800
+ txs: msgsResponse?.txs,
1801
+ route: route2[routeKey],
1802
+ userAddresses: userAddresses[routeKey],
1803
+ isMultiRoutes: true
1804
+ });
1805
+ const executeTransaction = async (index2) => {
1806
+ const txResult = await _executeTransaction(index2);
1807
+ if (routeKey !== "mainRoute" || mergedMainAndSecondaryRoutes) {
1808
+ const relatedRoutes = Object.entries(route2).filter(([key]) => key !== "mainRoute").map(([key, route3]) => ({ route: route3, routeKey: key, status: "pending" }));
1809
+ chunkBCX2D6TE_cjs.updateRouteDetails({
1810
+ options: {
1811
+ route: route2[routeKey],
1812
+ ...restOptions
1813
+ },
1814
+ routeId: mainRouteId,
1815
+ transferIndexToRouteKey,
1816
+ relatedRoutes
1817
+ });
1818
+ }
1819
+ return txResult;
1820
+ };
1821
+ if (transactionDetails[0]?.chainType === "evm" /* Evm */) {
1822
+ for (const [index2, transactionDetail] of transactionDetails.entries()) {
1823
+ const txResult = await executeTransaction(index2);
1824
+ if (txResult.txHash) {
1825
+ const trackResponse = await chunkPLO5CVGN_cjs.trackTransaction({
1826
+ chainId: transactionDetail.chainId,
1827
+ txHash: txResult.txHash,
1828
+ ...options.trackTxPollingOptions
1829
+ });
1830
+ await options?.onTransactionTracked?.({
1831
+ txHash: txResult.txHash,
1832
+ chainId: transactionDetail.chainId,
1833
+ explorerLink: trackResponse.explorerLink
1834
+ });
1835
+ transactionDetail.txHash = txResult.txHash;
1836
+ transactionDetail.explorerLink = trackResponse.explorerLink;
1837
+ }
1838
+ }
1839
+ } else {
1840
+ executeTransactionList[index] = executeTransaction;
1841
+ }
1842
+ transactionDetailsList[index] = transactionDetails;
1843
+ index++;
1844
+ }
1845
+ await Promise.all(
1846
+ Object.entries(msgsRecord).map(([routeKey, msgsResponse], index2) => {
1847
+ return chunkBCX2D6TE_cjs.executeAndSubscribeToRouteStatus({
1848
+ transactionDetails: transactionDetailsList[index2],
1849
+ executeTransaction: executeTransactionList[index2],
1850
+ routeId: msgsRecordIndexToRouteId[index2],
1851
+ options: {
1852
+ route: route2[routeKey],
1853
+ userAddresses: userAddresses[routeKey],
1854
+ ...restOptions,
1855
+ onRouteStatusUpdated: (routeStatus) => {
1856
+ const relatedRoutes = Object.entries(route2).filter(([key]) => key !== "mainRoute").map(([key, route3]) => ({ route: route3, routeKey: key, status: routeStatus.status }));
1857
+ if (routeKey !== "mainRoute") {
1858
+ chunkBCX2D6TE_cjs.updateRouteDetails({
1859
+ options: {
1860
+ route: route2[routeKey],
1861
+ ...restOptions
1862
+ },
1863
+ routeId: mainRouteId,
1864
+ transferIndexToRouteKey,
1865
+ relatedRoutes
1866
+ });
1867
+ }
1868
+ options.onRouteStatusUpdated?.(routeStatus);
1869
+ }
1870
+ }
1871
+ });
1872
+ })
1873
+ );
1874
+ };
1875
+
1876
+ // src/utils/coingecko.ts
1877
+ var getUsdPrice = async (coingeckoId) => {
1878
+ try {
1879
+ const response = await fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${coingeckoId}&vs_currencies=usd`);
1880
+ const data = await response.json();
1881
+ return data?.[coingeckoId]?.usd;
1882
+ } catch (error) {
1883
+ return void 0;
1884
+ }
1885
+ };
1886
+
1887
+ // src/utils/numbers.ts
1888
+ var convertHumanReadableAmountToCryptoAmount = (humanReadableAmount, decimals) => {
1889
+ const cryptoAmount = new chunkWKYP2NMS_cjs.bignumber_default(humanReadableAmount).shiftedBy(decimals);
1890
+ return cryptoAmount.toFixed(0);
1891
+ };
1892
+ var formaTestnet = viem.defineChain({
1893
+ id: 984123,
1894
+ name: "Forma Testnet",
1895
+ nativeCurrency: {
1896
+ name: "TIA",
1897
+ symbol: "TIA",
1898
+ decimals: 18
1899
+ },
1900
+ rpcUrls: {
1901
+ default: {
1902
+ http: ["https://rpc.sketchpad-1.forma.art"]
1903
+ }
1904
+ },
1905
+ blockExplorers: {
1906
+ default: {
1907
+ name: "Forma Explorer",
1908
+ url: "https://explorer.sketchpad-1.forma.art"
1909
+ }
1910
+ },
1911
+ testnet: true
1912
+ });
1913
+ var evmChains = [
1914
+ chains.arbitrum,
1915
+ chains.avalanche,
1916
+ chains.base,
1917
+ chains.bsc,
1918
+ chains.celo,
1919
+ chains.fantom,
1920
+ chains.filecoin,
1921
+ chains.kava,
1922
+ chains.linea,
1923
+ chains.mainnet,
1924
+ chains.manta,
1925
+ chains.moonbeam,
1926
+ chains.optimism,
1927
+ chains.polygon,
1928
+ chains.polygonMumbai,
1929
+ chains.sepolia,
1930
+ chains.avalancheFuji,
1931
+ chains.baseSepolia,
1932
+ chains.optimismSepolia,
1933
+ chains.arbitrumSepolia,
1934
+ chains.blast,
1935
+ chains.blastSepolia,
1936
+ chains.forma,
1937
+ formaTestnet,
1938
+ chains.sei,
1939
+ chains.bscTestnet,
1940
+ chains.fantomTestnet,
1941
+ chains.kavaTestnet,
1942
+ chains.lineaSepolia,
1943
+ chains.mantaSepoliaTestnet
1944
+ ];
1945
+
1946
+ // src/utils/array.ts
1947
+ function isSubset(arrayA, arrayB) {
1948
+ const setA = new Set(arrayA);
1949
+ return arrayB.every((item) => setA.has(item));
1950
+ }
1951
+
1952
+ // src/public-functions/getRouteWithGasOnReceive.ts
1953
+ var GAS_ON_RECEIVE_AMOUNT_USD = {
1954
+ ["cosmos" /* Cosmos */]: 0.1,
1955
+ evm_l2: 2
1956
+ };
1957
+ var DISABLED_SOURCE_CHAINIDS = ["1", "11155111"];
1958
+ var DISABLED_DESTINATION_CHAINIDS = ["solana", "solana-devnet"];
1959
+ var getRouteWithGasOnReceive = async (props) => {
1960
+ const originalRoute = props.routeResponse;
1961
+ try {
1962
+ if (DISABLED_SOURCE_CHAINIDS.includes(originalRoute.sourceAssetChainId)) {
1963
+ throw new Error(
1964
+ `Routes from ${originalRoute.sourceAssetChainId} are not supported`
1965
+ );
1966
+ }
1967
+ if (DISABLED_DESTINATION_CHAINIDS.includes(originalRoute.destAssetChainId)) {
1968
+ throw new Error(
1969
+ `Routes to ${originalRoute.destAssetChainId} are not supported`
1970
+ );
1971
+ }
1972
+ const skipChains = chunkQAHHTQ7V_cjs.ClientState.skipChains ? chunkQAHHTQ7V_cjs.ClientState.skipChains : await chunkQAHHTQ7V_cjs.chains({
1973
+ includeEvm: true,
1974
+ includeSvm: true,
1975
+ chainIds: [
1976
+ originalRoute.sourceAssetChainId,
1977
+ originalRoute.destAssetChainId
1978
+ ],
1979
+ onlyTestnets: props.onlyTestnets
1980
+ });
1981
+ const skipAssets = chunkQAHHTQ7V_cjs.ClientState.skipAssets ? chunkQAHHTQ7V_cjs.ClientState.skipAssets : await chunkQAHHTQ7V_cjs.assets({
1982
+ chainIds: [
1983
+ originalRoute.sourceAssetChainId,
1984
+ originalRoute.destAssetChainId
1985
+ ],
1986
+ includeEvmAssets: true,
1987
+ includeSvmAssets: true,
1988
+ onlyTestnets: props.onlyTestnets
1989
+ });
1990
+ const destinationChain = skipChains?.find(
1991
+ (chain) => chain.chainId === originalRoute.destAssetChainId
1992
+ );
1993
+ if (destinationChain?.feeAssets.map((i) => i.denom).includes(originalRoute.destAssetDenom)) {
1994
+ throw new Error(
1995
+ "Destination asset is already a fee asset on the destination chain"
1996
+ );
1997
+ }
1998
+ const gasOnReceiveAmount = await getGasOnReceiveAmount({
1999
+ destinationChain,
2000
+ skipAssets,
2001
+ sourceAsset: skipAssets?.[originalRoute.sourceAssetChainId]?.find(
2002
+ (i) => i.denom === originalRoute.sourceAssetDenom
2003
+ )
2004
+ });
2005
+ if (!gasOnReceiveAmount || gasOnReceiveAmount.length === 0) {
2006
+ throw new Error(
2007
+ "No gas on receive amount found for the destination chain"
2008
+ );
2009
+ }
2010
+ const splitDenoms = chunkArray(gasOnReceiveAmount, 3);
2011
+ let gasRoute;
2012
+ for (const chunk of splitDenoms) {
2013
+ const feeAssetRoutes = chunk.map(
2014
+ async ({ amountOut, denom, amountIn }) => {
2015
+ try {
2016
+ const res = await chunk7SZZBUBD_cjs.route({
2017
+ ...props.routeRequest,
2018
+ destAssetDenom: denom,
2019
+ amountIn,
2020
+ amountOut,
2021
+ allowMultiTx: false
2022
+ });
2023
+ return res;
2024
+ } catch (_e) {
2025
+ return null;
2026
+ }
2027
+ }
2028
+ );
2029
+ const result = await Promise.all(feeAssetRoutes);
2030
+ const _gasRoute = result.find((result2) => result2?.usdAmountOut);
2031
+ if (_gasRoute?.usdAmountOut) {
2032
+ gasRoute = _gasRoute;
2033
+ break;
2034
+ }
2035
+ }
2036
+ if (!gasRoute) {
2037
+ throw new Error(
2038
+ "No gas route found for the destination chain with the provided assets"
2039
+ );
2040
+ }
2041
+ const mainRouteAmountIn = chunkWKYP2NMS_cjs.bignumber_default(originalRoute?.amountIn ?? 0).minus(chunkWKYP2NMS_cjs.bignumber_default(gasRoute.amountIn ?? 0)).toString();
2042
+ const mainRoute = await chunk7SZZBUBD_cjs.route({
2043
+ ...props.routeRequest,
2044
+ amountIn: mainRouteAmountIn,
2045
+ amountOut: void 0
2046
+ });
2047
+ if (!mainRoute) {
2048
+ throw new Error("No main route found with the provided assets");
2049
+ }
2050
+ if (originalRoute.txsRequired !== mainRoute.txsRequired || !isSubset(
2051
+ originalRoute?.requiredChainAddresses,
2052
+ mainRoute.requiredChainAddresses
2053
+ )) {
2054
+ throw new Error("Main route does not match the original route");
2055
+ }
2056
+ return {
2057
+ mainRoute,
2058
+ gasRoute
2059
+ };
2060
+ } catch (error) {
2061
+ return {
2062
+ mainRoute: originalRoute,
2063
+ gasRoute: void 0
2064
+ };
2065
+ }
2066
+ };
2067
+ var getGasOnReceiveAmount = async ({
2068
+ destinationChain,
2069
+ skipAssets,
2070
+ sourceAsset
2071
+ }) => {
2072
+ switch (destinationChain?.chainType) {
2073
+ case "cosmos" /* Cosmos */: {
2074
+ const usdPrice = sourceAsset?.coingeckoId ? await getUsdPrice(sourceAsset.coingeckoId) : void 0;
2075
+ return destinationChain.feeAssets.map((asset) => {
2076
+ const destinationAsset = skipAssets?.[destinationChain.chainId]?.find(
2077
+ (i) => i.denom === asset.denom
2078
+ );
2079
+ const gasPrice = asset.gasPrice?.average ?? asset.gasPrice?.high ?? asset.gasPrice?.low;
2080
+ if (!gasPrice || Number(gasPrice) === 0) {
2081
+ if (!usdPrice || !sourceAsset?.decimals) return;
2082
+ const gasOnReceiveAmountUsd = GAS_ON_RECEIVE_AMOUNT_USD["cosmos"];
2083
+ const amountIn = chunkWKYP2NMS_cjs.bignumber_default(gasOnReceiveAmountUsd).multipliedBy(usdPrice).toString();
2084
+ return {
2085
+ amountIn: convertHumanReadableAmountToCryptoAmount(
2086
+ amountIn,
2087
+ sourceAsset.decimals
2088
+ ),
2089
+ amountOut: void 0,
2090
+ denom: asset.denom
2091
+ };
2092
+ }
2093
+ return {
2094
+ amountIn: void 0,
2095
+ amountOut: gasPrice && destinationAsset?.decimals ? convertHumanReadableAmountToCryptoAmount(
2096
+ chunkWKYP2NMS_cjs.bignumber_default(gasPrice).multipliedBy(3).toNumber(),
2097
+ destinationAsset.decimals
2098
+ ) : void 0,
2099
+ denom: asset.denom
2100
+ };
2101
+ }).filter(Boolean);
2102
+ }
2103
+ case "evm" /* Evm */: {
2104
+ const sourceAssetPrice = sourceAsset?.coingeckoId ? await getUsdPrice(sourceAsset?.coingeckoId) : void 0;
2105
+ const destinationAsset = skipAssets?.[destinationChain.chainId]?.find(
2106
+ (i) => i.denom.includes("-native")
2107
+ );
2108
+ if (!sourceAssetPrice) {
2109
+ const chain = evmChains.find(
2110
+ (chain2) => chain2.id === Number(destinationChain?.chainId)
2111
+ );
2112
+ const client = viem.createPublicClient({
2113
+ chain,
2114
+ transport: viem.fallback([
2115
+ viem.http("https://ethereum.publicnode.com"),
2116
+ viem.http("https://rpc.ankr.com/eth"),
2117
+ viem.http("https://cloudflare-eth.com")
2118
+ ])
2119
+ });
2120
+ const fees = await client.estimateFeesPerGas();
2121
+ return [
2122
+ {
2123
+ amountIn: void 0,
2124
+ amountOut: chunkWKYP2NMS_cjs.bignumber_default(15e4).multipliedBy(fees.maxFeePerGas.toString()).multipliedBy(3).toString(),
2125
+ denom: destinationAsset?.denom
2126
+ }
2127
+ ];
2128
+ }
2129
+ const gasPrice = chunkWKYP2NMS_cjs.bignumber_default(GAS_ON_RECEIVE_AMOUNT_USD["evm_l2"]).dividedBy(
2130
+ sourceAssetPrice
2131
+ ).toString();
2132
+ return [
2133
+ {
2134
+ amountOut: void 0,
2135
+ amountIn: sourceAsset?.decimals ? convertHumanReadableAmountToCryptoAmount(
2136
+ gasPrice,
2137
+ sourceAsset.decimals
2138
+ ) : void 0,
2139
+ denom: destinationAsset?.denom
2140
+ }
2141
+ ];
2142
+ }
2143
+ default: {
2144
+ return;
2145
+ }
2146
+ }
2147
+ };
2148
+ var chunkArray = (arr, size = 3) => {
2149
+ const result = [];
2150
+ for (let i = 0; i < arr.length; i += size) {
2151
+ result.push(arr.slice(i, i + size));
2152
+ }
2153
+ return result;
2154
+ };
2155
+
2156
+ exports.AutopilotActionJson = AutopilotActionJson;
2157
+ exports.AxelarTransferStateJson = AxelarTransferStateJson;
2158
+ exports.AxelarTransferTypeJson = AxelarTransferTypeJson;
2159
+ exports.BridgeTypeJson = BridgeTypeJson;
2160
+ exports.CCTPTransferStateJson = CCTPTransferStateJson;
2161
+ exports.ChainTypeJson = ChainTypeJson;
2162
+ exports.ContractCallWithTokenErrorTypeJson = ContractCallWithTokenErrorTypeJson;
2163
+ exports.FeeBehaviorJson = FeeBehaviorJson;
2164
+ exports.FeeTypeJson = FeeTypeJson;
2165
+ exports.GoFastTransferStateJson = GoFastTransferStateJson;
2166
+ exports.HyperlaneTransferStateJson = HyperlaneTransferStateJson;
2167
+ exports.LayerZeroTransferStateJson = LayerZeroTransferStateJson;
2168
+ exports.OPInitTransferStateJson = OPInitTransferStateJson;
2169
+ exports.PacketErrorTypeJson = PacketErrorTypeJson;
2170
+ exports.ReasonJson = ReasonJson;
2171
+ exports.RoutePriceWarningTypeJson = RoutePriceWarningTypeJson;
2172
+ exports.SendTokenErrorTypeJson = SendTokenErrorTypeJson;
2173
+ exports.StargateTransferStateJson = StargateTransferStateJson;
2174
+ exports.StatusErrorTypeJson = StatusErrorTypeJson;
2175
+ exports.TransactionStateJson = TransactionStateJson;
2176
+ exports.TransferStateJson = TransferStateJson;
2177
+ exports.executeMultipleRoutes = executeMultipleRoutes;
2178
+ exports.executeRoute = executeRoute;
2179
+ exports.getRouteWithGasOnReceive = getRouteWithGasOnReceive;