pmxt-core 2.48.5 → 2.48.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.
@@ -756,6 +756,8 @@ class PredictionMarketExchange {
756
756
  // ResolutionDate filter
757
757
  if (criteria.resolutionDate) {
758
758
  const resDate = market.resolutionDate;
759
+ if (!resDate)
760
+ return false;
759
761
  if (criteria.resolutionDate.before && resDate >= criteria.resolutionDate.before) {
760
762
  return false;
761
763
  }
@@ -170,10 +170,10 @@ function applyFilters(markets, params) {
170
170
  if (status !== 'all') {
171
171
  const now = Date.now();
172
172
  if (status === 'active') {
173
- result = result.filter(m => m.resolutionDate.getTime() > now);
173
+ result = result.filter(m => !m.resolutionDate || m.resolutionDate.getTime() > now);
174
174
  }
175
175
  else {
176
- result = result.filter(m => m.resolutionDate.getTime() <= now);
176
+ result = result.filter(m => m.resolutionDate && m.resolutionDate.getTime() <= now);
177
177
  }
178
178
  }
179
179
  // Text search
@@ -198,7 +198,7 @@ function applyFilters(markets, params) {
198
198
  result.sort((a, b) => b.liquidity - a.liquidity);
199
199
  }
200
200
  else if (params?.sort === 'newest') {
201
- result.sort((a, b) => b.resolutionDate.getTime() - a.resolutionDate.getTime());
201
+ result.sort((a, b) => (b.resolutionDate?.getTime() ?? 0) - (a.resolutionDate?.getTime() ?? 0));
202
202
  }
203
203
  else {
204
204
  result.sort((a, b) => (b.volume || 0) - (a.volume || 0));
@@ -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-06-02T16:35:55.795Z
3
+ * Generated at: 2026-06-04T11:40:47.252Z
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-06-02T16:35:55.795Z
6
+ * Generated at: 2026-06-04T11:40:47.252Z
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-06-02T16:35:55.833Z
3
+ * Generated at: 2026-06-04T11:40:47.289Z
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-06-02T16:35:55.833Z
6
+ * Generated at: 2026-06-04T11:40:47.289Z
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-06-02T16:35:55.843Z
3
+ * Generated at: 2026-06-04T11:40:47.300Z
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-06-02T16:35:55.843Z
6
+ * Generated at: 2026-06-04T11:40:47.300Z
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-06-02T16:35:55.847Z
3
+ * Generated at: 2026-06-04T11:40:47.305Z
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-06-02T16:35:55.847Z
6
+ * Generated at: 2026-06-04T11:40:47.305Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.opinionApiSpec = {
@@ -157,7 +157,7 @@ class OpinionNormalizer {
157
157
  normalizeTrade(raw, index) {
158
158
  return {
159
159
  id: raw.txHash || String(index),
160
- timestamp: (0, utils_1.toMillis)(raw.createdAt),
160
+ timestamp: (0, utils_1.toMillis)(raw.createdAt) ?? 0,
161
161
  price: (0, utils_1.parseNumStr)(raw.price),
162
162
  amount: (0, utils_1.parseNumStr)(raw.shares),
163
163
  side: raw.side === 'BUY' ? 'buy' : raw.side === 'SELL' ? 'sell' : 'unknown',
@@ -167,7 +167,7 @@ class OpinionNormalizer {
167
167
  normalizeUserTrade(raw, index) {
168
168
  return {
169
169
  id: raw.txHash || String(index),
170
- timestamp: (0, utils_1.toMillis)(raw.createdAt),
170
+ timestamp: (0, utils_1.toMillis)(raw.createdAt) ?? 0,
171
171
  price: (0, utils_1.parseNumStr)(raw.price),
172
172
  amount: (0, utils_1.parseNumStr)(raw.shares),
173
173
  side: raw.side === 'BUY' ? 'buy' : raw.side === 'SELL' ? 'sell' : 'unknown',
@@ -203,7 +203,7 @@ class OpinionNormalizer {
203
203
  status: (0, utils_1.mapOrderStatus)(raw.status),
204
204
  filled: filledShares,
205
205
  remaining: orderShares - filledShares,
206
- timestamp: (0, utils_1.toMillis)(raw.createdAt),
206
+ timestamp: (0, utils_1.toMillis)(raw.createdAt) ?? 0,
207
207
  };
208
208
  }
209
209
  // -- Price enrichment -----------------------------------------------------
@@ -279,7 +279,9 @@ class OpinionNormalizer {
279
279
  title: raw.marketTitle || '',
280
280
  description: raw.rules || '',
281
281
  outcomes: [yesOutcome, noOutcome],
282
- resolutionDate: new Date((0, utils_1.toMillis)(raw.cutoffAt)),
282
+ resolutionDate: (0, utils_1.toMillis)(raw.cutoffAt) !== null
283
+ ? new Date((0, utils_1.toMillis)(raw.cutoffAt))
284
+ : undefined,
283
285
  volume24h: (0, utils_1.parseNumStr)(raw.volume24h),
284
286
  volume: (0, utils_1.parseNumStr)(raw.volume),
285
287
  liquidity: 0,
@@ -324,7 +326,9 @@ class OpinionNormalizer {
324
326
  title: combinedTitle,
325
327
  description: child.rules || '',
326
328
  outcomes: [yesOutcome, noOutcome],
327
- resolutionDate: new Date((0, utils_1.toMillis)(child.cutoffAt)),
329
+ resolutionDate: (0, utils_1.toMillis)(child.cutoffAt || parent.cutoffAt) !== null
330
+ ? new Date((0, utils_1.toMillis)(child.cutoffAt || parent.cutoffAt))
331
+ : undefined,
328
332
  volume24h,
329
333
  volume: (0, utils_1.parseNumStr)(child.volume),
330
334
  liquidity: 0,
@@ -19,5 +19,5 @@ export declare function mapSortToOpinion(sort?: string): number | undefined;
19
19
  export declare function mapIntervalToOpinion(interval: CandleInterval): string;
20
20
  export declare function mapOrderStatus(status: number): 'pending' | 'open' | 'filled' | 'canceled' | 'rejected';
21
21
  export declare function parseNumStr(value: string | undefined | null): number;
22
- export declare function toMillis(ts: number | undefined | null): number;
22
+ export declare function toMillis(ts: number | undefined | null): number | null;
23
23
  export declare function intervalToMs(interval: CandleInterval): number;
@@ -76,9 +76,11 @@ function parseNumStr(value) {
76
76
  }
77
77
  // Convert a raw timestamp to milliseconds.
78
78
  // If the value is under 10_000_000_000 it is assumed to be in seconds.
79
+ // Returns null when the input is missing/zero so callers can distinguish
80
+ // "no timestamp" from "epoch" instead of coercing both to 1970-01-01.
79
81
  function toMillis(ts) {
80
82
  if (!ts)
81
- return 0;
83
+ return null;
82
84
  return ts < 10_000_000_000 ? ts * 1000 : ts;
83
85
  }
84
86
  // Return the bucket size in milliseconds for a given CandleInterval
@@ -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-06-02T16:35:55.801Z
3
+ * Generated at: 2026-06-04T11:40:47.258Z
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-06-02T16:35:55.801Z
6
+ * Generated at: 2026-06-04T11:40:47.258Z
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-06-02T16:35:55.817Z
3
+ * Generated at: 2026-06-04T11:40:47.271Z
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-06-02T16:35:55.817Z
6
+ * Generated at: 2026-06-04T11:40:47.271Z
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-06-02T16:35:55.815Z
3
+ * Generated at: 2026-06-04T11:40:47.268Z
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-06-02T16:35:55.815Z
6
+ * Generated at: 2026-06-04T11:40:47.268Z
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-06-02T16:35:55.837Z
3
+ * Generated at: 2026-06-04T11:40:47.295Z
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-06-02T16:35:55.837Z
6
+ * Generated at: 2026-06-04T11:40:47.295Z
7
7
  * Do not edit manually -- run "npm run fetch:openapi" to regenerate.
8
8
  */
9
9
  exports.probableApiSpec = {
@@ -2655,7 +2655,9 @@ components:
2655
2655
  resolutionDate:
2656
2656
  type: string
2657
2657
  format: date-time
2658
- description: When the market is scheduled to resolve.
2658
+ description: >-
2659
+ When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every
2660
+ market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch.
2659
2661
  volume24h:
2660
2662
  type: number
2661
2663
  description: Trading volume over the past 24 hours (USD).
@@ -2728,7 +2730,6 @@ components:
2728
2730
  - title
2729
2731
  - description
2730
2732
  - outcomes
2731
- - resolutionDate
2732
2733
  - volume24h
2733
2734
  - liquidity
2734
2735
  - url
package/dist/types.d.ts CHANGED
@@ -55,8 +55,10 @@ export interface UnifiedMarket {
55
55
  slug?: string;
56
56
  /** The possible outcomes for this market. */
57
57
  outcomes: MarketOutcome[];
58
- /** When the market is scheduled to resolve. */
59
- resolutionDate: Date;
58
+ /** When the market is scheduled to resolve. Optional because some venues
59
+ * do not publish a cutoff for every market (e.g. Opinion categorical
60
+ * children) — emit `undefined` rather than coercing to epoch. */
61
+ resolutionDate?: Date;
60
62
  /** Trading volume over the past 24 hours (USD). */
61
63
  volume24h: number;
62
64
  volume?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmxt-core",
3
- "version": "2.48.5",
3
+ "version": "2.48.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.48.5,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.48.5,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.48.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.48.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",