pmxtjs 2.9.2 → 2.9.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 (284) hide show
  1. package/dist/esm/generated/src/apis/DefaultApi.d.ts +242 -112
  2. package/dist/esm/generated/src/apis/DefaultApi.js +298 -108
  3. package/dist/esm/generated/src/models/BuildOrder200Response.d.ts +46 -0
  4. package/dist/esm/generated/src/models/BuildOrder200Response.js +47 -0
  5. package/dist/esm/generated/src/models/BuildOrderRequest.d.ts +40 -0
  6. package/dist/esm/generated/src/models/BuildOrderRequest.js +47 -0
  7. package/dist/esm/generated/src/models/BuiltOrder.d.ts +60 -0
  8. package/dist/esm/generated/src/models/BuiltOrder.js +51 -0
  9. package/dist/esm/generated/src/models/BuiltOrderTx.d.ts +50 -0
  10. package/dist/esm/generated/src/models/BuiltOrderTx.js +47 -0
  11. package/dist/esm/generated/src/models/CloseRequest.d.ts +39 -0
  12. package/dist/esm/generated/src/models/{WatchUserPositionsRequest.js → CloseRequest.js} +10 -8
  13. package/dist/esm/generated/src/models/EventFetchParams.d.ts +15 -0
  14. package/dist/esm/generated/src/models/EventFetchParams.js +10 -0
  15. package/dist/esm/generated/src/models/FetchAllOrdersRequest.d.ts +40 -0
  16. package/dist/esm/generated/src/models/FetchAllOrdersRequest.js +45 -0
  17. package/dist/esm/generated/src/models/FetchBalanceRequest.d.ts +39 -0
  18. package/dist/esm/generated/src/models/FetchBalanceRequest.js +44 -0
  19. package/dist/esm/generated/src/models/FetchClosedOrdersRequest.d.ts +40 -0
  20. package/dist/esm/generated/src/models/FetchClosedOrdersRequest.js +45 -0
  21. package/dist/esm/generated/src/models/FetchEventRequest.d.ts +40 -0
  22. package/dist/esm/generated/src/models/FetchEventRequest.js +45 -0
  23. package/dist/esm/generated/src/models/FetchMarketsPaginated200Response.d.ts +46 -0
  24. package/dist/esm/generated/src/models/FetchMarketsPaginated200Response.js +47 -0
  25. package/dist/esm/generated/src/models/FetchMarketsPaginatedRequest.d.ts +40 -0
  26. package/dist/esm/generated/src/models/FetchMarketsPaginatedRequest.js +45 -0
  27. package/dist/esm/generated/src/models/FetchMarketsPaginatedRequestArgsInner.d.ts +38 -0
  28. package/dist/esm/generated/src/models/FetchMarketsPaginatedRequestArgsInner.js +43 -0
  29. package/dist/esm/generated/src/models/FetchMarketsRequest.d.ts +0 -6
  30. package/dist/esm/generated/src/models/FetchMarketsRequest.js +0 -2
  31. package/dist/esm/generated/src/models/FetchMyTrades200Response.d.ts +46 -0
  32. package/dist/esm/generated/src/models/FetchMyTrades200Response.js +47 -0
  33. package/dist/esm/generated/src/models/FetchMyTradesRequest.d.ts +40 -0
  34. package/dist/esm/generated/src/models/FetchMyTradesRequest.js +45 -0
  35. package/dist/esm/generated/src/models/FetchOHLCVRequest.d.ts +1 -1
  36. package/dist/esm/generated/src/models/{WatchPricesRequest.d.ts → FetchOrderRequest.d.ts} +10 -10
  37. package/dist/esm/generated/src/models/{WatchPricesRequest.js → FetchOrderRequest.js} +8 -8
  38. package/dist/esm/generated/src/models/FetchPositionsRequest.d.ts +1 -1
  39. package/dist/esm/generated/src/models/FetchTradesRequest.d.ts +1 -1
  40. package/dist/esm/generated/src/models/FetchTradesRequestArgsInner.d.ts +2 -2
  41. package/dist/esm/generated/src/models/FetchTradesRequestArgsInner.js +5 -5
  42. package/dist/esm/generated/src/models/FetchTradesRequestArgsInnerOneOf.d.ts +24 -0
  43. package/dist/esm/generated/src/models/FetchTradesRequestArgsInnerOneOf.js +54 -0
  44. package/dist/esm/generated/src/models/FilterEventsRequest.d.ts +1 -1
  45. package/dist/esm/generated/src/models/FilterEventsRequestArgsInner.js +3 -3
  46. package/dist/esm/generated/src/models/FilterMarketsRequest.d.ts +1 -1
  47. package/dist/esm/generated/src/models/FilterMarketsRequestArgsInner.js +3 -3
  48. package/dist/esm/generated/src/models/FilterMarketsRequestArgsInnerOneOf.d.ts +2 -2
  49. package/dist/esm/generated/src/models/FilterMarketsRequestArgsInnerOneOf.js +5 -1
  50. package/dist/esm/generated/src/models/GetExecutionPriceDetailedRequest.d.ts +40 -0
  51. package/dist/esm/generated/src/models/GetExecutionPriceDetailedRequest.js +47 -0
  52. package/dist/esm/generated/src/models/GetExecutionPriceRequest.d.ts +1 -1
  53. package/dist/esm/generated/src/models/LoadMarkets200Response.d.ts +48 -0
  54. package/dist/esm/generated/src/models/LoadMarkets200Response.js +48 -0
  55. package/dist/esm/generated/src/models/LoadMarketsRequest.d.ts +39 -0
  56. package/dist/esm/generated/src/models/LoadMarketsRequest.js +44 -0
  57. package/dist/esm/generated/src/models/MyTradesParams.d.ts +62 -0
  58. package/dist/esm/generated/src/models/MyTradesParams.js +51 -0
  59. package/dist/esm/generated/src/models/OrderHistoryParams.d.ts +56 -0
  60. package/dist/esm/generated/src/models/OrderHistoryParams.js +49 -0
  61. package/dist/esm/generated/src/models/PaginatedMarketsResult.d.ts +45 -0
  62. package/dist/esm/generated/src/models/PaginatedMarketsResult.js +46 -0
  63. package/dist/esm/generated/src/models/SubmitOrderRequest.d.ts +40 -0
  64. package/dist/esm/generated/src/models/SubmitOrderRequest.js +47 -0
  65. package/dist/esm/generated/src/models/UnifiedMarket.d.ts +6 -0
  66. package/dist/esm/generated/src/models/UnifiedMarket.js +2 -0
  67. package/dist/esm/generated/src/models/UserTrade.d.ts +83 -0
  68. package/dist/esm/generated/src/models/UserTrade.js +63 -0
  69. package/dist/esm/generated/src/models/WatchOrderBookRequest.d.ts +1 -1
  70. package/dist/esm/generated/src/models/WatchTradesRequest.d.ts +1 -1
  71. package/dist/esm/generated/src/models/index.d.ts +24 -2
  72. package/dist/esm/generated/src/models/index.js +24 -2
  73. package/dist/esm/index.d.ts +6 -2
  74. package/dist/esm/index.js +6 -2
  75. package/dist/esm/pmxt/client.d.ts +107 -81
  76. package/dist/esm/pmxt/client.js +462 -227
  77. package/dist/esm/pmxt/models.d.ts +34 -0
  78. package/dist/esm/pmxt/server-manager.d.ts +2 -0
  79. package/dist/esm/pmxt/server-manager.js +15 -2
  80. package/dist/generated/src/apis/DefaultApi.d.ts +242 -112
  81. package/dist/generated/src/apis/DefaultApi.js +298 -108
  82. package/dist/generated/src/models/BuildOrder200Response.d.ts +46 -0
  83. package/dist/generated/src/models/BuildOrder200Response.js +54 -0
  84. package/dist/generated/src/models/BuildOrderRequest.d.ts +40 -0
  85. package/dist/generated/src/models/BuildOrderRequest.js +54 -0
  86. package/dist/generated/src/models/BuiltOrder.d.ts +60 -0
  87. package/dist/generated/src/models/BuiltOrder.js +58 -0
  88. package/dist/generated/src/models/BuiltOrderTx.d.ts +50 -0
  89. package/dist/generated/src/models/BuiltOrderTx.js +54 -0
  90. package/dist/generated/src/models/CloseRequest.d.ts +39 -0
  91. package/dist/generated/src/models/{WatchUserPositionsRequest.js → CloseRequest.js} +15 -13
  92. package/dist/generated/src/models/EventFetchParams.d.ts +15 -0
  93. package/dist/generated/src/models/EventFetchParams.js +11 -1
  94. package/dist/generated/src/models/FetchAllOrdersRequest.d.ts +40 -0
  95. package/dist/generated/src/models/FetchAllOrdersRequest.js +52 -0
  96. package/dist/generated/src/models/FetchBalanceRequest.d.ts +39 -0
  97. package/dist/generated/src/models/FetchBalanceRequest.js +51 -0
  98. package/dist/generated/src/models/FetchClosedOrdersRequest.d.ts +40 -0
  99. package/dist/generated/src/models/FetchClosedOrdersRequest.js +52 -0
  100. package/dist/generated/src/models/FetchEventRequest.d.ts +40 -0
  101. package/dist/generated/src/models/FetchEventRequest.js +52 -0
  102. package/dist/generated/src/models/FetchMarketsPaginated200Response.d.ts +46 -0
  103. package/dist/generated/src/models/FetchMarketsPaginated200Response.js +54 -0
  104. package/dist/generated/src/models/FetchMarketsPaginatedRequest.d.ts +40 -0
  105. package/dist/generated/src/models/FetchMarketsPaginatedRequest.js +52 -0
  106. package/dist/generated/src/models/FetchMarketsPaginatedRequestArgsInner.d.ts +38 -0
  107. package/dist/generated/src/models/FetchMarketsPaginatedRequestArgsInner.js +50 -0
  108. package/dist/generated/src/models/FetchMarketsRequest.d.ts +0 -6
  109. package/dist/generated/src/models/FetchMarketsRequest.js +0 -2
  110. package/dist/generated/src/models/FetchMyTrades200Response.d.ts +46 -0
  111. package/dist/generated/src/models/FetchMyTrades200Response.js +54 -0
  112. package/dist/generated/src/models/FetchMyTradesRequest.d.ts +40 -0
  113. package/dist/generated/src/models/FetchMyTradesRequest.js +52 -0
  114. package/dist/generated/src/models/FetchOHLCVRequest.d.ts +1 -1
  115. package/dist/generated/src/models/{WatchPricesRequest.d.ts → FetchOrderRequest.d.ts} +10 -10
  116. package/dist/generated/src/models/{WatchPricesRequest.js → FetchOrderRequest.js} +13 -13
  117. package/dist/generated/src/models/FetchPositionsRequest.d.ts +1 -1
  118. package/dist/generated/src/models/FetchTradesRequest.d.ts +1 -1
  119. package/dist/generated/src/models/FetchTradesRequestArgsInner.d.ts +2 -2
  120. package/dist/generated/src/models/FetchTradesRequestArgsInner.js +5 -5
  121. package/dist/generated/src/models/FetchTradesRequestArgsInnerOneOf.d.ts +24 -0
  122. package/dist/generated/src/models/FetchTradesRequestArgsInnerOneOf.js +61 -0
  123. package/dist/generated/src/models/FilterEventsRequest.d.ts +1 -1
  124. package/dist/generated/src/models/FilterEventsRequestArgsInner.js +3 -3
  125. package/dist/generated/src/models/FilterMarketsRequest.d.ts +1 -1
  126. package/dist/generated/src/models/FilterMarketsRequestArgsInner.js +3 -3
  127. package/dist/generated/src/models/FilterMarketsRequestArgsInnerOneOf.d.ts +2 -2
  128. package/dist/generated/src/models/FilterMarketsRequestArgsInnerOneOf.js +5 -1
  129. package/dist/generated/src/models/GetExecutionPriceDetailedRequest.d.ts +40 -0
  130. package/dist/generated/src/models/GetExecutionPriceDetailedRequest.js +54 -0
  131. package/dist/generated/src/models/GetExecutionPriceRequest.d.ts +1 -1
  132. package/dist/generated/src/models/LoadMarkets200Response.d.ts +48 -0
  133. package/dist/generated/src/models/LoadMarkets200Response.js +55 -0
  134. package/dist/generated/src/models/LoadMarketsRequest.d.ts +39 -0
  135. package/dist/generated/src/models/LoadMarketsRequest.js +51 -0
  136. package/dist/generated/src/models/MyTradesParams.d.ts +62 -0
  137. package/dist/generated/src/models/MyTradesParams.js +58 -0
  138. package/dist/generated/src/models/OrderHistoryParams.d.ts +56 -0
  139. package/dist/generated/src/models/OrderHistoryParams.js +56 -0
  140. package/dist/generated/src/models/PaginatedMarketsResult.d.ts +45 -0
  141. package/dist/generated/src/models/PaginatedMarketsResult.js +53 -0
  142. package/dist/generated/src/models/SubmitOrderRequest.d.ts +40 -0
  143. package/dist/generated/src/models/SubmitOrderRequest.js +54 -0
  144. package/dist/generated/src/models/UnifiedMarket.d.ts +6 -0
  145. package/dist/generated/src/models/UnifiedMarket.js +2 -0
  146. package/dist/generated/src/models/UserTrade.d.ts +83 -0
  147. package/dist/generated/src/models/UserTrade.js +71 -0
  148. package/dist/generated/src/models/WatchOrderBookRequest.d.ts +1 -1
  149. package/dist/generated/src/models/WatchTradesRequest.d.ts +1 -1
  150. package/dist/generated/src/models/index.d.ts +24 -2
  151. package/dist/generated/src/models/index.js +24 -2
  152. package/dist/index.d.ts +6 -2
  153. package/dist/index.js +9 -1
  154. package/dist/pmxt/client.d.ts +107 -81
  155. package/dist/pmxt/client.js +467 -228
  156. package/dist/pmxt/models.d.ts +34 -0
  157. package/dist/pmxt/server-manager.d.ts +2 -0
  158. package/dist/pmxt/server-manager.js +15 -2
  159. package/generated/.openapi-generator/FILES +48 -4
  160. package/generated/docs/BuildOrder200Response.md +38 -0
  161. package/generated/docs/BuildOrderRequest.md +36 -0
  162. package/generated/docs/BuiltOrder.md +43 -0
  163. package/generated/docs/BuiltOrderTx.md +41 -0
  164. package/generated/docs/{WatchUserPositionsRequest.md → CloseRequest.md} +6 -4
  165. package/generated/docs/DefaultApi.md +493 -185
  166. package/generated/docs/EventFetchParams.md +2 -0
  167. package/generated/docs/FetchAllOrdersRequest.md +36 -0
  168. package/generated/docs/FetchBalanceRequest.md +36 -0
  169. package/generated/docs/FetchClosedOrdersRequest.md +36 -0
  170. package/generated/docs/FetchEventRequest.md +36 -0
  171. package/generated/docs/FetchMarketsPaginated200Response.md +38 -0
  172. package/generated/docs/FetchMarketsPaginatedRequest.md +36 -0
  173. package/generated/docs/FetchMarketsPaginatedRequestArgsInner.md +36 -0
  174. package/generated/docs/FetchMarketsRequest.md +0 -2
  175. package/generated/docs/FetchMyTrades200Response.md +38 -0
  176. package/generated/docs/FetchMyTradesRequest.md +36 -0
  177. package/generated/docs/FetchOHLCVRequest.md +1 -1
  178. package/generated/docs/{WatchPricesRequest.md → FetchOrderRequest.md} +4 -4
  179. package/generated/docs/FetchTradesRequestArgsInner.md +2 -0
  180. package/generated/docs/FetchTradesRequestArgsInnerOneOf.md +40 -0
  181. package/generated/docs/FilterMarketsRequestArgsInnerOneOf.md +0 -1
  182. package/generated/docs/GetExecutionPriceDetailedRequest.md +36 -0
  183. package/generated/docs/LoadMarkets200Response.md +38 -0
  184. package/generated/docs/LoadMarketsRequest.md +36 -0
  185. package/generated/docs/MyTradesParams.md +44 -0
  186. package/generated/docs/OrderHistoryParams.md +42 -0
  187. package/generated/docs/PaginatedMarketsResult.md +38 -0
  188. package/generated/docs/SubmitOrderRequest.md +36 -0
  189. package/generated/docs/UnifiedMarket.md +2 -0
  190. package/generated/docs/UserTrade.md +48 -0
  191. package/generated/package.json +1 -1
  192. package/generated/src/apis/DefaultApi.ts +486 -185
  193. package/generated/src/models/Balance.ts +1 -1
  194. package/generated/src/models/BaseRequest.ts +1 -1
  195. package/generated/src/models/BaseResponse.ts +1 -1
  196. package/generated/src/models/BuildOrder200Response.ts +96 -0
  197. package/generated/src/models/BuildOrderRequest.ts +89 -0
  198. package/generated/src/models/BuiltOrder.ts +112 -0
  199. package/generated/src/models/BuiltOrderTx.ts +89 -0
  200. package/generated/src/models/CancelOrderRequest.ts +1 -1
  201. package/generated/src/models/{WatchUserPositionsRequest.ts → CloseRequest.ts} +20 -12
  202. package/generated/src/models/CreateOrder200Response.ts +1 -1
  203. package/generated/src/models/CreateOrderParams.ts +1 -1
  204. package/generated/src/models/CreateOrderRequest.ts +1 -1
  205. package/generated/src/models/ErrorDetail.ts +1 -1
  206. package/generated/src/models/ErrorResponse.ts +1 -1
  207. package/generated/src/models/EventFetchParams.ts +19 -1
  208. package/generated/src/models/ExchangeCredentials.ts +1 -1
  209. package/generated/src/models/ExchangeCredentialsSignatureType.ts +1 -1
  210. package/generated/src/models/ExecutionPriceResult.ts +1 -1
  211. package/generated/src/models/FetchAllOrdersRequest.ts +88 -0
  212. package/generated/src/models/FetchBalance200Response.ts +1 -1
  213. package/generated/src/models/FetchBalanceRequest.ts +81 -0
  214. package/generated/src/models/FetchClosedOrdersRequest.ts +88 -0
  215. package/generated/src/models/FetchEvent200Response.ts +1 -1
  216. package/generated/src/models/FetchEventRequest.ts +88 -0
  217. package/generated/src/models/FetchEvents200Response.ts +1 -1
  218. package/generated/src/models/FetchEventsRequest.ts +1 -1
  219. package/generated/src/models/FetchMarket200Response.ts +1 -1
  220. package/generated/src/models/FetchMarketRequest.ts +1 -1
  221. package/generated/src/models/FetchMarkets200Response.ts +1 -1
  222. package/generated/src/models/FetchMarketsPaginated200Response.ts +96 -0
  223. package/generated/src/models/FetchMarketsPaginatedRequest.ts +88 -0
  224. package/generated/src/models/FetchMarketsPaginatedRequestArgsInner.ts +73 -0
  225. package/generated/src/models/FetchMarketsRequest.ts +1 -9
  226. package/generated/src/models/FetchMyTrades200Response.ts +96 -0
  227. package/generated/src/models/FetchMyTradesRequest.ts +88 -0
  228. package/generated/src/models/FetchOHLCV200Response.ts +1 -1
  229. package/generated/src/models/FetchOHLCVRequest.ts +2 -2
  230. package/generated/src/models/FetchOHLCVRequestArgsInner.ts +1 -1
  231. package/generated/src/models/FetchOpenOrders200Response.ts +1 -1
  232. package/generated/src/models/FetchOpenOrdersRequest.ts +1 -1
  233. package/generated/src/models/FetchOrderBook200Response.ts +1 -1
  234. package/generated/src/models/FetchOrderBookRequest.ts +1 -1
  235. package/generated/src/models/{WatchPricesRequest.ts → FetchOrderRequest.ts} +13 -13
  236. package/generated/src/models/FetchPositions200Response.ts +1 -1
  237. package/generated/src/models/FetchPositionsRequest.ts +2 -2
  238. package/generated/src/models/FetchTrades200Response.ts +1 -1
  239. package/generated/src/models/FetchTradesRequest.ts +2 -2
  240. package/generated/src/models/FetchTradesRequestArgsInner.ts +12 -12
  241. package/generated/src/models/FetchTradesRequestArgsInnerOneOf.ts +80 -0
  242. package/generated/src/models/FilterEventsRequest.ts +2 -2
  243. package/generated/src/models/FilterEventsRequestArgsInner.ts +4 -4
  244. package/generated/src/models/FilterMarketsRequest.ts +2 -2
  245. package/generated/src/models/FilterMarketsRequestArgsInner.ts +4 -4
  246. package/generated/src/models/FilterMarketsRequestArgsInnerOneOf.ts +6 -4
  247. package/generated/src/models/GetExecutionPrice200Response.ts +1 -1
  248. package/generated/src/models/GetExecutionPriceDetailed200Response.ts +1 -1
  249. package/generated/src/models/GetExecutionPriceDetailedRequest.ts +89 -0
  250. package/generated/src/models/GetExecutionPriceRequest.ts +2 -2
  251. package/generated/src/models/GetExecutionPriceRequestArgsInner.ts +1 -1
  252. package/generated/src/models/HealthCheck200Response.ts +1 -1
  253. package/generated/src/models/HistoryFilterParams.ts +1 -1
  254. package/generated/src/models/LoadMarkets200Response.ts +96 -0
  255. package/generated/src/models/LoadMarketsRequest.ts +81 -0
  256. package/generated/src/models/MarketFilterParams.ts +1 -1
  257. package/generated/src/models/MarketOutcome.ts +1 -1
  258. package/generated/src/models/MyTradesParams.ts +105 -0
  259. package/generated/src/models/OHLCVParams.ts +1 -1
  260. package/generated/src/models/Order.ts +1 -1
  261. package/generated/src/models/OrderBook.ts +1 -1
  262. package/generated/src/models/OrderHistoryParams.ts +97 -0
  263. package/generated/src/models/OrderLevel.ts +1 -1
  264. package/generated/src/models/PaginatedMarketsResult.ts +89 -0
  265. package/generated/src/models/Position.ts +1 -1
  266. package/generated/src/models/PriceCandle.ts +1 -1
  267. package/generated/src/models/SubmitOrderRequest.ts +89 -0
  268. package/generated/src/models/Trade.ts +1 -1
  269. package/generated/src/models/TradesParams.ts +1 -1
  270. package/generated/src/models/UnifiedEvent.ts +1 -1
  271. package/generated/src/models/UnifiedMarket.ts +9 -1
  272. package/generated/src/models/UserTrade.ts +133 -0
  273. package/generated/src/models/WatchOrderBookRequest.ts +2 -2
  274. package/generated/src/models/WatchOrderBookRequestArgsInner.ts +1 -1
  275. package/generated/src/models/WatchTradesRequest.ts +2 -2
  276. package/generated/src/models/index.ts +24 -2
  277. package/generated/src/runtime.ts +1 -1
  278. package/index.ts +6 -2
  279. package/package.json +4 -3
  280. package/pmxt/client.ts +464 -256
  281. package/pmxt/models.ts +46 -0
  282. package/pmxt/server-manager.ts +13 -2
  283. package/dist/esm/generated/src/models/WatchUserPositionsRequest.d.ts +0 -33
  284. package/dist/generated/src/models/WatchUserPositionsRequest.d.ts +0 -33
package/pmxt/client.ts CHANGED
@@ -8,14 +8,9 @@
8
8
  import {
9
9
  DefaultApi,
10
10
  Configuration,
11
- FetchMarketsRequest,
12
11
  FetchOHLCVRequest,
13
- FetchOrderBookRequest,
14
12
  FetchTradesRequest,
15
13
  CreateOrderRequest,
16
- CancelOrderRequest,
17
- FetchOpenOrdersRequest,
18
- FetchPositionsRequest,
19
14
  ExchangeCredentials,
20
15
  } from "../generated/src/index.js";
21
16
 
@@ -27,12 +22,14 @@ import {
27
22
  OrderBook,
28
23
  OrderLevel,
29
24
  Trade,
25
+ UserTrade,
30
26
  Order,
31
27
  Position,
32
28
  Balance,
33
29
  SearchIn,
34
30
  UnifiedEvent,
35
31
  ExecutionPriceResult,
32
+ PaginatedMarketsResult,
36
33
  MarketFilterCriteria,
37
34
  MarketFilterFunction,
38
35
  EventFilterCriteria,
@@ -75,6 +72,7 @@ function convertMarket(raw: any): UnifiedMarket {
75
72
  image: raw.image,
76
73
  category: raw.category,
77
74
  tags: raw.tags,
75
+ eventId: raw.eventId,
78
76
  yes: convertOutcome(raw.yes),
79
77
  no: convertOutcome(raw.no),
80
78
  up: convertOutcome(raw.up),
@@ -161,10 +159,23 @@ function convertBalance(raw: any): Balance {
161
159
  };
162
160
  }
163
161
 
162
+ function convertUserTrade(raw: any): UserTrade {
163
+ return {
164
+ id: raw.id,
165
+ price: raw.price,
166
+ amount: raw.amount,
167
+ side: raw.side || "unknown",
168
+ timestamp: raw.timestamp,
169
+ orderId: raw.orderId,
170
+ outcomeId: raw.outcomeId,
171
+ marketId: raw.marketId,
172
+ };
173
+ }
174
+
164
175
  function convertEvent(raw: any): UnifiedEvent {
165
176
  const markets = MarketList.from((raw.markets || []).map(convertMarket)) as MarketList;
166
177
 
167
- return {
178
+ const event: UnifiedEvent = {
168
179
  id: raw.id,
169
180
  title: raw.title,
170
181
  description: raw.description,
@@ -175,6 +186,8 @@ function convertEvent(raw: any): UnifiedEvent {
175
186
  category: raw.category,
176
187
  tags: raw.tags,
177
188
  };
189
+
190
+ return event;
178
191
  }
179
192
 
180
193
  /**
@@ -290,147 +303,414 @@ export abstract class Exchange {
290
303
  };
291
304
  }
292
305
 
293
- // Market Data Methods
306
+ // Low-Level API Access
294
307
 
295
308
  /**
296
- * Get active markets from the exchange.
297
- *
298
- * @param params - Optional filter parameters
299
- * @returns List of unified markets
300
- *
309
+ * Call an exchange-specific REST endpoint by its operationId.
310
+ * This provides direct access to all implicit API methods defined in
311
+ * the exchange's OpenAPI spec (e.g., Polymarket CLOB, Kalshi trading API).
312
+ *
313
+ * @param operationId - The operationId (or auto-generated name) of the endpoint
314
+ * @param params - Optional parameters to pass to the endpoint
315
+ * @returns The raw response data from the exchange
316
+ *
301
317
  * @example
302
318
  * ```typescript
303
- * const markets = await exchange.fetchMarkets({ limit: 20, sort: "volume" });
319
+ * // Call a Polymarket CLOB endpoint directly
320
+ * const result = await poly.callApi('getMarket', { condition_id: '0x...' });
304
321
  * ```
305
322
  */
306
- async fetchMarkets(params?: any): Promise<UnifiedMarket[]> {
323
+ async callApi(operationId: string, params?: Record<string, any>): Promise<any> {
307
324
  await this.initPromise;
308
325
  try {
309
- const args: any[] = [];
310
- if (params) {
311
- args.push(params);
312
- }
326
+ const url = `${this.config.basePath}/api/${this.exchangeName}/callApi`;
313
327
 
314
- const requestBody: FetchMarketsRequest = {
315
- args,
328
+ const requestBody: any = {
329
+ args: [operationId, params],
316
330
  credentials: this.getCredentials()
317
331
  };
318
332
 
319
- const response = await this.api.fetchMarkets({
320
- exchange: this.exchangeName as any,
321
- fetchMarketsRequest: requestBody,
333
+ const response = await fetch(url, {
334
+ method: 'POST',
335
+ headers: {
336
+ 'Content-Type': 'application/json',
337
+ ...this.config.headers
338
+ },
339
+ body: JSON.stringify(requestBody)
322
340
  });
323
341
 
324
- const data = this.handleResponse(response);
325
- return data.map(convertMarket);
342
+ if (!response.ok) {
343
+ const error = await response.json().catch(() => ({}));
344
+ throw new Error(error.error?.message || response.statusText);
345
+ }
346
+
347
+ const json = await response.json();
348
+ return this.handleResponse(json);
326
349
  } catch (error) {
327
- throw new Error(`Failed to fetch markets: ${error}`);
350
+ throw new Error(`Failed to call API '${operationId}': ${error}`);
328
351
  }
329
352
  }
330
353
 
331
- /**
332
- * Fetch a single market by lookup parameters.
333
- * Returns the first matching market or throws if not found.
334
- *
335
- * @param params - Lookup parameters (marketId, outcomeId, slug, eventId, query)
336
- * @returns A single unified market
337
- * @throws Error if no market matches
338
- *
339
- * @example
340
- * ```typescript
341
- * const market = await exchange.fetchMarket({ marketId: '663583' });
342
- * const market = await exchange.fetchMarket({ outcomeId: '10991849...' });
343
- * const market = await exchange.fetchMarket({ slug: 'will-trump-win' });
344
- * ```
345
- */
346
- async fetchMarket(params?: any): Promise<UnifiedMarket> {
354
+ // BEGIN GENERATED METHODS
355
+
356
+ async loadMarkets(reload: boolean = false): Promise<Record<string, UnifiedMarket>> {
347
357
  await this.initPromise;
348
358
  try {
349
359
  const args: any[] = [];
350
- if (params) {
351
- args.push(params);
360
+ args.push(reload);
361
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/loadMarkets`, {
362
+ method: 'POST',
363
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
364
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
365
+ });
366
+ if (!response.ok) {
367
+ const error = await response.json().catch(() => ({}));
368
+ throw new Error(error.error?.message || response.statusText);
352
369
  }
370
+ const json = await response.json();
371
+ const data = this.handleResponse(json);
372
+ const result: Record<string, UnifiedMarket> = {};
373
+ for (const [key, value] of Object.entries(data as any)) {
374
+ result[key] = convertMarket(value);
375
+ }
376
+ return result;
377
+ } catch (error) {
378
+ throw new Error(`Failed to loadMarkets: ${error}`);
379
+ }
380
+ }
353
381
 
354
- const requestBody: any = {
355
- args,
356
- credentials: this.getCredentials()
357
- };
358
-
359
- const url = `${this.config.basePath}/api/${this.exchangeName}/fetchMarket`;
382
+ async fetchMarkets(params?: any): Promise<UnifiedMarket[]> {
383
+ await this.initPromise;
384
+ try {
385
+ const args: any[] = [];
386
+ if (params !== undefined) args.push(params);
387
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMarkets`, {
388
+ method: 'POST',
389
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
390
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
391
+ });
392
+ if (!response.ok) {
393
+ const error = await response.json().catch(() => ({}));
394
+ throw new Error(error.error?.message || response.statusText);
395
+ }
396
+ const json = await response.json();
397
+ const data = this.handleResponse(json);
398
+ return data.map(convertMarket);
399
+ } catch (error) {
400
+ throw new Error(`Failed to fetchMarkets: ${error}`);
401
+ }
402
+ }
360
403
 
361
- const response = await fetch(url, {
404
+ async fetchMarketsPaginated(params?: any): Promise<PaginatedMarketsResult> {
405
+ await this.initPromise;
406
+ try {
407
+ const args: any[] = [];
408
+ if (params !== undefined) args.push(params);
409
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMarketsPaginated`, {
362
410
  method: 'POST',
363
- headers: {
364
- 'Content-Type': 'application/json',
365
- ...this.config.headers
366
- },
367
- body: JSON.stringify(requestBody)
411
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
412
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
368
413
  });
414
+ if (!response.ok) {
415
+ const error = await response.json().catch(() => ({}));
416
+ throw new Error(error.error?.message || response.statusText);
417
+ }
418
+ const json = await response.json();
419
+ const data = this.handleResponse(json);
420
+ return {
421
+ data: (data.data || []).map(convertMarket),
422
+ total: data.total,
423
+ nextCursor: data.nextCursor,
424
+ };
425
+ } catch (error) {
426
+ throw new Error(`Failed to fetchMarketsPaginated: ${error}`);
427
+ }
428
+ }
369
429
 
430
+ async fetchEvents(params?: any): Promise<UnifiedEvent[]> {
431
+ await this.initPromise;
432
+ try {
433
+ const args: any[] = [];
434
+ if (params !== undefined) args.push(params);
435
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchEvents`, {
436
+ method: 'POST',
437
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
438
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
439
+ });
370
440
  if (!response.ok) {
371
441
  const error = await response.json().catch(() => ({}));
372
442
  throw new Error(error.error?.message || response.statusText);
373
443
  }
444
+ const json = await response.json();
445
+ const data = this.handleResponse(json);
446
+ return data.map(convertEvent);
447
+ } catch (error) {
448
+ throw new Error(`Failed to fetchEvents: ${error}`);
449
+ }
450
+ }
374
451
 
452
+ async fetchMarket(params?: any): Promise<UnifiedMarket> {
453
+ await this.initPromise;
454
+ try {
455
+ const args: any[] = [];
456
+ if (params !== undefined) args.push(params);
457
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMarket`, {
458
+ method: 'POST',
459
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
460
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
461
+ });
462
+ if (!response.ok) {
463
+ const error = await response.json().catch(() => ({}));
464
+ throw new Error(error.error?.message || response.statusText);
465
+ }
375
466
  const json = await response.json();
376
467
  const data = this.handleResponse(json);
377
468
  return convertMarket(data);
378
469
  } catch (error) {
379
- throw new Error(`Failed to fetch market: ${error}`);
470
+ throw new Error(`Failed to fetchMarket: ${error}`);
380
471
  }
381
472
  }
382
473
 
383
- /**
384
- * Fetch a single event by lookup parameters.
385
- * Returns the first matching event or throws if not found.
386
- *
387
- * @param params - Lookup parameters (eventId, slug, query)
388
- * @returns A single unified event
389
- * @throws Error if no event matches
390
- *
391
- * @example
392
- * ```typescript
393
- * const event = await exchange.fetchEvent({ eventId: 'TRUMP25DEC' });
394
- * const event = await exchange.fetchEvent({ slug: 'us-election' });
395
- * ```
396
- */
397
474
  async fetchEvent(params?: any): Promise<UnifiedEvent> {
398
475
  await this.initPromise;
399
476
  try {
400
477
  const args: any[] = [];
401
- if (params) {
402
- args.push(params);
478
+ if (params !== undefined) args.push(params);
479
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchEvent`, {
480
+ method: 'POST',
481
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
482
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
483
+ });
484
+ if (!response.ok) {
485
+ const error = await response.json().catch(() => ({}));
486
+ throw new Error(error.error?.message || response.statusText);
403
487
  }
488
+ const json = await response.json();
489
+ const data = this.handleResponse(json);
490
+ return convertEvent(data);
491
+ } catch (error) {
492
+ throw new Error(`Failed to fetchEvent: ${error}`);
493
+ }
494
+ }
404
495
 
405
- const requestBody: any = {
406
- args,
407
- credentials: this.getCredentials()
408
- };
496
+ async fetchOrderBook(id: string): Promise<OrderBook> {
497
+ await this.initPromise;
498
+ try {
499
+ const args: any[] = [];
500
+ args.push(id);
501
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchOrderBook`, {
502
+ method: 'POST',
503
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
504
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
505
+ });
506
+ if (!response.ok) {
507
+ const error = await response.json().catch(() => ({}));
508
+ throw new Error(error.error?.message || response.statusText);
509
+ }
510
+ const json = await response.json();
511
+ const data = this.handleResponse(json);
512
+ return convertOrderBook(data);
513
+ } catch (error) {
514
+ throw new Error(`Failed to fetchOrderBook: ${error}`);
515
+ }
516
+ }
409
517
 
410
- const url = `${this.config.basePath}/api/${this.exchangeName}/fetchEvent`;
518
+ async cancelOrder(orderId: string): Promise<Order> {
519
+ await this.initPromise;
520
+ try {
521
+ const args: any[] = [];
522
+ args.push(orderId);
523
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/cancelOrder`, {
524
+ method: 'POST',
525
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
526
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
527
+ });
528
+ if (!response.ok) {
529
+ const error = await response.json().catch(() => ({}));
530
+ throw new Error(error.error?.message || response.statusText);
531
+ }
532
+ const json = await response.json();
533
+ const data = this.handleResponse(json);
534
+ return convertOrder(data);
535
+ } catch (error) {
536
+ throw new Error(`Failed to cancelOrder: ${error}`);
537
+ }
538
+ }
411
539
 
412
- const response = await fetch(url, {
540
+ async fetchOrder(orderId: string): Promise<Order> {
541
+ await this.initPromise;
542
+ try {
543
+ const args: any[] = [];
544
+ args.push(orderId);
545
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchOrder`, {
413
546
  method: 'POST',
414
- headers: {
415
- 'Content-Type': 'application/json',
416
- ...this.config.headers
417
- },
418
- body: JSON.stringify(requestBody)
547
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
548
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
419
549
  });
550
+ if (!response.ok) {
551
+ const error = await response.json().catch(() => ({}));
552
+ throw new Error(error.error?.message || response.statusText);
553
+ }
554
+ const json = await response.json();
555
+ const data = this.handleResponse(json);
556
+ return convertOrder(data);
557
+ } catch (error) {
558
+ throw new Error(`Failed to fetchOrder: ${error}`);
559
+ }
560
+ }
420
561
 
562
+ async fetchOpenOrders(marketId?: string): Promise<Order[]> {
563
+ await this.initPromise;
564
+ try {
565
+ const args: any[] = [];
566
+ if (marketId !== undefined) args.push(marketId);
567
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchOpenOrders`, {
568
+ method: 'POST',
569
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
570
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
571
+ });
421
572
  if (!response.ok) {
422
573
  const error = await response.json().catch(() => ({}));
423
574
  throw new Error(error.error?.message || response.statusText);
424
575
  }
576
+ const json = await response.json();
577
+ const data = this.handleResponse(json);
578
+ return data.map(convertOrder);
579
+ } catch (error) {
580
+ throw new Error(`Failed to fetchOpenOrders: ${error}`);
581
+ }
582
+ }
425
583
 
584
+ async fetchMyTrades(params?: any): Promise<UserTrade[]> {
585
+ await this.initPromise;
586
+ try {
587
+ const args: any[] = [];
588
+ if (params !== undefined) args.push(params);
589
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMyTrades`, {
590
+ method: 'POST',
591
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
592
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
593
+ });
594
+ if (!response.ok) {
595
+ const error = await response.json().catch(() => ({}));
596
+ throw new Error(error.error?.message || response.statusText);
597
+ }
426
598
  const json = await response.json();
427
599
  const data = this.handleResponse(json);
428
- return convertEvent(data);
600
+ return data.map(convertUserTrade);
429
601
  } catch (error) {
430
- throw new Error(`Failed to fetch event: ${error}`);
602
+ throw new Error(`Failed to fetchMyTrades: ${error}`);
431
603
  }
432
604
  }
433
605
 
606
+ async fetchClosedOrders(params?: any): Promise<Order[]> {
607
+ await this.initPromise;
608
+ try {
609
+ const args: any[] = [];
610
+ if (params !== undefined) args.push(params);
611
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchClosedOrders`, {
612
+ method: 'POST',
613
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
614
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
615
+ });
616
+ if (!response.ok) {
617
+ const error = await response.json().catch(() => ({}));
618
+ throw new Error(error.error?.message || response.statusText);
619
+ }
620
+ const json = await response.json();
621
+ const data = this.handleResponse(json);
622
+ return data.map(convertOrder);
623
+ } catch (error) {
624
+ throw new Error(`Failed to fetchClosedOrders: ${error}`);
625
+ }
626
+ }
627
+
628
+ async fetchAllOrders(params?: any): Promise<Order[]> {
629
+ await this.initPromise;
630
+ try {
631
+ const args: any[] = [];
632
+ if (params !== undefined) args.push(params);
633
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchAllOrders`, {
634
+ method: 'POST',
635
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
636
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
637
+ });
638
+ if (!response.ok) {
639
+ const error = await response.json().catch(() => ({}));
640
+ throw new Error(error.error?.message || response.statusText);
641
+ }
642
+ const json = await response.json();
643
+ const data = this.handleResponse(json);
644
+ return data.map(convertOrder);
645
+ } catch (error) {
646
+ throw new Error(`Failed to fetchAllOrders: ${error}`);
647
+ }
648
+ }
649
+
650
+ async fetchPositions(): Promise<Position[]> {
651
+ await this.initPromise;
652
+ try {
653
+ const args: any[] = [];
654
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchPositions`, {
655
+ method: 'POST',
656
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
657
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
658
+ });
659
+ if (!response.ok) {
660
+ const error = await response.json().catch(() => ({}));
661
+ throw new Error(error.error?.message || response.statusText);
662
+ }
663
+ const json = await response.json();
664
+ const data = this.handleResponse(json);
665
+ return data.map(convertPosition);
666
+ } catch (error) {
667
+ throw new Error(`Failed to fetchPositions: ${error}`);
668
+ }
669
+ }
670
+
671
+ async fetchBalance(): Promise<Balance[]> {
672
+ await this.initPromise;
673
+ try {
674
+ const args: any[] = [];
675
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchBalance`, {
676
+ method: 'POST',
677
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
678
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
679
+ });
680
+ if (!response.ok) {
681
+ const error = await response.json().catch(() => ({}));
682
+ throw new Error(error.error?.message || response.statusText);
683
+ }
684
+ const json = await response.json();
685
+ const data = this.handleResponse(json);
686
+ return data.map(convertBalance);
687
+ } catch (error) {
688
+ throw new Error(`Failed to fetchBalance: ${error}`);
689
+ }
690
+ }
691
+
692
+ async close(): Promise<void> {
693
+ await this.initPromise;
694
+ try {
695
+ const args: any[] = [];
696
+ const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/close`, {
697
+ method: 'POST',
698
+ headers: { 'Content-Type': 'application/json', ...this.config.headers },
699
+ body: JSON.stringify({ args, credentials: this.getCredentials() }),
700
+ });
701
+ if (!response.ok) {
702
+ const error = await response.json().catch(() => ({}));
703
+ throw new Error(error.error?.message || response.statusText);
704
+ }
705
+ const json = await response.json();
706
+ this.handleResponse(json);
707
+ } catch (error) {
708
+ throw new Error(`Failed to close: ${error}`);
709
+ }
710
+ }
711
+
712
+ // END GENERATED METHODS
713
+
434
714
  /**
435
715
  * Get historical price candles.
436
716
  *
@@ -482,44 +762,11 @@ export abstract class Exchange {
482
762
  }
483
763
  }
484
764
 
485
- /**
486
- * Get current order book for an outcome.
487
- *
488
- * @param outcomeId - Outcome ID
489
- * @returns Current order book
490
- *
491
- * @example
492
- * ```typescript
493
- * const orderBook = await exchange.fetchOrderBook(outcomeId);
494
- * console.log(`Best bid: ${orderBook.bids[0].price}`);
495
- * console.log(`Best ask: ${orderBook.asks[0].price}`);
496
- * ```
497
- */
498
- async fetchOrderBook(outcomeId: string): Promise<OrderBook> {
499
- await this.initPromise;
500
- try {
501
- const requestBody: FetchOrderBookRequest = {
502
- args: [outcomeId],
503
- credentials: this.getCredentials()
504
- };
505
-
506
- const response = await this.api.fetchOrderBook({
507
- exchange: this.exchangeName as any,
508
- fetchOrderBookRequest: requestBody,
509
- });
510
-
511
- const data = this.handleResponse(response);
512
- return convertOrderBook(data);
513
- } catch (error) {
514
- throw new Error(`Failed to fetch order book: ${error}`);
515
- }
516
- }
517
-
518
765
  /**
519
766
  * Get trade history for an outcome.
520
- *
767
+ *
521
768
  * Note: Polymarket requires API key.
522
- *
769
+ *
523
770
  * @param outcomeId - Outcome ID
524
771
  * @param params - History filter parameters
525
772
  * @returns List of trades
@@ -727,141 +974,6 @@ export abstract class Exchange {
727
974
  }
728
975
  }
729
976
 
730
- /**
731
- * Cancel an open order.
732
- *
733
- * @param orderId - Order ID to cancel
734
- * @returns Cancelled order
735
- */
736
- async cancelOrder(orderId: string): Promise<Order> {
737
- await this.initPromise;
738
- try {
739
- const requestBody: CancelOrderRequest = {
740
- args: [orderId],
741
- credentials: this.getCredentials()
742
- };
743
-
744
- const response = await this.api.cancelOrder({
745
- exchange: this.exchangeName as any,
746
- cancelOrderRequest: requestBody,
747
- });
748
-
749
- const data = this.handleResponse(response);
750
- return convertOrder(data);
751
- } catch (error) {
752
- throw new Error(`Failed to cancel order: ${error}`);
753
- }
754
- }
755
-
756
- /**
757
- * Get details of a specific order.
758
- *
759
- * @param orderId - Order ID
760
- * @returns Order details
761
- */
762
- async fetchOrder(orderId: string): Promise<Order> {
763
- await this.initPromise;
764
- try {
765
- const requestBody: CancelOrderRequest = {
766
- args: [orderId],
767
- credentials: this.getCredentials()
768
- };
769
-
770
- const response = await this.api.fetchOrder({
771
- exchange: this.exchangeName as any,
772
- cancelOrderRequest: requestBody,
773
- });
774
-
775
- const data = this.handleResponse(response);
776
- return convertOrder(data);
777
- } catch (error) {
778
- throw new Error(`Failed to fetch order: ${error}`);
779
- }
780
- }
781
-
782
- /**
783
- * Get all open orders, optionally filtered by market.
784
- *
785
- * @param marketId - Optional market ID to filter by
786
- * @returns List of open orders
787
- */
788
- async fetchOpenOrders(marketId?: string): Promise<Order[]> {
789
- await this.initPromise;
790
- try {
791
- const args: any[] = [];
792
- if (marketId) {
793
- args.push(marketId);
794
- }
795
-
796
- const requestBody: FetchOpenOrdersRequest = {
797
- args,
798
- credentials: this.getCredentials()
799
- };
800
-
801
- const response = await this.api.fetchOpenOrders({
802
- exchange: this.exchangeName as any,
803
- fetchOpenOrdersRequest: requestBody,
804
- });
805
-
806
- const data = this.handleResponse(response);
807
- return data.map(convertOrder);
808
- } catch (error) {
809
- throw new Error(`Failed to fetch open orders: ${error}`);
810
- }
811
- }
812
-
813
- // Account Methods
814
-
815
- /**
816
- * Get current positions across all markets.
817
- *
818
- * @returns List of positions
819
- */
820
- async fetchPositions(): Promise<Position[]> {
821
- await this.initPromise;
822
- try {
823
- const requestBody: FetchPositionsRequest = {
824
- args: [],
825
- credentials: this.getCredentials()
826
- };
827
-
828
- const response = await this.api.fetchPositions({
829
- exchange: this.exchangeName as any,
830
- fetchPositionsRequest: requestBody,
831
- });
832
-
833
- const data = this.handleResponse(response);
834
- return data.map(convertPosition);
835
- } catch (error) {
836
- throw new Error(`Failed to fetch positions: ${error}`);
837
- }
838
- }
839
-
840
- /**
841
- * Get account balance.
842
- *
843
- * @returns List of balances (by currency)
844
- */
845
- async fetchBalance(): Promise<Balance[]> {
846
- await this.initPromise;
847
- try {
848
- const requestBody: FetchPositionsRequest = {
849
- args: [],
850
- credentials: this.getCredentials()
851
- };
852
-
853
- const response = await this.api.fetchBalance({
854
- exchange: this.exchangeName as any,
855
- fetchPositionsRequest: requestBody,
856
- });
857
-
858
- const data = this.handleResponse(response);
859
- return data.map(convertBalance);
860
- } catch (error) {
861
- throw new Error(`Failed to fetch balance: ${error}`);
862
- }
863
- }
864
-
865
977
  /**
866
978
  * Calculate the average execution price for a given amount by walking the order book.
867
979
  * Uses the sidecar server for calculation to ensure consistency.
@@ -1296,3 +1408,99 @@ export class Limitless extends Exchange {
1296
1408
  super("limitless", options);
1297
1409
  }
1298
1410
  }
1411
+
1412
+ /**
1413
+ * Kalshi Demo exchange client (paper trading / sandbox environment).
1414
+ *
1415
+ * Uses Kalshi's demo environment — same API as Kalshi but against test accounts.
1416
+ * Credentials are separate from production Kalshi credentials.
1417
+ *
1418
+ * @example
1419
+ * ```typescript
1420
+ * const kalshiDemo = new KalshiDemo({
1421
+ * apiKey: process.env.KALSHI_DEMO_API_KEY,
1422
+ * privateKey: process.env.KALSHI_DEMO_PRIVATE_KEY
1423
+ * });
1424
+ * const balance = await kalshiDemo.fetchBalance();
1425
+ * ```
1426
+ */
1427
+ export class KalshiDemo extends Exchange {
1428
+ constructor(options: ExchangeOptions = {}) {
1429
+ super("kalshi-demo", options);
1430
+ }
1431
+ }
1432
+
1433
+ /**
1434
+ * Myriad exchange client.
1435
+ *
1436
+ * AMM-based prediction market exchange. Requires an API key for trading.
1437
+ * The `privateKey` field is used as the wallet address.
1438
+ *
1439
+ * @example
1440
+ * ```typescript
1441
+ * // Public data (no auth)
1442
+ * const myriad = new Myriad();
1443
+ * const markets = await myriad.fetchMarkets();
1444
+ *
1445
+ * // Trading (requires auth)
1446
+ * const myriad = new Myriad({
1447
+ * apiKey: process.env.MYRIAD_API_KEY,
1448
+ * privateKey: process.env.MYRIAD_WALLET_ADDRESS
1449
+ * });
1450
+ * ```
1451
+ */
1452
+ export class Myriad extends Exchange {
1453
+ constructor(options: ExchangeOptions = {}) {
1454
+ super("myriad", options);
1455
+ }
1456
+ }
1457
+
1458
+ /**
1459
+ * Probable exchange client.
1460
+ *
1461
+ * BSC-based CLOB exchange. Requires all four credential fields for trading.
1462
+ *
1463
+ * @example
1464
+ * ```typescript
1465
+ * // Public data (no auth)
1466
+ * const probable = new Probable();
1467
+ * const markets = await probable.fetchMarkets();
1468
+ *
1469
+ * // Trading (requires auth)
1470
+ * const probable = new Probable({
1471
+ * privateKey: process.env.PROBABLE_PRIVATE_KEY,
1472
+ * apiKey: process.env.PROBABLE_API_KEY,
1473
+ * apiSecret: process.env.PROBABLE_API_SECRET,
1474
+ * passphrase: process.env.PROBABLE_PASSPHRASE
1475
+ * });
1476
+ * ```
1477
+ */
1478
+ export class Probable extends Exchange {
1479
+ constructor(options: ExchangeOptions = {}) {
1480
+ super("probable", options);
1481
+ }
1482
+ }
1483
+
1484
+ /**
1485
+ * Baozi exchange client.
1486
+ *
1487
+ * Solana-based on-chain pari-mutuel betting exchange.
1488
+ * Requires a Solana private key for trading.
1489
+ *
1490
+ * @example
1491
+ * ```typescript
1492
+ * // Public data (no auth)
1493
+ * const baozi = new Baozi();
1494
+ * const markets = await baozi.fetchMarkets();
1495
+ *
1496
+ * // Trading (requires auth)
1497
+ * const baozi = new Baozi({
1498
+ * privateKey: process.env.BAOZI_PRIVATE_KEY
1499
+ * });
1500
+ * ```
1501
+ */
1502
+ export class Baozi extends Exchange {
1503
+ constructor(options: ExchangeOptions = {}) {
1504
+ super("baozi", options);
1505
+ }
1506
+ }