pmxt-core 2.37.4 → 2.37.6

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/kalshi/Kalshi.yaml
3
- * Generated at: 2026-05-03T13:57:47.556Z
3
+ * Generated at: 2026-05-05T12:04:06.591Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const kalshiApiSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.kalshiApiSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/kalshi/Kalshi.yaml
6
- * Generated at: 2026-05-03T13:57:47.556Z
6
+ * Generated at: 2026-05-05T12:04:06.591Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.kalshiApiSpec = {
@@ -176,31 +176,45 @@ class KalshiWebSocket {
176
176
  }
177
177
  handleOrderbookSnapshot(data) {
178
178
  const ticker = data.market_ticker;
179
- // Kalshi orderbook structure:
180
- // yes: [{ price: number (cents), quantity: number }, ...]
181
- // no: [{ price: number (cents), quantity: number }, ...]
182
- const bids = (data.yes || [])
183
- .map((level) => {
184
- const price = (level.price || level[0]) / 100;
185
- const size = (level.quantity !== undefined
186
- ? level.quantity
187
- : level.size !== undefined
188
- ? level.size
189
- : level[1]) || 0;
190
- return { price, size };
191
- })
192
- .sort((a, b) => b.price - a.price);
193
- const asks = (data.no || [])
194
- .map((level) => {
195
- const price = (100 - (level.price || level[0])) / 100;
196
- const size = (level.quantity !== undefined
197
- ? level.quantity
198
- : level.size !== undefined
199
- ? level.size
200
- : level[1]) || 0;
201
- return { price, size };
202
- })
203
- .sort((a, b) => a.price - b.price);
179
+ // Kalshi V2 WebSocket uses dollar-denominated string pairs:
180
+ // yes_dollars_fp / no_dollars_fp: [["0.55", "100.00"], ...]
181
+ // Older format used cent-denominated objects:
182
+ // yes / no: [{ price: 55, quantity: 100 }, ...]
183
+ const usesDollarsFp = data.yes_dollars_fp !== undefined || data.no_dollars_fp !== undefined;
184
+ let bids;
185
+ let asks;
186
+ if (usesDollarsFp) {
187
+ bids = (data.yes_dollars_fp || []).map((level) => ({
188
+ price: parseFloat(level[0]),
189
+ size: parseFloat(level[1]),
190
+ }));
191
+ asks = (data.no_dollars_fp || []).map((level) => ({
192
+ price: Math.round((1 - parseFloat(level[0])) * 10000) / 10000,
193
+ size: parseFloat(level[1]),
194
+ }));
195
+ }
196
+ else {
197
+ bids = (data.yes || []).map((level) => {
198
+ const price = (level.price || level[0]) / 100;
199
+ const size = (level.quantity !== undefined
200
+ ? level.quantity
201
+ : level.size !== undefined
202
+ ? level.size
203
+ : level[1]) || 0;
204
+ return { price, size };
205
+ });
206
+ asks = (data.no || []).map((level) => {
207
+ const price = (100 - (level.price || level[0])) / 100;
208
+ const size = (level.quantity !== undefined
209
+ ? level.quantity
210
+ : level.size !== undefined
211
+ ? level.size
212
+ : level[1]) || 0;
213
+ return { price, size };
214
+ });
215
+ }
216
+ bids.sort((a, b) => b.price - a.price);
217
+ asks.sort((a, b) => a.price - b.price);
204
218
  const orderBook = {
205
219
  bids,
206
220
  asks,
@@ -216,21 +230,42 @@ class KalshiWebSocket {
216
230
  // No snapshot yet, skip delta
217
231
  return;
218
232
  }
219
- // Apply delta updates
220
- // Kalshi sends: { price: number, delta: number, side: 'yes' | 'no' }
221
- const price = data.price / 100;
222
- const delta = data.delta !== undefined
223
- ? data.delta
224
- : data.quantity !== undefined
225
- ? data.quantity
226
- : 0;
227
- const side = data.side;
228
- if (side === "yes") {
229
- this.applyDelta(existing.bids, price, delta, "desc");
233
+ // Kalshi V2 uses dollar-denominated string values:
234
+ // { price_dollars_fp: "0.55", delta_dollars_fp: "10.00", side: "yes"|"no" }
235
+ // Older format used cent-denominated integers:
236
+ // { price: 55, delta: 10, side: "yes"|"no" }
237
+ const usesDollarsFp = data.price_dollars_fp !== undefined;
238
+ let price;
239
+ let delta;
240
+ if (usesDollarsFp) {
241
+ const rawPrice = parseFloat(data.price_dollars_fp);
242
+ delta = parseFloat(data.delta_dollars_fp || "0");
243
+ const side = data.side;
244
+ if (side === "yes") {
245
+ price = rawPrice;
246
+ this.applyDelta(existing.bids, price, delta, "desc");
247
+ }
248
+ else {
249
+ price = Math.round((1 - rawPrice) * 10000) / 10000;
250
+ this.applyDelta(existing.asks, price, delta, "asc");
251
+ }
230
252
  }
231
253
  else {
232
- const yesPrice = (100 - data.price) / 100;
233
- this.applyDelta(existing.asks, yesPrice, delta, "asc");
254
+ price = data.price / 100;
255
+ delta =
256
+ data.delta !== undefined
257
+ ? data.delta
258
+ : data.quantity !== undefined
259
+ ? data.quantity
260
+ : 0;
261
+ const side = data.side;
262
+ if (side === "yes") {
263
+ this.applyDelta(existing.bids, price, delta, "desc");
264
+ }
265
+ else {
266
+ const yesPrice = (100 - data.price) / 100;
267
+ this.applyDelta(existing.asks, yesPrice, delta, "asc");
268
+ }
234
269
  }
235
270
  existing.timestamp = Date.now();
236
271
  this.resolveOrderBook(ticker, existing);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/limitless/Limitless.yaml
3
- * Generated at: 2026-05-03T13:57:47.615Z
3
+ * Generated at: 2026-05-05T12:04:06.633Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const limitlessApiSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.limitlessApiSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/limitless/Limitless.yaml
6
- * Generated at: 2026-05-03T13:57:47.615Z
6
+ * Generated at: 2026-05-05T12:04:06.633Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.limitlessApiSpec = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/myriad/myriad.yaml
3
- * Generated at: 2026-05-03T13:57:47.634Z
3
+ * Generated at: 2026-05-05T12:04:06.647Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const myriadApiSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.myriadApiSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/myriad/myriad.yaml
6
- * Generated at: 2026-05-03T13:57:47.634Z
6
+ * Generated at: 2026-05-05T12:04:06.647Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.myriadApiSpec = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/opinion/opinion-openapi.yaml
3
- * Generated at: 2026-05-03T13:57:47.642Z
3
+ * Generated at: 2026-05-05T12:04:06.652Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const opinionApiSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.opinionApiSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/opinion/opinion-openapi.yaml
6
- * Generated at: 2026-05-03T13:57:47.642Z
6
+ * Generated at: 2026-05-05T12:04:06.652Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.opinionApiSpec = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/polymarket/PolymarketClobAPI.yaml
3
- * Generated at: 2026-05-03T13:57:47.566Z
3
+ * Generated at: 2026-05-05T12:04:06.600Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const polymarketClobSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.polymarketClobSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/polymarket/PolymarketClobAPI.yaml
6
- * Generated at: 2026-05-03T13:57:47.566Z
6
+ * Generated at: 2026-05-05T12:04:06.600Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.polymarketClobSpec = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/polymarket/Polymarket_Data_API.yaml
3
- * Generated at: 2026-05-03T13:57:47.589Z
3
+ * Generated at: 2026-05-05T12:04:06.615Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const polymarketDataSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.polymarketDataSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/polymarket/Polymarket_Data_API.yaml
6
- * Generated at: 2026-05-03T13:57:47.589Z
6
+ * Generated at: 2026-05-05T12:04:06.615Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.polymarketDataSpec = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/polymarket/PolymarketGammaAPI.yaml
3
- * Generated at: 2026-05-03T13:57:47.584Z
3
+ * Generated at: 2026-05-05T12:04:06.612Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const polymarketGammaSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.polymarketGammaSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/polymarket/PolymarketGammaAPI.yaml
6
- * Generated at: 2026-05-03T13:57:47.584Z
6
+ * Generated at: 2026-05-05T12:04:06.612Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.polymarketGammaSpec = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/probable/probable.yaml
3
- * Generated at: 2026-05-03T13:57:47.628Z
3
+ * Generated at: 2026-05-05T12:04:06.640Z
4
4
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
5
5
  */
6
6
  export declare const probableApiSpec: {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.probableApiSpec = void 0;
4
4
  /**
5
5
  * Auto-generated from /home/runner/work/pmxt/pmxt/core/specs/probable/probable.yaml
6
- * Generated at: 2026-05-03T13:57:47.628Z
6
+ * Generated at: 2026-05-05T12:04:06.640Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.probableApiSpec = {
@@ -85,7 +85,7 @@
85
85
  ]
86
86
  },
87
87
  "fetchOrderBook": {
88
- "verb": "post",
88
+ "verb": "get",
89
89
  "args": [
90
90
  {
91
91
  "name": "id",
@@ -94,7 +94,7 @@
94
94
  },
95
95
  {
96
96
  "name": "side",
97
- "kind": "unknown",
97
+ "kind": "string",
98
98
  "optional": true
99
99
  }
100
100
  ]
@@ -234,7 +234,7 @@
234
234
  },
235
235
  {
236
236
  "name": "side",
237
- "kind": "unknown",
237
+ "kind": "string",
238
238
  "optional": false
239
239
  },
240
240
  {
@@ -254,7 +254,7 @@
254
254
  },
255
255
  {
256
256
  "name": "side",
257
- "kind": "unknown",
257
+ "kind": "string",
258
258
  "optional": false
259
259
  },
260
260
  {
@@ -630,33 +630,21 @@ paths:
630
630
  $ref: '#/components/schemas/PriceCandle'
631
631
  description: Fetch historical OHLCV (candlestick) price data for a specific market outcome.
632
632
  '/api/{exchange}/fetchOrderBook':
633
- post:
633
+ get:
634
634
  summary: Fetch Order Book
635
635
  operationId: fetchOrderBook
636
636
  parameters:
637
637
  - $ref: '#/components/parameters/ExchangeParam'
638
- requestBody:
639
- content:
640
- application/json:
641
- schema:
642
- title: FetchOrderBookRequest
643
- type: object
644
- properties:
645
- args:
646
- type: array
647
- minItems: 1
648
- maxItems: 2
649
- items:
650
- oneOf:
651
- - type: string
652
- - type: string
653
- enum:
654
- - 'yes'
655
- - 'no'
656
- credentials:
657
- $ref: '#/components/schemas/ExchangeCredentials'
658
- required:
659
- - args
638
+ - in: query
639
+ name: id
640
+ required: true
641
+ schema:
642
+ type: string
643
+ - in: query
644
+ name: side
645
+ required: false
646
+ schema:
647
+ type: string
660
648
  responses:
661
649
  '200':
662
650
  description: Fetch Order Book response
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmxt-core",
3
- "version": "2.37.4",
3
+ "version": "2.37.6",
4
4
  "description": "pmxt is a unified prediction market data API. The ccxt for prediction markets.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -29,8 +29,8 @@
29
29
  "test": "jest -c jest.config.js",
30
30
  "server": "tsx watch src/server/index.ts",
31
31
  "server:prod": "node dist/server/index.js",
32
- "generate:sdk:python": "npx @openapitools/openapi-generator-cli generate -i src/server/openapi.yaml -g python -o ../sdks/python/generated --package-name pmxt_internal --additional-properties=projectName=pmxt-internal,packageVersion=2.37.4,library=urllib3",
33
- "generate:sdk:typescript": "npx @openapitools/openapi-generator-cli generate -i src/server/openapi.yaml -g typescript-fetch -o ../sdks/typescript/generated --additional-properties=npmName=pmxtjs,npmVersion=2.37.4,supportsES6=true,typescriptThreePlus=true && node ../sdks/typescript/scripts/fix-generated.js",
32
+ "generate:sdk:python": "npx @openapitools/openapi-generator-cli generate -i src/server/openapi.yaml -g python -o ../sdks/python/generated --package-name pmxt_internal --additional-properties=projectName=pmxt-internal,packageVersion=2.37.6,library=urllib3",
33
+ "generate:sdk:typescript": "npx @openapitools/openapi-generator-cli generate -i src/server/openapi.yaml -g typescript-fetch -o ../sdks/typescript/generated --additional-properties=npmName=pmxtjs,npmVersion=2.37.6,supportsES6=true,typescriptThreePlus=true && node ../sdks/typescript/scripts/fix-generated.js",
34
34
  "fetch:openapi": "node scripts/fetch-openapi-specs.js",
35
35
  "extract:jsdoc": "node ../scripts/extract-jsdoc.js",
36
36
  "generate:docs": "npm run extract:jsdoc && node ../scripts/generate-api-docs.js",