pmxt-core 2.30.9 → 2.31.1
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.
- package/dist/BaseExchange.d.ts +17 -4
- package/dist/BaseExchange.js +43 -5
- package/dist/exchanges/kalshi/api.d.ts +1 -1
- package/dist/exchanges/kalshi/api.js +1 -1
- package/dist/exchanges/limitless/api.d.ts +1 -1
- package/dist/exchanges/limitless/api.js +1 -1
- package/dist/exchanges/myriad/api.d.ts +1 -1
- package/dist/exchanges/myriad/api.js +1 -1
- package/dist/exchanges/opinion/api.d.ts +1 -1
- package/dist/exchanges/opinion/api.js +1 -1
- package/dist/exchanges/polymarket/api-clob.d.ts +1 -1
- package/dist/exchanges/polymarket/api-clob.js +1 -1
- package/dist/exchanges/polymarket/api-data.d.ts +1 -1
- package/dist/exchanges/polymarket/api-data.js +1 -1
- package/dist/exchanges/polymarket/api-gamma.d.ts +1 -1
- package/dist/exchanges/polymarket/api-gamma.js +1 -1
- package/dist/exchanges/probable/api.d.ts +1 -1
- package/dist/exchanges/probable/api.js +1 -1
- package/dist/server/app.js +13 -0
- package/dist/server/openapi.yaml +193 -122
- package/package.json +3 -3
package/dist/BaseExchange.d.ts
CHANGED
|
@@ -46,6 +46,12 @@ export interface MarketFilterParams {
|
|
|
46
46
|
similarityThreshold?: number;
|
|
47
47
|
}
|
|
48
48
|
export interface MarketFetchParams extends MarketFilterParams {
|
|
49
|
+
/** Optional client-side filter applied after fetching */
|
|
50
|
+
filter?: MarketFilterCriteria;
|
|
51
|
+
/** Shorthand for filter.category -- merged into filter (takes precedence) */
|
|
52
|
+
category?: string;
|
|
53
|
+
/** Shorthand for filter.tags -- merged into filter (takes precedence) */
|
|
54
|
+
tags?: string[];
|
|
49
55
|
}
|
|
50
56
|
export interface EventFetchParams {
|
|
51
57
|
query?: string;
|
|
@@ -60,6 +66,12 @@ export interface EventFetchParams {
|
|
|
60
66
|
searchIn?: 'title' | 'description' | 'both';
|
|
61
67
|
eventId?: string;
|
|
62
68
|
slug?: string;
|
|
69
|
+
/** Optional client-side filter applied after fetching */
|
|
70
|
+
filter?: EventFilterCriteria;
|
|
71
|
+
/** Shorthand for filter.category -- merged into filter (takes precedence) */
|
|
72
|
+
category?: string;
|
|
73
|
+
/** Shorthand for filter.tags -- merged into filter (takes precedence) */
|
|
74
|
+
tags?: string[];
|
|
63
75
|
}
|
|
64
76
|
/**
|
|
65
77
|
* Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility.
|
|
@@ -115,7 +127,7 @@ export interface OrderHistoryParams {
|
|
|
115
127
|
/** Opaque pagination cursor from a previous response */
|
|
116
128
|
cursor?: string;
|
|
117
129
|
}
|
|
118
|
-
export
|
|
130
|
+
export interface MarketFilterCriteria {
|
|
119
131
|
text?: string;
|
|
120
132
|
searchIn?: ('title' | 'description' | 'category' | 'tags' | 'outcomes')[];
|
|
121
133
|
volume24h?: {
|
|
@@ -153,9 +165,9 @@ export type MarketFilterCriteria = {
|
|
|
153
165
|
min?: number;
|
|
154
166
|
max?: number;
|
|
155
167
|
};
|
|
156
|
-
}
|
|
168
|
+
}
|
|
157
169
|
export type MarketFilterFunction = (market: UnifiedMarket) => boolean;
|
|
158
|
-
export
|
|
170
|
+
export interface EventFilterCriteria {
|
|
159
171
|
text?: string;
|
|
160
172
|
searchIn?: ('title' | 'description' | 'category' | 'tags')[];
|
|
161
173
|
category?: string;
|
|
@@ -169,7 +181,7 @@ export type EventFilterCriteria = {
|
|
|
169
181
|
min?: number;
|
|
170
182
|
max?: number;
|
|
171
183
|
};
|
|
172
|
-
}
|
|
184
|
+
}
|
|
173
185
|
export type EventFilterFunction = (event: UnifiedEvent) => boolean;
|
|
174
186
|
export type ExchangeCapability = true | false | 'emulated';
|
|
175
187
|
export interface ExchangeHas {
|
|
@@ -338,6 +350,7 @@ export declare abstract class PredictionMarketExchange {
|
|
|
338
350
|
fetchMarketsPaginated(params?: {
|
|
339
351
|
limit?: number;
|
|
340
352
|
cursor?: string;
|
|
353
|
+
filter?: MarketFilterCriteria;
|
|
341
354
|
}): Promise<PaginatedMarketsResult>;
|
|
342
355
|
/**
|
|
343
356
|
* Fetch events with optional keyword search.
|
package/dist/BaseExchange.js
CHANGED
|
@@ -175,7 +175,27 @@ class PredictionMarketExchange {
|
|
|
175
175
|
* @note Some exchanges (like Limitless) may only support status 'active' for search results.
|
|
176
176
|
*/
|
|
177
177
|
async fetchMarkets(params) {
|
|
178
|
-
|
|
178
|
+
const { filter, category, tags, ...fetchParams } = params ?? {};
|
|
179
|
+
// Merge explicit category/tags into the filter (explicit params take precedence)
|
|
180
|
+
const mergedFilter = {
|
|
181
|
+
...(filter ?? {}),
|
|
182
|
+
...(category !== undefined ? { category } : {}),
|
|
183
|
+
...(tags !== undefined ? { tags } : {}),
|
|
184
|
+
};
|
|
185
|
+
const hasFilter = Object.keys(mergedFilter).length > 0;
|
|
186
|
+
if (hasFilter) {
|
|
187
|
+
// When filtering, pull limit/offset out of the venue fetch so
|
|
188
|
+
// the venue returns enough data for the filter to work with.
|
|
189
|
+
// Apply limit/offset after filtering so the caller gets the
|
|
190
|
+
// number of results they asked for.
|
|
191
|
+
const { limit, offset, ...venueParams } = fetchParams;
|
|
192
|
+
const markets = await this.fetchMarketsImpl(Object.keys(venueParams).length > 0 ? venueParams : undefined);
|
|
193
|
+
const filtered = this.filterMarkets(markets, mergedFilter);
|
|
194
|
+
const start = offset ?? 0;
|
|
195
|
+
return limit !== undefined ? filtered.slice(start, start + limit) : filtered.slice(start);
|
|
196
|
+
}
|
|
197
|
+
const markets = await this.fetchMarketsImpl(Object.keys(fetchParams).length > 0 ? fetchParams : undefined);
|
|
198
|
+
return markets;
|
|
179
199
|
}
|
|
180
200
|
/**
|
|
181
201
|
* Fetch markets with cursor-based pagination backed by a stable in-memory snapshot.
|
|
@@ -195,6 +215,8 @@ class PredictionMarketExchange {
|
|
|
195
215
|
async fetchMarketsPaginated(params) {
|
|
196
216
|
const limit = params?.limit;
|
|
197
217
|
const cursor = params?.cursor;
|
|
218
|
+
const filter = params?.filter;
|
|
219
|
+
const applyFilter = (markets) => filter ? this.filterMarkets(markets, filter) : markets;
|
|
198
220
|
if (cursor) {
|
|
199
221
|
// Cursor encodes: snapshotId:offset
|
|
200
222
|
const sep = cursor.indexOf(':');
|
|
@@ -209,7 +231,7 @@ class PredictionMarketExchange {
|
|
|
209
231
|
const slice = limit !== undefined ? markets.slice(offset, offset + limit) : markets.slice(offset);
|
|
210
232
|
const nextOffset = offset + slice.length;
|
|
211
233
|
const nextCursor = nextOffset < markets.length ? `${snapshotId}:${nextOffset}` : undefined;
|
|
212
|
-
return { data: slice, total: markets.length, nextCursor };
|
|
234
|
+
return { data: applyFilter(slice), total: markets.length, nextCursor };
|
|
213
235
|
}
|
|
214
236
|
// No cursor — (re)fetch snapshot
|
|
215
237
|
if (!this._snapshot ||
|
|
@@ -224,11 +246,11 @@ class PredictionMarketExchange {
|
|
|
224
246
|
}
|
|
225
247
|
const markets = this._snapshot.markets;
|
|
226
248
|
if (!limit) {
|
|
227
|
-
return { data: markets, total: markets.length, nextCursor: undefined };
|
|
249
|
+
return { data: applyFilter(markets), total: markets.length, nextCursor: undefined };
|
|
228
250
|
}
|
|
229
251
|
const slice = markets.slice(0, limit);
|
|
230
252
|
const nextCursor = limit < markets.length ? `${this._snapshot.id}:${limit}` : undefined;
|
|
231
|
-
return { data: slice, total: markets.length, nextCursor };
|
|
253
|
+
return { data: applyFilter(slice), total: markets.length, nextCursor };
|
|
232
254
|
}
|
|
233
255
|
/**
|
|
234
256
|
* Fetch events with optional keyword search.
|
|
@@ -244,7 +266,23 @@ class PredictionMarketExchange {
|
|
|
244
266
|
* @note Some exchanges (like Limitless) may only support status 'active' for search results.
|
|
245
267
|
*/
|
|
246
268
|
async fetchEvents(params) {
|
|
247
|
-
|
|
269
|
+
const { filter, category, tags, ...fetchParams } = params ?? {};
|
|
270
|
+
// Merge explicit category/tags into the filter (explicit params take precedence)
|
|
271
|
+
const mergedFilter = {
|
|
272
|
+
...(filter ?? {}),
|
|
273
|
+
...(category !== undefined ? { category } : {}),
|
|
274
|
+
...(tags !== undefined ? { tags } : {}),
|
|
275
|
+
};
|
|
276
|
+
const hasFilter = Object.keys(mergedFilter).length > 0;
|
|
277
|
+
if (hasFilter) {
|
|
278
|
+
const { limit, offset, ...venueParams } = fetchParams;
|
|
279
|
+
const events = await this.fetchEventsImpl(venueParams);
|
|
280
|
+
const filtered = this.filterEvents(events, mergedFilter);
|
|
281
|
+
const start = offset ?? 0;
|
|
282
|
+
return limit !== undefined ? filtered.slice(start, start + limit) : filtered.slice(start);
|
|
283
|
+
}
|
|
284
|
+
const events = await this.fetchEventsImpl(fetchParams);
|
|
285
|
+
return events;
|
|
248
286
|
}
|
|
249
287
|
/**
|
|
250
288
|
* Fetch a single market by lookup parameters.
|
|
@@ -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-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.091Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.091Z
|
|
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-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.127Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.127Z
|
|
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-04-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.139Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.139Z
|
|
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-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.144Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.144Z
|
|
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-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.097Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.097Z
|
|
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-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.111Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.111Z
|
|
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-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.108Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.108Z
|
|
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-
|
|
3
|
+
* Generated at: 2026-04-18T09:08:49.132Z
|
|
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-
|
|
6
|
+
* Generated at: 2026-04-18T09:08:49.132Z
|
|
7
7
|
* Do not edit manually -- run "npm run fetch:openapi" to regenerate.
|
|
8
8
|
*/
|
|
9
9
|
exports.probableApiSpec = {
|
package/dist/server/app.js
CHANGED
|
@@ -61,6 +61,13 @@ const METHOD_VERBS = loadMethodVerbs();
|
|
|
61
61
|
function coerceQueryValue(raw, kind) {
|
|
62
62
|
if (Array.isArray(raw))
|
|
63
63
|
return raw.map((v) => coerceQueryValue(v, kind));
|
|
64
|
+
if (typeof raw === "object" && raw !== null && !Array.isArray(raw)) {
|
|
65
|
+
const result = {};
|
|
66
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
67
|
+
result[k] = coerceQueryValue(v);
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
64
71
|
if (typeof raw !== "string")
|
|
65
72
|
return raw;
|
|
66
73
|
if (kind === "string")
|
|
@@ -86,6 +93,12 @@ function coerceQueryValue(raw, kind) {
|
|
|
86
93
|
return false;
|
|
87
94
|
if (raw === "null")
|
|
88
95
|
return null;
|
|
96
|
+
if (raw.startsWith("{") || raw.startsWith("[")) {
|
|
97
|
+
try {
|
|
98
|
+
return JSON.parse(raw);
|
|
99
|
+
}
|
|
100
|
+
catch { /* fall through */ }
|
|
101
|
+
}
|
|
89
102
|
if (/^-?\d+$/.test(raw))
|
|
90
103
|
return parseInt(raw, 10);
|
|
91
104
|
if (/^-?\d*\.\d+$/.test(raw))
|
package/dist/server/openapi.yaml
CHANGED
|
@@ -191,6 +191,11 @@ paths:
|
|
|
191
191
|
required: false
|
|
192
192
|
schema:
|
|
193
193
|
type: string
|
|
194
|
+
- in: query
|
|
195
|
+
name: filter
|
|
196
|
+
required: false
|
|
197
|
+
schema:
|
|
198
|
+
$ref: '#/components/schemas/MarketFilterCriteria'
|
|
194
199
|
responses:
|
|
195
200
|
'200':
|
|
196
201
|
description: Fetch Markets Paginated response
|
|
@@ -276,6 +281,27 @@ paths:
|
|
|
276
281
|
schema:
|
|
277
282
|
type: string
|
|
278
283
|
description: Lookup by event slug
|
|
284
|
+
- in: query
|
|
285
|
+
name: filter
|
|
286
|
+
required: false
|
|
287
|
+
schema:
|
|
288
|
+
allOf:
|
|
289
|
+
- $ref: '#/components/schemas/EventFilterCriteria'
|
|
290
|
+
description: Optional client-side filter applied after fetching
|
|
291
|
+
- in: query
|
|
292
|
+
name: category
|
|
293
|
+
required: false
|
|
294
|
+
schema:
|
|
295
|
+
type: string
|
|
296
|
+
description: Shorthand for filter.category -- merged into filter (takes precedence)
|
|
297
|
+
- in: query
|
|
298
|
+
name: tags
|
|
299
|
+
required: false
|
|
300
|
+
schema:
|
|
301
|
+
type: array
|
|
302
|
+
items:
|
|
303
|
+
type: string
|
|
304
|
+
description: Shorthand for filter.tags -- merged into filter (takes precedence)
|
|
279
305
|
responses:
|
|
280
306
|
'200':
|
|
281
307
|
description: Fetch Events response
|
|
@@ -466,6 +492,27 @@ paths:
|
|
|
466
492
|
schema:
|
|
467
493
|
type: string
|
|
468
494
|
description: Lookup by event slug
|
|
495
|
+
- in: query
|
|
496
|
+
name: filter
|
|
497
|
+
required: false
|
|
498
|
+
schema:
|
|
499
|
+
allOf:
|
|
500
|
+
- $ref: '#/components/schemas/EventFilterCriteria'
|
|
501
|
+
description: Optional client-side filter applied after fetching
|
|
502
|
+
- in: query
|
|
503
|
+
name: category
|
|
504
|
+
required: false
|
|
505
|
+
schema:
|
|
506
|
+
type: string
|
|
507
|
+
description: Shorthand for filter.category -- merged into filter (takes precedence)
|
|
508
|
+
- in: query
|
|
509
|
+
name: tags
|
|
510
|
+
required: false
|
|
511
|
+
schema:
|
|
512
|
+
type: array
|
|
513
|
+
items:
|
|
514
|
+
type: string
|
|
515
|
+
description: Shorthand for filter.tags -- merged into filter (takes precedence)
|
|
469
516
|
responses:
|
|
470
517
|
'200':
|
|
471
518
|
description: Fetch Event response
|
|
@@ -1131,95 +1178,7 @@ paths:
|
|
|
1131
1178
|
items:
|
|
1132
1179
|
$ref: '#/components/schemas/UnifiedMarket'
|
|
1133
1180
|
- type: string
|
|
1134
|
-
-
|
|
1135
|
-
properties:
|
|
1136
|
-
text:
|
|
1137
|
-
type: string
|
|
1138
|
-
searchIn:
|
|
1139
|
-
type: array
|
|
1140
|
-
items:
|
|
1141
|
-
type: string
|
|
1142
|
-
enum:
|
|
1143
|
-
- title
|
|
1144
|
-
- description
|
|
1145
|
-
- category
|
|
1146
|
-
- tags
|
|
1147
|
-
- outcomes
|
|
1148
|
-
volume24h:
|
|
1149
|
-
type: object
|
|
1150
|
-
properties:
|
|
1151
|
-
min:
|
|
1152
|
-
type: number
|
|
1153
|
-
max:
|
|
1154
|
-
type: number
|
|
1155
|
-
volume:
|
|
1156
|
-
type: object
|
|
1157
|
-
properties:
|
|
1158
|
-
min:
|
|
1159
|
-
type: number
|
|
1160
|
-
max:
|
|
1161
|
-
type: number
|
|
1162
|
-
liquidity:
|
|
1163
|
-
type: object
|
|
1164
|
-
properties:
|
|
1165
|
-
min:
|
|
1166
|
-
type: number
|
|
1167
|
-
max:
|
|
1168
|
-
type: number
|
|
1169
|
-
openInterest:
|
|
1170
|
-
type: object
|
|
1171
|
-
properties:
|
|
1172
|
-
min:
|
|
1173
|
-
type: number
|
|
1174
|
-
max:
|
|
1175
|
-
type: number
|
|
1176
|
-
resolutionDate:
|
|
1177
|
-
type: object
|
|
1178
|
-
properties:
|
|
1179
|
-
before:
|
|
1180
|
-
type: string
|
|
1181
|
-
format: date-time
|
|
1182
|
-
after:
|
|
1183
|
-
type: string
|
|
1184
|
-
format: date-time
|
|
1185
|
-
category:
|
|
1186
|
-
type: string
|
|
1187
|
-
tags:
|
|
1188
|
-
type: array
|
|
1189
|
-
items:
|
|
1190
|
-
type: string
|
|
1191
|
-
price:
|
|
1192
|
-
type: object
|
|
1193
|
-
properties:
|
|
1194
|
-
outcome:
|
|
1195
|
-
type: string
|
|
1196
|
-
enum:
|
|
1197
|
-
- 'yes'
|
|
1198
|
-
- 'no'
|
|
1199
|
-
- up
|
|
1200
|
-
- down
|
|
1201
|
-
min:
|
|
1202
|
-
type: number
|
|
1203
|
-
max:
|
|
1204
|
-
type: number
|
|
1205
|
-
required:
|
|
1206
|
-
- outcome
|
|
1207
|
-
priceChange24h:
|
|
1208
|
-
type: object
|
|
1209
|
-
properties:
|
|
1210
|
-
outcome:
|
|
1211
|
-
type: string
|
|
1212
|
-
enum:
|
|
1213
|
-
- 'yes'
|
|
1214
|
-
- 'no'
|
|
1215
|
-
- up
|
|
1216
|
-
- down
|
|
1217
|
-
min:
|
|
1218
|
-
type: number
|
|
1219
|
-
max:
|
|
1220
|
-
type: number
|
|
1221
|
-
required:
|
|
1222
|
-
- outcome
|
|
1181
|
+
- $ref: '#/components/schemas/MarketFilterCriteria'
|
|
1223
1182
|
- type: object
|
|
1224
1183
|
credentials:
|
|
1225
1184
|
$ref: '#/components/schemas/ExchangeCredentials'
|
|
@@ -1265,39 +1224,7 @@ paths:
|
|
|
1265
1224
|
items:
|
|
1266
1225
|
$ref: '#/components/schemas/UnifiedEvent'
|
|
1267
1226
|
- type: string
|
|
1268
|
-
-
|
|
1269
|
-
properties:
|
|
1270
|
-
text:
|
|
1271
|
-
type: string
|
|
1272
|
-
searchIn:
|
|
1273
|
-
type: array
|
|
1274
|
-
items:
|
|
1275
|
-
type: string
|
|
1276
|
-
enum:
|
|
1277
|
-
- title
|
|
1278
|
-
- description
|
|
1279
|
-
- category
|
|
1280
|
-
- tags
|
|
1281
|
-
category:
|
|
1282
|
-
type: string
|
|
1283
|
-
tags:
|
|
1284
|
-
type: array
|
|
1285
|
-
items:
|
|
1286
|
-
type: string
|
|
1287
|
-
marketCount:
|
|
1288
|
-
type: object
|
|
1289
|
-
properties:
|
|
1290
|
-
min:
|
|
1291
|
-
type: number
|
|
1292
|
-
max:
|
|
1293
|
-
type: number
|
|
1294
|
-
totalVolume:
|
|
1295
|
-
type: object
|
|
1296
|
-
properties:
|
|
1297
|
-
min:
|
|
1298
|
-
type: number
|
|
1299
|
-
max:
|
|
1300
|
-
type: number
|
|
1227
|
+
- $ref: '#/components/schemas/EventFilterCriteria'
|
|
1301
1228
|
- type: object
|
|
1302
1229
|
credentials:
|
|
1303
1230
|
$ref: '#/components/schemas/ExchangeCredentials'
|
|
@@ -2111,6 +2038,18 @@ components:
|
|
|
2111
2038
|
slug:
|
|
2112
2039
|
type: string
|
|
2113
2040
|
description: Lookup by event slug
|
|
2041
|
+
filter:
|
|
2042
|
+
allOf:
|
|
2043
|
+
- $ref: '#/components/schemas/EventFilterCriteria'
|
|
2044
|
+
description: Optional client-side filter applied after fetching
|
|
2045
|
+
category:
|
|
2046
|
+
type: string
|
|
2047
|
+
description: Shorthand for filter.category -- merged into filter (takes precedence)
|
|
2048
|
+
tags:
|
|
2049
|
+
type: array
|
|
2050
|
+
items:
|
|
2051
|
+
type: string
|
|
2052
|
+
description: Shorthand for filter.tags -- merged into filter (takes precedence)
|
|
2114
2053
|
HistoryFilterParams:
|
|
2115
2054
|
type: object
|
|
2116
2055
|
description: Deprecated - use OHLCVParams or TradesParams instead. Resolution is optional for backward compatibility.
|
|
@@ -2301,6 +2240,138 @@ components:
|
|
|
2301
2240
|
cursor:
|
|
2302
2241
|
type: string
|
|
2303
2242
|
description: Opaque pagination cursor from a previous response
|
|
2243
|
+
MarketFilterCriteria:
|
|
2244
|
+
type: object
|
|
2245
|
+
properties:
|
|
2246
|
+
text:
|
|
2247
|
+
type: string
|
|
2248
|
+
searchIn:
|
|
2249
|
+
type: array
|
|
2250
|
+
items:
|
|
2251
|
+
type: string
|
|
2252
|
+
enum:
|
|
2253
|
+
- title
|
|
2254
|
+
- description
|
|
2255
|
+
- category
|
|
2256
|
+
- tags
|
|
2257
|
+
- outcomes
|
|
2258
|
+
description: 'Default: [''title'']'
|
|
2259
|
+
volume24h:
|
|
2260
|
+
type: object
|
|
2261
|
+
properties:
|
|
2262
|
+
min:
|
|
2263
|
+
type: number
|
|
2264
|
+
max:
|
|
2265
|
+
type: number
|
|
2266
|
+
volume:
|
|
2267
|
+
type: object
|
|
2268
|
+
properties:
|
|
2269
|
+
min:
|
|
2270
|
+
type: number
|
|
2271
|
+
max:
|
|
2272
|
+
type: number
|
|
2273
|
+
description: Filter by total (lifetime) volume range
|
|
2274
|
+
liquidity:
|
|
2275
|
+
type: object
|
|
2276
|
+
properties:
|
|
2277
|
+
min:
|
|
2278
|
+
type: number
|
|
2279
|
+
max:
|
|
2280
|
+
type: number
|
|
2281
|
+
description: Filter by current liquidity range
|
|
2282
|
+
openInterest:
|
|
2283
|
+
type: object
|
|
2284
|
+
properties:
|
|
2285
|
+
min:
|
|
2286
|
+
type: number
|
|
2287
|
+
max:
|
|
2288
|
+
type: number
|
|
2289
|
+
description: Filter by open interest range
|
|
2290
|
+
resolutionDate:
|
|
2291
|
+
type: object
|
|
2292
|
+
properties:
|
|
2293
|
+
before:
|
|
2294
|
+
type: string
|
|
2295
|
+
format: date-time
|
|
2296
|
+
after:
|
|
2297
|
+
type: string
|
|
2298
|
+
format: date-time
|
|
2299
|
+
category:
|
|
2300
|
+
type: string
|
|
2301
|
+
tags:
|
|
2302
|
+
type: array
|
|
2303
|
+
items:
|
|
2304
|
+
type: string
|
|
2305
|
+
description: Match if market has ANY of these tags
|
|
2306
|
+
price:
|
|
2307
|
+
type: object
|
|
2308
|
+
properties:
|
|
2309
|
+
outcome:
|
|
2310
|
+
type: string
|
|
2311
|
+
enum:
|
|
2312
|
+
- 'yes'
|
|
2313
|
+
- 'no'
|
|
2314
|
+
- up
|
|
2315
|
+
- down
|
|
2316
|
+
min:
|
|
2317
|
+
type: number
|
|
2318
|
+
max:
|
|
2319
|
+
type: number
|
|
2320
|
+
required:
|
|
2321
|
+
- outcome
|
|
2322
|
+
priceChange24h:
|
|
2323
|
+
type: object
|
|
2324
|
+
properties:
|
|
2325
|
+
outcome:
|
|
2326
|
+
type: string
|
|
2327
|
+
enum:
|
|
2328
|
+
- 'yes'
|
|
2329
|
+
- 'no'
|
|
2330
|
+
- up
|
|
2331
|
+
- down
|
|
2332
|
+
min:
|
|
2333
|
+
type: number
|
|
2334
|
+
max:
|
|
2335
|
+
type: number
|
|
2336
|
+
required:
|
|
2337
|
+
- outcome
|
|
2338
|
+
EventFilterCriteria:
|
|
2339
|
+
type: object
|
|
2340
|
+
properties:
|
|
2341
|
+
text:
|
|
2342
|
+
type: string
|
|
2343
|
+
searchIn:
|
|
2344
|
+
type: array
|
|
2345
|
+
items:
|
|
2346
|
+
type: string
|
|
2347
|
+
enum:
|
|
2348
|
+
- title
|
|
2349
|
+
- description
|
|
2350
|
+
- category
|
|
2351
|
+
- tags
|
|
2352
|
+
description: 'Default: [''title'']'
|
|
2353
|
+
category:
|
|
2354
|
+
type: string
|
|
2355
|
+
tags:
|
|
2356
|
+
type: array
|
|
2357
|
+
items:
|
|
2358
|
+
type: string
|
|
2359
|
+
description: Match events that have any of these tags
|
|
2360
|
+
marketCount:
|
|
2361
|
+
type: object
|
|
2362
|
+
properties:
|
|
2363
|
+
min:
|
|
2364
|
+
type: number
|
|
2365
|
+
max:
|
|
2366
|
+
type: number
|
|
2367
|
+
totalVolume:
|
|
2368
|
+
type: object
|
|
2369
|
+
properties:
|
|
2370
|
+
min:
|
|
2371
|
+
type: number
|
|
2372
|
+
max:
|
|
2373
|
+
type: number
|
|
2374
|
+
description: Sum of market volumes
|
|
2304
2375
|
ExchangeCredentials:
|
|
2305
2376
|
type: object
|
|
2306
2377
|
description: Optional authentication credentials for exchange operations.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pmxt-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.31.1",
|
|
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.
|
|
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.
|
|
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.31.1,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.31.1,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",
|