pmxt-core 2.35.2 → 2.35.4

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-04-24T18:10:16.330Z
3
+ * Generated at: 2026-04-25T12:45:57.899Z
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-04-24T18:10:16.330Z
6
+ * Generated at: 2026-04-25T12:45:57.899Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.kalshiApiSpec = {
@@ -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-04-24T18:10:16.380Z
3
+ * Generated at: 2026-04-25T12:45:57.944Z
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-04-24T18:10:16.380Z
6
+ * Generated at: 2026-04-25T12:45:57.944Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.limitlessApiSpec = {
@@ -21,6 +21,7 @@ export declare class LimitlessExchange extends PredictionMarketExchange {
21
21
  private readonly fetcher;
22
22
  private readonly normalizer;
23
23
  private readonly outcomeToSlug;
24
+ private readonly noTokenIds;
24
25
  constructor(options?: ExchangeCredentials | LimitlessExchangeOptions);
25
26
  get name(): string;
26
27
  private getHeaders;
@@ -28,6 +29,7 @@ export declare class LimitlessExchange extends PredictionMarketExchange {
28
29
  protected fetchEventsImpl(params: EventFetchParams): Promise<UnifiedEvent[]>;
29
30
  fetchOHLCV(id: string, params: OHLCVParams): Promise<PriceCandle[]>;
30
31
  fetchOrderBook(id: string): Promise<OrderBook>;
32
+ private isNoOutcome;
31
33
  fetchTrades(id: string, params: TradesParams | HistoryFilterParams): Promise<Trade[]>;
32
34
  fetchMyTrades(params?: MyTradesParams): Promise<UserTrade[]>;
33
35
  createOrder(params: CreateOrderParams): Promise<Order>;
@@ -27,6 +27,7 @@ class LimitlessExchange extends BaseExchange_1.PredictionMarketExchange {
27
27
  fetcher;
28
28
  normalizer;
29
29
  outcomeToSlug = new Map();
30
+ noTokenIds = new Set();
30
31
  constructor(options) {
31
32
  // Support both old signature (credentials only) and new signature (options object)
32
33
  let credentials;
@@ -131,7 +132,35 @@ class LimitlessExchange extends BaseExchange_1.PredictionMarketExchange {
131
132
  async fetchOrderBook(id) {
132
133
  const slug = await this.resolveSlug(id);
133
134
  const rawOrderBook = await this.fetcher.fetchRawOrderBook(slug);
134
- return this.normalizer.normalizeOrderBook(rawOrderBook, id);
135
+ const orderBook = this.normalizer.normalizeOrderBook(rawOrderBook, id);
136
+ // The Limitless API always returns the Yes-side order book regardless
137
+ // of which token is queried. If the caller asked for the No token,
138
+ // flip: noBid = 1 - yesAsk, noAsk = 1 - yesBid.
139
+ const isNoToken = await this.isNoOutcome(id, slug);
140
+ if (isNoToken) {
141
+ return {
142
+ bids: orderBook.asks.map((level) => ({ price: 1 - level.price, size: level.size }))
143
+ .sort((a, b) => b.price - a.price),
144
+ asks: orderBook.bids.map((level) => ({ price: 1 - level.price, size: level.size }))
145
+ .sort((a, b) => a.price - b.price),
146
+ timestamp: orderBook.timestamp,
147
+ };
148
+ }
149
+ return orderBook;
150
+ }
151
+ async isNoOutcome(outcomeId, slug) {
152
+ // Check the cached set first (populated by indexOutcomeSlugs).
153
+ if (this.noTokenIds.has(outcomeId))
154
+ return true;
155
+ // If not cached, fetch the market by slug and index it.
156
+ if (/^\d+$/.test(outcomeId)) {
157
+ const markets = await this.fetchMarketsImpl({ slug });
158
+ if (markets.length > 0) {
159
+ this.indexOutcomeSlugs(markets);
160
+ return this.noTokenIds.has(outcomeId);
161
+ }
162
+ }
163
+ return false;
135
164
  }
136
165
  async fetchTrades(id, params) {
137
166
  if ('resolution' in params && params.resolution !== undefined) {
@@ -438,6 +467,9 @@ class LimitlessExchange extends BaseExchange_1.PredictionMarketExchange {
438
467
  continue;
439
468
  for (const outcome of market.outcomes) {
440
469
  this.outcomeToSlug.set(outcome.outcomeId, market.slug);
470
+ if (outcome.label.toLowerCase() === 'no') {
471
+ this.noTokenIds.add(outcome.outcomeId);
472
+ }
441
473
  }
442
474
  }
443
475
  }
@@ -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-04-24T18:10:16.395Z
3
+ * Generated at: 2026-04-25T12:45:57.957Z
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-04-24T18:10:16.395Z
6
+ * Generated at: 2026-04-25T12:45:57.957Z
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-04-24T18:10:16.400Z
3
+ * Generated at: 2026-04-25T12:45:57.962Z
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-04-24T18:10:16.400Z
6
+ * Generated at: 2026-04-25T12:45:57.962Z
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-04-24T18:10:16.340Z
3
+ * Generated at: 2026-04-25T12:45:57.907Z
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-04-24T18:10:16.340Z
6
+ * Generated at: 2026-04-25T12:45:57.907Z
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-04-24T18:10:16.358Z
3
+ * Generated at: 2026-04-25T12:45:57.925Z
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-04-24T18:10:16.358Z
6
+ * Generated at: 2026-04-25T12:45:57.925Z
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-04-24T18:10:16.354Z
3
+ * Generated at: 2026-04-25T12:45:57.921Z
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-04-24T18:10:16.354Z
6
+ * Generated at: 2026-04-25T12:45:57.921Z
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-04-24T18:10:16.389Z
3
+ * Generated at: 2026-04-25T12:45:57.949Z
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-04-24T18:10:16.389Z
6
+ * Generated at: 2026-04-25T12:45:57.949Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.probableApiSpec = {
@@ -140,7 +140,8 @@ class Router extends BaseExchange_1.PredictionMarketExchange {
140
140
  if (params?.limit !== undefined)
141
141
  query.limit = String(params.limit);
142
142
  const res = await this.client.getArbitrage(query);
143
- const items = res.data ?? [];
143
+ // getArbitrage already unwraps .data res is the opportunities array.
144
+ const items = Array.isArray(res) ? res : (res?.data ?? []);
144
145
  return items.map((r) => ({
145
146
  marketA: r.marketA,
146
147
  marketB: r.marketB,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmxt-core",
3
- "version": "2.35.2",
3
+ "version": "2.35.4",
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.35.2,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.35.2,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.35.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.35.4,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",