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