pmxtjs 2.1.3 → 2.3.0

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 (85) hide show
  1. package/README.md +2 -2
  2. package/dist/esm/generated/src/models/MarketOutcome.d.ts +6 -0
  3. package/dist/esm/generated/src/models/MarketOutcome.js +2 -0
  4. package/dist/esm/index.d.ts +3 -0
  5. package/dist/esm/index.js +1 -0
  6. package/dist/esm/pmxt/client.js +20 -3
  7. package/dist/esm/pmxt/models.d.ts +18 -1
  8. package/dist/esm/pmxt/models.js +56 -1
  9. package/dist/generated/src/models/MarketOutcome.d.ts +6 -0
  10. package/dist/generated/src/models/MarketOutcome.js +2 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.js +3 -1
  13. package/dist/pmxt/client.js +20 -3
  14. package/dist/pmxt/models.d.ts +18 -1
  15. package/dist/pmxt/models.js +58 -0
  16. package/generated/docs/MarketOutcome.md +2 -0
  17. package/generated/package.json +1 -1
  18. package/generated/src/apis/DefaultApi.js +812 -0
  19. package/generated/src/apis/index.js +19 -0
  20. package/generated/src/index.js +21 -0
  21. package/generated/src/models/Balance.js +54 -0
  22. package/generated/src/models/BaseRequest.js +49 -0
  23. package/generated/src/models/BaseResponse.js +51 -0
  24. package/generated/src/models/CancelOrderRequest.js +53 -0
  25. package/generated/src/models/CreateOrder200Response.js +54 -0
  26. package/generated/src/models/CreateOrderParams.js +85 -0
  27. package/generated/src/models/CreateOrderRequest.js +54 -0
  28. package/generated/src/models/ErrorDetail.js +48 -0
  29. package/generated/src/models/ErrorResponse.js +51 -0
  30. package/generated/src/models/EventFetchParams.js +63 -0
  31. package/generated/src/models/ExchangeCredentials.js +59 -0
  32. package/generated/src/models/ExchangeCredentialsSignatureType.js +49 -0
  33. package/generated/src/models/ExecutionPriceResult.js +52 -0
  34. package/generated/src/models/FetchBalance200Response.js +54 -0
  35. package/generated/src/models/FetchEvents200Response.js +54 -0
  36. package/generated/src/models/FetchEventsRequest.js +52 -0
  37. package/generated/src/models/FetchMarkets200Response.js +54 -0
  38. package/generated/src/models/FetchMarketsRequest.js +52 -0
  39. package/generated/src/models/FetchOHLCV200Response.js +54 -0
  40. package/generated/src/models/FetchOHLCVRequest.js +54 -0
  41. package/generated/src/models/FetchOHLCVRequestArgsInner.js +56 -0
  42. package/generated/src/models/FetchOpenOrders200Response.js +54 -0
  43. package/generated/src/models/FetchOpenOrdersRequest.js +51 -0
  44. package/generated/src/models/FetchOrderBook200Response.js +54 -0
  45. package/generated/src/models/FetchOrderBookRequest.js +53 -0
  46. package/generated/src/models/FetchPositions200Response.js +54 -0
  47. package/generated/src/models/FetchPositionsRequest.js +51 -0
  48. package/generated/src/models/FetchTrades200Response.js +54 -0
  49. package/generated/src/models/FetchTradesRequest.js +54 -0
  50. package/generated/src/models/FilterEventsRequest.js +54 -0
  51. package/generated/src/models/FilterEventsRequestArgsInner.js +67 -0
  52. package/generated/src/models/FilterMarketsRequest.js +54 -0
  53. package/generated/src/models/FilterMarketsRequestArgsInner.js +67 -0
  54. package/generated/src/models/FilterMarketsRequestArgsInnerOneOf.js +47 -0
  55. package/generated/src/models/GetExecutionPrice200Response.js +53 -0
  56. package/generated/src/models/GetExecutionPriceDetailed200Response.js +54 -0
  57. package/generated/src/models/GetExecutionPriceRequest.js +54 -0
  58. package/generated/src/models/GetExecutionPriceRequestArgsInner.js +62 -0
  59. package/generated/src/models/HealthCheck200Response.js +50 -0
  60. package/generated/src/models/HistoryFilterParams.js +68 -0
  61. package/generated/src/models/MarketFilterParams.js +79 -0
  62. package/generated/src/models/MarketOutcome.js +56 -0
  63. package/generated/src/models/MarketOutcome.ts +8 -0
  64. package/generated/src/models/Order.js +95 -0
  65. package/generated/src/models/OrderBook.js +53 -0
  66. package/generated/src/models/OrderLevel.js +50 -0
  67. package/generated/src/models/Position.js +62 -0
  68. package/generated/src/models/PriceCandle.js +58 -0
  69. package/generated/src/models/Trade.js +65 -0
  70. package/generated/src/models/UnifiedEvent.js +65 -0
  71. package/generated/src/models/UnifiedMarket.js +81 -0
  72. package/generated/src/models/WatchOrderBookRequest.js +54 -0
  73. package/generated/src/models/WatchOrderBookRequestArgsInner.js +49 -0
  74. package/generated/src/models/WatchPricesRequest.js +53 -0
  75. package/generated/src/models/WatchTradesRequest.js +54 -0
  76. package/generated/src/models/WatchUserPositionsRequest.js +49 -0
  77. package/generated/src/models/index.js +73 -0
  78. package/generated/src/runtime.js +338 -0
  79. package/index.ts +1 -0
  80. package/package.json +2 -2
  81. package/pmxt/client.js +957 -0
  82. package/pmxt/client.ts +26 -3
  83. package/pmxt/models.js +60 -0
  84. package/pmxt/models.ts +63 -1
  85. package/pmxt/server-manager.js +204 -0
package/README.md CHANGED
@@ -107,9 +107,9 @@ const limitless = new pmxt.Limitless({
107
107
 
108
108
  - `createOrder(params)` - Place a new order
109
109
  ```typescript
110
+ // Using outcome shorthand (recommended)
110
111
  await poly.createOrder({
111
- marketId: market.marketId,
112
- outcomeId: outcome.outcomeId,
112
+ outcome: market.yes,
113
113
  side: 'buy',
114
114
  type: 'limit',
115
115
  amount: 10,
@@ -21,6 +21,12 @@ export interface MarketOutcome {
21
21
  * @memberof MarketOutcome
22
22
  */
23
23
  outcomeId?: string;
24
+ /**
25
+ * The market this outcome belongs to (set automatically)
26
+ * @type {string}
27
+ * @memberof MarketOutcome
28
+ */
29
+ marketId?: string;
24
30
  /**
25
31
  *
26
32
  * @type {string}
@@ -26,6 +26,7 @@ export function MarketOutcomeFromJSONTyped(json, ignoreDiscriminator) {
26
26
  }
27
27
  return {
28
28
  'outcomeId': json['outcomeId'] == null ? undefined : json['outcomeId'],
29
+ 'marketId': json['marketId'] == null ? undefined : json['marketId'],
29
30
  'label': json['label'] == null ? undefined : json['label'],
30
31
  'price': json['price'] == null ? undefined : json['price'],
31
32
  'priceChange24h': json['priceChange24h'] == null ? undefined : json['priceChange24h'],
@@ -41,6 +42,7 @@ export function MarketOutcomeToJSONTyped(value, ignoreDiscriminator = false) {
41
42
  }
42
43
  return {
43
44
  'outcomeId': value['outcomeId'],
45
+ 'marketId': value['marketId'],
44
46
  'label': value['label'],
45
47
  'price': value['price'],
46
48
  'priceChange24h': value['priceChange24h'],
@@ -19,12 +19,15 @@
19
19
  */
20
20
  import { Exchange, Polymarket, Kalshi, Limitless } from "./pmxt/client.js";
21
21
  import { ServerManager } from "./pmxt/server-manager.js";
22
+ import * as models from "./pmxt/models.js";
22
23
  export { Exchange, Polymarket, Kalshi, Limitless, PolymarketOptions } from "./pmxt/client.js";
23
24
  export { ServerManager } from "./pmxt/server-manager.js";
25
+ export { MarketList } from "./pmxt/models.js";
24
26
  export type * from "./pmxt/models.js";
25
27
  declare function stopServer(): Promise<void>;
26
28
  declare function restartServer(): Promise<void>;
27
29
  declare const pmxt: {
30
+ MarketList: typeof models.MarketList;
28
31
  Exchange: typeof Exchange;
29
32
  Polymarket: typeof Polymarket;
30
33
  Kalshi: typeof Kalshi;
package/dist/esm/index.js CHANGED
@@ -22,6 +22,7 @@ import { ServerManager } from "./pmxt/server-manager.js";
22
22
  import * as models from "./pmxt/models.js";
23
23
  export { Exchange, Polymarket, Kalshi, Limitless } from "./pmxt/client.js";
24
24
  export { ServerManager } from "./pmxt/server-manager.js";
25
+ export { MarketList } from "./pmxt/models.js";
25
26
  const defaultManager = new ServerManager();
26
27
  async function stopServer() {
27
28
  await defaultManager.stop();
@@ -5,11 +5,13 @@
5
5
  * OpenAPI client, matching the Python API exactly.
6
6
  */
7
7
  import { DefaultApi, Configuration, } from "../generated/src/index.js";
8
+ import { MarketList, } from "./models.js";
8
9
  import { ServerManager } from "./server-manager.js";
9
10
  // Converter functions
10
11
  function convertMarket(raw) {
11
12
  const outcomes = (raw.outcomes || []).map((o) => ({
12
13
  outcomeId: o.outcomeId,
14
+ marketId: o.marketId,
13
15
  label: o.label,
14
16
  price: o.price,
15
17
  priceChange24h: o.priceChange24h,
@@ -17,6 +19,7 @@ function convertMarket(raw) {
17
19
  }));
18
20
  const convertOutcome = (o) => o ? ({
19
21
  outcomeId: o.outcomeId,
22
+ marketId: o.marketId,
20
23
  label: o.label,
21
24
  price: o.price,
22
25
  priceChange24h: o.priceChange24h,
@@ -113,7 +116,7 @@ function convertBalance(raw) {
113
116
  };
114
117
  }
115
118
  function convertEvent(raw) {
116
- const markets = (raw.markets || []).map(convertMarket);
119
+ const markets = MarketList.from((raw.markets || []).map(convertMarket));
117
120
  return {
118
121
  id: raw.id,
119
122
  title: raw.title,
@@ -456,9 +459,23 @@ export class Exchange {
456
459
  async createOrder(params) {
457
460
  await this.initPromise;
458
461
  try {
462
+ // Resolve outcome shorthand: extract marketId/outcomeId from outcome object
463
+ let marketId = params.marketId;
464
+ let outcomeId = params.outcomeId;
465
+ if (params.outcome) {
466
+ if (marketId !== undefined || outcomeId !== undefined) {
467
+ throw new Error("Cannot specify both 'outcome' and 'marketId'/'outcomeId'. Use one or the other.");
468
+ }
469
+ const outcome = params.outcome;
470
+ if (!outcome.marketId) {
471
+ throw new Error("outcome.marketId is not set. Ensure the outcome comes from a fetched market.");
472
+ }
473
+ marketId = outcome.marketId;
474
+ outcomeId = outcome.outcomeId;
475
+ }
459
476
  const paramsDict = {
460
- marketId: params.marketId,
461
- outcomeId: params.outcomeId,
477
+ marketId,
478
+ outcomeId,
462
479
  side: params.side,
463
480
  type: params.type,
464
481
  amount: params.amount,
@@ -13,6 +13,8 @@ export interface MarketOutcome {
13
13
  * - Kalshi: Market Ticker
14
14
  */
15
15
  outcomeId: string;
16
+ /** The market this outcome belongs to (set automatically). */
17
+ marketId?: string;
16
18
  /** Human-readable label (e.g., "Trump", "Yes") */
17
19
  label: string;
18
20
  /** Current price (0.0 to 1.0, representing probability) */
@@ -237,6 +239,21 @@ export interface CreateOrderParams {
237
239
  /** Optional fee rate (e.g., 1000 for 0.1%) */
238
240
  fee?: number;
239
241
  }
242
+ /**
243
+ * A list of UnifiedMarket objects with a convenience match() method.
244
+ * Extends Array so all standard array operations work unchanged.
245
+ */
246
+ export declare class MarketList extends Array<UnifiedMarket> {
247
+ /**
248
+ * Find a single market by case-insensitive substring match.
249
+ *
250
+ * @param query - Substring to search for
251
+ * @param searchIn - Fields to search in (default: ['title'])
252
+ * @returns The matching UnifiedMarket
253
+ * @throws Error if zero or multiple markets match
254
+ */
255
+ match(query: string, searchIn?: ('title' | 'description' | 'category' | 'tags' | 'outcomes')[]): UnifiedMarket;
256
+ }
240
257
  /**
241
258
  * A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets)
242
259
  */
@@ -250,7 +267,7 @@ export interface UnifiedEvent {
250
267
  /** Event slug */
251
268
  slug: string;
252
269
  /** Related markets in this event */
253
- markets: UnifiedMarket[];
270
+ markets: MarketList;
254
271
  /** Event URL */
255
272
  url: string;
256
273
  /** Event image URL */
@@ -3,4 +3,59 @@
3
3
  *
4
4
  * These are clean TypeScript interfaces that provide a user-friendly API.
5
5
  */
6
- export {};
6
+ /**
7
+ * A list of UnifiedMarket objects with a convenience match() method.
8
+ * Extends Array so all standard array operations work unchanged.
9
+ */
10
+ export class MarketList extends Array {
11
+ /**
12
+ * Find a single market by case-insensitive substring match.
13
+ *
14
+ * @param query - Substring to search for
15
+ * @param searchIn - Fields to search in (default: ['title'])
16
+ * @returns The matching UnifiedMarket
17
+ * @throws Error if zero or multiple markets match
18
+ */
19
+ match(query, searchIn) {
20
+ const fields = searchIn || ['title'];
21
+ const lowerQuery = query.toLowerCase();
22
+ const matches = [];
23
+ for (const m of this) {
24
+ for (const field of fields) {
25
+ if (field === 'title' && m.title?.toLowerCase().includes(lowerQuery)) {
26
+ matches.push(m);
27
+ break;
28
+ }
29
+ if (field === 'description' && m.description?.toLowerCase().includes(lowerQuery)) {
30
+ matches.push(m);
31
+ break;
32
+ }
33
+ if (field === 'category' && m.category?.toLowerCase().includes(lowerQuery)) {
34
+ matches.push(m);
35
+ break;
36
+ }
37
+ if (field === 'tags' && m.tags?.some(t => t.toLowerCase().includes(lowerQuery))) {
38
+ matches.push(m);
39
+ break;
40
+ }
41
+ if (field === 'outcomes' && m.outcomes?.some(o => o.label.toLowerCase().includes(lowerQuery))) {
42
+ matches.push(m);
43
+ break;
44
+ }
45
+ }
46
+ }
47
+ if (matches.length === 0) {
48
+ throw new Error(`No markets matching '${query}'`);
49
+ }
50
+ if (matches.length > 1) {
51
+ const titlesStr = matches
52
+ .map((m, i) => {
53
+ const truncated = m.title.length > 70 ? m.title.substring(0, 70) + '...' : m.title;
54
+ return `${i + 1}. ${truncated}`;
55
+ })
56
+ .join('\n ');
57
+ throw new Error(`Multiple markets matching '${query}' (${matches.length} matches):\n ${titlesStr}\n\nPlease refine your search.`);
58
+ }
59
+ return matches[0];
60
+ }
61
+ }
@@ -21,6 +21,12 @@ export interface MarketOutcome {
21
21
  * @memberof MarketOutcome
22
22
  */
23
23
  outcomeId?: string;
24
+ /**
25
+ * The market this outcome belongs to (set automatically)
26
+ * @type {string}
27
+ * @memberof MarketOutcome
28
+ */
29
+ marketId?: string;
24
30
  /**
25
31
  *
26
32
  * @type {string}
@@ -33,6 +33,7 @@ function MarketOutcomeFromJSONTyped(json, ignoreDiscriminator) {
33
33
  }
34
34
  return {
35
35
  'outcomeId': json['outcomeId'] == null ? undefined : json['outcomeId'],
36
+ 'marketId': json['marketId'] == null ? undefined : json['marketId'],
36
37
  'label': json['label'] == null ? undefined : json['label'],
37
38
  'price': json['price'] == null ? undefined : json['price'],
38
39
  'priceChange24h': json['priceChange24h'] == null ? undefined : json['priceChange24h'],
@@ -48,6 +49,7 @@ function MarketOutcomeToJSONTyped(value, ignoreDiscriminator = false) {
48
49
  }
49
50
  return {
50
51
  'outcomeId': value['outcomeId'],
52
+ 'marketId': value['marketId'],
51
53
  'label': value['label'],
52
54
  'price': value['price'],
53
55
  'priceChange24h': value['priceChange24h'],
package/dist/index.d.ts CHANGED
@@ -19,12 +19,15 @@
19
19
  */
20
20
  import { Exchange, Polymarket, Kalshi, Limitless } from "./pmxt/client.js";
21
21
  import { ServerManager } from "./pmxt/server-manager.js";
22
+ import * as models from "./pmxt/models.js";
22
23
  export { Exchange, Polymarket, Kalshi, Limitless, PolymarketOptions } from "./pmxt/client.js";
23
24
  export { ServerManager } from "./pmxt/server-manager.js";
25
+ export { MarketList } from "./pmxt/models.js";
24
26
  export type * from "./pmxt/models.js";
25
27
  declare function stopServer(): Promise<void>;
26
28
  declare function restartServer(): Promise<void>;
27
29
  declare const pmxt: {
30
+ MarketList: typeof models.MarketList;
28
31
  Exchange: typeof Exchange;
29
32
  Polymarket: typeof Polymarket;
30
33
  Kalshi: typeof Kalshi;
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ var __importStar = (this && this.__importStar) || (function () {
52
52
  };
53
53
  })();
54
54
  Object.defineProperty(exports, "__esModule", { value: true });
55
- exports.ServerManager = exports.Limitless = exports.Kalshi = exports.Polymarket = exports.Exchange = void 0;
55
+ exports.MarketList = exports.ServerManager = exports.Limitless = exports.Kalshi = exports.Polymarket = exports.Exchange = void 0;
56
56
  const client_js_1 = require("./pmxt/client.js");
57
57
  const server_manager_js_1 = require("./pmxt/server-manager.js");
58
58
  const models = __importStar(require("./pmxt/models.js"));
@@ -63,6 +63,8 @@ Object.defineProperty(exports, "Kalshi", { enumerable: true, get: function () {
63
63
  Object.defineProperty(exports, "Limitless", { enumerable: true, get: function () { return client_js_2.Limitless; } });
64
64
  var server_manager_js_2 = require("./pmxt/server-manager.js");
65
65
  Object.defineProperty(exports, "ServerManager", { enumerable: true, get: function () { return server_manager_js_2.ServerManager; } });
66
+ var models_js_1 = require("./pmxt/models.js");
67
+ Object.defineProperty(exports, "MarketList", { enumerable: true, get: function () { return models_js_1.MarketList; } });
66
68
  const defaultManager = new server_manager_js_1.ServerManager();
67
69
  async function stopServer() {
68
70
  await defaultManager.stop();
@@ -8,11 +8,13 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.Limitless = exports.Kalshi = exports.Polymarket = exports.Exchange = void 0;
10
10
  const index_js_1 = require("../generated/src/index.js");
11
+ const models_js_1 = require("./models.js");
11
12
  const server_manager_js_1 = require("./server-manager.js");
12
13
  // Converter functions
13
14
  function convertMarket(raw) {
14
15
  const outcomes = (raw.outcomes || []).map((o) => ({
15
16
  outcomeId: o.outcomeId,
17
+ marketId: o.marketId,
16
18
  label: o.label,
17
19
  price: o.price,
18
20
  priceChange24h: o.priceChange24h,
@@ -20,6 +22,7 @@ function convertMarket(raw) {
20
22
  }));
21
23
  const convertOutcome = (o) => o ? ({
22
24
  outcomeId: o.outcomeId,
25
+ marketId: o.marketId,
23
26
  label: o.label,
24
27
  price: o.price,
25
28
  priceChange24h: o.priceChange24h,
@@ -116,7 +119,7 @@ function convertBalance(raw) {
116
119
  };
117
120
  }
118
121
  function convertEvent(raw) {
119
- const markets = (raw.markets || []).map(convertMarket);
122
+ const markets = models_js_1.MarketList.from((raw.markets || []).map(convertMarket));
120
123
  return {
121
124
  id: raw.id,
122
125
  title: raw.title,
@@ -459,9 +462,23 @@ class Exchange {
459
462
  async createOrder(params) {
460
463
  await this.initPromise;
461
464
  try {
465
+ // Resolve outcome shorthand: extract marketId/outcomeId from outcome object
466
+ let marketId = params.marketId;
467
+ let outcomeId = params.outcomeId;
468
+ if (params.outcome) {
469
+ if (marketId !== undefined || outcomeId !== undefined) {
470
+ throw new Error("Cannot specify both 'outcome' and 'marketId'/'outcomeId'. Use one or the other.");
471
+ }
472
+ const outcome = params.outcome;
473
+ if (!outcome.marketId) {
474
+ throw new Error("outcome.marketId is not set. Ensure the outcome comes from a fetched market.");
475
+ }
476
+ marketId = outcome.marketId;
477
+ outcomeId = outcome.outcomeId;
478
+ }
462
479
  const paramsDict = {
463
- marketId: params.marketId,
464
- outcomeId: params.outcomeId,
480
+ marketId,
481
+ outcomeId,
465
482
  side: params.side,
466
483
  type: params.type,
467
484
  amount: params.amount,
@@ -13,6 +13,8 @@ export interface MarketOutcome {
13
13
  * - Kalshi: Market Ticker
14
14
  */
15
15
  outcomeId: string;
16
+ /** The market this outcome belongs to (set automatically). */
17
+ marketId?: string;
16
18
  /** Human-readable label (e.g., "Trump", "Yes") */
17
19
  label: string;
18
20
  /** Current price (0.0 to 1.0, representing probability) */
@@ -237,6 +239,21 @@ export interface CreateOrderParams {
237
239
  /** Optional fee rate (e.g., 1000 for 0.1%) */
238
240
  fee?: number;
239
241
  }
242
+ /**
243
+ * A list of UnifiedMarket objects with a convenience match() method.
244
+ * Extends Array so all standard array operations work unchanged.
245
+ */
246
+ export declare class MarketList extends Array<UnifiedMarket> {
247
+ /**
248
+ * Find a single market by case-insensitive substring match.
249
+ *
250
+ * @param query - Substring to search for
251
+ * @param searchIn - Fields to search in (default: ['title'])
252
+ * @returns The matching UnifiedMarket
253
+ * @throws Error if zero or multiple markets match
254
+ */
255
+ match(query: string, searchIn?: ('title' | 'description' | 'category' | 'tags' | 'outcomes')[]): UnifiedMarket;
256
+ }
240
257
  /**
241
258
  * A grouped collection of related markets (e.g., "Who will be Fed Chair?" contains multiple candidate markets)
242
259
  */
@@ -250,7 +267,7 @@ export interface UnifiedEvent {
250
267
  /** Event slug */
251
268
  slug: string;
252
269
  /** Related markets in this event */
253
- markets: UnifiedMarket[];
270
+ markets: MarketList;
254
271
  /** Event URL */
255
272
  url: string;
256
273
  /** Event image URL */
@@ -5,3 +5,61 @@
5
5
  * These are clean TypeScript interfaces that provide a user-friendly API.
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MarketList = void 0;
9
+ /**
10
+ * A list of UnifiedMarket objects with a convenience match() method.
11
+ * Extends Array so all standard array operations work unchanged.
12
+ */
13
+ class MarketList extends Array {
14
+ /**
15
+ * Find a single market by case-insensitive substring match.
16
+ *
17
+ * @param query - Substring to search for
18
+ * @param searchIn - Fields to search in (default: ['title'])
19
+ * @returns The matching UnifiedMarket
20
+ * @throws Error if zero or multiple markets match
21
+ */
22
+ match(query, searchIn) {
23
+ const fields = searchIn || ['title'];
24
+ const lowerQuery = query.toLowerCase();
25
+ const matches = [];
26
+ for (const m of this) {
27
+ for (const field of fields) {
28
+ if (field === 'title' && m.title?.toLowerCase().includes(lowerQuery)) {
29
+ matches.push(m);
30
+ break;
31
+ }
32
+ if (field === 'description' && m.description?.toLowerCase().includes(lowerQuery)) {
33
+ matches.push(m);
34
+ break;
35
+ }
36
+ if (field === 'category' && m.category?.toLowerCase().includes(lowerQuery)) {
37
+ matches.push(m);
38
+ break;
39
+ }
40
+ if (field === 'tags' && m.tags?.some(t => t.toLowerCase().includes(lowerQuery))) {
41
+ matches.push(m);
42
+ break;
43
+ }
44
+ if (field === 'outcomes' && m.outcomes?.some(o => o.label.toLowerCase().includes(lowerQuery))) {
45
+ matches.push(m);
46
+ break;
47
+ }
48
+ }
49
+ }
50
+ if (matches.length === 0) {
51
+ throw new Error(`No markets matching '${query}'`);
52
+ }
53
+ if (matches.length > 1) {
54
+ const titlesStr = matches
55
+ .map((m, i) => {
56
+ const truncated = m.title.length > 70 ? m.title.substring(0, 70) + '...' : m.title;
57
+ return `${i + 1}. ${truncated}`;
58
+ })
59
+ .join('\n ');
60
+ throw new Error(`Multiple markets matching '${query}' (${matches.length} matches):\n ${titlesStr}\n\nPlease refine your search.`);
61
+ }
62
+ return matches[0];
63
+ }
64
+ }
65
+ exports.MarketList = MarketList;
@@ -7,6 +7,7 @@
7
7
  Name | Type
8
8
  ------------ | -------------
9
9
  `outcomeId` | string
10
+ `marketId` | string
10
11
  `label` | string
11
12
  `price` | number
12
13
  `priceChange24h` | number
@@ -20,6 +21,7 @@ import type { MarketOutcome } from 'pmxtjs'
20
21
  // TODO: Update the object below with actual values
21
22
  const example = {
22
23
  "outcomeId": null,
24
+ "marketId": null,
23
25
  "label": null,
24
26
  "price": null,
25
27
  "priceChange24h": null,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmxtjs",
3
- "version": "2.1.3",
3
+ "version": "2.3.0",
4
4
  "description": "OpenAPI client for pmxtjs",
5
5
  "author": "OpenAPI-Generator",
6
6
  "repository": {