@catalyst-team/poly-sdk 0.3.0 → 0.4.3

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 (317) hide show
  1. package/README.md +133 -1
  2. package/README.zh-CN.md +2 -0
  3. package/dist/scripts/dip-arb/auto-trade.d.ts +20 -0
  4. package/dist/scripts/dip-arb/auto-trade.d.ts.map +1 -0
  5. package/dist/scripts/dip-arb/auto-trade.js +373 -0
  6. package/dist/scripts/dip-arb/auto-trade.js.map +1 -0
  7. package/dist/scripts/dip-arb/example-basic.d.ts +30 -0
  8. package/dist/scripts/dip-arb/example-basic.d.ts.map +1 -0
  9. package/dist/scripts/dip-arb/example-basic.js +222 -0
  10. package/dist/scripts/dip-arb/example-basic.js.map +1 -0
  11. package/dist/scripts/dip-arb/redeem-positions.d.ts +11 -0
  12. package/dist/scripts/dip-arb/redeem-positions.d.ts.map +1 -0
  13. package/dist/scripts/dip-arb/redeem-positions.js +201 -0
  14. package/dist/scripts/dip-arb/redeem-positions.js.map +1 -0
  15. package/dist/scripts/dip-arb/scan-markets.d.ts +6 -0
  16. package/dist/scripts/dip-arb/scan-markets.d.ts.map +1 -0
  17. package/dist/scripts/dip-arb/scan-markets.js +73 -0
  18. package/dist/scripts/dip-arb/scan-markets.js.map +1 -0
  19. package/dist/src/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
  20. package/dist/src/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
  21. package/dist/src/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  22. package/dist/src/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  23. package/dist/src/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  24. package/dist/src/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  25. package/dist/src/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  26. package/dist/{__tests__ → src/__tests__}/integration/data-api.integration.test.js +21 -18
  27. package/dist/src/__tests__/integration/data-api.integration.test.js.map +1 -0
  28. package/dist/src/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  29. package/dist/src/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  30. package/dist/src/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
  31. package/dist/{__tests__ → src/__tests__}/integration/market-service.integration.test.js +7 -0
  32. package/dist/src/__tests__/integration/market-service.integration.test.js.map +1 -0
  33. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
  34. package/dist/src/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
  35. package/dist/src/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
  36. package/dist/src/__tests__/integration/trading-service.integration.test.js.map +1 -0
  37. package/dist/src/__tests__/test-utils.d.ts.map +1 -0
  38. package/dist/src/__tests__/test-utils.js.map +1 -0
  39. package/dist/src/catalyst/catalyst-query-service.d.ts +109 -0
  40. package/dist/src/catalyst/catalyst-query-service.d.ts.map +1 -0
  41. package/dist/src/catalyst/catalyst-query-service.js +141 -0
  42. package/dist/src/catalyst/catalyst-query-service.js.map +1 -0
  43. package/dist/src/catalyst/catalyst-realtime-service.d.ts +40 -0
  44. package/dist/src/catalyst/catalyst-realtime-service.d.ts.map +1 -0
  45. package/dist/src/catalyst/catalyst-realtime-service.js +125 -0
  46. package/dist/src/catalyst/catalyst-realtime-service.js.map +1 -0
  47. package/dist/src/catalyst/index.d.ts +4 -0
  48. package/dist/src/catalyst/index.d.ts.map +1 -0
  49. package/dist/src/catalyst/index.js +4 -0
  50. package/dist/src/catalyst/index.js.map +1 -0
  51. package/dist/src/catalyst/types.d.ts +178 -0
  52. package/dist/src/catalyst/types.d.ts.map +1 -0
  53. package/dist/src/catalyst/types.js +2 -0
  54. package/dist/src/catalyst/types.js.map +1 -0
  55. package/dist/src/clients/bridge-client.d.ts.map +1 -0
  56. package/dist/src/clients/bridge-client.js.map +1 -0
  57. package/dist/{clients → src/clients}/ctf-client.d.ts +6 -4
  58. package/dist/src/clients/ctf-client.d.ts.map +1 -0
  59. package/dist/src/clients/ctf-client.js.map +1 -0
  60. package/dist/{clients → src/clients}/data-api.d.ts +94 -20
  61. package/dist/src/clients/data-api.d.ts.map +1 -0
  62. package/dist/{clients → src/clients}/data-api.js +119 -52
  63. package/dist/src/clients/data-api.js.map +1 -0
  64. package/dist/{clients → src/clients}/gamma-api.d.ts +74 -0
  65. package/dist/src/clients/gamma-api.d.ts.map +1 -0
  66. package/dist/{clients → src/clients}/gamma-api.js +7 -0
  67. package/dist/src/clients/gamma-api.js.map +1 -0
  68. package/dist/src/clients/subgraph.d.ts.map +1 -0
  69. package/dist/src/clients/subgraph.js.map +1 -0
  70. package/dist/src/core/cache-adapter-bridge.d.ts.map +1 -0
  71. package/dist/src/core/cache-adapter-bridge.js.map +1 -0
  72. package/dist/{core → src/core}/cache.d.ts +2 -0
  73. package/dist/src/core/cache.d.ts.map +1 -0
  74. package/dist/{core → src/core}/cache.js +4 -0
  75. package/dist/src/core/cache.js.map +1 -0
  76. package/dist/src/core/errors.d.ts.map +1 -0
  77. package/dist/src/core/errors.js.map +1 -0
  78. package/dist/{core → src/core}/rate-limiter.d.ts +2 -1
  79. package/dist/src/core/rate-limiter.d.ts.map +1 -0
  80. package/dist/{core → src/core}/rate-limiter.js +7 -0
  81. package/dist/src/core/rate-limiter.js.map +1 -0
  82. package/dist/{core → src/core}/types.d.ts +105 -1
  83. package/dist/src/core/types.d.ts.map +1 -0
  84. package/dist/src/core/types.js +49 -0
  85. package/dist/src/core/types.js.map +1 -0
  86. package/dist/src/core/types.test.d.ts.map +1 -0
  87. package/dist/src/core/types.test.js.map +1 -0
  88. package/dist/src/core/unified-cache.d.ts.map +1 -0
  89. package/dist/src/core/unified-cache.js.map +1 -0
  90. package/dist/{index.d.ts → src/index.d.ts} +24 -5
  91. package/dist/src/index.d.ts.map +1 -0
  92. package/dist/{index.js → src/index.js} +38 -4
  93. package/dist/src/index.js.map +1 -0
  94. package/dist/src/insider-scan/index.d.ts +3 -0
  95. package/dist/src/insider-scan/index.d.ts.map +1 -0
  96. package/dist/src/insider-scan/index.js +3 -0
  97. package/dist/src/insider-scan/index.js.map +1 -0
  98. package/dist/src/insider-scan/insider-scan-service.d.ts +63 -0
  99. package/dist/src/insider-scan/insider-scan-service.d.ts.map +1 -0
  100. package/dist/src/insider-scan/insider-scan-service.js +153 -0
  101. package/dist/src/insider-scan/insider-scan-service.js.map +1 -0
  102. package/dist/src/insider-scan/types.d.ts +205 -0
  103. package/dist/src/insider-scan/types.d.ts.map +1 -0
  104. package/dist/src/insider-scan/types.js +7 -0
  105. package/dist/src/insider-scan/types.js.map +1 -0
  106. package/dist/src/services/arbitrage-service.d.ts.map +1 -0
  107. package/dist/{services → src/services}/arbitrage-service.js +14 -4
  108. package/dist/src/services/arbitrage-service.js.map +1 -0
  109. package/dist/src/services/authorization-service.d.ts.map +1 -0
  110. package/dist/src/services/authorization-service.js.map +1 -0
  111. package/dist/src/services/binance-service.d.ts +154 -0
  112. package/dist/src/services/binance-service.d.ts.map +1 -0
  113. package/dist/src/services/binance-service.js +266 -0
  114. package/dist/src/services/binance-service.js.map +1 -0
  115. package/dist/src/services/dip-arb-service.d.ts +245 -0
  116. package/dist/src/services/dip-arb-service.d.ts.map +1 -0
  117. package/dist/src/services/dip-arb-service.js +1865 -0
  118. package/dist/src/services/dip-arb-service.js.map +1 -0
  119. package/dist/src/services/dip-arb-types.d.ts +553 -0
  120. package/dist/src/services/dip-arb-types.d.ts.map +1 -0
  121. package/dist/src/services/dip-arb-types.js +164 -0
  122. package/dist/src/services/dip-arb-types.js.map +1 -0
  123. package/dist/src/services/market-service.d.ts +431 -0
  124. package/dist/src/services/market-service.d.ts.map +1 -0
  125. package/dist/{services → src/services}/market-service.js +501 -17
  126. package/dist/src/services/market-service.js.map +1 -0
  127. package/dist/{services → src/services}/onchain-service.d.ts +10 -2
  128. package/dist/src/services/onchain-service.d.ts.map +1 -0
  129. package/dist/{services → src/services}/onchain-service.js +8 -0
  130. package/dist/src/services/onchain-service.js.map +1 -0
  131. package/dist/{services → src/services}/realtime-service-v2.d.ts +6 -0
  132. package/dist/src/services/realtime-service-v2.d.ts.map +1 -0
  133. package/dist/{services → src/services}/realtime-service-v2.js +44 -8
  134. package/dist/src/services/realtime-service-v2.js.map +1 -0
  135. package/dist/src/services/smart-money-service.d.ts +769 -0
  136. package/dist/src/services/smart-money-service.d.ts.map +1 -0
  137. package/dist/src/services/smart-money-service.js +1448 -0
  138. package/dist/src/services/smart-money-service.js.map +1 -0
  139. package/dist/src/services/swap-service.d.ts.map +1 -0
  140. package/dist/src/services/swap-service.js.map +1 -0
  141. package/dist/{services → src/services}/trading-service.d.ts +26 -0
  142. package/dist/src/services/trading-service.d.ts.map +1 -0
  143. package/dist/{services → src/services}/trading-service.js +72 -1
  144. package/dist/src/services/trading-service.js.map +1 -0
  145. package/dist/{services → src/services}/wallet-service.d.ts +81 -4
  146. package/dist/src/services/wallet-service.d.ts.map +1 -0
  147. package/dist/{services → src/services}/wallet-service.js +126 -8
  148. package/dist/src/services/wallet-service.js.map +1 -0
  149. package/dist/src/signal/index.d.ts +8 -0
  150. package/dist/src/signal/index.d.ts.map +1 -0
  151. package/dist/src/signal/index.js +7 -0
  152. package/dist/src/signal/index.js.map +1 -0
  153. package/dist/src/signal/signal-service.d.ts +89 -0
  154. package/dist/src/signal/signal-service.d.ts.map +1 -0
  155. package/dist/src/signal/signal-service.js +226 -0
  156. package/dist/src/signal/signal-service.js.map +1 -0
  157. package/dist/src/signal/types.d.ts +280 -0
  158. package/dist/src/signal/types.d.ts.map +1 -0
  159. package/dist/src/signal/types.js +7 -0
  160. package/dist/src/signal/types.js.map +1 -0
  161. package/dist/src/utils/price-utils.d.ts.map +1 -0
  162. package/dist/src/utils/price-utils.js.map +1 -0
  163. package/dist/src/utils/price-utils.test.d.ts.map +1 -0
  164. package/dist/src/utils/price-utils.test.js.map +1 -0
  165. package/dist/src/wallet-report/index.d.ts +3 -0
  166. package/dist/src/wallet-report/index.d.ts.map +1 -0
  167. package/dist/src/wallet-report/index.js +3 -0
  168. package/dist/src/wallet-report/index.js.map +1 -0
  169. package/dist/src/wallet-report/types.d.ts +187 -0
  170. package/dist/src/wallet-report/types.d.ts.map +1 -0
  171. package/dist/src/wallet-report/types.js +7 -0
  172. package/dist/src/wallet-report/types.js.map +1 -0
  173. package/dist/src/wallet-report/wallet-report-service.d.ts +91 -0
  174. package/dist/src/wallet-report/wallet-report-service.d.ts.map +1 -0
  175. package/dist/src/wallet-report/wallet-report-service.js +208 -0
  176. package/dist/src/wallet-report/wallet-report-service.js.map +1 -0
  177. package/dist/src/wallets/hot-wallet-service.d.ts +162 -0
  178. package/dist/src/wallets/hot-wallet-service.d.ts.map +1 -0
  179. package/dist/src/wallets/hot-wallet-service.js +251 -0
  180. package/dist/src/wallets/hot-wallet-service.js.map +1 -0
  181. package/dist/src/wallets/index.d.ts +15 -0
  182. package/dist/src/wallets/index.d.ts.map +1 -0
  183. package/dist/src/wallets/index.js +26 -0
  184. package/dist/src/wallets/index.js.map +1 -0
  185. package/package.json +7 -7
  186. package/dist/__tests__/clob-api.test.d.ts +0 -5
  187. package/dist/__tests__/clob-api.test.d.ts.map +0 -1
  188. package/dist/__tests__/clob-api.test.js +0 -240
  189. package/dist/__tests__/clob-api.test.js.map +0 -1
  190. package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +0 -1
  191. package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +0 -1
  192. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +0 -1
  193. package/dist/__tests__/integration/bridge-client.integration.test.js.map +0 -1
  194. package/dist/__tests__/integration/clob-api.integration.test.d.ts +0 -13
  195. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +0 -1
  196. package/dist/__tests__/integration/clob-api.integration.test.js +0 -170
  197. package/dist/__tests__/integration/clob-api.integration.test.js.map +0 -1
  198. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +0 -1
  199. package/dist/__tests__/integration/ctf-client.integration.test.js.map +0 -1
  200. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +0 -1
  201. package/dist/__tests__/integration/data-api.integration.test.js.map +0 -1
  202. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +0 -1
  203. package/dist/__tests__/integration/gamma-api.integration.test.js.map +0 -1
  204. package/dist/__tests__/integration/market-service.integration.test.d.ts.map +0 -1
  205. package/dist/__tests__/integration/market-service.integration.test.js.map +0 -1
  206. package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +0 -1
  207. package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +0 -1
  208. package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +0 -1
  209. package/dist/__tests__/integration/trading-service.integration.test.js.map +0 -1
  210. package/dist/__tests__/test-utils.d.ts.map +0 -1
  211. package/dist/__tests__/test-utils.js.map +0 -1
  212. package/dist/clients/bridge-client.d.ts.map +0 -1
  213. package/dist/clients/bridge-client.js.map +0 -1
  214. package/dist/clients/clob-api.d.ts +0 -391
  215. package/dist/clients/clob-api.d.ts.map +0 -1
  216. package/dist/clients/clob-api.js +0 -448
  217. package/dist/clients/clob-api.js.map +0 -1
  218. package/dist/clients/ctf-client.d.ts.map +0 -1
  219. package/dist/clients/ctf-client.js.map +0 -1
  220. package/dist/clients/data-api.d.ts.map +0 -1
  221. package/dist/clients/data-api.js.map +0 -1
  222. package/dist/clients/gamma-api.d.ts.map +0 -1
  223. package/dist/clients/gamma-api.js.map +0 -1
  224. package/dist/clients/subgraph.d.ts.map +0 -1
  225. package/dist/clients/subgraph.js.map +0 -1
  226. package/dist/clients/trading-client.d.ts +0 -252
  227. package/dist/clients/trading-client.d.ts.map +0 -1
  228. package/dist/clients/trading-client.js +0 -543
  229. package/dist/clients/trading-client.js.map +0 -1
  230. package/dist/clients/websocket-manager.d.ts +0 -103
  231. package/dist/clients/websocket-manager.d.ts.map +0 -1
  232. package/dist/clients/websocket-manager.js +0 -200
  233. package/dist/clients/websocket-manager.js.map +0 -1
  234. package/dist/core/cache-adapter-bridge.d.ts.map +0 -1
  235. package/dist/core/cache-adapter-bridge.js.map +0 -1
  236. package/dist/core/cache.d.ts.map +0 -1
  237. package/dist/core/cache.js.map +0 -1
  238. package/dist/core/errors.d.ts.map +0 -1
  239. package/dist/core/errors.js.map +0 -1
  240. package/dist/core/rate-limiter.d.ts.map +0 -1
  241. package/dist/core/rate-limiter.js.map +0 -1
  242. package/dist/core/types.d.ts.map +0 -1
  243. package/dist/core/types.js +0 -19
  244. package/dist/core/types.js.map +0 -1
  245. package/dist/core/types.test.d.ts.map +0 -1
  246. package/dist/core/types.test.js.map +0 -1
  247. package/dist/core/unified-cache.d.ts.map +0 -1
  248. package/dist/core/unified-cache.js.map +0 -1
  249. package/dist/index.d.ts.map +0 -1
  250. package/dist/index.js.map +0 -1
  251. package/dist/services/arbitrage-service.d.ts.map +0 -1
  252. package/dist/services/arbitrage-service.js.map +0 -1
  253. package/dist/services/authorization-service.d.ts.map +0 -1
  254. package/dist/services/authorization-service.js.map +0 -1
  255. package/dist/services/market-service.d.ts +0 -208
  256. package/dist/services/market-service.d.ts.map +0 -1
  257. package/dist/services/market-service.js.map +0 -1
  258. package/dist/services/onchain-service.d.ts.map +0 -1
  259. package/dist/services/onchain-service.js.map +0 -1
  260. package/dist/services/realtime-service-v2.d.ts.map +0 -1
  261. package/dist/services/realtime-service-v2.js.map +0 -1
  262. package/dist/services/realtime-service.d.ts +0 -82
  263. package/dist/services/realtime-service.d.ts.map +0 -1
  264. package/dist/services/realtime-service.js +0 -182
  265. package/dist/services/realtime-service.js.map +0 -1
  266. package/dist/services/smart-money-service.d.ts +0 -196
  267. package/dist/services/smart-money-service.d.ts.map +0 -1
  268. package/dist/services/smart-money-service.js +0 -358
  269. package/dist/services/smart-money-service.js.map +0 -1
  270. package/dist/services/swap-service.d.ts.map +0 -1
  271. package/dist/services/swap-service.js.map +0 -1
  272. package/dist/services/trading-service.d.ts.map +0 -1
  273. package/dist/services/trading-service.js.map +0 -1
  274. package/dist/services/wallet-service.d.ts.map +0 -1
  275. package/dist/services/wallet-service.js.map +0 -1
  276. package/dist/utils/price-utils.d.ts.map +0 -1
  277. package/dist/utils/price-utils.js.map +0 -1
  278. package/dist/utils/price-utils.test.d.ts.map +0 -1
  279. package/dist/utils/price-utils.test.js.map +0 -1
  280. /package/dist/{__tests__ → src/__tests__}/integration/arbitrage-service.integration.test.d.ts +0 -0
  281. /package/dist/{__tests__ → src/__tests__}/integration/arbitrage-service.integration.test.js +0 -0
  282. /package/dist/{__tests__ → src/__tests__}/integration/bridge-client.integration.test.d.ts +0 -0
  283. /package/dist/{__tests__ → src/__tests__}/integration/bridge-client.integration.test.js +0 -0
  284. /package/dist/{__tests__ → src/__tests__}/integration/ctf-client.integration.test.d.ts +0 -0
  285. /package/dist/{__tests__ → src/__tests__}/integration/ctf-client.integration.test.js +0 -0
  286. /package/dist/{__tests__ → src/__tests__}/integration/data-api.integration.test.d.ts +0 -0
  287. /package/dist/{__tests__ → src/__tests__}/integration/gamma-api.integration.test.d.ts +0 -0
  288. /package/dist/{__tests__ → src/__tests__}/integration/gamma-api.integration.test.js +0 -0
  289. /package/dist/{__tests__ → src/__tests__}/integration/market-service.integration.test.d.ts +0 -0
  290. /package/dist/{__tests__ → src/__tests__}/integration/realtime-service-v2.integration.test.d.ts +0 -0
  291. /package/dist/{__tests__ → src/__tests__}/integration/realtime-service-v2.integration.test.js +0 -0
  292. /package/dist/{__tests__ → src/__tests__}/integration/trading-service.integration.test.d.ts +0 -0
  293. /package/dist/{__tests__ → src/__tests__}/integration/trading-service.integration.test.js +0 -0
  294. /package/dist/{__tests__ → src/__tests__}/test-utils.d.ts +0 -0
  295. /package/dist/{__tests__ → src/__tests__}/test-utils.js +0 -0
  296. /package/dist/{clients → src/clients}/bridge-client.d.ts +0 -0
  297. /package/dist/{clients → src/clients}/bridge-client.js +0 -0
  298. /package/dist/{clients → src/clients}/ctf-client.js +0 -0
  299. /package/dist/{clients → src/clients}/subgraph.d.ts +0 -0
  300. /package/dist/{clients → src/clients}/subgraph.js +0 -0
  301. /package/dist/{core → src/core}/cache-adapter-bridge.d.ts +0 -0
  302. /package/dist/{core → src/core}/cache-adapter-bridge.js +0 -0
  303. /package/dist/{core → src/core}/errors.d.ts +0 -0
  304. /package/dist/{core → src/core}/errors.js +0 -0
  305. /package/dist/{core → src/core}/types.test.d.ts +0 -0
  306. /package/dist/{core → src/core}/types.test.js +0 -0
  307. /package/dist/{core → src/core}/unified-cache.d.ts +0 -0
  308. /package/dist/{core → src/core}/unified-cache.js +0 -0
  309. /package/dist/{services → src/services}/arbitrage-service.d.ts +0 -0
  310. /package/dist/{services → src/services}/authorization-service.d.ts +0 -0
  311. /package/dist/{services → src/services}/authorization-service.js +0 -0
  312. /package/dist/{services → src/services}/swap-service.d.ts +0 -0
  313. /package/dist/{services → src/services}/swap-service.js +0 -0
  314. /package/dist/{utils → src/utils}/price-utils.d.ts +0 -0
  315. /package/dist/{utils → src/utils}/price-utils.js +0 -0
  316. /package/dist/{utils → src/utils}/price-utils.test.d.ts +0 -0
  317. /package/dist/{utils → src/utils}/price-utils.test.js +0 -0
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Dip Arbitrage Service Types
3
+ *
4
+ * 暴跌套利服务类型定义
5
+ *
6
+ * 策略原理:
7
+ * 在 Polymarket 的 BTC/ETH/SOL/XRP UP/DOWN 短期市场中:
8
+ *
9
+ * 1. 每个市场有一个 "price to beat"(开盘时的 Chainlink 价格)
10
+ * 2. 结算规则:
11
+ * - UP 赢:结束时价格 >= price to beat
12
+ * - DOWN 赢:结束时价格 < price to beat
13
+ *
14
+ * 3. 套利流程:
15
+ * - Leg1:检测暴跌 → 买入暴跌侧
16
+ * - Leg2:等待对冲条件 → 买入另一侧
17
+ * - 利润:总成本 < $1 时获得无风险利润
18
+ */
19
+ /**
20
+ * 默认配置
21
+ */
22
+ export const DEFAULT_DIP_ARB_CONFIG = {
23
+ shares: 20,
24
+ sumTarget: 0.92, // ✅ 放宽到 0.92 提高 Leg2 成交率 (8%+ 利润)
25
+ dipThreshold: 0.15,
26
+ windowMinutes: 2,
27
+ slidingWindowMs: 3000, // 3秒滑动窗口 - 核心参数!
28
+ maxSlippage: 0.02,
29
+ minProfitRate: 0.03,
30
+ leg2TimeoutSeconds: 180, // ✅ 缩短到 3 分钟,更快退出未对冲仓位
31
+ enableSurge: true,
32
+ surgeThreshold: 0.15,
33
+ autoMerge: true,
34
+ autoExecute: false,
35
+ executionCooldown: 3000,
36
+ splitOrders: 1, // ✅ 默认不拆分,避免份额误差
37
+ orderIntervalMs: 500, // 拆分订单间隔 500ms
38
+ debug: false,
39
+ };
40
+ /**
41
+ * 默认自动轮换配置
42
+ */
43
+ export const DEFAULT_AUTO_ROTATE_CONFIG = {
44
+ enabled: false,
45
+ underlyings: ['BTC'],
46
+ duration: '15m',
47
+ preloadMinutes: 2,
48
+ autoSettle: true,
49
+ settleStrategy: 'redeem',
50
+ redeemWaitMinutes: 5,
51
+ redeemRetryIntervalSeconds: 30,
52
+ };
53
+ // ============= Helper Functions =============
54
+ /**
55
+ * 创建初始统计
56
+ */
57
+ export function createDipArbInitialStats() {
58
+ return {
59
+ startTime: Date.now(),
60
+ runningTimeMs: 0,
61
+ roundsMonitored: 0,
62
+ roundsCompleted: 0,
63
+ roundsSuccessful: 0,
64
+ roundsExpired: 0,
65
+ signalsDetected: 0,
66
+ leg1Filled: 0,
67
+ leg2Filled: 0,
68
+ totalSpent: 0,
69
+ totalProfit: 0,
70
+ avgProfitRate: 0,
71
+ };
72
+ }
73
+ /**
74
+ * 创建新轮次状态
75
+ */
76
+ export function createDipArbRoundState(roundId, priceToBeat, upPrice, downPrice, durationMinutes = 15) {
77
+ const now = Date.now();
78
+ return {
79
+ roundId,
80
+ startTime: now,
81
+ endTime: now + durationMinutes * 60 * 1000,
82
+ priceToBeat,
83
+ openPrices: {
84
+ up: upPrice,
85
+ down: downPrice,
86
+ },
87
+ phase: 'waiting',
88
+ };
89
+ }
90
+ /**
91
+ * 计算利润率
92
+ */
93
+ export function calculateDipArbProfitRate(totalCost) {
94
+ if (totalCost >= 1 || totalCost <= 0)
95
+ return 0;
96
+ return (1 - totalCost) / totalCost;
97
+ }
98
+ /**
99
+ * 计算基于底层资产价格变化的"真实"胜率
100
+ *
101
+ * @param currentPrice - 当前价格
102
+ * @param priceToBeat - 开盘价格
103
+ * @returns UP 的真实胜率估计 (0-1)
104
+ */
105
+ export function estimateUpWinRate(currentPrice, priceToBeat) {
106
+ if (priceToBeat <= 0)
107
+ return 0.5;
108
+ const priceChange = (currentPrice - priceToBeat) / priceToBeat;
109
+ // 简单模型:价格变化 1% 对应胜率变化约 10%
110
+ const sensitivity = 10;
111
+ const winRateShift = priceChange * sensitivity;
112
+ // 限制在 [0.05, 0.95] 范围内
113
+ return Math.max(0.05, Math.min(0.95, 0.5 + winRateShift));
114
+ }
115
+ /**
116
+ * 检测定价偏差
117
+ *
118
+ * @param tokenPrice - token 当前价格(隐含胜率)
119
+ * @param estimatedWinRate - 基于价格估计的真实胜率
120
+ * @returns 偏差程度(正数 = 被低估,负数 = 被高估)
121
+ */
122
+ export function detectMispricing(tokenPrice, estimatedWinRate) {
123
+ return estimatedWinRate - tokenPrice;
124
+ }
125
+ /**
126
+ * 从 slug 解析底层资产
127
+ * e.g., 'btc-updown-15m-1767165300' → 'BTC'
128
+ */
129
+ export function parseUnderlyingFromSlug(slug) {
130
+ const lower = slug.toLowerCase();
131
+ if (lower.startsWith('btc'))
132
+ return 'BTC';
133
+ if (lower.startsWith('eth'))
134
+ return 'ETH';
135
+ if (lower.startsWith('sol'))
136
+ return 'SOL';
137
+ if (lower.startsWith('xrp'))
138
+ return 'XRP';
139
+ return 'BTC'; // default
140
+ }
141
+ /**
142
+ * 从 slug 解析时长
143
+ * e.g., 'btc-updown-15m-1767165300' → 15
144
+ */
145
+ export function parseDurationFromSlug(slug) {
146
+ if (slug.includes('-5m-'))
147
+ return 5;
148
+ if (slug.includes('-15m-'))
149
+ return 15;
150
+ return 15; // default
151
+ }
152
+ /**
153
+ * 类型守卫:检查是否为 Leg1 信号
154
+ */
155
+ export function isDipArbLeg1Signal(signal) {
156
+ return signal.type === 'leg1';
157
+ }
158
+ /**
159
+ * 类型守卫:检查是否为 Leg2 信号
160
+ */
161
+ export function isDipArbLeg2Signal(signal) {
162
+ return signal.type === 'leg2';
163
+ }
164
+ //# sourceMappingURL=dip-arb-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dip-arb-types.js","sourceRoot":"","sources":["../../../src/services/dip-arb-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Market Service
3
+ *
4
+ * Provides market data and analysis:
5
+ * - Market info and discovery
6
+ * - Orderbook data and analysis
7
+ * - K-Line aggregation from trade data
8
+ * - Spread analysis
9
+ * - Arbitrage detection
10
+ */
11
+ import { DataApiClient } from '../clients/data-api.js';
12
+ import { GammaApiClient, GammaMarket } from '../clients/gamma-api.js';
13
+ import type { UnifiedCache } from '../core/unified-cache.js';
14
+ import { RateLimiter } from '../core/rate-limiter.js';
15
+ import type { UnifiedMarket, ProcessedOrderbook, ArbitrageOpportunity, KLineInterval, KLineCandle, DualKLineData, RealtimeSpreadAnalysis, Side, Orderbook, UnderlyingAsset, TokenUnderlyingCorrelation } from '../core/types.js';
16
+ import type { BinanceService } from './binance-service.js';
17
+ export declare const POLYGON_MAINNET = 137;
18
+ export type { Side, Orderbook } from '../core/types.js';
19
+ export type PriceHistoryIntervalString = '1h' | '6h' | '1d' | '1w' | 'max';
20
+ export interface PriceHistoryParams {
21
+ tokenId: string;
22
+ interval?: PriceHistoryIntervalString;
23
+ startTs?: number;
24
+ endTs?: number;
25
+ fidelity?: number;
26
+ }
27
+ export interface PricePoint {
28
+ timestamp: number;
29
+ price: number;
30
+ }
31
+ export interface MarketServiceConfig {
32
+ /** Private key for CLOB client auth (optional, for authenticated endpoints) */
33
+ privateKey?: string;
34
+ /** Chain ID (default: Polygon mainnet 137) */
35
+ chainId?: number;
36
+ }
37
+ /**
38
+ * CLOB Market type (from CLOB API)
39
+ *
40
+ * This represents the raw market data from the CLOB API.
41
+ * For merged market data with volume/liquidity, use UnifiedMarket from core/types.ts.
42
+ */
43
+ export interface Market {
44
+ conditionId: string;
45
+ questionId?: string;
46
+ marketSlug: string;
47
+ question: string;
48
+ description?: string;
49
+ tokens: MarketToken[];
50
+ active: boolean;
51
+ closed: boolean;
52
+ acceptingOrders: boolean;
53
+ endDateIso?: string | null;
54
+ negRisk?: boolean;
55
+ minimumOrderSize?: number;
56
+ minimumTickSize?: number;
57
+ }
58
+ /**
59
+ * Token in a CLOB market
60
+ * Same structure as MarketToken in core/types.ts
61
+ */
62
+ export interface MarketToken {
63
+ tokenId: string;
64
+ outcome: string;
65
+ price: number;
66
+ winner?: boolean;
67
+ }
68
+ /**
69
+ * Resolved market tokens with outcome names
70
+ *
71
+ * Uses `primary`/`secondary` naming to be market-agnostic:
72
+ * - Yes/No markets: primary=Yes, secondary=No
73
+ * - Up/Down markets: primary=Up, secondary=Down
74
+ * - Team markets: primary=Team1, secondary=Team2
75
+ *
76
+ * This follows the BinaryTokens pattern in core/types.ts
77
+ */
78
+ export interface ResolvedMarketTokens {
79
+ /** Primary outcome token ID (index 0: Yes/Up/Team1) */
80
+ primaryTokenId: string;
81
+ /** Secondary outcome token ID (index 1: No/Down/Team2) */
82
+ secondaryTokenId: string;
83
+ /** Outcome names for display [primary, secondary] */
84
+ outcomes: [string, string];
85
+ /** Primary outcome name (e.g., "Yes", "Up") */
86
+ primaryOutcome: string;
87
+ /** Secondary outcome name (e.g., "No", "Down") */
88
+ secondaryOutcome: string;
89
+ }
90
+ export declare class MarketService {
91
+ private gammaApi;
92
+ private dataApi;
93
+ private rateLimiter;
94
+ private cache;
95
+ private config?;
96
+ private binanceService?;
97
+ private clobClient;
98
+ private initialized;
99
+ constructor(gammaApi: GammaApiClient | undefined, dataApi: DataApiClient | undefined, rateLimiter: RateLimiter, cache: UnifiedCache, config?: MarketServiceConfig | undefined, binanceService?: BinanceService | undefined);
100
+ private ensureInitialized;
101
+ /**
102
+ * Get market from CLOB by condition ID
103
+ */
104
+ getClobMarket(conditionId: string): Promise<Market | null>;
105
+ /**
106
+ * Resolve market tokens from CLOB API
107
+ *
108
+ * This method fetches the actual token IDs from the CLOB API,
109
+ * which are different from the calculated positionIds in standard CTF.
110
+ *
111
+ * ## Why This Method Exists
112
+ *
113
+ * Polymarket CLOB markets use custom ERC-1155 token IDs that are different
114
+ * from the standard CTF calculated positionIds:
115
+ *
116
+ * ```
117
+ * Standard CTF: positionId = keccak256(USDC + keccak256(0x0 + conditionId + indexSet))
118
+ * Polymarket: tokenId = custom value from CLOB API (e.g., "25064375110792...")
119
+ * ```
120
+ *
121
+ * This method provides the actual tokenIds needed for CTF operations
122
+ * (split, merge, redeem) on Polymarket markets.
123
+ *
124
+ * ## Usage with CTFClient
125
+ *
126
+ * Since CTFClient uses legacy `yesTokenId`/`noTokenId` naming,
127
+ * you need to convert when calling CTF methods:
128
+ *
129
+ * ```typescript
130
+ * const resolved = await sdk.markets.resolveMarketTokens(conditionId);
131
+ * if (resolved) {
132
+ * const tokenIds = {
133
+ * yesTokenId: resolved.primaryTokenId,
134
+ * noTokenId: resolved.secondaryTokenId,
135
+ * };
136
+ * await ctfClient.redeemByTokenIds(conditionId, tokenIds);
137
+ * }
138
+ * ```
139
+ *
140
+ * @param conditionId - Market condition ID (0x...)
141
+ * @returns Resolved token IDs with outcome names, or null if not found
142
+ */
143
+ resolveMarketTokens(conditionId: string): Promise<ResolvedMarketTokens | null>;
144
+ /**
145
+ * Get multiple markets from CLOB
146
+ */
147
+ getClobMarkets(nextCursor?: string): Promise<{
148
+ markets: Market[];
149
+ nextCursor: string;
150
+ }>;
151
+ /**
152
+ * Get orderbook for a single token
153
+ */
154
+ getTokenOrderbook(tokenId: string): Promise<Orderbook>;
155
+ /**
156
+ * Get orderbooks for multiple tokens
157
+ */
158
+ getTokenOrderbooks(params: Array<{
159
+ tokenId: string;
160
+ side: Side;
161
+ }>): Promise<Map<string, Orderbook>>;
162
+ /**
163
+ * Get processed orderbook with arbitrage analysis for a market
164
+ */
165
+ getProcessedOrderbook(conditionId: string): Promise<ProcessedOrderbook>;
166
+ /**
167
+ * Get price history for a token
168
+ */
169
+ getPricesHistory(params: PriceHistoryParams): Promise<PricePoint[]>;
170
+ /**
171
+ * Get midpoint price for a token
172
+ */
173
+ getMidpoint(tokenId: string): Promise<number>;
174
+ /**
175
+ * Get spread for a token
176
+ */
177
+ getSpread(tokenId: string): Promise<number>;
178
+ /**
179
+ * Get last trade price for a token
180
+ */
181
+ getLastTradePrice(tokenId: string): Promise<number>;
182
+ /**
183
+ * Get market by slug or condition ID
184
+ */
185
+ getMarket(identifier: string): Promise<UnifiedMarket>;
186
+ private getMarketBySlug;
187
+ private getMarketByConditionId;
188
+ /**
189
+ * Get K-Line candles for a market (single token)
190
+ *
191
+ * @param conditionId - Market condition ID
192
+ * @param interval - K-line interval (1s, 5s, 15s, 30s, 1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d)
193
+ * @param options - Query options
194
+ * @param options.limit - Maximum number of trades to fetch for aggregation (default: 1000)
195
+ * @param options.tokenId - Filter by specific token ID
196
+ * @param options.outcomeIndex - Filter by outcome index (0 = primary, 1 = secondary)
197
+ * @param options.startTimestamp - Start timestamp (Unix ms) - filter trades after this time
198
+ * @param options.endTimestamp - End timestamp (Unix ms) - filter trades before this time
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * // Get 5s candles for the last 15 minutes
203
+ * const now = Date.now();
204
+ * const candles = await sdk.markets.getKLines(conditionId, '5s', {
205
+ * startTimestamp: now - 15 * 60 * 1000,
206
+ * endTimestamp: now,
207
+ * });
208
+ * ```
209
+ */
210
+ getKLines(conditionId: string, interval: KLineInterval, options?: {
211
+ limit?: number;
212
+ tokenId?: string;
213
+ outcomeIndex?: number;
214
+ startTimestamp?: number;
215
+ endTimestamp?: number;
216
+ }): Promise<KLineCandle[]>;
217
+ /**
218
+ * Get dual K-Lines (YES + NO tokens)
219
+ *
220
+ * @param conditionId - Market condition ID
221
+ * @param interval - K-line interval (1s, 5s, 15s, 30s, 1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d)
222
+ * @param options - Query options
223
+ * @param options.limit - Maximum number of trades to fetch for aggregation (default: 1000)
224
+ * @param options.startTimestamp - Start timestamp (Unix ms) - filter trades after this time
225
+ * @param options.endTimestamp - End timestamp (Unix ms) - filter trades before this time
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * // Get 15s dual K-lines for a 15-minute market
230
+ * const now = Date.now();
231
+ * const data = await sdk.markets.getDualKLines(conditionId, '15s', {
232
+ * startTimestamp: now - 15 * 60 * 1000,
233
+ * endTimestamp: now,
234
+ * });
235
+ * console.log(`Up candles: ${data.yes.length}, Down candles: ${data.no.length}`);
236
+ * ```
237
+ */
238
+ getDualKLines(conditionId: string, interval: KLineInterval, options?: {
239
+ limit?: number;
240
+ startTimestamp?: number;
241
+ endTimestamp?: number;
242
+ }): Promise<DualKLineData>;
243
+ /**
244
+ * Get aligned K-line data for token and underlying asset
245
+ *
246
+ * This method fetches K-line data from both Polymarket (token prices)
247
+ * and Binance (underlying asset prices), aligns them by timestamp,
248
+ * and optionally calculates Pearson correlation coefficients.
249
+ *
250
+ * @param conditionId - Market condition ID
251
+ * @param underlying - Underlying asset (BTC, ETH, SOL)
252
+ * @param interval - K-line interval (must be supported by both Poly and Binance)
253
+ * @param options - Optional parameters
254
+ * @returns Aligned data with optional correlation coefficients
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * const data = await marketService.getTokenUnderlyingData(
259
+ * '0x123...',
260
+ * 'BTC',
261
+ * '1h',
262
+ * { limit: 100, calculateCorrelation: true }
263
+ * );
264
+ *
265
+ * // Access aligned data
266
+ * for (const point of data.data) {
267
+ * console.log(`${point.timestamp}: Up=${point.upPrice}, BTC=${point.underlyingPrice}`);
268
+ * }
269
+ *
270
+ * // Check correlation
271
+ * if (data.correlation) {
272
+ * console.log(`Correlation: ${data.correlation.upVsUnderlying}`);
273
+ * }
274
+ * ```
275
+ */
276
+ getTokenUnderlyingData(conditionId: string, underlying: UnderlyingAsset, interval: KLineInterval, options?: {
277
+ limit?: number;
278
+ calculateCorrelation?: boolean;
279
+ }): Promise<TokenUnderlyingCorrelation>;
280
+ /**
281
+ * Find the nearest available price for a timestamp
282
+ */
283
+ private findNearestPrice;
284
+ /**
285
+ * Calculate Pearson correlation coefficients
286
+ */
287
+ private calculatePearsonCorrelation;
288
+ /**
289
+ * Calculate Pearson correlation coefficient between two arrays
290
+ * Returns a value between -1 and 1
291
+ */
292
+ private pearson;
293
+ /**
294
+ * Aggregate trades into K-Line candles
295
+ *
296
+ * Note: Polymarket API may return timestamps in seconds or milliseconds.
297
+ * This function normalizes all timestamps to milliseconds for consistent handling.
298
+ */
299
+ private aggregateToKLines;
300
+ /**
301
+ * Analyze historical spread from trade close prices (for backtesting)
302
+ *
303
+ * This uses trade close prices, not orderbook bid/ask.
304
+ * Useful for:
305
+ * - Historical analysis / backtesting
306
+ * - Understanding past price movements
307
+ * - Identifying patterns when orderbook data unavailable
308
+ */
309
+ private analyzeHistoricalSpread;
310
+ /**
311
+ * Calculate real-time spread from orderbook (for live trading)
312
+ *
313
+ * This uses orderbook bid/ask prices for accurate arbitrage detection.
314
+ * Useful for:
315
+ * - Real-time arbitrage execution
316
+ * - Live trading decisions
317
+ * - Accurate profit calculations
318
+ */
319
+ private calculateRealtimeSpread;
320
+ /**
321
+ * Get real-time spread analysis only (without K-lines)
322
+ * Use this for quick arbitrage checks
323
+ */
324
+ getRealtimeSpread(conditionId: string): Promise<RealtimeSpreadAnalysis>;
325
+ /**
326
+ * Get processed orderbook with analytics (alias for getProcessedOrderbook)
327
+ */
328
+ getOrderbook(conditionId: string): Promise<ProcessedOrderbook>;
329
+ /**
330
+ * Detect arbitrage opportunity
331
+ *
332
+ * 使用有效价格(考虑镜像订单)计算套利机会
333
+ * 详细原理见: docs/01-polymarket-orderbook-arbitrage.md
334
+ */
335
+ detectArbitrage(conditionId: string, threshold?: number): Promise<ArbitrageOpportunity | null>;
336
+ /**
337
+ * Get trending markets
338
+ */
339
+ getTrendingMarkets(limit?: number): Promise<GammaMarket[]>;
340
+ /**
341
+ * Search markets
342
+ */
343
+ searchMarkets(params: {
344
+ active?: boolean;
345
+ closed?: boolean;
346
+ limit?: number;
347
+ offset?: number;
348
+ order?: string;
349
+ }): Promise<GammaMarket[]>;
350
+ /**
351
+ * Scan for short-term crypto markets (Up/Down markets ending soon)
352
+ *
353
+ * ## Market Types
354
+ * Polymarket has short-term crypto markets in two durations:
355
+ * - **5-minute markets**: slug pattern `{coin}-updown-5m-{timestamp}`
356
+ * - **15-minute markets**: slug pattern `{coin}-updown-15m-{timestamp}`
357
+ *
358
+ * ## Slug Pattern
359
+ * The timestamp in the slug is the START time of the time window:
360
+ * - 15-minute markets: `{coin}-updown-15m-{Math.floor(startTime / 900) * 900}`
361
+ * - 5-minute markets: `{coin}-updown-5m-{Math.floor(startTime / 300) * 300}`
362
+ *
363
+ * Example: `btc-updown-15m-1767456000` starts at 1767456000 (16:00:00 UTC)
364
+ * and ends 15 minutes later at 1767456900 (16:15:00 UTC)
365
+ *
366
+ * ## Supported Coins
367
+ * - BTC (Bitcoin)
368
+ * - ETH (Ethereum)
369
+ * - SOL (Solana)
370
+ * - XRP (Ripple)
371
+ *
372
+ * ## Market Lifecycle Rules
373
+ * 1. Markets are created ahead of time (before they become tradeable)
374
+ * 2. New markets may not have prices yet (show 0.5/0.5)
375
+ * 3. When one market ends, the next one is already open for trading
376
+ * 4. A market ending doesn't mean no price - it means resolution is pending
377
+ *
378
+ * ## Outcomes
379
+ * All crypto short-term markets have:
380
+ * - outcomes: ["Up", "Down"]
381
+ * - Resolution based on price movement during the time window
382
+ *
383
+ * @param options - Scan options
384
+ * @param options.minMinutesUntilEnd - Minimum minutes until market ends (default: 5)
385
+ * @param options.maxMinutesUntilEnd - Maximum minutes until market ends (default: 60)
386
+ * @param options.limit - Maximum number of markets to return (default: 20)
387
+ * @param options.sortBy - Sort field: 'endDate' | 'volume' | 'liquidity' (default: 'endDate')
388
+ * @param options.duration - Filter by duration: '5m' | '15m' | 'all' (default: 'all')
389
+ * @param options.coin - Filter by coin: 'BTC' | 'ETH' | 'SOL' | 'XRP' | 'all' (default: 'all')
390
+ * @returns Array of crypto short-term markets
391
+ *
392
+ * @example
393
+ * ```typescript
394
+ * // Find all 15-minute markets ending in 5-30 minutes
395
+ * const markets = await sdk.markets.scanCryptoShortTermMarkets({
396
+ * minMinutesUntilEnd: 5,
397
+ * maxMinutesUntilEnd: 30,
398
+ * duration: '15m',
399
+ * });
400
+ *
401
+ * // Find BTC 5-minute markets only
402
+ * const btcMarkets = await sdk.markets.scanCryptoShortTermMarkets({
403
+ * coin: 'BTC',
404
+ * duration: '5m',
405
+ * });
406
+ * ```
407
+ */
408
+ scanCryptoShortTermMarkets(options?: {
409
+ minMinutesUntilEnd?: number;
410
+ maxMinutesUntilEnd?: number;
411
+ limit?: number;
412
+ sortBy?: 'endDate' | 'volume' | 'liquidity';
413
+ duration?: '5m' | '15m' | 'all';
414
+ coin?: 'BTC' | 'ETH' | 'SOL' | 'XRP' | 'all';
415
+ }): Promise<GammaMarket[]>;
416
+ /**
417
+ * Detect market signals (volume surge, depth imbalance, whale trades)
418
+ */
419
+ detectMarketSignals(conditionId: string): Promise<Array<{
420
+ type: 'volume_surge' | 'depth_imbalance' | 'whale_trade' | 'momentum';
421
+ severity: 'low' | 'medium' | 'high';
422
+ details: Record<string, unknown>;
423
+ }>>;
424
+ private normalizeClobMarket;
425
+ private processOrderbooks;
426
+ private mergeMarkets;
427
+ private fromGammaMarket;
428
+ private fromClobMarket;
429
+ }
430
+ export declare function getIntervalMs(interval: KLineInterval): number;
431
+ //# sourceMappingURL=market-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market-service.d.ts","sourceRoot":"","sources":["../../../src/services/market-service.ts"],"names":[],"mappings":"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"}