pmxtjs 2.51.1 → 2.51.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 (144) hide show
  1. package/README.md +14 -5
  2. package/dist/esm/generated/src/apis/DefaultApi.d.ts +6 -0
  3. package/dist/esm/generated/src/apis/DefaultApi.js +6 -0
  4. package/dist/esm/generated/src/models/CreateOrderParams.d.ts +20 -0
  5. package/dist/esm/generated/src/models/CreateOrderParams.js +11 -0
  6. package/dist/esm/index.d.ts +3 -2
  7. package/dist/esm/index.js +3 -2
  8. package/dist/esm/pmxt/client.d.ts +61 -12
  9. package/dist/esm/pmxt/client.js +126 -21
  10. package/dist/esm/pmxt/escrow.js +109 -10
  11. package/dist/esm/pmxt/hosted-typed-data.d.ts +1 -1
  12. package/dist/esm/pmxt/hosted-typed-data.js +14 -0
  13. package/dist/esm/pmxt/models.d.ts +17 -0
  14. package/dist/esm/pmxt/server-manager.js +5 -3
  15. package/dist/generated/src/apis/DefaultApi.d.ts +6 -0
  16. package/dist/generated/src/apis/DefaultApi.js +6 -0
  17. package/dist/generated/src/models/CreateOrderParams.d.ts +20 -0
  18. package/dist/generated/src/models/CreateOrderParams.js +12 -1
  19. package/dist/index.d.ts +3 -2
  20. package/dist/index.js +3 -1
  21. package/dist/pmxt/client.d.ts +61 -12
  22. package/dist/pmxt/client.js +126 -20
  23. package/dist/pmxt/escrow.js +109 -10
  24. package/dist/pmxt/hosted-typed-data.d.ts +1 -1
  25. package/dist/pmxt/hosted-typed-data.js +14 -0
  26. package/dist/pmxt/models.d.ts +17 -0
  27. package/dist/pmxt/server-manager.js +5 -3
  28. package/generated/docs/ArbitrageOpportunity.md +0 -29
  29. package/generated/docs/Balance.md +0 -25
  30. package/generated/docs/BaseRequest.md +0 -21
  31. package/generated/docs/BaseResponse.md +0 -22
  32. package/generated/docs/BuildOrder200Response.md +0 -23
  33. package/generated/docs/BuildOrderRequest.md +0 -22
  34. package/generated/docs/BuiltOrder.md +0 -26
  35. package/generated/docs/BuiltOrderTx.md +0 -24
  36. package/generated/docs/CancelOrderRequest.md +0 -22
  37. package/generated/docs/CloseRequest.md +0 -22
  38. package/generated/docs/CompareMarketPrices200Response.md +0 -23
  39. package/generated/docs/CompareMarketPricesRequest.md +0 -22
  40. package/generated/docs/CreateOrder200Response.md +0 -23
  41. package/generated/docs/CreateOrderParams.md +2 -30
  42. package/generated/docs/CreateOrderRequest.md +0 -22
  43. package/generated/docs/DataFeedsApi.md +0 -329
  44. package/generated/docs/DefaultApi.md +3 -1438
  45. package/generated/docs/ErrorDetail.md +0 -25
  46. package/generated/docs/ErrorResponse.md +0 -22
  47. package/generated/docs/EventFetchParams.md +0 -35
  48. package/generated/docs/EventFilterCriteria.md +0 -26
  49. package/generated/docs/EventFilterCriteriaTotalVolume.md +0 -22
  50. package/generated/docs/EventMatchResult.md +0 -22
  51. package/generated/docs/ExchangeCredentials.md +0 -29
  52. package/generated/docs/ExchangeCredentialsSignatureType.md +0 -20
  53. package/generated/docs/ExchangeOptions.md +0 -27
  54. package/generated/docs/ExecutionPriceResult.md +0 -23
  55. package/generated/docs/FeedFetchHistoricalPrices200Response.md +0 -22
  56. package/generated/docs/FeedFetchOHLCV200Response.md +0 -22
  57. package/generated/docs/FeedFetchOracleHistory200Response.md +0 -22
  58. package/generated/docs/FeedFetchOracleRound200Response.md +0 -22
  59. package/generated/docs/FeedFetchOrderBook200Response.md +0 -22
  60. package/generated/docs/FeedFetchOrderBook200ResponseData.md +0 -25
  61. package/generated/docs/FeedFetchTicker200Response.md +0 -22
  62. package/generated/docs/FeedFetchTickers200Response.md +0 -22
  63. package/generated/docs/FeedList200Response.md +0 -22
  64. package/generated/docs/FeedLoadMarkets200Response.md +0 -22
  65. package/generated/docs/FeedMarket.md +0 -27
  66. package/generated/docs/FeedOracleRound.md +0 -28
  67. package/generated/docs/FeedTicker.md +0 -42
  68. package/generated/docs/FetchArbitrage200Response.md +0 -23
  69. package/generated/docs/FetchArbitrageParams.md +0 -24
  70. package/generated/docs/FetchBalance200Response.md +0 -23
  71. package/generated/docs/FetchEvent200Response.md +0 -23
  72. package/generated/docs/FetchEventMatches200Response.md +0 -23
  73. package/generated/docs/FetchEventMatchesParams.md +0 -29
  74. package/generated/docs/FetchEvents200Response.md +0 -23
  75. package/generated/docs/FetchEventsPaginated200Response.md +0 -23
  76. package/generated/docs/FetchMarket200Response.md +0 -23
  77. package/generated/docs/FetchMarketMatches200Response.md +0 -23
  78. package/generated/docs/FetchMarketMatchesParams.md +0 -32
  79. package/generated/docs/FetchMarkets200Response.md +0 -23
  80. package/generated/docs/FetchMarketsPaginated200Response.md +0 -23
  81. package/generated/docs/FetchMatchedMarkets200Response.md +0 -23
  82. package/generated/docs/FetchMatchedMarketsParams.md +0 -24
  83. package/generated/docs/FetchMyTrades200Response.md +0 -23
  84. package/generated/docs/FetchOHLCV200Response.md +0 -23
  85. package/generated/docs/FetchOpenOrders200Response.md +0 -23
  86. package/generated/docs/FetchOrderBook200Response.md +0 -23
  87. package/generated/docs/FetchOrderBookParams.md +0 -24
  88. package/generated/docs/FetchOrderBooks200Response.md +0 -23
  89. package/generated/docs/FetchOrderBooksRequest.md +0 -22
  90. package/generated/docs/FetchPositions200Response.md +0 -23
  91. package/generated/docs/FetchSeries200Response.md +0 -23
  92. package/generated/docs/FetchTrades200Response.md +0 -23
  93. package/generated/docs/FilterEventsRequest.md +0 -22
  94. package/generated/docs/FilterEventsRequestArgsInner.md +0 -26
  95. package/generated/docs/FilterMarketsRequest.md +0 -22
  96. package/generated/docs/FilterMarketsRequestArgsInner.md +0 -31
  97. package/generated/docs/GetExecutionPrice200Response.md +0 -23
  98. package/generated/docs/GetExecutionPriceDetailed200Response.md +0 -23
  99. package/generated/docs/GetExecutionPriceDetailedRequest.md +0 -22
  100. package/generated/docs/GetExecutionPriceRequest.md +0 -22
  101. package/generated/docs/GetExecutionPriceRequestArgsInner.md +0 -27
  102. package/generated/docs/HealthCheck200Response.md +0 -22
  103. package/generated/docs/HistoryFilterParams.md +0 -24
  104. package/generated/docs/LoadMarkets200Response.md +0 -23
  105. package/generated/docs/LoadMarketsRequest.md +0 -22
  106. package/generated/docs/MarketFilterCriteria.md +0 -31
  107. package/generated/docs/MarketFilterCriteriaLiquidity.md +0 -22
  108. package/generated/docs/MarketFilterCriteriaOpenInterest.md +0 -22
  109. package/generated/docs/MarketFilterCriteriaPrice.md +0 -23
  110. package/generated/docs/MarketFilterCriteriaResolutionDate.md +0 -22
  111. package/generated/docs/MarketFilterCriteriaVolume.md +0 -22
  112. package/generated/docs/MarketFilterCriteriaVolume24h.md +0 -22
  113. package/generated/docs/MarketFilterParams.md +0 -34
  114. package/generated/docs/MarketOutcome.md +0 -26
  115. package/generated/docs/MatchResult.md +0 -27
  116. package/generated/docs/MatchedMarketPair.md +0 -30
  117. package/generated/docs/MyTradesParams.md +0 -26
  118. package/generated/docs/OHLCVParams.md +0 -24
  119. package/generated/docs/Order.md +0 -37
  120. package/generated/docs/OrderBook.md +0 -27
  121. package/generated/docs/OrderHistoryParams.md +0 -25
  122. package/generated/docs/OrderLevel.md +0 -23
  123. package/generated/docs/PaginatedEventsResult.md +0 -23
  124. package/generated/docs/PaginatedMarketsResult.md +0 -23
  125. package/generated/docs/Position.md +0 -32
  126. package/generated/docs/PriceCandle.md +0 -26
  127. package/generated/docs/PriceComparison.md +0 -27
  128. package/generated/docs/SubmitOrderRequest.md +0 -22
  129. package/generated/docs/Trade.md +0 -26
  130. package/generated/docs/TradesParams.md +0 -23
  131. package/generated/docs/UnifiedEvent.md +0 -33
  132. package/generated/docs/UnifiedMarket.md +0 -44
  133. package/generated/docs/UnifiedSeries.md +0 -31
  134. package/generated/docs/UserTrade.md +0 -32
  135. package/generated/package.json +1 -1
  136. package/generated/src/apis/DefaultApi.ts +6 -0
  137. package/generated/src/models/CreateOrderParams.ts +25 -0
  138. package/index.ts +3 -2
  139. package/package.json +2 -2
  140. package/pmxt/client.ts +153 -28
  141. package/pmxt/escrow.ts +131 -11
  142. package/pmxt/hosted-typed-data.ts +17 -1
  143. package/pmxt/models.ts +20 -0
  144. package/pmxt/server-manager.ts +5 -3
@@ -9,6 +9,80 @@
9
9
  * Mirrors `sdks/python/pmxt/escrow.py`.
10
10
  */
11
11
  import { _tradingRequest, formatRoutePath, HOSTED_METHOD_ROUTES, resolveWalletAddress, } from "./hosted-routing.js";
12
+ import { ValidationError } from "./errors.js";
13
+ const APPROVAL_TOKENS = new Set(["usdc", "ctf"]);
14
+ const WITHDRAW_ACTIONS = new Set(["request", "claim", "cancel"]);
15
+ const USDC_SCALE = 1000000n;
16
+ function isDecimalTokenId(token) {
17
+ return /^[0-9]+$/.test(token);
18
+ }
19
+ function normalizeApprovalToken(token) {
20
+ if (typeof token !== "string") {
21
+ throw new ValidationError("token must be 'usdc', 'ctf', or a decimal CTF token_id string", "token");
22
+ }
23
+ const candidate = token.trim();
24
+ const normalized = candidate.toLowerCase();
25
+ if (APPROVAL_TOKENS.has(normalized)) {
26
+ return normalized;
27
+ }
28
+ if (isDecimalTokenId(candidate)) {
29
+ return candidate;
30
+ }
31
+ throw new ValidationError("token must be 'usdc', 'ctf', or a decimal CTF token_id string", "token");
32
+ }
33
+ function normalizeAmountWei(amountWei) {
34
+ if (amountWei === undefined) {
35
+ return undefined;
36
+ }
37
+ if (typeof amountWei !== "bigint") {
38
+ throw new ValidationError("amount_wei must be a non-negative integer", "amount_wei");
39
+ }
40
+ if (amountWei < 0n) {
41
+ throw new ValidationError("amount_wei must be non-negative", "amount_wei");
42
+ }
43
+ return amountWei.toString();
44
+ }
45
+ function validateUsdcDecimal(value, field) {
46
+ const match = /^([0-9]+)(?:\.([0-9]+))?$/.exec(value);
47
+ if (!match) {
48
+ throw new ValidationError(`${field} must be a finite positive number`, field);
49
+ }
50
+ const fractional = match[2] ?? "";
51
+ if (fractional.length > 6) {
52
+ throw new ValidationError(`${field} precision exceeds 6 decimals; max precision for USDC is 0.000001`, field);
53
+ }
54
+ const scaled = BigInt(match[1]) * USDC_SCALE + BigInt(fractional.padEnd(6, "0"));
55
+ if (scaled <= 0n) {
56
+ throw new ValidationError(`${field} must be positive`, field);
57
+ }
58
+ }
59
+ function normalizeUsdcAmount(value, field = "amount") {
60
+ if (typeof value === "bigint") {
61
+ if (value <= 0n) {
62
+ throw new ValidationError(`${field} must be positive`, field);
63
+ }
64
+ return value.toString();
65
+ }
66
+ if (typeof value === "number") {
67
+ if (!Number.isFinite(value)) {
68
+ throw new ValidationError(`${field} must be a finite positive number`, field);
69
+ }
70
+ validateUsdcDecimal(String(value), field);
71
+ return value;
72
+ }
73
+ if (typeof value === "string") {
74
+ const trimmed = value.trim();
75
+ validateUsdcDecimal(trimmed, field);
76
+ return trimmed;
77
+ }
78
+ throw new ValidationError(`${field} must be a finite positive number`, field);
79
+ }
80
+ function normalizeWithdrawAction(action) {
81
+ if (typeof action === "string" && WITHDRAW_ACTIONS.has(action)) {
82
+ return action;
83
+ }
84
+ throw new ValidationError("action must be 'request', 'claim', or 'cancel'", "action");
85
+ }
12
86
  export class Escrow {
13
87
  client;
14
88
  constructor(client) {
@@ -19,13 +93,16 @@ export class Escrow {
19
93
  * `amountWei` is omitted, the server returns an unlimited approval.
20
94
  */
21
95
  async approveTx(token, amountWei) {
96
+ const address = resolveWalletAddress(this.client);
97
+ const approvalAmount = normalizeAmountWei(amountWei);
22
98
  const route = HOSTED_METHOD_ROUTES.get("escrowApproveTx");
23
99
  return _tradingRequest(this.client, {
24
100
  method: route.method,
25
101
  path: route.path,
26
102
  body: {
27
- token,
28
- amount_wei: amountWei === undefined ? null : amountWei.toString(),
103
+ token: normalizeApprovalToken(token),
104
+ user_address: address,
105
+ ...(approvalAmount === undefined ? {} : { amount_wei: approvalAmount }),
29
106
  },
30
107
  });
31
108
  }
@@ -34,12 +111,15 @@ export class Escrow {
34
111
  * grid). Accepts number, decimal string, or BigInt in micro-units.
35
112
  */
36
113
  async depositTx(amount) {
114
+ const address = resolveWalletAddress(this.client);
37
115
  const route = HOSTED_METHOD_ROUTES.get("escrowDepositTx");
38
116
  return _tradingRequest(this.client, {
39
117
  method: route.method,
40
118
  path: route.path,
41
119
  body: {
42
- amount: typeof amount === "bigint" ? amount.toString() : amount,
120
+ token: "usdc",
121
+ amount: normalizeUsdcAmount(amount),
122
+ user_address: address,
43
123
  },
44
124
  });
45
125
  }
@@ -49,16 +129,31 @@ export class Escrow {
49
129
  * the timelock, `cancel` aborts a pending request.
50
130
  */
51
131
  async withdrawTx(action, amount) {
132
+ const normalizedAction = normalizeWithdrawAction(action);
133
+ const address = resolveWalletAddress(this.client);
52
134
  const route = HOSTED_METHOD_ROUTES.get("escrowWithdrawTx");
53
- const normalizedAmount = amount === undefined
54
- ? null
55
- : typeof amount === "bigint"
56
- ? amount.toString()
57
- : amount;
135
+ if (normalizedAction === "request") {
136
+ if (amount === undefined) {
137
+ throw new ValidationError("amount is required when action='request'", "amount");
138
+ }
139
+ return _tradingRequest(this.client, {
140
+ method: route.method,
141
+ path: route.path,
142
+ body: {
143
+ action: normalizedAction,
144
+ token: "usdc",
145
+ amount: normalizeUsdcAmount(amount),
146
+ user_address: address,
147
+ },
148
+ });
149
+ }
150
+ if (amount !== undefined) {
151
+ throw new ValidationError(`amount must be omitted when action='${normalizedAction}'`, "amount");
152
+ }
58
153
  return _tradingRequest(this.client, {
59
154
  method: route.method,
60
155
  path: route.path,
61
- body: { action, amount: normalizedAmount },
156
+ body: { action: normalizedAction, token: "usdc", user_address: address },
62
157
  });
63
158
  }
64
159
  /**
@@ -67,12 +162,16 @@ export class Escrow {
67
162
  */
68
163
  async withdrawals(opts = {}) {
69
164
  const address = resolveWalletAddress(this.client, opts.address);
165
+ const include = (opts.include ?? "pending,events").trim();
166
+ if (!include) {
167
+ throw new ValidationError("include must not be empty", "include");
168
+ }
70
169
  const route = HOSTED_METHOD_ROUTES.get("escrowWithdrawals");
71
170
  const path = formatRoutePath(route, { address });
72
171
  return _tradingRequest(this.client, {
73
172
  method: route.method,
74
173
  path,
75
- params: { include: opts.include ?? "pending,events" },
174
+ params: { include },
76
175
  });
77
176
  }
78
177
  }
@@ -9,7 +9,7 @@
9
9
  * Layer 3 uses the optional `ethers` peer dependency for typed-data verification.
10
10
  */
11
11
  import { TypedData } from "./signers.js";
12
- export type HostedRoute = "polymarket_buy" | "polymarket_sell" | "limitless_buy" | "limitless_sell_polygon" | "limitless_sell_base_pull" | "opinion_buy" | "opinion_sell_polygon" | "opinion_sell_bsc_pull" | "cancel_polymarket" | "cancel_opinion_polygon" | "cancel_opinion_bsc_pull";
12
+ export type HostedRoute = "polymarket_buy" | "polymarket_sell" | "limitless_buy" | "limitless_sell_polygon" | "limitless_sell_base_pull" | "opinion_buy" | "opinion_sell_polygon" | "opinion_sell_bsc_pull" | "cancel_polymarket" | "cancel_opinion_polygon" | "cancel_opinion_bsc_pull" | "cancel_limitless_polygon" | "cancel_limitless_base_pull";
13
13
  export declare const SECP256K1_HALF_N = 57896044618658097711785492504343953926418782139537452191302581570759080747168n;
14
14
  /**
15
15
  * Validate the structural shape of a typed-data payload before signing.
@@ -172,6 +172,20 @@ const SCHEMAS = {
172
172
  messageKeys: messageKeysFromFields(CANCEL_PULL_FIELDS),
173
173
  walletField: "user",
174
174
  },
175
+ cancel_limitless_polygon: {
176
+ primaryType: "CancelOrder",
177
+ domain: PREFUNDED_DOMAIN,
178
+ fields: CANCEL_ORDER_FIELDS,
179
+ messageKeys: messageKeysFromFields(CANCEL_ORDER_FIELDS),
180
+ walletField: "user",
181
+ },
182
+ cancel_limitless_base_pull: {
183
+ primaryType: "CancelPull",
184
+ domain: LIMITLESS_VENUE_DOMAIN,
185
+ fields: CANCEL_PULL_FIELDS,
186
+ messageKeys: messageKeysFromFields(CANCEL_PULL_FIELDS),
187
+ walletField: "user",
188
+ },
175
189
  };
176
190
  // secp256k1 group order / 2, for canonical low-s check.
177
191
  export const SECP256K1_HALF_N = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0n;
@@ -400,6 +400,10 @@ export interface CreateOrderParams {
400
400
  amount: number;
401
401
  /** Limit price (required for limit orders, 0.0-1.0) */
402
402
  price?: number;
403
+ /** Hosted mode: unit that amount is denominated in. Market buys use usdc; market sells and limit orders use shares. */
404
+ denom?: "usdc" | "shares";
405
+ /** Hosted mode: maximum slippage percentage for market orders. */
406
+ slippage_pct?: number;
403
407
  /** Optional fee rate (e.g., 1000 for 0.1%) */
404
408
  fee?: number;
405
409
  /** Optional override for Limitless/Polymarket */
@@ -409,6 +413,19 @@ export interface CreateOrderParams {
409
413
  /** Limitless delegated signing: profile ID to trade on behalf of */
410
414
  onBehalfOf?: number;
411
415
  }
416
+ /**
417
+ * Public order input accepted by createOrder/buildOrder.
418
+ *
419
+ * Callers can either pass explicit marketId/outcomeId fields, or pass an
420
+ * outcome object returned by fetchMarkets and let the SDK infer those ids.
421
+ */
422
+ export type CreateOrderInput = (CreateOrderParams & {
423
+ outcome?: never;
424
+ }) | (Omit<CreateOrderParams, 'marketId' | 'outcomeId'> & {
425
+ outcome: MarketOutcome;
426
+ marketId?: never;
427
+ outcomeId?: never;
428
+ });
412
429
  /** Alias matching the core MarketFetchParams name. */
413
430
  export type MarketFetchParams = MarketFilterParams;
414
431
  /**
@@ -81,12 +81,14 @@ export class ServerManager {
81
81
  * Check if the server is running.
82
82
  */
83
83
  async isServerRunning() {
84
- // Read lock file to get current port
85
- const port = this.getRunningPort();
84
+ const info = this.getServerInfo();
85
+ if (!info?.port) {
86
+ return false;
87
+ }
86
88
  try {
87
89
  // Use native fetch to check health on the actual running port
88
90
  // This avoids issues where this.api is configured with the wrong port
89
- const response = await fetch(`http://localhost:${port}/health`, {
91
+ const response = await fetch(`http://localhost:${info.port}/health`, {
90
92
  signal: AbortSignal.timeout(5_000),
91
93
  });
92
94
  if (response.ok) {
@@ -342,10 +342,12 @@ export declare class DefaultApi extends runtime.BaseAPI {
342
342
  */
343
343
  createOrder(requestParameters: CreateOrderOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CreateOrder200Response>;
344
344
  /**
345
+ * Fetch authenticated order history across open and closed orders.
345
346
  * Fetch All Orders
346
347
  */
347
348
  fetchAllOrdersRaw(requestParameters: FetchAllOrdersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<FetchOpenOrders200Response>>;
348
349
  /**
350
+ * Fetch authenticated order history across open and closed orders.
349
351
  * Fetch All Orders
350
352
  */
351
353
  fetchAllOrders(requestParameters: FetchAllOrdersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FetchOpenOrders200Response>;
@@ -370,10 +372,12 @@ export declare class DefaultApi extends runtime.BaseAPI {
370
372
  */
371
373
  fetchBalance(requestParameters: FetchBalanceRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FetchBalance200Response>;
372
374
  /**
375
+ * Fetch authenticated closed orders.
373
376
  * Fetch Closed Orders
374
377
  */
375
378
  fetchClosedOrdersRaw(requestParameters: FetchClosedOrdersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<FetchOpenOrders200Response>>;
376
379
  /**
380
+ * Fetch authenticated closed orders.
377
381
  * Fetch Closed Orders
378
382
  */
379
383
  fetchClosedOrders(requestParameters: FetchClosedOrdersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FetchOpenOrders200Response>;
@@ -488,10 +492,12 @@ export declare class DefaultApi extends runtime.BaseAPI {
488
492
  */
489
493
  fetchMatchedPrices(requestParameters: FetchMatchedPricesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FetchMatchedMarkets200Response>;
490
494
  /**
495
+ * Fetch authenticated user trade history.
491
496
  * Fetch My Trades
492
497
  */
493
498
  fetchMyTradesRaw(requestParameters: FetchMyTradesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<FetchMyTrades200Response>>;
494
499
  /**
500
+ * Fetch authenticated user trade history.
495
501
  * Fetch My Trades
496
502
  */
497
503
  fetchMyTrades(requestParameters: FetchMyTradesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FetchMyTrades200Response>;
@@ -205,6 +205,7 @@ class DefaultApi extends runtime.BaseAPI {
205
205
  return await response.value();
206
206
  }
207
207
  /**
208
+ * Fetch authenticated order history across open and closed orders.
208
209
  * Fetch All Orders
209
210
  */
210
211
  async fetchAllOrdersRaw(requestParameters, initOverrides) {
@@ -239,6 +240,7 @@ class DefaultApi extends runtime.BaseAPI {
239
240
  return new runtime.JSONApiResponse(response, (jsonValue) => (0, index_1.FetchOpenOrders200ResponseFromJSON)(jsonValue));
240
241
  }
241
242
  /**
243
+ * Fetch authenticated order history across open and closed orders.
242
244
  * Fetch All Orders
243
245
  */
244
246
  async fetchAllOrders(requestParameters, initOverrides) {
@@ -317,6 +319,7 @@ class DefaultApi extends runtime.BaseAPI {
317
319
  return await response.value();
318
320
  }
319
321
  /**
322
+ * Fetch authenticated closed orders.
320
323
  * Fetch Closed Orders
321
324
  */
322
325
  async fetchClosedOrdersRaw(requestParameters, initOverrides) {
@@ -351,6 +354,7 @@ class DefaultApi extends runtime.BaseAPI {
351
354
  return new runtime.JSONApiResponse(response, (jsonValue) => (0, index_1.FetchOpenOrders200ResponseFromJSON)(jsonValue));
352
355
  }
353
356
  /**
357
+ * Fetch authenticated closed orders.
354
358
  * Fetch Closed Orders
355
359
  */
356
360
  async fetchClosedOrders(requestParameters, initOverrides) {
@@ -981,6 +985,7 @@ class DefaultApi extends runtime.BaseAPI {
981
985
  return await response.value();
982
986
  }
983
987
  /**
988
+ * Fetch authenticated user trade history.
984
989
  * Fetch My Trades
985
990
  */
986
991
  async fetchMyTradesRaw(requestParameters, initOverrides) {
@@ -1018,6 +1023,7 @@ class DefaultApi extends runtime.BaseAPI {
1018
1023
  return new runtime.JSONApiResponse(response, (jsonValue) => (0, index_1.FetchMyTrades200ResponseFromJSON)(jsonValue));
1019
1024
  }
1020
1025
  /**
1026
+ * Fetch authenticated user trade history.
1021
1027
  * Fetch My Trades
1022
1028
  */
1023
1029
  async fetchMyTrades(requestParameters, initOverrides) {
@@ -51,6 +51,18 @@ export interface CreateOrderParams {
51
51
  * @memberof CreateOrderParams
52
52
  */
53
53
  price?: number;
54
+ /**
55
+ * Hosted mode: amount unit.
56
+ * @type {string}
57
+ * @memberof CreateOrderParams
58
+ */
59
+ denom?: CreateOrderParamsDenomEnum;
60
+ /**
61
+ * Hosted mode: maximum market-order slippage percentage.
62
+ * @type {number}
63
+ * @memberof CreateOrderParams
64
+ */
65
+ slippagePct?: number;
54
66
  /**
55
67
  * Optional fee rate (e.g., 1000 for 0.1%)
56
68
  * @type {number}
@@ -92,6 +104,14 @@ export declare const CreateOrderParamsTypeEnum: {
92
104
  readonly Limit: "limit";
93
105
  };
94
106
  export type CreateOrderParamsTypeEnum = typeof CreateOrderParamsTypeEnum[keyof typeof CreateOrderParamsTypeEnum];
107
+ /**
108
+ * @export
109
+ */
110
+ export declare const CreateOrderParamsDenomEnum: {
111
+ readonly Usdc: "usdc";
112
+ readonly Shares: "shares";
113
+ };
114
+ export type CreateOrderParamsDenomEnum = typeof CreateOrderParamsDenomEnum[keyof typeof CreateOrderParamsDenomEnum];
95
115
  /**
96
116
  * Check if a given object implements the CreateOrderParams interface.
97
117
  */
@@ -13,7 +13,7 @@
13
13
  * Do not edit the class manually.
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.CreateOrderParamsTypeEnum = exports.CreateOrderParamsSideEnum = void 0;
16
+ exports.CreateOrderParamsDenomEnum = exports.CreateOrderParamsTypeEnum = exports.CreateOrderParamsSideEnum = void 0;
17
17
  exports.instanceOfCreateOrderParams = instanceOfCreateOrderParams;
18
18
  exports.CreateOrderParamsFromJSON = CreateOrderParamsFromJSON;
19
19
  exports.CreateOrderParamsFromJSONTyped = CreateOrderParamsFromJSONTyped;
@@ -33,6 +33,13 @@ exports.CreateOrderParamsTypeEnum = {
33
33
  Market: 'market',
34
34
  Limit: 'limit'
35
35
  };
36
+ /**
37
+ * @export
38
+ */
39
+ exports.CreateOrderParamsDenomEnum = {
40
+ Usdc: 'usdc',
41
+ Shares: 'shares'
42
+ };
36
43
  /**
37
44
  * Check if a given object implements the CreateOrderParams interface.
38
45
  */
@@ -63,6 +70,8 @@ function CreateOrderParamsFromJSONTyped(json, ignoreDiscriminator) {
63
70
  'type': json['type'],
64
71
  'amount': json['amount'],
65
72
  'price': json['price'] == null ? undefined : json['price'],
73
+ 'denom': json['denom'] == null ? undefined : json['denom'],
74
+ 'slippagePct': json['slippage_pct'] == null ? undefined : json['slippage_pct'],
66
75
  'fee': json['fee'] == null ? undefined : json['fee'],
67
76
  'tickSize': json['tickSize'] == null ? undefined : json['tickSize'],
68
77
  'negRisk': json['negRisk'] == null ? undefined : json['negRisk'],
@@ -83,6 +92,8 @@ function CreateOrderParamsToJSONTyped(value, ignoreDiscriminator = false) {
83
92
  'type': value['type'],
84
93
  'amount': value['amount'],
85
94
  'price': value['price'],
95
+ 'denom': value['denom'],
96
+ 'slippage_pct': value['slippagePct'],
86
97
  'fee': value['fee'],
87
98
  'tickSize': value['tickSize'],
88
99
  'negRisk': value['negRisk'],
package/dist/index.d.ts CHANGED
@@ -17,13 +17,13 @@
17
17
  * console.log(markets[0].title);
18
18
  * ```
19
19
  */
20
- import { Exchange, Polymarket, Kalshi, KalshiDemo, Limitless, Myriad, Probable, Baozi, Opinion, Metaculus, Smarkets, PolymarketUS, GeminiTitan, Hyperliquid, SuiBets, Rain, Mock } from "./pmxt/client.js";
20
+ import { Exchange, Polymarket, Kalshi, KalshiDemo, Limitless, Myriad, Probable, Baozi, Opinion, Metaculus, Smarkets, PolymarketUS, GeminiTitan, Hyperliquid, SuiBets, Rain, Hunch, Mock } from "./pmxt/client.js";
21
21
  import { Router } from "./pmxt/router.js";
22
22
  import { ServerManager } from "./pmxt/server-manager.js";
23
23
  import { FeedClient } from "./pmxt/feed-client.js";
24
24
  import * as models from "./pmxt/models.js";
25
25
  import * as errors from "./pmxt/errors.js";
26
- export { Exchange, Polymarket, Kalshi, KalshiDemo, Limitless, Myriad, Probable, Baozi, Opinion, Metaculus, Smarkets, PolymarketUS, GeminiTitan, Hyperliquid, SuiBets, Suibets, Rain, Mock, PolymarketOptions } from "./pmxt/client.js";
26
+ export { Exchange, Polymarket, Kalshi, KalshiDemo, Limitless, Myriad, Probable, Baozi, Opinion, Metaculus, Smarkets, PolymarketUS, GeminiTitan, Hyperliquid, SuiBets, Suibets, Rain, Hunch, Mock, PolymarketOptions } from "./pmxt/client.js";
27
27
  export { FeedClient } from "./pmxt/feed-client.js";
28
28
  export type { Ticker, Tickers, OHLCV, Market as FeedMarket, OracleRound, FeedClientOptions } from "./pmxt/feed-client.js";
29
29
  export { Router } from "./pmxt/router.js";
@@ -97,6 +97,7 @@ declare const pmxt: {
97
97
  SuiBets: typeof SuiBets;
98
98
  Suibets: typeof SuiBets;
99
99
  Rain: typeof Rain;
100
+ Hunch: typeof Hunch;
100
101
  Mock: typeof Mock;
101
102
  Router: typeof Router;
102
103
  ServerManager: typeof ServerManager;
package/dist/index.js CHANGED
@@ -55,7 +55,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
55
55
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
56
56
  };
57
57
  Object.defineProperty(exports, "__esModule", { value: true });
58
- exports.server = exports.MarketList = exports.LIMITLESS_VENUE_ESCROW_ADDRESSES = exports.VENUE_ESCROW_ADDRESSES = exports.PREFUNDED_ESCROW_ADDRESSES = exports.resolvePmxtBaseUrl = exports.ENV = exports.LOCAL_URL = exports.HOSTED_URL = exports.ServerManager = exports.Router = exports.FeedClient = exports.Mock = exports.Rain = exports.Suibets = exports.SuiBets = exports.Hyperliquid = exports.GeminiTitan = exports.PolymarketUS = exports.Smarkets = exports.Metaculus = exports.Opinion = exports.Baozi = exports.Probable = exports.Myriad = exports.Limitless = exports.KalshiDemo = exports.Kalshi = exports.Polymarket = exports.Exchange = void 0;
58
+ exports.server = exports.MarketList = exports.LIMITLESS_VENUE_ESCROW_ADDRESSES = exports.VENUE_ESCROW_ADDRESSES = exports.PREFUNDED_ESCROW_ADDRESSES = exports.resolvePmxtBaseUrl = exports.ENV = exports.LOCAL_URL = exports.HOSTED_URL = exports.ServerManager = exports.Router = exports.FeedClient = exports.Mock = exports.Hunch = exports.Rain = exports.Suibets = exports.SuiBets = exports.Hyperliquid = exports.GeminiTitan = exports.PolymarketUS = exports.Smarkets = exports.Metaculus = exports.Opinion = exports.Baozi = exports.Probable = exports.Myriad = exports.Limitless = exports.KalshiDemo = exports.Kalshi = exports.Polymarket = exports.Exchange = void 0;
59
59
  const client_js_1 = require("./pmxt/client.js");
60
60
  const router_js_1 = require("./pmxt/router.js");
61
61
  const server_manager_js_1 = require("./pmxt/server-manager.js");
@@ -80,6 +80,7 @@ Object.defineProperty(exports, "Hyperliquid", { enumerable: true, get: function
80
80
  Object.defineProperty(exports, "SuiBets", { enumerable: true, get: function () { return client_js_2.SuiBets; } });
81
81
  Object.defineProperty(exports, "Suibets", { enumerable: true, get: function () { return client_js_2.Suibets; } });
82
82
  Object.defineProperty(exports, "Rain", { enumerable: true, get: function () { return client_js_2.Rain; } });
83
+ Object.defineProperty(exports, "Hunch", { enumerable: true, get: function () { return client_js_2.Hunch; } });
83
84
  Object.defineProperty(exports, "Mock", { enumerable: true, get: function () { return client_js_2.Mock; } });
84
85
  var feed_client_js_2 = require("./pmxt/feed-client.js");
85
86
  Object.defineProperty(exports, "FeedClient", { enumerable: true, get: function () { return feed_client_js_2.FeedClient; } });
@@ -146,6 +147,7 @@ const pmxt = {
146
147
  SuiBets: client_js_1.SuiBets,
147
148
  Suibets: client_js_1.Suibets,
148
149
  Rain: client_js_1.Rain,
150
+ Hunch: client_js_1.Hunch,
149
151
  Mock: client_js_1.Mock,
150
152
  Router: router_js_1.Router,
151
153
  ServerManager: server_manager_js_1.ServerManager,
@@ -5,7 +5,7 @@
5
5
  * OpenAPI client, matching the Python API exactly.
6
6
  */
7
7
  import { Configuration, DefaultApi, ExchangeCredentials } from "../generated/src/index.js";
8
- import { Balance, BuiltOrder, CreateOrderParams, EventFetchParams, EventFilterCriteria, EventFilterFunction, ExecutionPriceResult, FetchOrderBookParams, MarketFetchParams, MarketFilterCriteria, MarketFilterFunction, MarketOutcome, MyTradesParams, Order, OrderBook, OrderHistoryParams, PaginatedMarketsResult, PaginatedEventsResult, Position, SeriesFetchParams, PriceCandle, SubscribedAddressSnapshot, SubscriptionOption, Trade, UnifiedEvent, UnifiedMarket, UnifiedSeries, UserTrade, FirehoseEvent, FetchMatchedMarketClustersParams } from "./models.js";
8
+ import { Balance, BuiltOrder, CreateOrderInput, EventFetchParams, EventFilterCriteria, EventFilterFunction, ExecutionPriceResult, FetchOrderBookParams, MarketFetchParams, MarketFilterCriteria, MarketFilterFunction, MarketOutcome, MyTradesParams, Order, OrderBook, OrderHistoryParams, PaginatedMarketsResult, PaginatedEventsResult, Position, SeriesFetchParams, PriceCandle, SubscribedAddressSnapshot, SubscriptionOption, Trade, UnifiedEvent, UnifiedMarket, UnifiedSeries, UserTrade, FirehoseEvent, FetchMatchedMarketClustersParams } from "./models.js";
9
9
  import { ServerManager } from "./server-manager.js";
10
10
  import type { Signer } from "./signers.js";
11
11
  import { Escrow } from "./escrow.js";
@@ -105,6 +105,7 @@ export declare abstract class Exchange {
105
105
  private _wsClient;
106
106
  /** Sticky flag: true if the sidecar /ws endpoint is unavailable. */
107
107
  private _wsUnsupported;
108
+ private readonly _useSidecarLockBaseUrl;
108
109
  constructor(exchangeName: string, options?: ExchangeOptions);
109
110
  private initializeServer;
110
111
  protected handleResponse(response: any): any;
@@ -125,9 +126,9 @@ export declare abstract class Exchange {
125
126
  /**
126
127
  * Resolve the current sidecar base URL.
127
128
  *
128
- * For hosted mode the configured basePath is returned as-is.
129
- * For local mode the port is re-read from the lock file on every
130
- * call so we pick up sidecar restarts that land on a different port.
129
+ * Hosted mode and explicit baseUrl clients keep the configured basePath.
130
+ * Default local clients re-read the lock-file port on every call so they
131
+ * pick up sidecar restarts that land on a different port.
131
132
  */
132
133
  private resolveBaseUrl;
133
134
  /**
@@ -335,7 +336,13 @@ export declare abstract class Exchange {
335
336
  * ```
336
337
  */
337
338
  watchAllOrderBooks(venues?: string[]): Promise<FirehoseEvent>;
338
- /** @deprecated Use {@link watchAllOrderBooks} instead. */
339
+ /**
340
+ * Stream all orderbook updates across venues.
341
+ *
342
+ * @deprecated Use {@link watchAllOrderBooks} instead.
343
+ * @param venues - Optional venue filter
344
+ * @returns Next event with source, symbol, and orderbook
345
+ */
339
346
  firehose(venues?: string[]): Promise<FirehoseEvent>;
340
347
  /**
341
348
  * Watch real-time trade updates via WebSocket.
@@ -411,17 +418,18 @@ export declare abstract class Exchange {
411
418
  * const order = await exchange.submitOrder(built);
412
419
  *
413
420
  * // Using outcome shorthand:
421
+ * const yes = market.yes;
422
+ * if (!yes) throw new Error("Market has no YES outcome");
423
+ *
414
424
  * const built2 = await exchange.buildOrder({
415
- * outcome: market.yes,
425
+ * outcome: yes,
416
426
  * side: "buy",
417
427
  * type: "market",
418
428
  * amount: 10
419
429
  * });
420
430
  * ```
421
431
  */
422
- buildOrder(params: CreateOrderParams & {
423
- outcome?: MarketOutcome;
424
- }): Promise<BuiltOrder>;
432
+ buildOrder(params: CreateOrderInput): Promise<BuiltOrder>;
425
433
  private _discoverHostedAccount;
426
434
  private _executeSorOrder;
427
435
  /**
@@ -475,9 +483,7 @@ export declare abstract class Exchange {
475
483
  * });
476
484
  * ```
477
485
  */
478
- createOrder(params: CreateOrderParams & {
479
- outcome?: MarketOutcome;
480
- }): Promise<Order>;
486
+ createOrder(params: CreateOrderInput): Promise<Order>;
481
487
  /**
482
488
  * Calculate the average execution price for a given amount by walking the order book.
483
489
  * Uses the sidecar server for calculation to ensure consistency.
@@ -576,6 +582,14 @@ export interface PolymarketOptions {
576
582
  proxyAddress?: string;
577
583
  /** Optional signature type */
578
584
  signatureType?: 'eoa' | 'poly-proxy' | 'gnosis-safe' | number;
585
+ /**
586
+ * EVM wallet address used for hosted reads/writes.
587
+ */
588
+ walletAddress?: string;
589
+ /**
590
+ * External signer used for hosted writes.
591
+ */
592
+ signer?: Signer;
579
593
  }
580
594
  export declare class Polymarket extends Exchange {
581
595
  constructor(options?: PolymarketOptions);
@@ -626,6 +640,32 @@ export declare class Kalshi extends Exchange {
626
640
  */
627
641
  export declare class Limitless extends Exchange {
628
642
  constructor(options?: ExchangeOptions);
643
+ /**
644
+ * Watch real-time AMM price updates via WebSocket.
645
+ *
646
+ * @param marketAddress - Limitless market contract address
647
+ * @param callback - Optional callback invoked with the returned update
648
+ * @returns Next price update
649
+ */
650
+ watchPrices(marketAddress: string, callback?: (data: Record<string, any>) => void): Promise<Record<string, any>>;
651
+ /**
652
+ * Watch real-time Limitless user position updates.
653
+ *
654
+ * Requires API key authentication.
655
+ *
656
+ * @param callback - Optional callback invoked with the returned positions
657
+ * @returns Next position update payload
658
+ */
659
+ watchUserPositions(callback?: (data: Position[]) => void): Promise<Position[]>;
660
+ /**
661
+ * Watch real-time Limitless user transaction updates.
662
+ *
663
+ * Requires API key authentication.
664
+ *
665
+ * @param callback - Optional callback invoked with the returned update
666
+ * @returns Next transaction update
667
+ */
668
+ watchUserTransactions(callback?: (data: Record<string, any>) => void): Promise<Record<string, any>>;
629
669
  }
630
670
  /**
631
671
  * Kalshi Demo exchange client (paper trading / sandbox environment).
@@ -856,6 +896,15 @@ export declare const Suibets: typeof SuiBets;
856
896
  export declare class Rain extends Exchange {
857
897
  constructor(options?: ExchangeOptions);
858
898
  }
899
+ /**
900
+ * Hunch exchange client.
901
+ *
902
+ * Hunch is a crypto-native prediction market. Reads are unauthenticated;
903
+ * trading requires an EVM private key.
904
+ */
905
+ export declare class Hunch extends Exchange {
906
+ constructor(options?: ExchangeOptions);
907
+ }
859
908
  /**
860
909
  * Mock exchange client.
861
910
  *