@sodax/sdk 0.0.1-rc.1

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 (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/dist/abis/asset-manager.abi.d.ts +418 -0
  4. package/dist/abis/asset-manager.abi.d.ts.map +1 -0
  5. package/dist/abis/asset-manager.abi.js +542 -0
  6. package/dist/abis/asset-manager.abi.js.map +1 -0
  7. package/dist/abis/connection.abi.d.ts +72 -0
  8. package/dist/abis/connection.abi.d.ts.map +1 -0
  9. package/dist/abis/connection.abi.js +92 -0
  10. package/dist/abis/connection.abi.js.map +1 -0
  11. package/dist/abis/erc20.abi.d.ts +236 -0
  12. package/dist/abis/erc20.abi.d.ts.map +1 -0
  13. package/dist/abis/erc20.abi.js +311 -0
  14. package/dist/abis/erc20.abi.js.map +1 -0
  15. package/dist/abis/index.d.ts +10 -0
  16. package/dist/abis/index.d.ts.map +1 -0
  17. package/dist/abis/index.js +10 -0
  18. package/dist/abis/index.js.map +1 -0
  19. package/dist/abis/intents.abi.d.ts +901 -0
  20. package/dist/abis/intents.abi.d.ts.map +1 -0
  21. package/dist/abis/intents.abi.js +1158 -0
  22. package/dist/abis/intents.abi.js.map +1 -0
  23. package/dist/abis/pool.abi.d.ts +626 -0
  24. package/dist/abis/pool.abi.d.ts.map +1 -0
  25. package/dist/abis/pool.abi.js +812 -0
  26. package/dist/abis/pool.abi.js.map +1 -0
  27. package/dist/abis/spokeAssetManager.abi.d.ts +169 -0
  28. package/dist/abis/spokeAssetManager.abi.d.ts.map +1 -0
  29. package/dist/abis/spokeAssetManager.abi.js +217 -0
  30. package/dist/abis/spokeAssetManager.abi.js.map +1 -0
  31. package/dist/abis/uiPoolData.abi.d.ts +369 -0
  32. package/dist/abis/uiPoolData.abi.d.ts.map +1 -0
  33. package/dist/abis/uiPoolData.abi.js +476 -0
  34. package/dist/abis/uiPoolData.abi.js.map +1 -0
  35. package/dist/abis/vaultToken.abi.d.ts +816 -0
  36. package/dist/abis/vaultToken.abi.d.ts.map +1 -0
  37. package/dist/abis/vaultToken.abi.js +1062 -0
  38. package/dist/abis/vaultToken.abi.js.map +1 -0
  39. package/dist/abis/walletFactory.abi.d.ts +20 -0
  40. package/dist/abis/walletFactory.abi.d.ts.map +1 -0
  41. package/dist/abis/walletFactory.abi.js +27 -0
  42. package/dist/abis/walletFactory.abi.js.map +1 -0
  43. package/dist/constants.d.ts +565 -0
  44. package/dist/constants.d.ts.map +1 -0
  45. package/dist/constants.js +1196 -0
  46. package/dist/constants.js.map +1 -0
  47. package/dist/constants.test.d.ts +2 -0
  48. package/dist/constants.test.d.ts.map +1 -0
  49. package/dist/constants.test.js +128 -0
  50. package/dist/constants.test.js.map +1 -0
  51. package/dist/entities/Providers.d.ts +61 -0
  52. package/dist/entities/Providers.d.ts.map +1 -0
  53. package/dist/entities/Providers.js +51 -0
  54. package/dist/entities/Providers.js.map +1 -0
  55. package/dist/entities/Sodax.d.ts +23 -0
  56. package/dist/entities/Sodax.d.ts.map +1 -0
  57. package/dist/entities/Sodax.js +29 -0
  58. package/dist/entities/Sodax.js.map +1 -0
  59. package/dist/entities/Sodax.test.d.ts +2 -0
  60. package/dist/entities/Sodax.test.d.ts.map +1 -0
  61. package/dist/entities/Sodax.test.js +376 -0
  62. package/dist/entities/Sodax.test.js.map +1 -0
  63. package/dist/entities/cosmos/CW20Token.d.ts +39 -0
  64. package/dist/entities/cosmos/CW20Token.d.ts.map +1 -0
  65. package/dist/entities/cosmos/CW20Token.js +65 -0
  66. package/dist/entities/cosmos/CW20Token.js.map +1 -0
  67. package/dist/entities/cosmos/CWSpokeProvider.d.ts +91 -0
  68. package/dist/entities/cosmos/CWSpokeProvider.d.ts.map +1 -0
  69. package/dist/entities/cosmos/CWSpokeProvider.js +143 -0
  70. package/dist/entities/cosmos/CWSpokeProvider.js.map +1 -0
  71. package/dist/entities/cosmos/CosmosWalletProvider.d.ts +28 -0
  72. package/dist/entities/cosmos/CosmosWalletProvider.d.ts.map +1 -0
  73. package/dist/entities/cosmos/CosmosWalletProvider.js +102 -0
  74. package/dist/entities/cosmos/CosmosWalletProvider.js.map +1 -0
  75. package/dist/entities/cosmos/InjectiveWalletProvider.d.ts +25 -0
  76. package/dist/entities/cosmos/InjectiveWalletProvider.d.ts.map +1 -0
  77. package/dist/entities/cosmos/InjectiveWalletProvider.js +76 -0
  78. package/dist/entities/cosmos/InjectiveWalletProvider.js.map +1 -0
  79. package/dist/entities/icon/HanaWalletConnector.d.ts +36 -0
  80. package/dist/entities/icon/HanaWalletConnector.d.ts.map +1 -0
  81. package/dist/entities/icon/HanaWalletConnector.js +92 -0
  82. package/dist/entities/icon/HanaWalletConnector.js.map +1 -0
  83. package/dist/entities/icon/IconSpokeProvider.d.ts +8 -0
  84. package/dist/entities/icon/IconSpokeProvider.d.ts.map +1 -0
  85. package/dist/entities/icon/IconSpokeProvider.js +9 -0
  86. package/dist/entities/icon/IconSpokeProvider.js.map +1 -0
  87. package/dist/entities/icon/IconWalletProvider.d.ts +12 -0
  88. package/dist/entities/icon/IconWalletProvider.d.ts.map +1 -0
  89. package/dist/entities/icon/IconWalletProvider.js +34 -0
  90. package/dist/entities/icon/IconWalletProvider.js.map +1 -0
  91. package/dist/entities/icon/index.d.ts +5 -0
  92. package/dist/entities/icon/index.d.ts.map +1 -0
  93. package/dist/entities/icon/index.js +5 -0
  94. package/dist/entities/icon/index.js.map +1 -0
  95. package/dist/entities/icon/utils.d.ts +3 -0
  96. package/dist/entities/icon/utils.d.ts.map +1 -0
  97. package/dist/entities/icon/utils.js +4 -0
  98. package/dist/entities/icon/utils.js.map +1 -0
  99. package/dist/entities/index.d.ts +8 -0
  100. package/dist/entities/index.d.ts.map +1 -0
  101. package/dist/entities/index.js +8 -0
  102. package/dist/entities/index.js.map +1 -0
  103. package/dist/entities/solana/Configs.d.ts +10 -0
  104. package/dist/entities/solana/Configs.d.ts.map +1 -0
  105. package/dist/entities/solana/Configs.js +50 -0
  106. package/dist/entities/solana/Configs.js.map +1 -0
  107. package/dist/entities/solana/SolanaSpokeProvider.d.ts +9 -0
  108. package/dist/entities/solana/SolanaSpokeProvider.d.ts.map +1 -0
  109. package/dist/entities/solana/SolanaSpokeProvider.js +9 -0
  110. package/dist/entities/solana/SolanaSpokeProvider.js.map +1 -0
  111. package/dist/entities/solana/SolanaWalletProvider.d.ts +20 -0
  112. package/dist/entities/solana/SolanaWalletProvider.d.ts.map +1 -0
  113. package/dist/entities/solana/SolanaWalletProvider.js +53 -0
  114. package/dist/entities/solana/SolanaWalletProvider.js.map +1 -0
  115. package/dist/entities/solana/index.d.ts +4 -0
  116. package/dist/entities/solana/index.d.ts.map +1 -0
  117. package/dist/entities/solana/index.js +4 -0
  118. package/dist/entities/solana/index.js.map +1 -0
  119. package/dist/entities/solana/pda/pda.d.ts +45 -0
  120. package/dist/entities/solana/pda/pda.d.ts.map +1 -0
  121. package/dist/entities/solana/pda/pda.js +44 -0
  122. package/dist/entities/solana/pda/pda.js.map +1 -0
  123. package/dist/entities/solana/types/asset_manager.d.ts +919 -0
  124. package/dist/entities/solana/types/asset_manager.d.ts.map +1 -0
  125. package/dist/entities/solana/types/asset_manager.js +2 -0
  126. package/dist/entities/solana/types/asset_manager.js.map +1 -0
  127. package/dist/entities/solana/types/connection.d.ts +446 -0
  128. package/dist/entities/solana/types/connection.d.ts.map +1 -0
  129. package/dist/entities/solana/types/connection.js +2 -0
  130. package/dist/entities/solana/types/connection.js.map +1 -0
  131. package/dist/entities/solana/types/rate_limit_contract.d.ts +348 -0
  132. package/dist/entities/solana/types/rate_limit_contract.d.ts.map +1 -0
  133. package/dist/entities/solana/types/rate_limit_contract.js +2 -0
  134. package/dist/entities/solana/types/rate_limit_contract.js.map +1 -0
  135. package/dist/entities/solana/utils/utils.d.ts +6 -0
  136. package/dist/entities/solana/utils/utils.d.ts.map +1 -0
  137. package/dist/entities/solana/utils/utils.js +17 -0
  138. package/dist/entities/solana/utils/utils.js.map +1 -0
  139. package/dist/entities/stellar/StellarSpokeProvider.d.ts +24 -0
  140. package/dist/entities/stellar/StellarSpokeProvider.d.ts.map +1 -0
  141. package/dist/entities/stellar/StellarSpokeProvider.js +129 -0
  142. package/dist/entities/stellar/StellarSpokeProvider.js.map +1 -0
  143. package/dist/entities/sui/SuiSpokeProvider.d.ts +34 -0
  144. package/dist/entities/sui/SuiSpokeProvider.d.ts.map +1 -0
  145. package/dist/entities/sui/SuiSpokeProvider.js +143 -0
  146. package/dist/entities/sui/SuiSpokeProvider.js.map +1 -0
  147. package/dist/entities/sui/SuiWalletProvider.d.ts +15 -0
  148. package/dist/entities/sui/SuiWalletProvider.d.ts.map +1 -0
  149. package/dist/entities/sui/SuiWalletProvider.js +43 -0
  150. package/dist/entities/sui/SuiWalletProvider.js.map +1 -0
  151. package/dist/errors.d.ts +2 -0
  152. package/dist/errors.d.ts.map +1 -0
  153. package/dist/errors.js +2 -0
  154. package/dist/errors.js.map +1 -0
  155. package/dist/guards.d.ts +25 -0
  156. package/dist/guards.d.ts.map +1 -0
  157. package/dist/guards.js +110 -0
  158. package/dist/guards.js.map +1 -0
  159. package/dist/index.d.ts +10 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +10 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/interfaces.d.ts +8 -0
  164. package/dist/interfaces.d.ts.map +1 -0
  165. package/dist/interfaces.js +2 -0
  166. package/dist/interfaces.js.map +1 -0
  167. package/dist/services/hub/EvmAssetManagerService.d.ts +60 -0
  168. package/dist/services/hub/EvmAssetManagerService.d.ts.map +1 -0
  169. package/dist/services/hub/EvmAssetManagerService.js +103 -0
  170. package/dist/services/hub/EvmAssetManagerService.js.map +1 -0
  171. package/dist/services/hub/EvmVaultTokenService.d.ts +81 -0
  172. package/dist/services/hub/EvmVaultTokenService.d.ts.map +1 -0
  173. package/dist/services/hub/EvmVaultTokenService.js +159 -0
  174. package/dist/services/hub/EvmVaultTokenService.js.map +1 -0
  175. package/dist/services/hub/EvmWalletAbstraction.d.ts +8 -0
  176. package/dist/services/hub/EvmWalletAbstraction.d.ts.map +1 -0
  177. package/dist/services/hub/EvmWalletAbstraction.js +14 -0
  178. package/dist/services/hub/EvmWalletAbstraction.js.map +1 -0
  179. package/dist/services/hub/index.d.ts +4 -0
  180. package/dist/services/hub/index.d.ts.map +1 -0
  181. package/dist/services/hub/index.js +4 -0
  182. package/dist/services/hub/index.js.map +1 -0
  183. package/dist/services/index.d.ts +7 -0
  184. package/dist/services/index.d.ts.map +1 -0
  185. package/dist/services/index.js +7 -0
  186. package/dist/services/index.js.map +1 -0
  187. package/dist/services/intentRelay/IntentRelayApiService.d.ts +111 -0
  188. package/dist/services/intentRelay/IntentRelayApiService.d.ts.map +1 -0
  189. package/dist/services/intentRelay/IntentRelayApiService.js +160 -0
  190. package/dist/services/intentRelay/IntentRelayApiService.js.map +1 -0
  191. package/dist/services/intentRelay/IntentRelayApiService.test.d.ts +2 -0
  192. package/dist/services/intentRelay/IntentRelayApiService.test.d.ts.map +1 -0
  193. package/dist/services/intentRelay/IntentRelayApiService.test.js +134 -0
  194. package/dist/services/intentRelay/IntentRelayApiService.test.js.map +1 -0
  195. package/dist/services/intentRelay/index.d.ts +2 -0
  196. package/dist/services/intentRelay/index.d.ts.map +1 -0
  197. package/dist/services/intentRelay/index.js +2 -0
  198. package/dist/services/intentRelay/index.js.map +1 -0
  199. package/dist/services/moneyMarket/MoneyMarketService.d.ts +321 -0
  200. package/dist/services/moneyMarket/MoneyMarketService.d.ts.map +1 -0
  201. package/dist/services/moneyMarket/MoneyMarketService.js +604 -0
  202. package/dist/services/moneyMarket/MoneyMarketService.js.map +1 -0
  203. package/dist/services/moneyMarket/MoneyMarketService.test.d.ts +2 -0
  204. package/dist/services/moneyMarket/MoneyMarketService.test.d.ts.map +1 -0
  205. package/dist/services/moneyMarket/MoneyMarketService.test.js +245 -0
  206. package/dist/services/moneyMarket/MoneyMarketService.test.js.map +1 -0
  207. package/dist/services/moneyMarket/index.d.ts +2 -0
  208. package/dist/services/moneyMarket/index.d.ts.map +1 -0
  209. package/dist/services/moneyMarket/index.js +2 -0
  210. package/dist/services/moneyMarket/index.js.map +1 -0
  211. package/dist/services/shared/Erc20Service.d.ts +41 -0
  212. package/dist/services/shared/Erc20Service.d.ts.map +1 -0
  213. package/dist/services/shared/Erc20Service.js +107 -0
  214. package/dist/services/shared/Erc20Service.js.map +1 -0
  215. package/dist/services/shared/index.d.ts +2 -0
  216. package/dist/services/shared/index.d.ts.map +1 -0
  217. package/dist/services/shared/index.js +2 -0
  218. package/dist/services/shared/index.js.map +1 -0
  219. package/dist/services/solver/EvmSolverService.d.ts +125 -0
  220. package/dist/services/solver/EvmSolverService.d.ts.map +1 -0
  221. package/dist/services/solver/EvmSolverService.js +166 -0
  222. package/dist/services/solver/EvmSolverService.js.map +1 -0
  223. package/dist/services/solver/SolverApiService.d.ts +40 -0
  224. package/dist/services/solver/SolverApiService.d.ts.map +1 -0
  225. package/dist/services/solver/SolverApiService.js +157 -0
  226. package/dist/services/solver/SolverApiService.js.map +1 -0
  227. package/dist/services/solver/SolverApiService.test.d.ts +2 -0
  228. package/dist/services/solver/SolverApiService.test.d.ts.map +1 -0
  229. package/dist/services/solver/SolverApiService.test.js +180 -0
  230. package/dist/services/solver/SolverApiService.test.js.map +1 -0
  231. package/dist/services/solver/SolverService.d.ts +194 -0
  232. package/dist/services/solver/SolverService.d.ts.map +1 -0
  233. package/dist/services/solver/SolverService.js +324 -0
  234. package/dist/services/solver/SolverService.js.map +1 -0
  235. package/dist/services/solver/SolverService.test.d.ts +2 -0
  236. package/dist/services/solver/SolverService.test.d.ts.map +1 -0
  237. package/dist/services/solver/SolverService.test.js +493 -0
  238. package/dist/services/solver/SolverService.test.js.map +1 -0
  239. package/dist/services/solver/index.d.ts +3 -0
  240. package/dist/services/solver/index.d.ts.map +1 -0
  241. package/dist/services/solver/index.js +3 -0
  242. package/dist/services/solver/index.js.map +1 -0
  243. package/dist/services/spoke/CWSpokeService.d.ts +67 -0
  244. package/dist/services/spoke/CWSpokeService.d.ts.map +1 -0
  245. package/dist/services/spoke/CWSpokeService.js +75 -0
  246. package/dist/services/spoke/CWSpokeService.js.map +1 -0
  247. package/dist/services/spoke/EvmSpokeService.d.ts +61 -0
  248. package/dist/services/spoke/EvmSpokeService.d.ts.map +1 -0
  249. package/dist/services/spoke/EvmSpokeService.js +118 -0
  250. package/dist/services/spoke/EvmSpokeService.js.map +1 -0
  251. package/dist/services/spoke/IconSpokeService.d.ts +55 -0
  252. package/dist/services/spoke/IconSpokeService.d.ts.map +1 -0
  253. package/dist/services/spoke/IconSpokeService.js +111 -0
  254. package/dist/services/spoke/IconSpokeService.js.map +1 -0
  255. package/dist/services/spoke/SolanaSpokeService.d.ts +45 -0
  256. package/dist/services/spoke/SolanaSpokeService.d.ts.map +1 -0
  257. package/dist/services/spoke/SolanaSpokeService.js +170 -0
  258. package/dist/services/spoke/SolanaSpokeService.js.map +1 -0
  259. package/dist/services/spoke/SpokeService.d.ts +33 -0
  260. package/dist/services/spoke/SpokeService.d.ts.map +1 -0
  261. package/dist/services/spoke/SpokeService.js +102 -0
  262. package/dist/services/spoke/SpokeService.js.map +1 -0
  263. package/dist/services/spoke/StellarSpokeService.d.ts +35 -0
  264. package/dist/services/spoke/StellarSpokeService.d.ts.map +1 -0
  265. package/dist/services/spoke/StellarSpokeService.js +39 -0
  266. package/dist/services/spoke/StellarSpokeService.js.map +1 -0
  267. package/dist/services/spoke/SuiSpokeService.d.ts +69 -0
  268. package/dist/services/spoke/SuiSpokeService.d.ts.map +1 -0
  269. package/dist/services/spoke/SuiSpokeService.js +74 -0
  270. package/dist/services/spoke/SuiSpokeService.js.map +1 -0
  271. package/dist/services/spoke/index.d.ts +3 -0
  272. package/dist/services/spoke/index.d.ts.map +1 -0
  273. package/dist/services/spoke/index.js +3 -0
  274. package/dist/services/spoke/index.js.map +1 -0
  275. package/dist/tests/services/hub/EvmAssetManagerService.test.d.ts +2 -0
  276. package/dist/tests/services/hub/EvmAssetManagerService.test.d.ts.map +1 -0
  277. package/dist/tests/services/hub/EvmAssetManagerService.test.js +123 -0
  278. package/dist/tests/services/hub/EvmAssetManagerService.test.js.map +1 -0
  279. package/dist/tests/services/hub/EvmMoneyMarketService.test.d.ts +2 -0
  280. package/dist/tests/services/hub/EvmMoneyMarketService.test.d.ts.map +1 -0
  281. package/dist/tests/services/hub/EvmMoneyMarketService.test.js +121 -0
  282. package/dist/tests/services/hub/EvmMoneyMarketService.test.js.map +1 -0
  283. package/dist/tests/services/hub/EvmVaultTokenService.test.d.ts +2 -0
  284. package/dist/tests/services/hub/EvmVaultTokenService.test.d.ts.map +1 -0
  285. package/dist/tests/services/hub/EvmVaultTokenService.test.js +98 -0
  286. package/dist/tests/services/hub/EvmVaultTokenService.test.js.map +1 -0
  287. package/dist/tests/services/spoke/EvmSpokeService.test.d.ts +2 -0
  288. package/dist/tests/services/spoke/EvmSpokeService.test.d.ts.map +1 -0
  289. package/dist/tests/services/spoke/EvmSpokeService.test.js +197 -0
  290. package/dist/tests/services/spoke/EvmSpokeService.test.js.map +1 -0
  291. package/dist/types.d.ts +395 -0
  292. package/dist/types.d.ts.map +1 -0
  293. package/dist/types.js +30 -0
  294. package/dist/types.js.map +1 -0
  295. package/dist/utils/evm-utils.d.ts +10 -0
  296. package/dist/utils/evm-utils.d.ts.map +1 -0
  297. package/dist/utils/evm-utils.js +15 -0
  298. package/dist/utils/evm-utils.js.map +1 -0
  299. package/dist/utils/index.d.ts +3 -0
  300. package/dist/utils/index.d.ts.map +1 -0
  301. package/dist/utils/index.js +3 -0
  302. package/dist/utils/index.js.map +1 -0
  303. package/dist/utils/shared-utils.d.ts +19 -0
  304. package/dist/utils/shared-utils.d.ts.map +1 -0
  305. package/dist/utils/shared-utils.js +66 -0
  306. package/dist/utils/shared-utils.js.map +1 -0
  307. package/dist/utils/shared-utils.test.d.ts +2 -0
  308. package/dist/utils/shared-utils.test.d.ts.map +1 -0
  309. package/dist/utils/shared-utils.test.js +63 -0
  310. package/dist/utils/shared-utils.test.js.map +1 -0
  311. package/package.json +83 -0
@@ -0,0 +1,166 @@
1
+ import invariant from 'tiny-invariant';
2
+ import { encodeAbiParameters, encodeFunctionData, encodePacked, getAbiItem, keccak256, parseEventLogs, } from 'viem';
3
+ import { FEE_PERCENTAGE_SCALE, IntentsAbi, calculatePercentageFeeAmount, encodeContractCalls, getHubAssetInfo, getIntentRelayChainId, isIntentRelayChainId, isPartnerFeeAmount, isPartnerFeePercentage, randomUint256, } from '../../index.js';
4
+ import { Erc20Service, IntentDataType, } from '../index.js';
5
+ export const IntentCreatedEventAbi = getAbiItem({ abi: IntentsAbi, name: 'IntentCreated' });
6
+ export class EvmSolverService {
7
+ constructor() { }
8
+ /**
9
+ * Constructs the create intent data for EVM Hub chain
10
+ * @param {CreateIntentParams} createIntentParams - The create intent parameters
11
+ * @param {Address} creatorHubWalletAddress - The creator hub wallet address
12
+ * @param {SolverConfig} solverConfig - The intent configuration
13
+ * @param {PartnerFee} fee - The partner fee configuration
14
+ * @returns {Promise<[Hex, Intent, bigint]>} The encoded contract call, intent and fee amount
15
+ */
16
+ static constructCreateIntentData(createIntentParams, creatorHubWalletAddress, solverConfig, fee) {
17
+ const inputToken = getHubAssetInfo(createIntentParams.srcChain, createIntentParams.inputToken)?.asset;
18
+ const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;
19
+ invariant(inputToken, `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`);
20
+ invariant(outputToken, `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`);
21
+ const [feeData, feeAmount] = EvmSolverService.createIntentFeeData(fee, createIntentParams.inputAmount);
22
+ const calls = [];
23
+ const intentsContract = solverConfig.intentsContract;
24
+ const intent = {
25
+ ...createIntentParams,
26
+ inputToken,
27
+ outputToken,
28
+ srcChain: getIntentRelayChainId(createIntentParams.srcChain),
29
+ dstChain: getIntentRelayChainId(createIntentParams.dstChain),
30
+ intentId: randomUint256(),
31
+ creator: creatorHubWalletAddress,
32
+ data: feeData,
33
+ };
34
+ // user has to send input amount + fee amount to the Hub intent contract
35
+ const totalInputAmount = intent.inputAmount + feeAmount;
36
+ calls.push(Erc20Service.encodeApprove(intent.inputToken, intentsContract, totalInputAmount));
37
+ calls.push(EvmSolverService.encodeCreateIntent(intent, intentsContract));
38
+ return [encodeContractCalls(calls), intent, feeAmount];
39
+ }
40
+ /**
41
+ * Creates encoded fee data for an intent
42
+ * @param fee The partner fee configuration
43
+ * @param inputAmount The input amount to calculate percentage-based fee from
44
+ * @returns A tuple containing [encoded fee data, fee amount]. Fee amount will be 0n if no fee.
45
+ */
46
+ static createIntentFeeData(fee, inputAmount) {
47
+ invariant(inputAmount > 0n, 'Input amount must be greater than 0');
48
+ if (!fee) {
49
+ return ['0x', 0n];
50
+ }
51
+ let feeAmount;
52
+ if (isPartnerFeeAmount(fee)) {
53
+ feeAmount = fee.amount;
54
+ }
55
+ else if (isPartnerFeePercentage(fee)) {
56
+ invariant(fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE, `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`);
57
+ feeAmount = calculatePercentageFeeAmount(inputAmount, fee.percentage);
58
+ }
59
+ else {
60
+ return ['0x', 0n];
61
+ }
62
+ // Create the fee data struct
63
+ const feeData = {
64
+ fee: feeAmount,
65
+ receiver: fee.address,
66
+ };
67
+ // Encode the fee data
68
+ const encodedFeeData = encodeAbiParameters([
69
+ { name: 'fee', type: 'uint256' },
70
+ { name: 'receiver', type: 'address' },
71
+ ], [feeData.fee, feeData.receiver]);
72
+ // Create the intent data struct
73
+ const intentData = {
74
+ type: IntentDataType.FEE,
75
+ data: encodedFeeData,
76
+ };
77
+ // Encode the intent data
78
+ return [encodePacked(['uint8', 'bytes'], [intentData.type, intentData.data]), feeAmount];
79
+ }
80
+ /**
81
+ * Gets an intent from a transaction hash
82
+ * @param {Hash} txHash - The transaction hash
83
+ * @param {SolverConfig} solverConfig - The solver configuration
84
+ * @param {EvmHubProvider} hubProvider - The EVM hub provider
85
+ * @returns {Promise<Intent>} The intent
86
+ */
87
+ static async getIntent(txHash, solverConfig, hubProvider) {
88
+ const receipt = await hubProvider.publicClient.waitForTransactionReceipt({ hash: txHash });
89
+ const logs = parseEventLogs({
90
+ abi: IntentsAbi,
91
+ eventName: 'IntentCreated',
92
+ logs: receipt.logs,
93
+ strict: true,
94
+ });
95
+ for (const log of logs) {
96
+ if (log.address.toLowerCase() === solverConfig.intentsContract.toLowerCase()) {
97
+ if (!log.args.intent) {
98
+ continue;
99
+ }
100
+ if (!isIntentRelayChainId(log.args.intent.srcChain) || !isIntentRelayChainId(log.args.intent.dstChain)) {
101
+ throw new Error(`Invalid intent relay chain id: ${log.args.intent.srcChain} or ${log.args.intent.dstChain}`);
102
+ }
103
+ return {
104
+ intentId: log.args.intent.intentId,
105
+ creator: log.args.intent.creator,
106
+ inputToken: log.args.intent.inputToken,
107
+ outputToken: log.args.intent.outputToken,
108
+ inputAmount: log.args.intent.inputAmount,
109
+ minOutputAmount: log.args.intent.minOutputAmount,
110
+ deadline: log.args.intent.deadline,
111
+ data: log.args.intent.data,
112
+ allowPartialFill: log.args.intent.allowPartialFill,
113
+ srcChain: log.args.intent.srcChain,
114
+ dstChain: log.args.intent.dstChain,
115
+ srcAddress: log.args.intent.srcAddress,
116
+ dstAddress: log.args.intent.dstAddress,
117
+ solver: log.args.intent.solver,
118
+ };
119
+ }
120
+ }
121
+ throw new Error(`No intent found for ${txHash}`);
122
+ }
123
+ /**
124
+ * Gets the keccak256 hash of an intent. Hash serves as the intent id on Hub chain.
125
+ * @param {Intent} intent - The intent
126
+ * @returns {Hex} The keccak256 hash of the intent
127
+ */
128
+ static getIntentHash(intent) {
129
+ return keccak256(encodeAbiParameters(getAbiItem({ abi: IntentsAbi, name: 'createIntent' }).inputs, [intent]));
130
+ }
131
+ /**
132
+ * Encodes a createIntent transaction
133
+ * @param {Intent} intent - The intent to create
134
+ * @param {Address} intentsContract - The address of the intents contract
135
+ * @returns {EvmContractCall} The encoded contract call
136
+ */
137
+ static encodeCreateIntent(intent, intentsContract) {
138
+ return {
139
+ address: intentsContract,
140
+ value: 0n,
141
+ data: encodeFunctionData({
142
+ abi: IntentsAbi,
143
+ functionName: 'createIntent',
144
+ args: [intent],
145
+ }),
146
+ };
147
+ }
148
+ /**
149
+ * Encodes a cancelIntent transaction
150
+ * @param {Intent} intent - The intent to cancel
151
+ * @param {Address} intentsContract - The address of the intents contract
152
+ * @returns {EvmContractCall} The encoded contract call
153
+ */
154
+ static encodeCancelIntent(intent, intentsContract) {
155
+ return {
156
+ address: intentsContract,
157
+ value: 0n,
158
+ data: encodeFunctionData({
159
+ abi: IntentsAbi,
160
+ functionName: 'cancelIntent',
161
+ args: [intent],
162
+ }),
163
+ };
164
+ }
165
+ }
166
+ //# sourceMappingURL=EvmSolverService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmSolverService.js","sourceRoot":"","sources":["../../../src/services/solver/EvmSolverService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type IntentErrorResponse, type IntentExecutionRequest, type IntentExecutionResponse, type IntentQuoteRequest, type IntentQuoteResponse, type IntentStatusRequest, type IntentStatusResponse, type Result, type SolverConfig } from '../../index.js';
2
+ export declare class SolverApiService {
3
+ private constructor();
4
+ /**
5
+ * Request a quote from the solver API
6
+ * @example
7
+ * {
8
+ * "token_src":"0x13b70564b1ec12876b20fab5d1bb630311312f4f", // Asset BSC
9
+ * "token_dst":"0xdcd9578b51ef55239b6e68629d822a8d97c95b86", // Asset ETH Arbitrum
10
+ * "token_src_blockchain_id":"56",
11
+ * "token_dst_blockchain_id":"42161",
12
+ * "amount":1000000000000000n,
13
+ * "quote_type": "exact_input"
14
+ * }
15
+ */
16
+ static getQuote(payload: IntentQuoteRequest, config: SolverConfig): Promise<Result<IntentQuoteResponse, IntentErrorResponse>>;
17
+ /**
18
+ * Post execution of intent order to Solver API
19
+ * @example
20
+ * // request
21
+ * {
22
+ * "intent_tx_hash": "0xba3dce19347264db32ced212ff1a2036f20d9d2c7493d06af15027970be061af",
23
+ * "quote_uuid": "a0dd7652-b360-4123-ab2d-78cfbcd20c6b"
24
+ * }
25
+ *
26
+ * // response
27
+ * {
28
+ * "ok": true,
29
+ * "value": {
30
+ * "output": {
31
+ * "answer":"OK",
32
+ * "task_id":"a0dd7652-b360-4123-ab2d-78cfbcd20c6b"
33
+ * }
34
+ * }
35
+ * }
36
+ */
37
+ static postExecution(intentExecutionRequest: IntentExecutionRequest, config: SolverConfig): Promise<Result<IntentExecutionResponse, IntentErrorResponse>>;
38
+ static getStatus(intentStatusRequest: IntentStatusRequest, config: SolverConfig): Promise<Result<IntentStatusResponse, IntentErrorResponse>>;
39
+ }
40
+ //# sourceMappingURL=SolverApiService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolverApiService.d.ts","sourceRoot":"","sources":["../../../src/services/solver/SolverApiService.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAExB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACX,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,gBAAgB;IAC3B,OAAO;IAEP;;;;;;;;;;;OAWG;WACiB,QAAQ,CAC1B,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAgE5D;;;;;;;;;;;;;;;;;;;OAmBG;WACiB,aAAa,CAC/B,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,CAAC;WAqC5C,SAAS,CAC3B,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;CAmC9D"}
@@ -0,0 +1,157 @@
1
+ import invariant from 'tiny-invariant';
2
+ import { getHubAssetInfo, IntentErrorCode, isValidOriginalAssetAddress, retry, } from '../../index.js';
3
+ export class SolverApiService {
4
+ constructor() { }
5
+ /**
6
+ * Request a quote from the solver API
7
+ * @example
8
+ * {
9
+ * "token_src":"0x13b70564b1ec12876b20fab5d1bb630311312f4f", // Asset BSC
10
+ * "token_dst":"0xdcd9578b51ef55239b6e68629d822a8d97c95b86", // Asset ETH Arbitrum
11
+ * "token_src_blockchain_id":"56",
12
+ * "token_dst_blockchain_id":"42161",
13
+ * "amount":1000000000000000n,
14
+ * "quote_type": "exact_input"
15
+ * }
16
+ */
17
+ static async getQuote(payload, config) {
18
+ invariant(payload.token_src.length > 0, 'Empty token_src');
19
+ invariant(payload.token_src_blockchain_id.length > 0, 'Empty token_src_blockchain_id');
20
+ invariant(payload.token_dst.length > 0, 'Empty token_dst');
21
+ invariant(payload.token_dst_blockchain_id.length > 0, 'Empty token_dst_blockchain_id');
22
+ invariant(payload.amount > 0n, 'amount must be greater than 0');
23
+ invariant(isValidOriginalAssetAddress(payload.token_src_blockchain_id, payload.token_src), 'unsupported token_src for src chain');
24
+ invariant(isValidOriginalAssetAddress(payload.token_dst_blockchain_id, payload.token_dst), 'unsupported token_dst for dst chain');
25
+ const tokenSrc = getHubAssetInfo(payload.token_src_blockchain_id, payload.token_src)?.asset;
26
+ const tokenDst = getHubAssetInfo(payload.token_dst_blockchain_id, payload.token_dst)?.asset;
27
+ invariant(tokenSrc, 'hub asset not found for token_src');
28
+ invariant(tokenDst, 'hub asset not found for token_dst');
29
+ try {
30
+ const response = await fetch(`${config.solverApiEndpoint}/quote`, {
31
+ method: 'POST',
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ },
35
+ body: JSON.stringify({
36
+ token_src: tokenSrc,
37
+ token_dst: tokenDst,
38
+ amount: payload.amount.toString(),
39
+ quote_type: payload.quote_type,
40
+ }),
41
+ });
42
+ if (!response.ok) {
43
+ return {
44
+ ok: false,
45
+ error: await response.json(),
46
+ };
47
+ }
48
+ const quoteResponse = await response.json();
49
+ return {
50
+ ok: true,
51
+ value: {
52
+ quoted_amount: BigInt(quoteResponse.quoted_amount),
53
+ },
54
+ };
55
+ }
56
+ catch (e) {
57
+ console.error(`[SolverApiService.getQuote] failed. Details: ${JSON.stringify(e)}`);
58
+ return {
59
+ ok: false,
60
+ error: {
61
+ detail: {
62
+ code: IntentErrorCode.UNKNOWN,
63
+ message: e ? JSON.stringify(e) : 'Unknown error',
64
+ },
65
+ },
66
+ };
67
+ }
68
+ }
69
+ /**
70
+ * Post execution of intent order to Solver API
71
+ * @example
72
+ * // request
73
+ * {
74
+ * "intent_tx_hash": "0xba3dce19347264db32ced212ff1a2036f20d9d2c7493d06af15027970be061af",
75
+ * "quote_uuid": "a0dd7652-b360-4123-ab2d-78cfbcd20c6b"
76
+ * }
77
+ *
78
+ * // response
79
+ * {
80
+ * "ok": true,
81
+ * "value": {
82
+ * "output": {
83
+ * "answer":"OK",
84
+ * "task_id":"a0dd7652-b360-4123-ab2d-78cfbcd20c6b"
85
+ * }
86
+ * }
87
+ * }
88
+ */
89
+ static async postExecution(intentExecutionRequest, config) {
90
+ try {
91
+ const response = await retry(() => fetch(`${config.solverApiEndpoint}/execute`, {
92
+ method: 'POST',
93
+ headers: {
94
+ 'Content-Type': 'application/json',
95
+ },
96
+ body: JSON.stringify(intentExecutionRequest),
97
+ }));
98
+ if (!response.ok) {
99
+ return {
100
+ ok: false,
101
+ error: await response.json(),
102
+ };
103
+ }
104
+ return {
105
+ ok: true,
106
+ value: await response.json(),
107
+ };
108
+ }
109
+ catch (e) {
110
+ console.error(`[SolverApiService.postExecution] failed. Details: ${JSON.stringify(e)}`);
111
+ return {
112
+ ok: false,
113
+ error: {
114
+ detail: {
115
+ code: IntentErrorCode.UNKNOWN,
116
+ message: e ? JSON.stringify(e) : 'Unknown error',
117
+ },
118
+ },
119
+ };
120
+ }
121
+ }
122
+ static async getStatus(intentStatusRequest, config) {
123
+ invariant(intentStatusRequest.intent_tx_hash.length > 0, 'Empty intent_tx_hash');
124
+ try {
125
+ const response = await fetch(`${config.solverApiEndpoint}/status`, {
126
+ method: 'POST',
127
+ headers: {
128
+ 'Content-Type': 'application/json',
129
+ },
130
+ body: JSON.stringify(intentStatusRequest),
131
+ });
132
+ if (!response.ok) {
133
+ return {
134
+ ok: false,
135
+ error: await response.json(),
136
+ };
137
+ }
138
+ return {
139
+ ok: true,
140
+ value: await response.json(),
141
+ };
142
+ }
143
+ catch (e) {
144
+ console.error(`[SolverApiService.getStatus] failed. Details: ${JSON.stringify(e)}`);
145
+ return {
146
+ ok: false,
147
+ error: {
148
+ detail: {
149
+ code: IntentErrorCode.UNKNOWN,
150
+ message: e ? JSON.stringify(e) : 'Unknown error',
151
+ },
152
+ },
153
+ };
154
+ }
155
+ }
156
+ }
157
+ //# sourceMappingURL=SolverApiService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolverApiService.js","sourceRoot":"","sources":["../../../src/services/solver/SolverApiService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SolverApiService.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolverApiService.test.d.ts","sourceRoot":"","sources":["../../../src/services/solver/SolverApiService.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,180 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { ARBITRUM_MAINNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, getHubAssetInfo, IntentErrorCode, } from '../../index.js';
3
+ import { SolverApiService } from './SolverApiService.js';
4
+ // Mock fetch
5
+ const mockFetch = vi.fn();
6
+ global.fetch = mockFetch;
7
+ describe('SolverApiService', () => {
8
+ const mockConfig = {
9
+ solverApiEndpoint: 'https://api.example.com',
10
+ intentsContract: '0x1234567890123456789012345678901234567890',
11
+ };
12
+ const bscEthToken = '0x2170Ed0880ac9A755fd29B2688956BD959F933F8';
13
+ const bscEthHubTokenAsset = getHubAssetInfo(BSC_MAINNET_CHAIN_ID, bscEthToken);
14
+ if (!bscEthHubTokenAsset) {
15
+ throw new Error('BSC ETH token asset not found');
16
+ }
17
+ const arbWbtcToken = '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f';
18
+ const arbWbtcHubTokenAsset = getHubAssetInfo(ARBITRUM_MAINNET_CHAIN_ID, arbWbtcToken);
19
+ if (!arbWbtcHubTokenAsset) {
20
+ throw new Error('BSC WBTC token asset not found');
21
+ }
22
+ beforeEach(() => {
23
+ vi.clearAllMocks();
24
+ });
25
+ describe('getQuote', () => {
26
+ const payload = {
27
+ token_src: bscEthToken,
28
+ token_src_blockchain_id: BSC_MAINNET_CHAIN_ID,
29
+ token_dst: arbWbtcToken,
30
+ token_dst_blockchain_id: ARBITRUM_MAINNET_CHAIN_ID,
31
+ amount: 1000000000000000000n,
32
+ quote_type: 'exact_input',
33
+ };
34
+ it('should return a successful quote response', async () => {
35
+ const mockResponse = {
36
+ quoted_amount: 2000000000000000000n,
37
+ };
38
+ mockFetch.mockResolvedValueOnce({
39
+ ok: true,
40
+ json: () => Promise.resolve(mockResponse),
41
+ });
42
+ const result = await SolverApiService.getQuote(payload, mockConfig);
43
+ expect(result.ok).toBe(true);
44
+ if (result.ok) {
45
+ expect(result.value.quoted_amount).toBe(2000000000000000000n);
46
+ }
47
+ expect(mockFetch).toHaveBeenCalledWith('https://api.example.com/quote', expect.objectContaining({
48
+ method: 'POST',
49
+ headers: {
50
+ 'Content-Type': 'application/json',
51
+ },
52
+ body: JSON.stringify({
53
+ token_src: getHubAssetInfo(payload.token_src_blockchain_id, payload.token_src)?.asset ?? '',
54
+ token_dst: getHubAssetInfo(payload.token_dst_blockchain_id, payload.token_dst)?.asset ?? '',
55
+ amount: payload.amount.toString(),
56
+ quote_type: payload.quote_type,
57
+ }),
58
+ }));
59
+ });
60
+ it('should handle API error response', async () => {
61
+ const mockError = {
62
+ detail: {
63
+ code: IntentErrorCode.NO_PATH_FOUND,
64
+ message: 'No path found',
65
+ },
66
+ };
67
+ mockFetch.mockResolvedValueOnce({
68
+ ok: false,
69
+ json: () => Promise.resolve(mockError),
70
+ });
71
+ const result = await SolverApiService.getQuote(payload, mockConfig);
72
+ expect(result.ok).toBe(false);
73
+ if (!result.ok) {
74
+ expect(result.error).toEqual(mockError);
75
+ }
76
+ });
77
+ it('should handle network errors', async () => {
78
+ mockFetch.mockRejectedValueOnce(new Error('Network error'));
79
+ const result = await SolverApiService.getQuote(payload, mockConfig);
80
+ expect(result.ok).toBe(false);
81
+ if (!result.ok) {
82
+ expect(result.error.detail.code).toBe(IntentErrorCode.UNKNOWN);
83
+ }
84
+ });
85
+ });
86
+ describe('postExecution', () => {
87
+ const validRequest = {
88
+ intent_tx_hash: '0x1234567890123456789012345678901234567890123456789012345678901234',
89
+ quote_uuid: 'a0dd7652-b360-4123-ab2d-78cfbcd20c6b',
90
+ };
91
+ it('should successfully execute intent', async () => {
92
+ const mockResponse = {
93
+ output: {
94
+ answer: 'OK',
95
+ task_id: 'a0dd7652-b360-4123-ab2d-78cfbcd20c6b',
96
+ },
97
+ };
98
+ mockFetch.mockResolvedValueOnce({
99
+ ok: true,
100
+ json: () => Promise.resolve(mockResponse),
101
+ });
102
+ const result = await SolverApiService.postExecution(validRequest, mockConfig);
103
+ expect(result.ok).toBe(true);
104
+ if (result.ok) {
105
+ expect(result.value).toEqual(mockResponse);
106
+ }
107
+ expect(mockFetch).toHaveBeenCalledWith('https://api.example.com/execute', expect.objectContaining({
108
+ method: 'POST',
109
+ headers: {
110
+ 'Content-Type': 'application/json',
111
+ },
112
+ body: JSON.stringify(validRequest),
113
+ }));
114
+ });
115
+ it('should handle API error response', async () => {
116
+ const mockError = {
117
+ detail: {
118
+ code: IntentErrorCode.QUOTE_NOT_FOUND,
119
+ message: 'Quote not found',
120
+ },
121
+ };
122
+ mockFetch.mockResolvedValueOnce({
123
+ ok: false,
124
+ json: () => Promise.resolve(mockError),
125
+ });
126
+ const result = await SolverApiService.postExecution(validRequest, mockConfig);
127
+ expect(result.ok).toBe(false);
128
+ if (!result.ok) {
129
+ expect(result.error).toEqual(mockError);
130
+ }
131
+ });
132
+ });
133
+ describe('getStatus', () => {
134
+ const validRequest = {
135
+ intent_tx_hash: '0x1234567890123456789012345678901234567890123456789012345678901234',
136
+ };
137
+ it('should successfully get status', async () => {
138
+ const mockResponse = {
139
+ status: 'completed',
140
+ result: {
141
+ transaction_hash: '0x123',
142
+ },
143
+ };
144
+ mockFetch.mockResolvedValueOnce({
145
+ ok: true,
146
+ json: () => Promise.resolve(mockResponse),
147
+ });
148
+ const result = await SolverApiService.getStatus(validRequest, mockConfig);
149
+ expect(result.ok).toBe(true);
150
+ if (result.ok) {
151
+ expect(result.value).toEqual(mockResponse);
152
+ }
153
+ expect(mockFetch).toHaveBeenCalledWith('https://api.example.com/status', expect.objectContaining({
154
+ method: 'POST',
155
+ headers: {
156
+ 'Content-Type': 'application/json',
157
+ },
158
+ body: JSON.stringify(validRequest),
159
+ }));
160
+ });
161
+ it('should handle API error response', async () => {
162
+ const mockError = {
163
+ detail: {
164
+ code: IntentErrorCode.QUOTE_NOT_FOUND,
165
+ message: 'Quote not found',
166
+ },
167
+ };
168
+ mockFetch.mockResolvedValueOnce({
169
+ ok: false,
170
+ json: () => Promise.resolve(mockError),
171
+ });
172
+ const result = await SolverApiService.getStatus(validRequest, mockConfig);
173
+ expect(result.ok).toBe(false);
174
+ if (!result.ok) {
175
+ expect(result.error).toEqual(mockError);
176
+ }
177
+ });
178
+ });
179
+ });
180
+ //# sourceMappingURL=SolverApiService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolverApiService.test.js","sourceRoot":"","sources":["../../../src/services/solver/SolverApiService.test.ts"],"names":[],"mappings":"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"}