pmxtjs 0.4.3 → 1.0.0-b2

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 +161 -0
  2. package/dist/esm/generated/src/apis/DefaultApi.d.ts +268 -0
  3. package/dist/esm/generated/src/apis/DefaultApi.js +501 -0
  4. package/dist/esm/generated/src/apis/index.d.ts +1 -0
  5. package/dist/esm/generated/src/apis/index.js +19 -0
  6. package/dist/esm/generated/src/index.d.ts +3 -0
  7. package/dist/esm/generated/src/index.js +21 -0
  8. package/dist/esm/generated/src/models/Balance.d.ts +50 -0
  9. package/dist/esm/generated/src/models/Balance.js +54 -0
  10. package/dist/esm/generated/src/models/BaseResponse.d.ts +39 -0
  11. package/dist/esm/generated/src/models/BaseResponse.js +51 -0
  12. package/dist/esm/generated/src/models/CancelOrderRequest.d.ts +32 -0
  13. package/dist/esm/generated/src/models/CancelOrderRequest.js +50 -0
  14. package/dist/esm/generated/src/models/CreateOrder200Response.d.ts +46 -0
  15. package/dist/esm/generated/src/models/CreateOrder200Response.js +54 -0
  16. package/dist/esm/generated/src/models/CreateOrderParams.d.ts +78 -0
  17. package/dist/esm/generated/src/models/CreateOrderParams.js +83 -0
  18. package/dist/esm/generated/src/models/CreateOrderRequest.d.ts +33 -0
  19. package/dist/esm/generated/src/models/CreateOrderRequest.js +51 -0
  20. package/dist/esm/generated/src/models/ErrorDetail.d.ts +32 -0
  21. package/dist/esm/generated/src/models/ErrorDetail.js +48 -0
  22. package/dist/esm/generated/src/models/ErrorResponse.d.ts +39 -0
  23. package/dist/esm/generated/src/models/ErrorResponse.js +51 -0
  24. package/dist/esm/generated/src/models/FetchBalance200Response.d.ts +46 -0
  25. package/dist/esm/generated/src/models/FetchBalance200Response.js +54 -0
  26. package/dist/esm/generated/src/models/FetchMarkets200Response.d.ts +46 -0
  27. package/dist/esm/generated/src/models/FetchMarkets200Response.js +54 -0
  28. package/dist/esm/generated/src/models/FetchMarketsRequest.d.ts +33 -0
  29. package/dist/esm/generated/src/models/FetchMarketsRequest.js +49 -0
  30. package/dist/esm/generated/src/models/FetchOHLCV200Response.d.ts +46 -0
  31. package/dist/esm/generated/src/models/FetchOHLCV200Response.js +54 -0
  32. package/dist/esm/generated/src/models/FetchOHLCVRequest.d.ts +33 -0
  33. package/dist/esm/generated/src/models/FetchOHLCVRequest.js +51 -0
  34. package/dist/esm/generated/src/models/FetchOHLCVRequestArgsInner.d.ts +22 -0
  35. package/dist/esm/generated/src/models/FetchOHLCVRequestArgsInner.js +56 -0
  36. package/dist/esm/generated/src/models/FetchOpenOrders200Response.d.ts +46 -0
  37. package/dist/esm/generated/src/models/FetchOpenOrders200Response.js +54 -0
  38. package/dist/esm/generated/src/models/FetchOpenOrdersRequest.d.ts +32 -0
  39. package/dist/esm/generated/src/models/FetchOpenOrdersRequest.js +48 -0
  40. package/dist/esm/generated/src/models/FetchOrderBook200Response.d.ts +46 -0
  41. package/dist/esm/generated/src/models/FetchOrderBook200Response.js +54 -0
  42. package/dist/esm/generated/src/models/FetchOrderBookRequest.d.ts +32 -0
  43. package/dist/esm/generated/src/models/FetchOrderBookRequest.js +50 -0
  44. package/dist/esm/generated/src/models/FetchPositions200Response.d.ts +46 -0
  45. package/dist/esm/generated/src/models/FetchPositions200Response.js +54 -0
  46. package/dist/esm/generated/src/models/FetchPositionsRequest.d.ts +32 -0
  47. package/dist/esm/generated/src/models/FetchPositionsRequest.js +48 -0
  48. package/dist/esm/generated/src/models/FetchTrades200Response.d.ts +46 -0
  49. package/dist/esm/generated/src/models/FetchTrades200Response.js +54 -0
  50. package/dist/esm/generated/src/models/FetchTradesRequest.d.ts +33 -0
  51. package/dist/esm/generated/src/models/FetchTradesRequest.js +51 -0
  52. package/dist/esm/generated/src/models/GetMarketsBySlugRequest.d.ts +32 -0
  53. package/dist/esm/generated/src/models/GetMarketsBySlugRequest.js +50 -0
  54. package/dist/esm/generated/src/models/HealthCheck200Response.d.ts +38 -0
  55. package/dist/esm/generated/src/models/HealthCheck200Response.js +50 -0
  56. package/dist/esm/generated/src/models/HistoryFilterParams.d.ts +62 -0
  57. package/dist/esm/generated/src/models/HistoryFilterParams.js +68 -0
  58. package/dist/esm/generated/src/models/MarketFilterParams.d.ts +68 -0
  59. package/dist/esm/generated/src/models/MarketFilterParams.js +71 -0
  60. package/dist/esm/generated/src/models/MarketOutcome.d.ts +44 -0
  61. package/dist/esm/generated/src/models/MarketOutcome.js +52 -0
  62. package/dist/esm/generated/src/models/Order.d.ts +108 -0
  63. package/dist/esm/generated/src/models/Order.js +83 -0
  64. package/dist/esm/generated/src/models/OrderBook.d.ts +39 -0
  65. package/dist/esm/generated/src/models/OrderBook.js +51 -0
  66. package/dist/esm/generated/src/models/OrderLevel.d.ts +38 -0
  67. package/dist/esm/generated/src/models/OrderLevel.js +50 -0
  68. package/dist/esm/generated/src/models/Position.d.ts +74 -0
  69. package/dist/esm/generated/src/models/Position.js +62 -0
  70. package/dist/esm/generated/src/models/PriceCandle.d.ts +62 -0
  71. package/dist/esm/generated/src/models/PriceCandle.js +58 -0
  72. package/dist/esm/generated/src/models/SearchMarketsRequest.d.ts +33 -0
  73. package/dist/esm/generated/src/models/SearchMarketsRequest.js +51 -0
  74. package/dist/esm/generated/src/models/SearchMarketsRequestArgsInner.d.ts +22 -0
  75. package/dist/esm/generated/src/models/SearchMarketsRequestArgsInner.js +56 -0
  76. package/dist/esm/generated/src/models/Trade.d.ts +65 -0
  77. package/dist/esm/generated/src/models/Trade.js +65 -0
  78. package/dist/esm/generated/src/models/UnifiedMarket.d.ts +63 -0
  79. package/dist/esm/generated/src/models/UnifiedMarket.js +59 -0
  80. package/dist/esm/generated/src/models/index.d.ts +36 -0
  81. package/dist/esm/generated/src/models/index.js +54 -0
  82. package/dist/esm/generated/src/runtime.d.ts +184 -0
  83. package/dist/esm/generated/src/runtime.js +349 -0
  84. package/dist/esm/index.d.ts +32 -0
  85. package/dist/esm/index.js +33 -0
  86. package/dist/esm/pmxt/client.d.ts +213 -0
  87. package/dist/esm/pmxt/client.js +518 -0
  88. package/dist/esm/pmxt/models.d.ts +218 -0
  89. package/dist/esm/pmxt/models.js +6 -0
  90. package/dist/esm/pmxt/server-manager.d.ts +29 -0
  91. package/dist/esm/pmxt/server-manager.js +68 -0
  92. package/dist/generated/src/apis/DefaultApi.d.ts +268 -0
  93. package/dist/generated/src/apis/DefaultApi.js +501 -0
  94. package/dist/generated/src/apis/index.d.ts +1 -0
  95. package/dist/generated/src/apis/index.js +19 -0
  96. package/dist/generated/src/index.d.ts +3 -0
  97. package/dist/generated/src/index.js +21 -0
  98. package/dist/generated/src/models/Balance.d.ts +50 -0
  99. package/dist/generated/src/models/Balance.js +54 -0
  100. package/dist/generated/src/models/BaseResponse.d.ts +39 -0
  101. package/dist/generated/src/models/BaseResponse.js +51 -0
  102. package/dist/generated/src/models/CancelOrderRequest.d.ts +32 -0
  103. package/dist/generated/src/models/CancelOrderRequest.js +50 -0
  104. package/dist/generated/src/models/CreateOrder200Response.d.ts +46 -0
  105. package/dist/generated/src/models/CreateOrder200Response.js +54 -0
  106. package/dist/generated/src/models/CreateOrderParams.d.ts +78 -0
  107. package/dist/generated/src/models/CreateOrderParams.js +83 -0
  108. package/dist/generated/src/models/CreateOrderRequest.d.ts +33 -0
  109. package/dist/generated/src/models/CreateOrderRequest.js +51 -0
  110. package/dist/generated/src/models/ErrorDetail.d.ts +32 -0
  111. package/dist/generated/src/models/ErrorDetail.js +48 -0
  112. package/dist/generated/src/models/ErrorResponse.d.ts +39 -0
  113. package/dist/generated/src/models/ErrorResponse.js +51 -0
  114. package/dist/generated/src/models/FetchBalance200Response.d.ts +46 -0
  115. package/dist/generated/src/models/FetchBalance200Response.js +54 -0
  116. package/dist/generated/src/models/FetchMarkets200Response.d.ts +46 -0
  117. package/dist/generated/src/models/FetchMarkets200Response.js +54 -0
  118. package/dist/generated/src/models/FetchMarketsRequest.d.ts +33 -0
  119. package/dist/generated/src/models/FetchMarketsRequest.js +49 -0
  120. package/dist/generated/src/models/FetchOHLCV200Response.d.ts +46 -0
  121. package/dist/generated/src/models/FetchOHLCV200Response.js +54 -0
  122. package/dist/generated/src/models/FetchOHLCVRequest.d.ts +33 -0
  123. package/dist/generated/src/models/FetchOHLCVRequest.js +51 -0
  124. package/dist/generated/src/models/FetchOHLCVRequestArgsInner.d.ts +22 -0
  125. package/dist/generated/src/models/FetchOHLCVRequestArgsInner.js +56 -0
  126. package/dist/generated/src/models/FetchOpenOrders200Response.d.ts +46 -0
  127. package/dist/generated/src/models/FetchOpenOrders200Response.js +54 -0
  128. package/dist/generated/src/models/FetchOpenOrdersRequest.d.ts +32 -0
  129. package/dist/generated/src/models/FetchOpenOrdersRequest.js +48 -0
  130. package/dist/generated/src/models/FetchOrderBook200Response.d.ts +46 -0
  131. package/dist/generated/src/models/FetchOrderBook200Response.js +54 -0
  132. package/dist/generated/src/models/FetchOrderBookRequest.d.ts +32 -0
  133. package/dist/generated/src/models/FetchOrderBookRequest.js +50 -0
  134. package/dist/generated/src/models/FetchPositions200Response.d.ts +46 -0
  135. package/dist/generated/src/models/FetchPositions200Response.js +54 -0
  136. package/dist/generated/src/models/FetchPositionsRequest.d.ts +32 -0
  137. package/dist/generated/src/models/FetchPositionsRequest.js +48 -0
  138. package/dist/generated/src/models/FetchTrades200Response.d.ts +46 -0
  139. package/dist/generated/src/models/FetchTrades200Response.js +54 -0
  140. package/dist/generated/src/models/FetchTradesRequest.d.ts +33 -0
  141. package/dist/generated/src/models/FetchTradesRequest.js +51 -0
  142. package/dist/generated/src/models/GetMarketsBySlugRequest.d.ts +32 -0
  143. package/dist/generated/src/models/GetMarketsBySlugRequest.js +50 -0
  144. package/dist/generated/src/models/HealthCheck200Response.d.ts +38 -0
  145. package/dist/generated/src/models/HealthCheck200Response.js +50 -0
  146. package/dist/generated/src/models/HistoryFilterParams.d.ts +62 -0
  147. package/dist/generated/src/models/HistoryFilterParams.js +68 -0
  148. package/dist/generated/src/models/MarketFilterParams.d.ts +68 -0
  149. package/dist/generated/src/models/MarketFilterParams.js +71 -0
  150. package/dist/generated/src/models/MarketOutcome.d.ts +44 -0
  151. package/dist/generated/src/models/MarketOutcome.js +52 -0
  152. package/dist/generated/src/models/Order.d.ts +108 -0
  153. package/dist/generated/src/models/Order.js +83 -0
  154. package/dist/generated/src/models/OrderBook.d.ts +39 -0
  155. package/dist/generated/src/models/OrderBook.js +51 -0
  156. package/dist/generated/src/models/OrderLevel.d.ts +38 -0
  157. package/dist/generated/src/models/OrderLevel.js +50 -0
  158. package/dist/generated/src/models/Position.d.ts +74 -0
  159. package/dist/generated/src/models/Position.js +62 -0
  160. package/dist/generated/src/models/PriceCandle.d.ts +62 -0
  161. package/dist/generated/src/models/PriceCandle.js +58 -0
  162. package/dist/generated/src/models/SearchMarketsRequest.d.ts +33 -0
  163. package/dist/generated/src/models/SearchMarketsRequest.js +51 -0
  164. package/dist/generated/src/models/SearchMarketsRequestArgsInner.d.ts +22 -0
  165. package/dist/generated/src/models/SearchMarketsRequestArgsInner.js +56 -0
  166. package/dist/generated/src/models/Trade.d.ts +65 -0
  167. package/dist/generated/src/models/Trade.js +65 -0
  168. package/dist/generated/src/models/UnifiedMarket.d.ts +63 -0
  169. package/dist/generated/src/models/UnifiedMarket.js +59 -0
  170. package/dist/generated/src/models/index.d.ts +36 -0
  171. package/dist/generated/src/models/index.js +54 -0
  172. package/dist/generated/src/runtime.d.ts +184 -0
  173. package/dist/generated/src/runtime.js +349 -0
  174. package/dist/index.d.ts +29 -10
  175. package/dist/index.js +31 -27
  176. package/dist/pmxt/client.d.ts +213 -0
  177. package/dist/pmxt/client.js +518 -0
  178. package/dist/pmxt/models.d.ts +218 -0
  179. package/dist/pmxt/models.js +6 -0
  180. package/dist/pmxt/server-manager.d.ts +29 -0
  181. package/dist/pmxt/server-manager.js +68 -0
  182. package/generated/.openapi-generator/FILES +84 -0
  183. package/generated/.openapi-generator/VERSION +1 -0
  184. package/generated/.openapi-generator-ignore +23 -0
  185. package/generated/docs/Balance.md +40 -0
  186. package/generated/docs/BaseResponse.md +36 -0
  187. package/generated/docs/CancelOrderRequest.md +34 -0
  188. package/generated/docs/CreateOrder200Response.md +38 -0
  189. package/generated/docs/CreateOrderParams.md +44 -0
  190. package/generated/docs/CreateOrderRequest.md +34 -0
  191. package/generated/docs/DefaultApi.md +896 -0
  192. package/generated/docs/ErrorDetail.md +34 -0
  193. package/generated/docs/ErrorResponse.md +36 -0
  194. package/generated/docs/FetchBalance200Response.md +38 -0
  195. package/generated/docs/FetchMarkets200Response.md +38 -0
  196. package/generated/docs/FetchMarketsRequest.md +34 -0
  197. package/generated/docs/FetchOHLCV200Response.md +38 -0
  198. package/generated/docs/FetchOHLCVRequest.md +34 -0
  199. package/generated/docs/FetchOHLCVRequestArgsInner.md +40 -0
  200. package/generated/docs/FetchOpenOrders200Response.md +38 -0
  201. package/generated/docs/FetchOpenOrdersRequest.md +34 -0
  202. package/generated/docs/FetchOrderBook200Response.md +38 -0
  203. package/generated/docs/FetchOrderBookRequest.md +34 -0
  204. package/generated/docs/FetchPositions200Response.md +38 -0
  205. package/generated/docs/FetchPositionsRequest.md +34 -0
  206. package/generated/docs/FetchTrades200Response.md +38 -0
  207. package/generated/docs/FetchTradesRequest.md +34 -0
  208. package/generated/docs/GetMarketsBySlugRequest.md +34 -0
  209. package/generated/docs/HealthCheck200Response.md +36 -0
  210. package/generated/docs/HistoryFilterParams.md +40 -0
  211. package/generated/docs/MarketFilterParams.md +40 -0
  212. package/generated/docs/MarketOutcome.md +38 -0
  213. package/generated/docs/Order.md +54 -0
  214. package/generated/docs/OrderBook.md +36 -0
  215. package/generated/docs/OrderLevel.md +36 -0
  216. package/generated/docs/Position.md +48 -0
  217. package/generated/docs/PriceCandle.md +44 -0
  218. package/generated/docs/SearchMarketsRequest.md +34 -0
  219. package/generated/docs/SearchMarketsRequestArgsInner.md +40 -0
  220. package/generated/docs/Trade.md +42 -0
  221. package/generated/docs/UnifiedMarket.md +44 -0
  222. package/generated/package.json +21 -0
  223. package/generated/src/apis/DefaultApi.ts +752 -0
  224. package/generated/src/apis/index.ts +3 -0
  225. package/generated/src/index.ts +5 -0
  226. package/generated/src/models/Balance.ts +89 -0
  227. package/generated/src/models/BaseResponse.ts +81 -0
  228. package/generated/src/models/CancelOrderRequest.ts +66 -0
  229. package/generated/src/models/CreateOrder200Response.ts +96 -0
  230. package/generated/src/models/CreateOrderParams.ts +130 -0
  231. package/generated/src/models/CreateOrderRequest.ts +74 -0
  232. package/generated/src/models/ErrorDetail.ts +65 -0
  233. package/generated/src/models/ErrorResponse.ts +81 -0
  234. package/generated/src/models/FetchBalance200Response.ts +96 -0
  235. package/generated/src/models/FetchMarkets200Response.ts +96 -0
  236. package/generated/src/models/FetchMarketsRequest.ts +73 -0
  237. package/generated/src/models/FetchOHLCV200Response.ts +96 -0
  238. package/generated/src/models/FetchOHLCVRequest.ts +74 -0
  239. package/generated/src/models/FetchOHLCVRequestArgsInner.ts +69 -0
  240. package/generated/src/models/FetchOpenOrders200Response.ts +96 -0
  241. package/generated/src/models/FetchOpenOrdersRequest.ts +65 -0
  242. package/generated/src/models/FetchOrderBook200Response.ts +96 -0
  243. package/generated/src/models/FetchOrderBookRequest.ts +66 -0
  244. package/generated/src/models/FetchPositions200Response.ts +96 -0
  245. package/generated/src/models/FetchPositionsRequest.ts +65 -0
  246. package/generated/src/models/FetchTrades200Response.ts +96 -0
  247. package/generated/src/models/FetchTradesRequest.ts +74 -0
  248. package/generated/src/models/GetMarketsBySlugRequest.ts +66 -0
  249. package/generated/src/models/HealthCheck200Response.ts +73 -0
  250. package/generated/src/models/HistoryFilterParams.ts +105 -0
  251. package/generated/src/models/MarketFilterParams.ts +111 -0
  252. package/generated/src/models/MarketOutcome.ts +81 -0
  253. package/generated/src/models/Order.ts +165 -0
  254. package/generated/src/models/OrderBook.ts +81 -0
  255. package/generated/src/models/OrderLevel.ts +73 -0
  256. package/generated/src/models/Position.ts +121 -0
  257. package/generated/src/models/PriceCandle.ts +105 -0
  258. package/generated/src/models/SearchMarketsRequest.ts +74 -0
  259. package/generated/src/models/SearchMarketsRequestArgsInner.ts +69 -0
  260. package/generated/src/models/Trade.ts +109 -0
  261. package/generated/src/models/UnifiedMarket.ts +113 -0
  262. package/generated/src/models/index.ts +38 -0
  263. package/generated/src/runtime.ts +432 -0
  264. package/generated/tsconfig.esm.json +7 -0
  265. package/generated/tsconfig.json +16 -0
  266. package/index.ts +40 -0
  267. package/package.json +39 -27
  268. package/pmxt/client.ts +628 -0
  269. package/pmxt/models.ts +292 -0
  270. package/pmxt/server-manager.ts +86 -0
  271. package/API_REFERENCE.md +0 -483
  272. package/LICENSE +0 -21
  273. package/dist/BaseExchange.d.ts +0 -74
  274. package/dist/BaseExchange.js +0 -72
  275. package/dist/exchanges/kalshi/auth.d.ts +0 -23
  276. package/dist/exchanges/kalshi/auth.js +0 -99
  277. package/dist/exchanges/kalshi/fetchMarkets.d.ts +0 -3
  278. package/dist/exchanges/kalshi/fetchMarkets.js +0 -110
  279. package/dist/exchanges/kalshi/fetchOHLCV.d.ts +0 -3
  280. package/dist/exchanges/kalshi/fetchOHLCV.js +0 -78
  281. package/dist/exchanges/kalshi/fetchOrderBook.d.ts +0 -2
  282. package/dist/exchanges/kalshi/fetchOrderBook.js +0 -32
  283. package/dist/exchanges/kalshi/fetchTrades.d.ts +0 -3
  284. package/dist/exchanges/kalshi/fetchTrades.js +0 -31
  285. package/dist/exchanges/kalshi/getMarketsBySlug.d.ts +0 -7
  286. package/dist/exchanges/kalshi/getMarketsBySlug.js +0 -62
  287. package/dist/exchanges/kalshi/index.d.ts +0 -21
  288. package/dist/exchanges/kalshi/index.js +0 -273
  289. package/dist/exchanges/kalshi/kalshi.test.d.ts +0 -1
  290. package/dist/exchanges/kalshi/kalshi.test.js +0 -309
  291. package/dist/exchanges/kalshi/searchMarkets.d.ts +0 -3
  292. package/dist/exchanges/kalshi/searchMarkets.js +0 -28
  293. package/dist/exchanges/kalshi/utils.d.ts +0 -5
  294. package/dist/exchanges/kalshi/utils.js +0 -85
  295. package/dist/exchanges/polymarket/auth.d.ts +0 -32
  296. package/dist/exchanges/polymarket/auth.js +0 -98
  297. package/dist/exchanges/polymarket/fetchMarkets.d.ts +0 -3
  298. package/dist/exchanges/polymarket/fetchMarkets.js +0 -75
  299. package/dist/exchanges/polymarket/fetchOHLCV.d.ts +0 -7
  300. package/dist/exchanges/polymarket/fetchOHLCV.js +0 -73
  301. package/dist/exchanges/polymarket/fetchOrderBook.d.ts +0 -6
  302. package/dist/exchanges/polymarket/fetchOrderBook.js +0 -38
  303. package/dist/exchanges/polymarket/fetchPositions.d.ts +0 -2
  304. package/dist/exchanges/polymarket/fetchPositions.js +0 -27
  305. package/dist/exchanges/polymarket/fetchTrades.d.ts +0 -11
  306. package/dist/exchanges/polymarket/fetchTrades.js +0 -59
  307. package/dist/exchanges/polymarket/getMarketsBySlug.d.ts +0 -7
  308. package/dist/exchanges/polymarket/getMarketsBySlug.js +0 -39
  309. package/dist/exchanges/polymarket/index.d.ts +0 -23
  310. package/dist/exchanges/polymarket/index.js +0 -216
  311. package/dist/exchanges/polymarket/searchMarkets.d.ts +0 -3
  312. package/dist/exchanges/polymarket/searchMarkets.js +0 -35
  313. package/dist/exchanges/polymarket/utils.d.ts +0 -7
  314. package/dist/exchanges/polymarket/utils.js +0 -95
  315. package/dist/types.d.ts +0 -85
  316. package/dist/types.js +0 -5
  317. package/readme.md +0 -133
@@ -0,0 +1,518 @@
1
+ /**
2
+ * Exchange client implementations.
3
+ *
4
+ * This module provides clean, TypeScript-friendly wrappers around the auto-generated
5
+ * OpenAPI client, matching the Python API exactly.
6
+ */
7
+ import { DefaultApi, Configuration, } from "../generated/src/index.js";
8
+ import { ServerManager } from "./server-manager.js";
9
+ // Converter functions
10
+ function convertMarket(raw) {
11
+ const outcomes = (raw.outcomes || []).map((o) => ({
12
+ id: o.id,
13
+ label: o.label,
14
+ price: o.price,
15
+ priceChange24h: o.priceChange24h,
16
+ metadata: o.metadata,
17
+ }));
18
+ return {
19
+ id: raw.id,
20
+ title: raw.title,
21
+ outcomes,
22
+ volume24h: raw.volume24h || 0,
23
+ liquidity: raw.liquidity || 0,
24
+ url: raw.url,
25
+ description: raw.description,
26
+ resolutionDate: raw.resolutionDate ? new Date(raw.resolutionDate) : undefined,
27
+ volume: raw.volume,
28
+ openInterest: raw.openInterest,
29
+ image: raw.image,
30
+ category: raw.category,
31
+ tags: raw.tags,
32
+ };
33
+ }
34
+ function convertCandle(raw) {
35
+ return {
36
+ timestamp: raw.timestamp,
37
+ open: raw.open,
38
+ high: raw.high,
39
+ low: raw.low,
40
+ close: raw.close,
41
+ volume: raw.volume,
42
+ };
43
+ }
44
+ function convertOrderBook(raw) {
45
+ const bids = (raw.bids || []).map((b) => ({
46
+ price: b.price,
47
+ size: b.size,
48
+ }));
49
+ const asks = (raw.asks || []).map((a) => ({
50
+ price: a.price,
51
+ size: a.size,
52
+ }));
53
+ return {
54
+ bids,
55
+ asks,
56
+ timestamp: raw.timestamp,
57
+ };
58
+ }
59
+ function convertTrade(raw) {
60
+ return {
61
+ id: raw.id,
62
+ timestamp: raw.timestamp,
63
+ price: raw.price,
64
+ amount: raw.amount,
65
+ side: raw.side || "unknown",
66
+ };
67
+ }
68
+ function convertOrder(raw) {
69
+ return {
70
+ id: raw.id,
71
+ marketId: raw.marketId,
72
+ outcomeId: raw.outcomeId,
73
+ side: raw.side,
74
+ type: raw.type,
75
+ amount: raw.amount,
76
+ status: raw.status,
77
+ filled: raw.filled,
78
+ remaining: raw.remaining,
79
+ timestamp: raw.timestamp,
80
+ price: raw.price,
81
+ fee: raw.fee,
82
+ };
83
+ }
84
+ function convertPosition(raw) {
85
+ return {
86
+ marketId: raw.marketId,
87
+ outcomeId: raw.outcomeId,
88
+ outcomeLabel: raw.outcomeLabel,
89
+ size: raw.size,
90
+ entryPrice: raw.entryPrice,
91
+ currentPrice: raw.currentPrice,
92
+ unrealizedPnL: raw.unrealizedPnL,
93
+ realizedPnL: raw.realizedPnL,
94
+ };
95
+ }
96
+ function convertBalance(raw) {
97
+ return {
98
+ currency: raw.currency,
99
+ total: raw.total,
100
+ available: raw.available,
101
+ locked: raw.locked,
102
+ };
103
+ }
104
+ /**
105
+ * Base class for prediction market exchanges.
106
+ *
107
+ * This provides a unified interface for interacting with different
108
+ * prediction market platforms (Polymarket, Kalshi, etc.).
109
+ */
110
+ export class Exchange {
111
+ exchangeName;
112
+ apiKey;
113
+ privateKey;
114
+ api;
115
+ serverManager;
116
+ constructor(exchangeName, options = {}) {
117
+ this.exchangeName = exchangeName.toLowerCase();
118
+ this.apiKey = options.apiKey;
119
+ this.privateKey = options.privateKey;
120
+ const baseUrl = options.baseUrl || "http://localhost:3847";
121
+ const autoStartServer = options.autoStartServer !== false;
122
+ // Initialize server manager
123
+ this.serverManager = new ServerManager({ baseUrl });
124
+ // Ensure server is running (unless disabled)
125
+ if (autoStartServer) {
126
+ this.serverManager.ensureServerRunning().catch((error) => {
127
+ throw new Error(`Failed to start PMXT server: ${error}\n\n` +
128
+ `Please ensure 'pmxt-core' is installed: npm install -g pmxt-core\n` +
129
+ `Or start the server manually: pmxt-server`);
130
+ });
131
+ }
132
+ // Configure the API client
133
+ const config = new Configuration({ basePath: baseUrl });
134
+ this.api = new DefaultApi(config);
135
+ }
136
+ handleResponse(response) {
137
+ if (!response.success) {
138
+ const error = response.error || {};
139
+ throw new Error(error.message || "Unknown error");
140
+ }
141
+ return response.data;
142
+ }
143
+ // Market Data Methods
144
+ /**
145
+ * Get active markets from the exchange.
146
+ *
147
+ * @param params - Optional filter parameters
148
+ * @returns List of unified markets
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const markets = await exchange.fetchMarkets({ limit: 20, sort: "volume" });
153
+ * ```
154
+ */
155
+ async fetchMarkets(params) {
156
+ try {
157
+ const args = [];
158
+ if (params) {
159
+ args.push(params);
160
+ }
161
+ const requestBody = { args };
162
+ const response = await this.api.fetchMarkets({
163
+ exchange: this.exchangeName,
164
+ fetchMarketsRequest: requestBody,
165
+ });
166
+ const data = this.handleResponse(response);
167
+ return data.map(convertMarket);
168
+ }
169
+ catch (error) {
170
+ throw new Error(`Failed to fetch markets: ${error}`);
171
+ }
172
+ }
173
+ /**
174
+ * Search markets by keyword.
175
+ *
176
+ * @param query - Search query
177
+ * @param params - Optional filter parameters
178
+ * @returns List of matching markets
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const markets = await exchange.searchMarkets("Trump", { limit: 10 });
183
+ * ```
184
+ */
185
+ async searchMarkets(query, params) {
186
+ try {
187
+ const args = [query];
188
+ if (params) {
189
+ args.push(params);
190
+ }
191
+ const requestBody = { args };
192
+ const response = await this.api.searchMarkets({
193
+ exchange: this.exchangeName,
194
+ searchMarketsRequest: requestBody,
195
+ });
196
+ const data = this.handleResponse(response);
197
+ return data.map(convertMarket);
198
+ }
199
+ catch (error) {
200
+ throw new Error(`Failed to search markets: ${error}`);
201
+ }
202
+ }
203
+ /**
204
+ * Fetch markets by URL slug/ticker.
205
+ *
206
+ * @param slug - Market slug (Polymarket) or ticker (Kalshi)
207
+ * @returns List of matching markets
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * // Polymarket
212
+ * const markets = await poly.getMarketsBySlug("who-will-trump-nominate-as-fed-chair");
213
+ *
214
+ * // Kalshi
215
+ * const markets = await kalshi.getMarketsBySlug("KXFEDCHAIRNOM-29");
216
+ * ```
217
+ */
218
+ async getMarketsBySlug(slug) {
219
+ try {
220
+ const requestBody = { args: [slug] };
221
+ const response = await this.api.getMarketsBySlug({
222
+ exchange: this.exchangeName,
223
+ getMarketsBySlugRequest: requestBody,
224
+ });
225
+ const data = this.handleResponse(response);
226
+ return data.map(convertMarket);
227
+ }
228
+ catch (error) {
229
+ throw new Error(`Failed to get markets by slug: ${error}`);
230
+ }
231
+ }
232
+ /**
233
+ * Get historical price candles.
234
+ *
235
+ * **CRITICAL**: Use outcome.id, not market.id.
236
+ * - Polymarket: outcome.id is the CLOB Token ID
237
+ * - Kalshi: outcome.id is the Market Ticker
238
+ *
239
+ * @param outcomeId - Outcome ID (from market.outcomes[].id)
240
+ * @param params - History filter parameters
241
+ * @returns List of price candles
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * const markets = await exchange.searchMarkets("Trump");
246
+ * const outcomeId = markets[0].outcomes[0].id;
247
+ * const candles = await exchange.fetchOHLCV(outcomeId, {
248
+ * resolution: "1h",
249
+ * limit: 100
250
+ * });
251
+ * ```
252
+ */
253
+ async fetchOHLCV(outcomeId, params) {
254
+ try {
255
+ const paramsDict = { resolution: params.resolution };
256
+ if (params.start) {
257
+ paramsDict.start = params.start.toISOString();
258
+ }
259
+ if (params.end) {
260
+ paramsDict.end = params.end.toISOString();
261
+ }
262
+ if (params.limit) {
263
+ paramsDict.limit = params.limit;
264
+ }
265
+ const requestBody = { args: [outcomeId, paramsDict] };
266
+ const response = await this.api.fetchOHLCV({
267
+ exchange: this.exchangeName,
268
+ fetchOHLCVRequest: requestBody,
269
+ });
270
+ const data = this.handleResponse(response);
271
+ return data.map(convertCandle);
272
+ }
273
+ catch (error) {
274
+ throw new Error(`Failed to fetch OHLCV: ${error}`);
275
+ }
276
+ }
277
+ /**
278
+ * Get current order book for an outcome.
279
+ *
280
+ * @param outcomeId - Outcome ID
281
+ * @returns Current order book
282
+ *
283
+ * @example
284
+ * ```typescript
285
+ * const orderBook = await exchange.fetchOrderBook(outcomeId);
286
+ * console.log(`Best bid: ${orderBook.bids[0].price}`);
287
+ * console.log(`Best ask: ${orderBook.asks[0].price}`);
288
+ * ```
289
+ */
290
+ async fetchOrderBook(outcomeId) {
291
+ try {
292
+ const requestBody = { args: [outcomeId] };
293
+ const response = await this.api.fetchOrderBook({
294
+ exchange: this.exchangeName,
295
+ fetchOrderBookRequest: requestBody,
296
+ });
297
+ const data = this.handleResponse(response);
298
+ return convertOrderBook(data);
299
+ }
300
+ catch (error) {
301
+ throw new Error(`Failed to fetch order book: ${error}`);
302
+ }
303
+ }
304
+ /**
305
+ * Get trade history for an outcome.
306
+ *
307
+ * Note: Polymarket requires API key.
308
+ *
309
+ * @param outcomeId - Outcome ID
310
+ * @param params - History filter parameters
311
+ * @returns List of trades
312
+ */
313
+ async fetchTrades(outcomeId, params) {
314
+ try {
315
+ const paramsDict = { resolution: params.resolution };
316
+ if (params.limit) {
317
+ paramsDict.limit = params.limit;
318
+ }
319
+ const requestBody = { args: [outcomeId, paramsDict] };
320
+ const response = await this.api.fetchTrades({
321
+ exchange: this.exchangeName,
322
+ fetchTradesRequest: requestBody,
323
+ });
324
+ const data = this.handleResponse(response);
325
+ return data.map(convertTrade);
326
+ }
327
+ catch (error) {
328
+ throw new Error(`Failed to fetch trades: ${error}`);
329
+ }
330
+ }
331
+ // Trading Methods (require authentication)
332
+ /**
333
+ * Create a new order.
334
+ *
335
+ * @param params - Order parameters
336
+ * @returns Created order
337
+ *
338
+ * @example
339
+ * ```typescript
340
+ * const order = await exchange.createOrder({
341
+ * marketId: "663583",
342
+ * outcomeId: "10991849...",
343
+ * side: "buy",
344
+ * type: "limit",
345
+ * amount: 10,
346
+ * price: 0.55
347
+ * });
348
+ * ```
349
+ */
350
+ async createOrder(params) {
351
+ try {
352
+ const paramsDict = {
353
+ marketId: params.marketId,
354
+ outcomeId: params.outcomeId,
355
+ side: params.side,
356
+ type: params.type,
357
+ amount: params.amount,
358
+ };
359
+ if (params.price !== undefined) {
360
+ paramsDict.price = params.price;
361
+ }
362
+ const requestBody = { args: [paramsDict] };
363
+ const response = await this.api.createOrder({
364
+ exchange: this.exchangeName,
365
+ createOrderRequest: requestBody,
366
+ });
367
+ const data = this.handleResponse(response);
368
+ return convertOrder(data);
369
+ }
370
+ catch (error) {
371
+ throw new Error(`Failed to create order: ${error}`);
372
+ }
373
+ }
374
+ /**
375
+ * Cancel an open order.
376
+ *
377
+ * @param orderId - Order ID to cancel
378
+ * @returns Cancelled order
379
+ */
380
+ async cancelOrder(orderId) {
381
+ try {
382
+ const requestBody = { args: [orderId] };
383
+ const response = await this.api.cancelOrder({
384
+ exchange: this.exchangeName,
385
+ cancelOrderRequest: requestBody,
386
+ });
387
+ const data = this.handleResponse(response);
388
+ return convertOrder(data);
389
+ }
390
+ catch (error) {
391
+ throw new Error(`Failed to cancel order: ${error}`);
392
+ }
393
+ }
394
+ /**
395
+ * Get details of a specific order.
396
+ *
397
+ * @param orderId - Order ID
398
+ * @returns Order details
399
+ */
400
+ async fetchOrder(orderId) {
401
+ try {
402
+ const requestBody = { args: [orderId] };
403
+ const response = await this.api.fetchOrder({
404
+ exchange: this.exchangeName,
405
+ cancelOrderRequest: requestBody,
406
+ });
407
+ const data = this.handleResponse(response);
408
+ return convertOrder(data);
409
+ }
410
+ catch (error) {
411
+ throw new Error(`Failed to fetch order: ${error}`);
412
+ }
413
+ }
414
+ /**
415
+ * Get all open orders, optionally filtered by market.
416
+ *
417
+ * @param marketId - Optional market ID to filter by
418
+ * @returns List of open orders
419
+ */
420
+ async fetchOpenOrders(marketId) {
421
+ try {
422
+ const args = [];
423
+ if (marketId) {
424
+ args.push(marketId);
425
+ }
426
+ const requestBody = { args };
427
+ const response = await this.api.fetchOpenOrders({
428
+ exchange: this.exchangeName,
429
+ fetchOpenOrdersRequest: requestBody,
430
+ });
431
+ const data = this.handleResponse(response);
432
+ return data.map(convertOrder);
433
+ }
434
+ catch (error) {
435
+ throw new Error(`Failed to fetch open orders: ${error}`);
436
+ }
437
+ }
438
+ // Account Methods
439
+ /**
440
+ * Get current positions across all markets.
441
+ *
442
+ * @returns List of positions
443
+ */
444
+ async fetchPositions() {
445
+ try {
446
+ const requestBody = { args: [] };
447
+ const response = await this.api.fetchPositions({
448
+ exchange: this.exchangeName,
449
+ fetchPositionsRequest: requestBody,
450
+ });
451
+ const data = this.handleResponse(response);
452
+ return data.map(convertPosition);
453
+ }
454
+ catch (error) {
455
+ throw new Error(`Failed to fetch positions: ${error}`);
456
+ }
457
+ }
458
+ /**
459
+ * Get account balance.
460
+ *
461
+ * @returns List of balances (by currency)
462
+ */
463
+ async fetchBalance() {
464
+ try {
465
+ const requestBody = { args: [] };
466
+ const response = await this.api.fetchBalance({
467
+ exchange: this.exchangeName,
468
+ fetchPositionsRequest: requestBody,
469
+ });
470
+ const data = this.handleResponse(response);
471
+ return data.map(convertBalance);
472
+ }
473
+ catch (error) {
474
+ throw new Error(`Failed to fetch balance: ${error}`);
475
+ }
476
+ }
477
+ }
478
+ /**
479
+ * Polymarket exchange client.
480
+ *
481
+ * @example
482
+ * ```typescript
483
+ * // Public data (no auth)
484
+ * const poly = new Polymarket();
485
+ * const markets = await poly.searchMarkets("Trump");
486
+ *
487
+ * // Trading (requires auth)
488
+ * const poly = new Polymarket({ privateKey: process.env.POLYMARKET_PRIVATE_KEY });
489
+ * const balance = await poly.fetchBalance();
490
+ * ```
491
+ */
492
+ export class Polymarket extends Exchange {
493
+ constructor(options = {}) {
494
+ super("polymarket", options);
495
+ }
496
+ }
497
+ /**
498
+ * Kalshi exchange client.
499
+ *
500
+ * @example
501
+ * ```typescript
502
+ * // Public data (no auth)
503
+ * const kalshi = new Kalshi();
504
+ * const markets = await kalshi.searchMarkets("Fed rates");
505
+ *
506
+ * // Trading (requires auth)
507
+ * const kalshi = new Kalshi({
508
+ * apiKey: process.env.KALSHI_API_KEY,
509
+ * privateKey: process.env.KALSHI_PRIVATE_KEY
510
+ * });
511
+ * const balance = await kalshi.fetchBalance();
512
+ * ```
513
+ */
514
+ export class Kalshi extends Exchange {
515
+ constructor(options = {}) {
516
+ super("kalshi", options);
517
+ }
518
+ }