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.
- package/README.md +2 -2
- package/dist/esm/generated/src/models/MarketOutcome.d.ts +6 -0
- package/dist/esm/generated/src/models/MarketOutcome.js +2 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/pmxt/client.js +20 -3
- package/dist/esm/pmxt/models.d.ts +18 -1
- package/dist/esm/pmxt/models.js +56 -1
- package/dist/generated/src/models/MarketOutcome.d.ts +6 -0
- package/dist/generated/src/models/MarketOutcome.js +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -1
- package/dist/pmxt/client.js +20 -3
- package/dist/pmxt/models.d.ts +18 -1
- package/dist/pmxt/models.js +58 -0
- package/generated/docs/MarketOutcome.md +2 -0
- package/generated/package.json +1 -1
- package/generated/src/apis/DefaultApi.js +812 -0
- package/generated/src/apis/index.js +19 -0
- package/generated/src/index.js +21 -0
- package/generated/src/models/Balance.js +54 -0
- package/generated/src/models/BaseRequest.js +49 -0
- package/generated/src/models/BaseResponse.js +51 -0
- package/generated/src/models/CancelOrderRequest.js +53 -0
- package/generated/src/models/CreateOrder200Response.js +54 -0
- package/generated/src/models/CreateOrderParams.js +85 -0
- package/generated/src/models/CreateOrderRequest.js +54 -0
- package/generated/src/models/ErrorDetail.js +48 -0
- package/generated/src/models/ErrorResponse.js +51 -0
- package/generated/src/models/EventFetchParams.js +63 -0
- package/generated/src/models/ExchangeCredentials.js +59 -0
- package/generated/src/models/ExchangeCredentialsSignatureType.js +49 -0
- package/generated/src/models/ExecutionPriceResult.js +52 -0
- package/generated/src/models/FetchBalance200Response.js +54 -0
- package/generated/src/models/FetchEvents200Response.js +54 -0
- package/generated/src/models/FetchEventsRequest.js +52 -0
- package/generated/src/models/FetchMarkets200Response.js +54 -0
- package/generated/src/models/FetchMarketsRequest.js +52 -0
- package/generated/src/models/FetchOHLCV200Response.js +54 -0
- package/generated/src/models/FetchOHLCVRequest.js +54 -0
- package/generated/src/models/FetchOHLCVRequestArgsInner.js +56 -0
- package/generated/src/models/FetchOpenOrders200Response.js +54 -0
- package/generated/src/models/FetchOpenOrdersRequest.js +51 -0
- package/generated/src/models/FetchOrderBook200Response.js +54 -0
- package/generated/src/models/FetchOrderBookRequest.js +53 -0
- package/generated/src/models/FetchPositions200Response.js +54 -0
- package/generated/src/models/FetchPositionsRequest.js +51 -0
- package/generated/src/models/FetchTrades200Response.js +54 -0
- package/generated/src/models/FetchTradesRequest.js +54 -0
- package/generated/src/models/FilterEventsRequest.js +54 -0
- package/generated/src/models/FilterEventsRequestArgsInner.js +67 -0
- package/generated/src/models/FilterMarketsRequest.js +54 -0
- package/generated/src/models/FilterMarketsRequestArgsInner.js +67 -0
- package/generated/src/models/FilterMarketsRequestArgsInnerOneOf.js +47 -0
- package/generated/src/models/GetExecutionPrice200Response.js +53 -0
- package/generated/src/models/GetExecutionPriceDetailed200Response.js +54 -0
- package/generated/src/models/GetExecutionPriceRequest.js +54 -0
- package/generated/src/models/GetExecutionPriceRequestArgsInner.js +62 -0
- package/generated/src/models/HealthCheck200Response.js +50 -0
- package/generated/src/models/HistoryFilterParams.js +68 -0
- package/generated/src/models/MarketFilterParams.js +79 -0
- package/generated/src/models/MarketOutcome.js +56 -0
- package/generated/src/models/MarketOutcome.ts +8 -0
- package/generated/src/models/Order.js +95 -0
- package/generated/src/models/OrderBook.js +53 -0
- package/generated/src/models/OrderLevel.js +50 -0
- package/generated/src/models/Position.js +62 -0
- package/generated/src/models/PriceCandle.js +58 -0
- package/generated/src/models/Trade.js +65 -0
- package/generated/src/models/UnifiedEvent.js +65 -0
- package/generated/src/models/UnifiedMarket.js +81 -0
- package/generated/src/models/WatchOrderBookRequest.js +54 -0
- package/generated/src/models/WatchOrderBookRequestArgsInner.js +49 -0
- package/generated/src/models/WatchPricesRequest.js +53 -0
- package/generated/src/models/WatchTradesRequest.js +54 -0
- package/generated/src/models/WatchUserPositionsRequest.js +49 -0
- package/generated/src/models/index.js +73 -0
- package/generated/src/runtime.js +338 -0
- package/index.ts +1 -0
- package/package.json +2 -2
- package/pmxt/client.js +957 -0
- package/pmxt/client.ts +26 -3
- package/pmxt/models.js +60 -0
- package/pmxt/models.ts +63 -1
- 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
|
-
|
|
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'],
|
package/dist/esm/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/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();
|
package/dist/esm/pmxt/client.js
CHANGED
|
@@ -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
|
|
461
|
-
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:
|
|
270
|
+
markets: MarketList;
|
|
254
271
|
/** Event URL */
|
|
255
272
|
url: string;
|
|
256
273
|
/** Event image URL */
|
package/dist/esm/pmxt/models.js
CHANGED
|
@@ -3,4 +3,59 @@
|
|
|
3
3
|
*
|
|
4
4
|
* These are clean TypeScript interfaces that provide a user-friendly API.
|
|
5
5
|
*/
|
|
6
|
-
|
|
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();
|
package/dist/pmxt/client.js
CHANGED
|
@@ -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
|
|
464
|
-
outcomeId
|
|
480
|
+
marketId,
|
|
481
|
+
outcomeId,
|
|
465
482
|
side: params.side,
|
|
466
483
|
type: params.type,
|
|
467
484
|
amount: params.amount,
|
package/dist/pmxt/models.d.ts
CHANGED
|
@@ -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:
|
|
270
|
+
markets: MarketList;
|
|
254
271
|
/** Event URL */
|
|
255
272
|
url: string;
|
|
256
273
|
/** Event image URL */
|
package/dist/pmxt/models.js
CHANGED
|
@@ -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,
|