genius-intents 0.1.4

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 (252) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE +21 -0
  3. package/README.md +376 -0
  4. package/dist/src/index.d.ts +27 -0
  5. package/dist/src/index.d.ts.map +1 -0
  6. package/dist/src/index.js +62 -0
  7. package/dist/src/index.js.map +1 -0
  8. package/dist/src/intents-protocols.d.ts +69 -0
  9. package/dist/src/intents-protocols.d.ts.map +1 -0
  10. package/dist/src/intents-protocols.js +371 -0
  11. package/dist/src/intents-protocols.js.map +1 -0
  12. package/dist/src/interfaces/intent-protocol.d.ts +21 -0
  13. package/dist/src/interfaces/intent-protocol.d.ts.map +1 -0
  14. package/dist/src/interfaces/intent-protocol.js +3 -0
  15. package/dist/src/interfaces/intent-protocol.js.map +1 -0
  16. package/dist/src/protocols/aftermath/aftermath.service.d.ts +28 -0
  17. package/dist/src/protocols/aftermath/aftermath.service.d.ts.map +1 -0
  18. package/dist/src/protocols/aftermath/aftermath.service.js +162 -0
  19. package/dist/src/protocols/aftermath/aftermath.service.js.map +1 -0
  20. package/dist/src/protocols/aftermath/aftermath.types.d.ts +100 -0
  21. package/dist/src/protocols/aftermath/aftermath.types.d.ts.map +1 -0
  22. package/dist/src/protocols/aftermath/aftermath.types.js +3 -0
  23. package/dist/src/protocols/aftermath/aftermath.types.js.map +1 -0
  24. package/dist/src/protocols/aftermath/index.d.ts +3 -0
  25. package/dist/src/protocols/aftermath/index.d.ts.map +1 -0
  26. package/dist/src/protocols/aftermath/index.js +7 -0
  27. package/dist/src/protocols/aftermath/index.js.map +1 -0
  28. package/dist/src/protocols/debridge/debridge.service.d.ts +157 -0
  29. package/dist/src/protocols/debridge/debridge.service.d.ts.map +1 -0
  30. package/dist/src/protocols/debridge/debridge.service.js +462 -0
  31. package/dist/src/protocols/debridge/debridge.service.js.map +1 -0
  32. package/dist/src/protocols/debridge/debridge.types.d.ts +82 -0
  33. package/dist/src/protocols/debridge/debridge.types.d.ts.map +1 -0
  34. package/dist/src/protocols/debridge/debridge.types.js +3 -0
  35. package/dist/src/protocols/debridge/debridge.types.js.map +1 -0
  36. package/dist/src/protocols/debridge/index.d.ts +3 -0
  37. package/dist/src/protocols/debridge/index.d.ts.map +1 -0
  38. package/dist/src/protocols/debridge/index.js +7 -0
  39. package/dist/src/protocols/debridge/index.js.map +1 -0
  40. package/dist/src/protocols/genius-bridge/genius-bridge.service.d.ts +36 -0
  41. package/dist/src/protocols/genius-bridge/genius-bridge.service.d.ts.map +1 -0
  42. package/dist/src/protocols/genius-bridge/genius-bridge.service.js +312 -0
  43. package/dist/src/protocols/genius-bridge/genius-bridge.service.js.map +1 -0
  44. package/dist/src/protocols/genius-bridge/genius-bridge.types.d.ts +100 -0
  45. package/dist/src/protocols/genius-bridge/genius-bridge.types.d.ts.map +1 -0
  46. package/dist/src/protocols/genius-bridge/genius-bridge.types.js +3 -0
  47. package/dist/src/protocols/genius-bridge/genius-bridge.types.js.map +1 -0
  48. package/dist/src/protocols/genius-bridge/index.d.ts +3 -0
  49. package/dist/src/protocols/genius-bridge/index.d.ts.map +1 -0
  50. package/dist/src/protocols/genius-bridge/index.js +7 -0
  51. package/dist/src/protocols/genius-bridge/index.js.map +1 -0
  52. package/dist/src/protocols/jupiter/index.d.ts +3 -0
  53. package/dist/src/protocols/jupiter/index.d.ts.map +1 -0
  54. package/dist/src/protocols/jupiter/index.js +7 -0
  55. package/dist/src/protocols/jupiter/index.js.map +1 -0
  56. package/dist/src/protocols/jupiter/jupiter.service.d.ts +37 -0
  57. package/dist/src/protocols/jupiter/jupiter.service.d.ts.map +1 -0
  58. package/dist/src/protocols/jupiter/jupiter.service.js +188 -0
  59. package/dist/src/protocols/jupiter/jupiter.service.js.map +1 -0
  60. package/dist/src/protocols/jupiter/jupiter.types.d.ts +272 -0
  61. package/dist/src/protocols/jupiter/jupiter.types.d.ts.map +1 -0
  62. package/dist/src/protocols/jupiter/jupiter.types.js +3 -0
  63. package/dist/src/protocols/jupiter/jupiter.types.js.map +1 -0
  64. package/dist/src/protocols/kyberswap/index.d.ts +3 -0
  65. package/dist/src/protocols/kyberswap/index.d.ts.map +1 -0
  66. package/dist/src/protocols/kyberswap/index.js +7 -0
  67. package/dist/src/protocols/kyberswap/index.js.map +1 -0
  68. package/dist/src/protocols/kyberswap/kyberswap.service.d.ts +34 -0
  69. package/dist/src/protocols/kyberswap/kyberswap.service.d.ts.map +1 -0
  70. package/dist/src/protocols/kyberswap/kyberswap.service.js +218 -0
  71. package/dist/src/protocols/kyberswap/kyberswap.service.js.map +1 -0
  72. package/dist/src/protocols/kyberswap/kyberswap.types.d.ts +114 -0
  73. package/dist/src/protocols/kyberswap/kyberswap.types.d.ts.map +1 -0
  74. package/dist/src/protocols/kyberswap/kyberswap.types.js +3 -0
  75. package/dist/src/protocols/kyberswap/kyberswap.types.js.map +1 -0
  76. package/dist/src/protocols/odos/index.d.ts +3 -0
  77. package/dist/src/protocols/odos/index.d.ts.map +1 -0
  78. package/dist/src/protocols/odos/index.js +7 -0
  79. package/dist/src/protocols/odos/index.js.map +1 -0
  80. package/dist/src/protocols/odos/odos.service.d.ts +39 -0
  81. package/dist/src/protocols/odos/odos.service.d.ts.map +1 -0
  82. package/dist/src/protocols/odos/odos.service.js +207 -0
  83. package/dist/src/protocols/odos/odos.service.js.map +1 -0
  84. package/dist/src/protocols/odos/odos.types.d.ts +114 -0
  85. package/dist/src/protocols/odos/odos.types.d.ts.map +1 -0
  86. package/dist/src/protocols/odos/odos.types.js +3 -0
  87. package/dist/src/protocols/odos/odos.types.js.map +1 -0
  88. package/dist/src/protocols/okx/index.d.ts +3 -0
  89. package/dist/src/protocols/okx/index.d.ts.map +1 -0
  90. package/dist/src/protocols/okx/index.js +7 -0
  91. package/dist/src/protocols/okx/index.js.map +1 -0
  92. package/dist/src/protocols/okx/okx.service.d.ts +36 -0
  93. package/dist/src/protocols/okx/okx.service.d.ts.map +1 -0
  94. package/dist/src/protocols/okx/okx.service.js +281 -0
  95. package/dist/src/protocols/okx/okx.service.js.map +1 -0
  96. package/dist/src/protocols/okx/okx.types.d.ts +119 -0
  97. package/dist/src/protocols/okx/okx.types.d.ts.map +1 -0
  98. package/dist/src/protocols/okx/okx.types.js +4 -0
  99. package/dist/src/protocols/okx/okx.types.js.map +1 -0
  100. package/dist/src/protocols/okx-bridge/okx-bridge.service.d.ts +1 -0
  101. package/dist/src/protocols/okx-bridge/okx-bridge.service.d.ts.map +1 -0
  102. package/dist/src/protocols/okx-bridge/okx-bridge.service.js +2 -0
  103. package/dist/src/protocols/okx-bridge/okx-bridge.service.js.map +1 -0
  104. package/dist/src/protocols/okx-bridge/okx-bridge.types.d.ts +1 -0
  105. package/dist/src/protocols/okx-bridge/okx-bridge.types.d.ts.map +1 -0
  106. package/dist/src/protocols/okx-bridge/okx-bridge.types.js +2 -0
  107. package/dist/src/protocols/okx-bridge/okx-bridge.types.js.map +1 -0
  108. package/dist/src/protocols/openocean/index.d.ts +3 -0
  109. package/dist/src/protocols/openocean/index.d.ts.map +1 -0
  110. package/dist/src/protocols/openocean/index.js +7 -0
  111. package/dist/src/protocols/openocean/index.js.map +1 -0
  112. package/dist/src/protocols/openocean/openocean.service.d.ts +29 -0
  113. package/dist/src/protocols/openocean/openocean.service.d.ts.map +1 -0
  114. package/dist/src/protocols/openocean/openocean.service.js +181 -0
  115. package/dist/src/protocols/openocean/openocean.service.js.map +1 -0
  116. package/dist/src/protocols/openocean/openocean.types.d.ts +68 -0
  117. package/dist/src/protocols/openocean/openocean.types.d.ts.map +1 -0
  118. package/dist/src/protocols/openocean/openocean.types.js +3 -0
  119. package/dist/src/protocols/openocean/openocean.types.js.map +1 -0
  120. package/dist/src/protocols/pumpfun/index.d.ts +3 -0
  121. package/dist/src/protocols/pumpfun/index.d.ts.map +1 -0
  122. package/dist/src/protocols/pumpfun/index.js +7 -0
  123. package/dist/src/protocols/pumpfun/index.js.map +1 -0
  124. package/dist/src/protocols/pumpfun/pumpfun.service.d.ts +45 -0
  125. package/dist/src/protocols/pumpfun/pumpfun.service.d.ts.map +1 -0
  126. package/dist/src/protocols/pumpfun/pumpfun.service.js +217 -0
  127. package/dist/src/protocols/pumpfun/pumpfun.service.js.map +1 -0
  128. package/dist/src/protocols/pumpfun/pumpfun.types.d.ts +14 -0
  129. package/dist/src/protocols/pumpfun/pumpfun.types.d.ts.map +1 -0
  130. package/dist/src/protocols/pumpfun/pumpfun.types.js +3 -0
  131. package/dist/src/protocols/pumpfun/pumpfun.types.js.map +1 -0
  132. package/dist/src/protocols/raydium/index.d.ts +3 -0
  133. package/dist/src/protocols/raydium/index.d.ts.map +1 -0
  134. package/dist/src/protocols/raydium/index.js +7 -0
  135. package/dist/src/protocols/raydium/index.js.map +1 -0
  136. package/dist/src/protocols/raydium/raydium-v2.service.d.ts +35 -0
  137. package/dist/src/protocols/raydium/raydium-v2.service.d.ts.map +1 -0
  138. package/dist/src/protocols/raydium/raydium-v2.service.js +301 -0
  139. package/dist/src/protocols/raydium/raydium-v2.service.js.map +1 -0
  140. package/dist/src/protocols/raydium/raydium-v2.types.d.ts +96 -0
  141. package/dist/src/protocols/raydium/raydium-v2.types.d.ts.map +1 -0
  142. package/dist/src/protocols/raydium/raydium-v2.types.js +3 -0
  143. package/dist/src/protocols/raydium/raydium-v2.types.js.map +1 -0
  144. package/dist/src/protocols/zeroX/index.d.ts +3 -0
  145. package/dist/src/protocols/zeroX/index.d.ts.map +1 -0
  146. package/dist/src/protocols/zeroX/index.js +7 -0
  147. package/dist/src/protocols/zeroX/index.js.map +1 -0
  148. package/dist/src/protocols/zeroX/zeroX.service.d.ts +37 -0
  149. package/dist/src/protocols/zeroX/zeroX.service.d.ts.map +1 -0
  150. package/dist/src/protocols/zeroX/zeroX.service.js +209 -0
  151. package/dist/src/protocols/zeroX/zeroX.service.js.map +1 -0
  152. package/dist/src/protocols/zeroX/zeroX.types.d.ts +120 -0
  153. package/dist/src/protocols/zeroX/zeroX.types.d.ts.map +1 -0
  154. package/dist/src/protocols/zeroX/zeroX.types.js +3 -0
  155. package/dist/src/protocols/zeroX/zeroX.types.js.map +1 -0
  156. package/dist/src/types/enums.d.ts +42 -0
  157. package/dist/src/types/enums.d.ts.map +1 -0
  158. package/dist/src/types/enums.js +49 -0
  159. package/dist/src/types/enums.js.map +1 -0
  160. package/dist/src/types/intents-protocols.d.ts +89 -0
  161. package/dist/src/types/intents-protocols.d.ts.map +1 -0
  162. package/dist/src/types/intents-protocols.js +3 -0
  163. package/dist/src/types/intents-protocols.js.map +1 -0
  164. package/dist/src/types/price-response.d.ts +26 -0
  165. package/dist/src/types/price-response.d.ts.map +1 -0
  166. package/dist/src/types/price-response.js +3 -0
  167. package/dist/src/types/price-response.js.map +1 -0
  168. package/dist/src/types/quote-response.d.ts +31 -0
  169. package/dist/src/types/quote-response.d.ts.map +1 -0
  170. package/dist/src/types/quote-response.js +3 -0
  171. package/dist/src/types/quote-response.js.map +1 -0
  172. package/dist/src/utils/address-validation.d.ts +9 -0
  173. package/dist/src/utils/address-validation.d.ts.map +1 -0
  174. package/dist/src/utils/address-validation.js +42 -0
  175. package/dist/src/utils/address-validation.js.map +1 -0
  176. package/dist/src/utils/address.d.ts +9 -0
  177. package/dist/src/utils/address.d.ts.map +1 -0
  178. package/dist/src/utils/address.js +74 -0
  179. package/dist/src/utils/address.js.map +1 -0
  180. package/dist/src/utils/base64-to-base58.d.ts +2 -0
  181. package/dist/src/utils/base64-to-base58.d.ts.map +1 -0
  182. package/dist/src/utils/base64-to-base58.js +22 -0
  183. package/dist/src/utils/base64-to-base58.js.map +1 -0
  184. package/dist/src/utils/chain-id-name.d.ts +3 -0
  185. package/dist/src/utils/chain-id-name.d.ts.map +1 -0
  186. package/dist/src/utils/chain-id-name.js +23 -0
  187. package/dist/src/utils/chain-id-name.js.map +1 -0
  188. package/dist/src/utils/check-vm.d.ts +8 -0
  189. package/dist/src/utils/check-vm.d.ts.map +1 -0
  190. package/dist/src/utils/check-vm.js +39 -0
  191. package/dist/src/utils/check-vm.js.map +1 -0
  192. package/dist/src/utils/constants.d.ts +7 -0
  193. package/dist/src/utils/constants.d.ts.map +1 -0
  194. package/dist/src/utils/constants.js +10 -0
  195. package/dist/src/utils/constants.js.map +1 -0
  196. package/dist/src/utils/create-error-message.d.ts +5 -0
  197. package/dist/src/utils/create-error-message.d.ts.map +1 -0
  198. package/dist/src/utils/create-error-message.js +42 -0
  199. package/dist/src/utils/create-error-message.js.map +1 -0
  200. package/dist/src/utils/fetch-spl-metadata.d.ts +4 -0
  201. package/dist/src/utils/fetch-spl-metadata.d.ts.map +1 -0
  202. package/dist/src/utils/fetch-spl-metadata.js +108 -0
  203. package/dist/src/utils/fetch-spl-metadata.js.map +1 -0
  204. package/dist/src/utils/is-native.d.ts +2 -0
  205. package/dist/src/utils/is-native.d.ts.map +1 -0
  206. package/dist/src/utils/is-native.js +23 -0
  207. package/dist/src/utils/is-native.js.map +1 -0
  208. package/dist/src/utils/logger.d.ts +56 -0
  209. package/dist/src/utils/logger.d.ts.map +1 -0
  210. package/dist/src/utils/logger.js +108 -0
  211. package/dist/src/utils/logger.js.map +1 -0
  212. package/dist/src/utils/throw-error.d.ts +3 -0
  213. package/dist/src/utils/throw-error.d.ts.map +1 -0
  214. package/dist/src/utils/throw-error.js +8 -0
  215. package/dist/src/utils/throw-error.js.map +1 -0
  216. package/dist/tests/core/intent-protocol-suite.test.d.ts +2 -0
  217. package/dist/tests/core/intent-protocol-suite.test.d.ts.map +1 -0
  218. package/dist/tests/core/intent-protocol-suite.test.js +485 -0
  219. package/dist/tests/core/intent-protocol-suite.test.js.map +1 -0
  220. package/dist/tests/core/intents-protocols.test.d.ts +2 -0
  221. package/dist/tests/core/intents-protocols.test.d.ts.map +1 -0
  222. package/dist/tests/core/intents-protocols.test.js +307 -0
  223. package/dist/tests/core/intents-protocols.test.js.map +1 -0
  224. package/dist/tests/core/protocol-test-runner.d.ts +62 -0
  225. package/dist/tests/core/protocol-test-runner.d.ts.map +1 -0
  226. package/dist/tests/core/protocol-test-runner.js +260 -0
  227. package/dist/tests/core/protocol-test-runner.js.map +1 -0
  228. package/dist/tests/core/setup.test.d.ts +1 -0
  229. package/dist/tests/core/setup.test.d.ts.map +1 -0
  230. package/dist/tests/core/setup.test.js +13 -0
  231. package/dist/tests/core/setup.test.js.map +1 -0
  232. package/dist/tests/fixtures/test-data.d.ts +84 -0
  233. package/dist/tests/fixtures/test-data.d.ts.map +1 -0
  234. package/dist/tests/fixtures/test-data.js +142 -0
  235. package/dist/tests/fixtures/test-data.js.map +1 -0
  236. package/dist/tests/integration/cross-chain.test.d.ts +2 -0
  237. package/dist/tests/integration/cross-chain.test.d.ts.map +1 -0
  238. package/dist/tests/integration/cross-chain.test.js +44 -0
  239. package/dist/tests/integration/cross-chain.test.js.map +1 -0
  240. package/dist/tests/protocols/simple-protocol.test.d.ts +2 -0
  241. package/dist/tests/protocols/simple-protocol.test.d.ts.map +1 -0
  242. package/dist/tests/protocols/simple-protocol.test.js +77 -0
  243. package/dist/tests/protocols/simple-protocol.test.js.map +1 -0
  244. package/dist/tests/setup.d.ts +24 -0
  245. package/dist/tests/setup.d.ts.map +1 -0
  246. package/dist/tests/setup.js +48 -0
  247. package/dist/tests/setup.js.map +1 -0
  248. package/dist/tests/utils/test-generator.d.ts +30 -0
  249. package/dist/tests/utils/test-generator.d.ts.map +1 -0
  250. package/dist/tests/utils/test-generator.js +153 -0
  251. package/dist/tests/utils/test-generator.js.map +1 -0
  252. package/package.json +102 -0
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KyberswapService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const enums_1 = require("../../types/enums");
9
+ const address_1 = require("../../utils/address");
10
+ const logger_1 = require("../../utils/logger");
11
+ const constants_1 = require("../../utils/constants");
12
+ const is_native_1 = require("../../utils/is-native");
13
+ const throw_error_1 = require("../../utils/throw-error");
14
+ const create_error_message_1 = require("../../utils/create-error-message");
15
+ const chain_id_name_1 = require("../../utils/chain-id-name");
16
+ let logger;
17
+ class KyberswapService {
18
+ constructor(config) {
19
+ this.protocol = enums_1.ProtocolEnum.KYBERSWAP;
20
+ this.chains = [
21
+ enums_1.ChainIdEnum.ETHEREUM,
22
+ enums_1.ChainIdEnum.ARBITRUM,
23
+ enums_1.ChainIdEnum.OPTIMISM,
24
+ enums_1.ChainIdEnum.POLYGON,
25
+ enums_1.ChainIdEnum.BSC,
26
+ enums_1.ChainIdEnum.AVALANCHE,
27
+ enums_1.ChainIdEnum.BASE,
28
+ enums_1.ChainIdEnum.SONIC,
29
+ ];
30
+ this.singleChain = true;
31
+ this.multiChain = false;
32
+ this.priceEndpoint = '/api/v1/routes';
33
+ this.quoteEndpoint = '/api/v1/route/build';
34
+ if (config?.debug) {
35
+ logger_1.LoggerFactory.configure(logger_1.LoggerFactory.createConsoleLogger({ level: logger_1.LogLevelEnum.DEBUG }));
36
+ }
37
+ // Use custom logger if provided
38
+ else if (config?.logger) {
39
+ logger_1.LoggerFactory.configure(config.logger);
40
+ }
41
+ logger = logger_1.LoggerFactory.getLogger();
42
+ this.baseUrl = config?.kyberswapPrivateUrl || 'https://aggregator-api.kyberswap.com';
43
+ this.clientId = config.kyberswapClientId;
44
+ }
45
+ isCorrectConfig(config) {
46
+ return typeof config['clientId'] === 'string' && config['clientId'].length > 0;
47
+ }
48
+ async fetchPrice(params) {
49
+ this.validatePriceParams(params);
50
+ const requestBody = this.priceParamsToRequestBody(params);
51
+ logger.debug('Generated KyberSwap price request body', requestBody);
52
+ try {
53
+ const chainName = (0, chain_id_name_1.chainIdToName)(params.networkIn);
54
+ const url = new URL(`${this.baseUrl}/${chainName}${this.priceEndpoint}`);
55
+ // Add query parameters
56
+ url.searchParams.append('source', this.clientId);
57
+ Object.entries(requestBody).forEach(([key, value]) => {
58
+ if (value !== undefined && value !== null) {
59
+ url.searchParams.append(key, value.toString());
60
+ }
61
+ });
62
+ logger.debug(`Making request to KyberSwap API: ${url.toString()}`);
63
+ const headers = {};
64
+ headers['x-client-id'] = this.clientId;
65
+ const response = await axios_1.default.get(url.toString(), {
66
+ headers,
67
+ });
68
+ const kyberswapPriceResponse = response.data.data;
69
+ if (!kyberswapPriceResponse || !kyberswapPriceResponse.routeSummary) {
70
+ logger.error('Invalid response received from KyberSwap API', undefined, {
71
+ kyberswapPriceResponse,
72
+ });
73
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, 'Invalid response received from KyberSwap API');
74
+ }
75
+ logger.debug('Successfully received price info from KyberSwap', {
76
+ amountOut: kyberswapPriceResponse.routeSummary.amountOut,
77
+ gasEstimate: kyberswapPriceResponse.routeSummary.gas,
78
+ });
79
+ const amountOut = kyberswapPriceResponse.routeSummary.amountOut;
80
+ if (!amountOut) {
81
+ logger.error('No output amount received from KyberSwap', undefined, {
82
+ kyberswapPriceResponse,
83
+ });
84
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, 'No output amount received from KyberSwap');
85
+ }
86
+ return {
87
+ protocol: this.protocol,
88
+ networkIn: params.networkIn,
89
+ networkOut: params.networkOut,
90
+ tokenIn: params.tokenIn,
91
+ tokenOut: params.tokenOut,
92
+ amountIn: params.amountIn,
93
+ amountOut,
94
+ estimatedGas: kyberswapPriceResponse.routeSummary.gas,
95
+ protocolResponse: kyberswapPriceResponse,
96
+ slippage: params.slippage,
97
+ };
98
+ }
99
+ catch (error) {
100
+ const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
101
+ logger.error(`Failed to fetch swap price from ${this.protocol}`, errorMessageError);
102
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, `Failed to fetch swap price from KyberSwap: ${errorMessage}`);
103
+ }
104
+ }
105
+ async fetchQuote(params) {
106
+ logger.info(`Fetching swap quote for address: ${params.from}`);
107
+ params.tokenIn = (0, is_native_1.isNative)(params.tokenIn) ? constants_1.NATIVE_ADDRESS : params.tokenIn;
108
+ params.tokenOut = (0, is_native_1.isNative)(params.tokenOut) ? constants_1.NATIVE_ADDRESS : params.tokenOut;
109
+ this.validatePriceParams(params);
110
+ const { from, receiver, tokenIn, amountIn, networkIn, networkOut } = params;
111
+ let { priceResponse } = params;
112
+ if (!priceResponse || !this.isKyberswapPriceResponse(priceResponse.protocolResponse)) {
113
+ logger.info('No price response received, fetching price...');
114
+ priceResponse = await this.fetchPrice(params);
115
+ }
116
+ if (!this.isKyberswapPriceResponse(priceResponse.protocolResponse)) {
117
+ logger.error('Invalid price response received', undefined, { priceResponse });
118
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, 'Invalid price response received');
119
+ }
120
+ const quoteRequestBody = {
121
+ source: this.clientId,
122
+ routeSummary: priceResponse.protocolResponse.routeSummary,
123
+ sender: (0, address_1.formatAddress)(from),
124
+ slippageTolerance: params.slippage * 100, // Convert to basis points
125
+ recipient: (0, address_1.formatAddress)(receiver || from),
126
+ enableGasEstimation: false,
127
+ };
128
+ logger.debug('Generated KyberSwap quote request body', quoteRequestBody);
129
+ try {
130
+ const chainName = (0, chain_id_name_1.chainIdToName)(networkIn);
131
+ const url = `${this.baseUrl}/${chainName}${this.quoteEndpoint}`;
132
+ logger.debug(`Making request to KyberSwap quote API: ${url}`);
133
+ const headers = {};
134
+ headers['x-client-id'] = this.clientId;
135
+ const response = await axios_1.default.post(url, quoteRequestBody, {
136
+ headers,
137
+ });
138
+ const kyberswapQuoteResponse = response.data.data;
139
+ logger.debug('Successfully received quote info from KyberSwap');
140
+ if (!kyberswapQuoteResponse || !kyberswapQuoteResponse.amountOut) {
141
+ logger.error('No output amount received from KyberSwap', undefined, {
142
+ kyberswapQuoteResponse,
143
+ });
144
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.QUOTE_NOT_FOUND, 'No output amount received from KyberSwap');
145
+ }
146
+ const gasEstimate = kyberswapQuoteResponse.gas;
147
+ const gasLimit = Math.floor(Number(gasEstimate) * 1.1).toString(); // 10% buffer
148
+ return {
149
+ protocol: this.protocol,
150
+ tokenIn: tokenIn,
151
+ tokenOut: priceResponse.protocolResponse.routeSummary.tokenOut,
152
+ amountIn: amountIn,
153
+ amountOut: kyberswapQuoteResponse.amountOut,
154
+ from,
155
+ receiver: receiver || from,
156
+ executionPayload: {
157
+ transactionData: {
158
+ data: kyberswapQuoteResponse.data,
159
+ to: kyberswapQuoteResponse.routerAddress,
160
+ value: (0, is_native_1.isNative)(tokenIn) ? amountIn : '0',
161
+ gasEstimate,
162
+ gasLimit,
163
+ },
164
+ },
165
+ slippage: priceResponse.slippage,
166
+ networkIn,
167
+ networkOut,
168
+ protocolResponse: kyberswapQuoteResponse,
169
+ };
170
+ }
171
+ catch (error) {
172
+ const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
173
+ logger.error(`Failed to fetch quote from ${this.protocol}`, errorMessageError);
174
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.QUOTE_NOT_FOUND, `Failed to fetch swap quote from KyberSwap: ${errorMessage}`);
175
+ }
176
+ }
177
+ priceParamsToRequestBody(params) {
178
+ const { tokenIn, tokenOut, amountIn, slippage, from } = params;
179
+ logger.debug('Converting price params to KyberSwap request body', { params });
180
+ const requestBody = {
181
+ tokenIn: (0, is_native_1.isNative)(tokenIn) ? constants_1.NATIVE_ADDRESS : tokenIn,
182
+ tokenOut: (0, is_native_1.isNative)(tokenOut) ? constants_1.NATIVE_ADDRESS : tokenOut,
183
+ amountIn: amountIn.toString(),
184
+ to: (0, address_1.formatAddress)(from),
185
+ saveGas: false,
186
+ gasInclude: true,
187
+ slippageTolerance: slippage * 100, // Convert to basis points
188
+ source: this.clientId,
189
+ };
190
+ logger.debug('Generated KyberSwap request body', requestBody);
191
+ return requestBody;
192
+ }
193
+ validatePriceParams(params) {
194
+ const { networkIn, networkOut } = params;
195
+ logger.debug('Validating price params');
196
+ if (!this.multiChain && networkIn !== networkOut) {
197
+ logger.error('Multi-chain swaps not supported');
198
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, 'Multi-chain swaps not supported');
199
+ }
200
+ if (!this.singleChain && networkIn === networkOut) {
201
+ logger.error('Single-chain swaps not supported');
202
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, 'Single-chain swaps not supported');
203
+ }
204
+ if (!this.chains.includes(networkIn)) {
205
+ logger.error(`Network ${networkIn} not supported`);
206
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, `Network ${networkIn} not supported`);
207
+ }
208
+ if (!this.chains.includes(networkOut)) {
209
+ logger.error(`Network ${networkOut} not supported`);
210
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, `Network ${networkOut} not supported`);
211
+ }
212
+ }
213
+ isKyberswapPriceResponse(response) {
214
+ return 'routeSummary' in response;
215
+ }
216
+ }
217
+ exports.KyberswapService = KyberswapService;
218
+ //# sourceMappingURL=kyberswap.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kyberswap.service.js","sourceRoot":"","sources":["../../../../src/protocols/kyberswap/kyberswap.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { ChainIdEnum } from '../../types/enums';
2
+ import { RawProtocolPriceResponse } from '../../types/price-response';
3
+ export type KyberswapConfig = {
4
+ kyberswapClientId: string;
5
+ kyberswapPrivateUrl?: string;
6
+ };
7
+ export type KyberswapPriceRequestBody = {
8
+ tokenIn: string;
9
+ tokenOut: string;
10
+ amountIn: string;
11
+ to: string;
12
+ saveGas: boolean;
13
+ gasInclude: boolean;
14
+ slippageTolerance: number;
15
+ source?: string;
16
+ };
17
+ export type KyberswapQuoteRequestBody = {
18
+ source: string;
19
+ routeSummary: RouteSummary;
20
+ sender: string;
21
+ slippageTolerance: number;
22
+ recipient: string;
23
+ enableGasEstimation?: boolean;
24
+ };
25
+ export type PoolExtra = {
26
+ tokenInIndex?: number;
27
+ tokenOutIndex?: number;
28
+ underlying?: boolean;
29
+ TokenInIsNative?: boolean;
30
+ TokenOutIsNative?: boolean;
31
+ blockNumber?: number;
32
+ vault?: string;
33
+ poolId?: string;
34
+ fee?: number;
35
+ feePrecision?: number;
36
+ };
37
+ export type ExtraFee = {
38
+ feeAmount: string;
39
+ chargeFeeBy: string;
40
+ isInBps: boolean;
41
+ feeReceiver: string;
42
+ };
43
+ export type Pool = {
44
+ pool: string;
45
+ tokenIn: string;
46
+ tokenOut: string;
47
+ limitReturnAmount: string;
48
+ swapAmount: string;
49
+ amountOut: string;
50
+ exchange: string;
51
+ poolLength: number;
52
+ poolType: string;
53
+ poolExtra: PoolExtra | null;
54
+ extra: Record<string, unknown> | null;
55
+ };
56
+ export type RouteSummary = {
57
+ tokenIn: string;
58
+ amountIn: string;
59
+ amountInUsd: string;
60
+ tokenInMarketPriceAvailable: boolean;
61
+ tokenOut: string;
62
+ amountOut: string;
63
+ amountOutUsd: string;
64
+ tokenOutMarketPriceAvailable: boolean;
65
+ gas: string;
66
+ gasPrice: string;
67
+ gasUsd: string;
68
+ extraFee: ExtraFee;
69
+ route: Pool[][];
70
+ extra: {
71
+ chunksInfo: {
72
+ amountIn: string;
73
+ amountOut: string;
74
+ amountInUsd: string;
75
+ amountOutUsd: string;
76
+ }[];
77
+ };
78
+ };
79
+ export type KyberswapPriceResponse = {
80
+ routeSummary: RouteSummary;
81
+ routerAddress: string;
82
+ } & RawProtocolPriceResponse;
83
+ export type KyberswapQuoteResponse = {
84
+ amountIn: string;
85
+ amountInUsd: string;
86
+ amountOut: string;
87
+ amountOutUsd: string;
88
+ gas: string;
89
+ gasUsd: string;
90
+ additionalCostUsd: string;
91
+ additionalCostError?: string;
92
+ outputChange: {
93
+ amount: string;
94
+ percent: number;
95
+ level: number;
96
+ };
97
+ data: string;
98
+ routerAddress: string;
99
+ };
100
+ export type KyberswapMultiPriceParams = {
101
+ network: ChainIdEnum;
102
+ from: string;
103
+ tokensIn: string[];
104
+ tokenOut: string;
105
+ amountsIn: string[];
106
+ slippage: string;
107
+ };
108
+ export type KyberswapMultiQuoteParams = {
109
+ network: ChainIdEnum;
110
+ fromAddress: string;
111
+ routeSummary: RouteSummary;
112
+ receiver?: string;
113
+ };
114
+ //# sourceMappingURL=kyberswap.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kyberswap.types.d.ts","sourceRoot":"","sources":["../../../../src/protocols/kyberswap/kyberswap.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=kyberswap.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kyberswap.types.js","sourceRoot":"","sources":["../../../../src/protocols/kyberswap/kyberswap.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { OdosService } from './odos.service';
2
+ export type { OdosPriceResponse, OdosTransaction, OdosQuoteResponse, OdosQuoteRequestBody, OdosAssembleRequestBody, OdosMultiPriceParams, OdosMultiQuoteParams, OdosMultiPriceRequestBody, OdosMultiQuoteRequestBody, } from './odos.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/protocols/odos/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OdosService = void 0;
4
+ // Odos Protocol - All exports
5
+ var odos_service_1 = require("./odos.service");
6
+ Object.defineProperty(exports, "OdosService", { enumerable: true, get: function () { return odos_service_1.OdosService; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/protocols/odos/index.ts"],"names":[],"mappings":";;;AAAA,8BAA8B;AAC9B,+CAA6C;AAApC,2GAAA,WAAW,OAAA"}
@@ -0,0 +1,39 @@
1
+ import { IIntentProtocol } from '../../interfaces/intent-protocol';
2
+ import { ChainIdEnum, ProtocolEnum } from '../../types/enums';
3
+ import { IntentPriceParams } from '../../types/price-params';
4
+ import { PriceResponse, RawProtocolPriceResponse } from '../../types/price-response';
5
+ import { QuoteResponse } from '../../types/quote-response';
6
+ import { IntentsSDKConfig } from '../../types/sdk-config';
7
+ import { OdosPriceResponse, OdosQuoteResponse, OdosQuoteRequestBody } from './odos.types';
8
+ import { IntentQuoteParams } from '../../types/quote-params';
9
+ export declare class OdosService implements IIntentProtocol {
10
+ protected readonly rpcUrls: Record<number, string>;
11
+ readonly protocol = ProtocolEnum.ODOS;
12
+ includeApprovals?: boolean | undefined;
13
+ readonly chains: ChainIdEnum[];
14
+ baseUrl: string;
15
+ readonly singleChain = true;
16
+ readonly multiChain = false;
17
+ readonly priceEndpoint = "/pricing/token";
18
+ readonly quoteEndpoint = "/sor/quote/v2";
19
+ readonly assemblyEndpoint = "/sor/assemble";
20
+ readonly quoteBaseUrl: string;
21
+ readonly priceBaseUrl: string;
22
+ readonly assemblyBaseUrl: string;
23
+ constructor(config?: IntentsSDKConfig);
24
+ isCorrectConfig<T extends {
25
+ [key: string]: string;
26
+ }>(_config: {
27
+ [key: string]: string;
28
+ }): _config is T;
29
+ fetchPrice(params: IntentPriceParams): Promise<Omit<PriceResponse, 'protocolResponse'> & {
30
+ protocolResponse: OdosPriceResponse;
31
+ }>;
32
+ fetchQuote(params: IntentQuoteParams): Promise<QuoteResponse & {
33
+ protocolResponse: OdosQuoteResponse;
34
+ }>;
35
+ protected priceParamsToRequestBody(params: IntentPriceParams): OdosQuoteRequestBody;
36
+ protected validatePriceParams(params: IntentPriceParams): void;
37
+ protected isOdosPriceResponse(response: RawProtocolPriceResponse): response is OdosPriceResponse;
38
+ }
39
+ //# sourceMappingURL=odos.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odos.service.d.ts","sourceRoot":"","sources":["../../../../src/protocols/odos/odos.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EACL,iBAAiB,EAEjB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAItB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,qBAAa,WAAY,YAAW,eAAe;IACjD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IACxD,SAAgB,QAAQ,qBAAqB;IACtC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAS;IACtD,SAAgB,MAAM,gBASpB;IACF,OAAO,SAA0B;IACjC,SAAgB,WAAW,QAAQ;IACnC,SAAgB,UAAU,SAAS;IACnC,SAAgB,aAAa,oBAAoB;IACjD,SAAgB,aAAa,mBAAmB;IAChD,SAAgB,gBAAgB,mBAAmB;IACnD,SAAgB,YAAY,SAAqC;IACjE,SAAgB,YAAY,SAAqC;IACjE,SAAgB,eAAe,SAAwC;gBAE3D,MAAM,CAAC,EAAE,gBAAgB;IAWrC,eAAe,CAAC,CAAC,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE;QAC5D,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GAAG,OAAO,IAAI,CAAC;IAKH,UAAU,CACrB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAAG;QAAE,gBAAgB,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAsDhF,UAAU,CACrB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,aAAa,GAAG;QAAE,gBAAgB,EAAE,iBAAiB,CAAA;KAAE,CAAC;IA4EnE,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,GAAG,oBAAoB;IA+BnF,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAsB9D,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,QAAQ,IAAI,iBAAiB;CAGjG"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OdosService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const enums_1 = require("../../types/enums");
9
+ const address_1 = require("../../utils/address");
10
+ const logger_1 = require("../../utils/logger");
11
+ const constants_1 = require("../../utils/constants");
12
+ const is_native_1 = require("../../utils/is-native");
13
+ const throw_error_1 = require("../../utils/throw-error");
14
+ const create_error_message_1 = require("../../utils/create-error-message");
15
+ let logger;
16
+ class OdosService {
17
+ constructor(config) {
18
+ this.rpcUrls = {};
19
+ this.protocol = enums_1.ProtocolEnum.ODOS;
20
+ this.includeApprovals = false;
21
+ this.chains = [
22
+ enums_1.ChainIdEnum.ETHEREUM,
23
+ enums_1.ChainIdEnum.ARBITRUM,
24
+ enums_1.ChainIdEnum.OPTIMISM,
25
+ enums_1.ChainIdEnum.POLYGON,
26
+ enums_1.ChainIdEnum.BSC,
27
+ enums_1.ChainIdEnum.AVALANCHE,
28
+ enums_1.ChainIdEnum.BASE,
29
+ enums_1.ChainIdEnum.SONIC,
30
+ ];
31
+ this.baseUrl = 'https://api.odos.xyz';
32
+ this.singleChain = true;
33
+ this.multiChain = false;
34
+ this.priceEndpoint = '/pricing/token';
35
+ this.quoteEndpoint = '/sor/quote/v2';
36
+ this.assemblyEndpoint = '/sor/assemble';
37
+ this.quoteBaseUrl = this.baseUrl + this.quoteEndpoint;
38
+ this.priceBaseUrl = this.baseUrl + this.priceEndpoint;
39
+ this.assemblyBaseUrl = this.baseUrl + this.assemblyEndpoint;
40
+ if (config?.debug) {
41
+ logger_1.LoggerFactory.configure(logger_1.LoggerFactory.createConsoleLogger({ level: logger_1.LogLevelEnum.DEBUG }));
42
+ }
43
+ // Use custom logger if provided
44
+ else if (config?.logger) {
45
+ logger_1.LoggerFactory.configure(config.logger);
46
+ }
47
+ logger = logger_1.LoggerFactory.getLogger();
48
+ }
49
+ isCorrectConfig(_config) {
50
+ // Odos has no required config fields, all are optional
51
+ return true;
52
+ }
53
+ async fetchPrice(params) {
54
+ this.validatePriceParams(params);
55
+ const requestBody = this.priceParamsToRequestBody(params);
56
+ logger.debug('Generated ODOS price request body', requestBody);
57
+ try {
58
+ logger.debug(`Making request to ODOS API: ${this.quoteBaseUrl}`);
59
+ const response = await axios_1.default.post(this.quoteBaseUrl, requestBody);
60
+ const odosPriceResponse = response.data;
61
+ if (!odosPriceResponse ||
62
+ !odosPriceResponse.outAmounts ||
63
+ odosPriceResponse.outAmounts.length === 0) {
64
+ logger.error('Invalid response received from ODOS API', undefined, { odosPriceResponse });
65
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, 'Invalid response received from ODOS API');
66
+ }
67
+ logger.debug('Successfully received price info from ODOS', {
68
+ amountOut: odosPriceResponse.outAmounts[0],
69
+ gasEstimate: odosPriceResponse.gasEstimate.toString(),
70
+ });
71
+ const amountOut = odosPriceResponse.outAmounts[0];
72
+ if (!amountOut) {
73
+ logger.error('No output amounts received from ODOS', undefined, { odosPriceResponse });
74
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, 'No output amounts received from ODOS');
75
+ }
76
+ return {
77
+ protocol: this.protocol,
78
+ networkIn: params.networkIn,
79
+ networkOut: params.networkOut,
80
+ tokenIn: params.tokenIn,
81
+ tokenOut: params.tokenOut,
82
+ amountIn: params.amountIn,
83
+ amountOut,
84
+ estimatedGas: odosPriceResponse.gasEstimate.toString(),
85
+ protocolResponse: odosPriceResponse,
86
+ slippage: params.slippage,
87
+ };
88
+ }
89
+ catch (error) {
90
+ const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
91
+ logger.error(`Failed to fetch swap price from ${this.protocol}`, errorMessageError);
92
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, `Failed to fetch swap price from ODOS: ${errorMessage}`);
93
+ }
94
+ }
95
+ async fetchQuote(params) {
96
+ logger.info(`Fetching swap quote for address: ${params.from}`);
97
+ this.validatePriceParams(params);
98
+ const { from, receiver, tokenIn, amountIn, networkIn, networkOut } = params;
99
+ let { priceResponse } = params;
100
+ if (!priceResponse || !this.isOdosPriceResponse(priceResponse.protocolResponse)) {
101
+ logger.info('No price response received, fetching price...');
102
+ priceResponse = await this.fetchPrice(params);
103
+ }
104
+ if (!this.isOdosPriceResponse(priceResponse.protocolResponse)) {
105
+ logger.error('Invalid price response received', undefined, { priceResponse });
106
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, 'Invalid price response received');
107
+ }
108
+ const assembleRequestBody = {
109
+ userAddr: (0, address_1.formatAddress)(from),
110
+ pathId: priceResponse.protocolResponse.pathId,
111
+ simulate: false,
112
+ ...(receiver && { receiver: (0, address_1.formatAddress)(receiver) }),
113
+ };
114
+ logger.debug('Generated ODOS assemble request body', assembleRequestBody);
115
+ try {
116
+ logger.debug(`Making request to ODOS assembly API: ${this.assemblyBaseUrl}`);
117
+ const response = await axios_1.default.post(this.assemblyBaseUrl, assembleRequestBody);
118
+ const odosQuoteResponse = response.data;
119
+ logger.debug('Successfully received quote info from ODOS');
120
+ const tokenOut = odosQuoteResponse.outputTokens[0];
121
+ if (!tokenOut || !tokenOut.amount) {
122
+ logger.error('No output token amount received from ODOS', undefined, { odosQuoteResponse });
123
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.QUOTE_NOT_FOUND, 'No output token amount received from ODOS');
124
+ }
125
+ return {
126
+ protocol: this.protocol,
127
+ tokenIn: tokenIn,
128
+ tokenOut: tokenOut.tokenAddress,
129
+ amountIn: amountIn,
130
+ amountOut: tokenOut.amount,
131
+ from,
132
+ receiver,
133
+ executionPayload: {
134
+ transactionData: {
135
+ data: odosQuoteResponse.transaction.data,
136
+ to: odosQuoteResponse.transaction.to,
137
+ value: odosQuoteResponse.transaction.value,
138
+ gasEstimate: odosQuoteResponse.gasEstimate.toString(),
139
+ gasLimit: (odosQuoteResponse.gasEstimate * 1.1).toString(), // 10% buffer
140
+ },
141
+ },
142
+ slippage: priceResponse.slippage,
143
+ networkIn,
144
+ networkOut,
145
+ protocolResponse: odosQuoteResponse,
146
+ };
147
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
148
+ }
149
+ catch (error) {
150
+ const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
151
+ logger.error(`Failed to fetch quote from ${this.protocol}`, errorMessageError);
152
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.QUOTE_NOT_FOUND, `Failed to fetch swap quote from ODOS: ${errorMessage}`);
153
+ }
154
+ }
155
+ priceParamsToRequestBody(params) {
156
+ const { tokenIn, tokenOut, amountIn, slippage, networkIn, from } = params;
157
+ logger.debug('Converting price params to ODOS request body', { params });
158
+ const requestBody = {
159
+ chainId: networkIn,
160
+ inputTokens: [
161
+ {
162
+ tokenAddress: (0, is_native_1.isNative)(tokenIn) ? constants_1.ZERO_ADDRESS : (0, address_1.formatAddress)(tokenIn),
163
+ amount: amountIn.toString(),
164
+ },
165
+ ],
166
+ outputTokens: [
167
+ {
168
+ tokenAddress: (0, is_native_1.isNative)(tokenOut) ? constants_1.ZERO_ADDRESS : (0, address_1.formatAddress)(tokenOut),
169
+ proportion: 1,
170
+ },
171
+ ],
172
+ referralCode: 0,
173
+ disableRFQs: true,
174
+ compact: true,
175
+ slippageLimitPercent: (slippage || 0.3).toString(),
176
+ userAddr: (0, address_1.formatAddress)(from),
177
+ simple: true,
178
+ };
179
+ logger.debug('Generated ODOS request body', requestBody);
180
+ return requestBody;
181
+ }
182
+ validatePriceParams(params) {
183
+ const { networkIn, networkOut } = params;
184
+ logger.debug('Validating price params');
185
+ if (!this.multiChain && networkIn !== networkOut) {
186
+ logger.error('Multi-chain swaps not supported');
187
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, 'Multi-chain swaps not supported');
188
+ }
189
+ if (!this.singleChain && networkIn === networkOut) {
190
+ logger.error('Single-chain swaps not supported');
191
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, 'Single-chain swaps not supported');
192
+ }
193
+ if (!this.chains.includes(networkIn)) {
194
+ logger.error(`Network ${networkIn} not supported`);
195
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, `Network ${networkIn} not supported`);
196
+ }
197
+ if (!this.chains.includes(networkOut)) {
198
+ logger.error(`Network ${networkOut} not supported`);
199
+ throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, `Network ${networkOut} not supported`);
200
+ }
201
+ }
202
+ isOdosPriceResponse(response) {
203
+ return 'pathId' in response;
204
+ }
205
+ }
206
+ exports.OdosService = OdosService;
207
+ //# sourceMappingURL=odos.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odos.service.js","sourceRoot":"","sources":["../../../../src/protocols/odos/odos.service.ts"],"names":[],"mappings":"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"}