pmxtjs 2.48.5 → 2.49.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 (79) hide show
  1. package/dist/esm/generated/src/models/OrderLevel.d.ts +6 -0
  2. package/dist/esm/generated/src/models/OrderLevel.js +2 -0
  3. package/dist/esm/generated/src/models/UnifiedMarket.d.ts +2 -2
  4. package/dist/esm/generated/src/models/UnifiedMarket.js +2 -4
  5. package/dist/esm/index.d.ts +2 -0
  6. package/dist/esm/index.js +1 -0
  7. package/dist/esm/pmxt/client.d.ts +106 -5
  8. package/dist/esm/pmxt/client.js +400 -6
  9. package/dist/esm/pmxt/constants.d.ts +11 -0
  10. package/dist/esm/pmxt/constants.js +13 -0
  11. package/dist/esm/pmxt/errors.d.ts +3 -0
  12. package/dist/esm/pmxt/errors.js +9 -0
  13. package/dist/esm/pmxt/escrow.d.ts +39 -0
  14. package/dist/esm/pmxt/escrow.js +78 -0
  15. package/dist/esm/pmxt/feed-client.d.ts +3 -0
  16. package/dist/esm/pmxt/feed-client.js +11 -2
  17. package/dist/esm/pmxt/hosted-errors.d.ts +84 -0
  18. package/dist/esm/pmxt/hosted-errors.js +186 -0
  19. package/dist/esm/pmxt/hosted-mappers.d.ts +45 -0
  20. package/dist/esm/pmxt/hosted-mappers.js +291 -0
  21. package/dist/esm/pmxt/hosted-routing.d.ts +69 -0
  22. package/dist/esm/pmxt/hosted-routing.js +119 -0
  23. package/dist/esm/pmxt/hosted-typed-data.d.ts +36 -0
  24. package/dist/esm/pmxt/hosted-typed-data.js +580 -0
  25. package/dist/esm/pmxt/models.d.ts +46 -8
  26. package/dist/esm/pmxt/server-manager.d.ts +4 -0
  27. package/dist/esm/pmxt/server-manager.js +6 -0
  28. package/dist/esm/pmxt/signers.d.ts +57 -0
  29. package/dist/esm/pmxt/signers.js +50 -0
  30. package/dist/esm/pmxt/ws-client.js +2 -1
  31. package/dist/generated/src/models/OrderLevel.d.ts +6 -0
  32. package/dist/generated/src/models/OrderLevel.js +2 -0
  33. package/dist/generated/src/models/UnifiedMarket.d.ts +2 -2
  34. package/dist/generated/src/models/UnifiedMarket.js +2 -4
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +1 -0
  37. package/dist/pmxt/client.d.ts +106 -5
  38. package/dist/pmxt/client.js +399 -5
  39. package/dist/pmxt/constants.d.ts +11 -0
  40. package/dist/pmxt/constants.js +14 -1
  41. package/dist/pmxt/errors.d.ts +3 -0
  42. package/dist/pmxt/errors.js +11 -1
  43. package/dist/pmxt/escrow.d.ts +39 -0
  44. package/dist/pmxt/escrow.js +82 -0
  45. package/dist/pmxt/feed-client.d.ts +3 -0
  46. package/dist/pmxt/feed-client.js +11 -2
  47. package/dist/pmxt/hosted-errors.d.ts +84 -0
  48. package/dist/pmxt/hosted-errors.js +201 -0
  49. package/dist/pmxt/hosted-mappers.d.ts +45 -0
  50. package/dist/pmxt/hosted-mappers.js +302 -0
  51. package/dist/pmxt/hosted-routing.d.ts +69 -0
  52. package/dist/pmxt/hosted-routing.js +126 -0
  53. package/dist/pmxt/hosted-typed-data.d.ts +36 -0
  54. package/dist/pmxt/hosted-typed-data.js +619 -0
  55. package/dist/pmxt/models.d.ts +46 -8
  56. package/dist/pmxt/server-manager.d.ts +4 -0
  57. package/dist/pmxt/server-manager.js +6 -0
  58. package/dist/pmxt/signers.d.ts +57 -0
  59. package/dist/pmxt/signers.js +55 -0
  60. package/dist/pmxt/ws-client.js +2 -1
  61. package/generated/docs/OrderLevel.md +2 -0
  62. package/generated/package.json +1 -1
  63. package/generated/src/models/OrderLevel.ts +8 -0
  64. package/generated/src/models/UnifiedMarket.ts +4 -5
  65. package/index.ts +1 -0
  66. package/package.json +11 -2
  67. package/pmxt/client.ts +495 -9
  68. package/pmxt/constants.ts +15 -0
  69. package/pmxt/errors.ts +11 -0
  70. package/pmxt/escrow.ts +93 -0
  71. package/pmxt/feed-client.ts +14 -2
  72. package/pmxt/hosted-errors.ts +216 -0
  73. package/pmxt/hosted-mappers.ts +312 -0
  74. package/pmxt/hosted-routing.ts +165 -0
  75. package/pmxt/hosted-typed-data.ts +767 -0
  76. package/pmxt/models.ts +65 -8
  77. package/pmxt/server-manager.ts +7 -0
  78. package/pmxt/signers.ts +86 -0
  79. package/pmxt/ws-client.ts +2 -1
@@ -164,6 +164,12 @@ export interface UserTrade {
164
164
  outcomeId?: string;
165
165
  /** Market ID */
166
166
  marketId?: string;
167
+ /** On-chain transaction hash (populated in hosted mode when the trade was settled on-chain). */
168
+ txHash?: string;
169
+ /** Chain identifier (e.g. 'polygon'). Populated in hosted mode. */
170
+ chain?: string;
171
+ /** On-chain block number where this trade was included. Populated in hosted mode. */
172
+ blockNumber?: number;
167
173
  }
168
174
  /**
169
175
  * Result of a paginated market fetch.
@@ -222,6 +228,8 @@ export interface Order {
222
228
  status: string;
223
229
  /** Amount filled */
224
230
  filled: number;
231
+ /** Amount filled in shares/contracts (if different from USDC-denominated `filled`). */
232
+ filledShares?: number;
225
233
  /** Amount remaining */
226
234
  remaining: number;
227
235
  /** Unix timestamp (milliseconds) */
@@ -230,6 +238,14 @@ export interface Order {
230
238
  price?: number;
231
239
  /** Trading fee */
232
240
  fee?: number;
241
+ /** Fee rate in basis points applied to this order (e.g. 100 = 1%). */
242
+ feeRateBps?: number;
243
+ /** On-chain transaction hash (populated in hosted mode when the order was settled on-chain). */
244
+ txHash?: string;
245
+ /** Chain identifier (e.g. 'polygon'). Populated in hosted mode. */
246
+ chain?: string;
247
+ /** On-chain block number where this order was included. Populated in hosted mode. */
248
+ blockNumber?: number;
233
249
  }
234
250
  /**
235
251
  * A current position in a market.
@@ -239,18 +255,24 @@ export interface Position {
239
255
  marketId: string;
240
256
  /** Outcome ID */
241
257
  outcomeId: string;
242
- /** Outcome label */
243
- outcomeLabel: string;
258
+ /** Outcome label (populated in venue-direct mode; may be undefined in hosted mode when the server hasn't enriched). */
259
+ outcomeLabel?: string;
244
260
  /** Position size (positive for long, negative for short) */
245
261
  size: number;
246
- /** Average entry price */
247
- entryPrice: number;
248
- /** Current market price */
249
- currentPrice: number;
250
- /** Unrealized profit/loss */
251
- unrealizedPnL: number;
262
+ /** Average entry price (populated in venue-direct mode; may be undefined in hosted mode when the server hasn't enriched). */
263
+ entryPrice?: number;
264
+ /** Current market price (populated in venue-direct mode; may be undefined in hosted mode when the server hasn't enriched). */
265
+ currentPrice?: number;
266
+ /** Unrealized profit/loss (populated in venue-direct mode; may be undefined in hosted mode when the server hasn't enriched). */
267
+ unrealizedPnL?: number;
252
268
  /** Realized profit/loss */
253
269
  realizedPnL?: number;
270
+ /** On-chain transaction hash for the latest position update. Populated in hosted mode. */
271
+ txHash?: string;
272
+ /** Chain identifier (e.g. 'polygon'). Populated in hosted mode. */
273
+ chain?: string;
274
+ /** On-chain block number for the latest position update. Populated in hosted mode. */
275
+ blockNumber?: number;
254
276
  }
255
277
  /**
256
278
  * Account balance.
@@ -264,6 +286,12 @@ export interface Balance {
264
286
  available: number;
265
287
  /** Locked in open orders */
266
288
  locked: number;
289
+ /** On-chain transaction hash for the latest balance update. Populated in hosted mode. */
290
+ txHash?: string;
291
+ /** Chain identifier (e.g. 'polygon'). Populated in hosted mode. */
292
+ chain?: string;
293
+ /** On-chain block number for the latest balance update. Populated in hosted mode. */
294
+ blockNumber?: number;
267
295
  }
268
296
  /**
269
297
  * Candle interval for OHLCV data.
@@ -322,6 +350,8 @@ export interface EventFetchParams {
322
350
  limit?: number;
323
351
  /** Pagination offset */
324
352
  offset?: number;
353
+ /** Opaque venue pagination cursor, where supported. */
354
+ cursor?: string;
325
355
  /** Sort order */
326
356
  sort?: SortOption;
327
357
  /** Filter by event status */
@@ -332,6 +362,8 @@ export interface EventFetchParams {
332
362
  eventId?: string;
333
363
  /** Lookup by event slug */
334
364
  slug?: string;
365
+ /** Filter events by their parent series. Accepts the venue-native series id / ticker / slug. */
366
+ series?: string;
335
367
  /** Filter by event category (e.g. "sports", "politics", "crypto") */
336
368
  category?: string;
337
369
  /** Filter by tags attached to the event */
@@ -370,6 +402,12 @@ export interface CreateOrderParams {
370
402
  price?: number;
371
403
  /** Optional fee rate (e.g., 1000 for 0.1%) */
372
404
  fee?: number;
405
+ /** Optional override for Limitless/Polymarket */
406
+ tickSize?: number;
407
+ /** Optional override to skip neg-risk lookup (Polymarket) */
408
+ negRisk?: boolean;
409
+ /** Limitless delegated signing: profile ID to trade on behalf of */
410
+ onBehalfOf?: number;
373
411
  }
374
412
  /** Alias matching the core MarketFetchParams name. */
375
413
  export type MarketFetchParams = MarketFilterParams;
@@ -36,6 +36,10 @@ export declare class ServerManager {
36
36
  * Check if the server is running.
37
37
  */
38
38
  isServerRunning(): Promise<boolean>;
39
+ /**
40
+ * Backwards-compatible alias for `isServerRunning()`.
41
+ */
42
+ isServerAlive(): Promise<boolean>;
39
43
  /**
40
44
  * Wait for the server to be ready.
41
45
  * Requires a lock file to be present to avoid falsely matching an unrelated
@@ -134,6 +134,12 @@ class ServerManager {
134
134
  return false;
135
135
  }
136
136
  }
137
+ /**
138
+ * Backwards-compatible alias for `isServerRunning()`.
139
+ */
140
+ async isServerAlive() {
141
+ return this.isServerRunning();
142
+ }
137
143
  /**
138
144
  * Wait for the server to be ready.
139
145
  * Requires a lock file to be present to avoid falsely matching an unrelated
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Signer helpers for hosted PMXT trading.
3
+ *
4
+ * `ethers` is an optional peer dependency — read-only SDK users do not need it
5
+ * installed. Hosted-mode signing imports it lazily via `require()` and throws
6
+ * a clear install hint when it's missing.
7
+ *
8
+ * Mirrors `sdks/python/pmxt/signers.py`.
9
+ */
10
+ /**
11
+ * EIP-712 typed data payload as accepted by ethers v6 / Web3 wallets.
12
+ * `EIP712Domain` is allowed inside `types` (and is the standard) but ethers
13
+ * strips it before signing — see {@link EthersSigner.signTypedData}.
14
+ */
15
+ export interface TypedData {
16
+ types: Record<string, Array<{
17
+ name: string;
18
+ type: string;
19
+ }>>;
20
+ primaryType: string;
21
+ domain: {
22
+ name: string;
23
+ version: string;
24
+ chainId: number;
25
+ verifyingContract: string;
26
+ };
27
+ message: Record<string, unknown>;
28
+ }
29
+ /**
30
+ * Pluggable signer abstraction. Implement this to integrate hardware wallets
31
+ * or remote signing services. {@link EthersSigner} is the built-in
32
+ * private-key implementation.
33
+ */
34
+ export interface Signer {
35
+ readonly address: string;
36
+ signTypedData(typedData: TypedData): Promise<string>;
37
+ }
38
+ /**
39
+ * Built-in signer backed by an ethers `Wallet`.
40
+ *
41
+ * `ethers` is imported lazily — a clear, install-hint-bearing error is thrown
42
+ * if the peer dependency is missing.
43
+ */
44
+ export declare class EthersSigner implements Signer {
45
+ private readonly _wallet;
46
+ readonly address: string;
47
+ constructor(privateKey: string);
48
+ signTypedData(typedData: TypedData): Promise<string>;
49
+ }
50
+ /**
51
+ * Convenience factory: build a {@link Signer} from a raw private key.
52
+ *
53
+ * Currently always returns an {@link EthersSigner}. Async for forward
54
+ * compatibility with key-loaders that may need to await (e.g. keystore
55
+ * decryption).
56
+ */
57
+ export declare function signerFromPrivateKey(privateKey: string): Promise<Signer>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * Signer helpers for hosted PMXT trading.
4
+ *
5
+ * `ethers` is an optional peer dependency — read-only SDK users do not need it
6
+ * installed. Hosted-mode signing imports it lazily via `require()` and throws
7
+ * a clear install hint when it's missing.
8
+ *
9
+ * Mirrors `sdks/python/pmxt/signers.py`.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EthersSigner = void 0;
13
+ exports.signerFromPrivateKey = signerFromPrivateKey;
14
+ const ETHERS_INSTALL_HINT = "hosted trading requires the optional 'ethers' peer dependency. Install with: npm install ethers";
15
+ /**
16
+ * Built-in signer backed by an ethers `Wallet`.
17
+ *
18
+ * `ethers` is imported lazily — a clear, install-hint-bearing error is thrown
19
+ * if the peer dependency is missing.
20
+ */
21
+ class EthersSigner {
22
+ _wallet; // ethers.Wallet
23
+ address;
24
+ constructor(privateKey) {
25
+ let ethers;
26
+ try {
27
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
28
+ ethers = require("ethers");
29
+ }
30
+ catch {
31
+ throw new Error(ETHERS_INSTALL_HINT);
32
+ }
33
+ this._wallet = new ethers.Wallet(privateKey);
34
+ this.address = this._wallet.address;
35
+ }
36
+ async signTypedData(typedData) {
37
+ // ethers expects `types` WITHOUT the EIP712Domain entry — it derives
38
+ // the domain hash from the `domain` argument.
39
+ const types = { ...typedData.types };
40
+ delete types["EIP712Domain"];
41
+ const sig = await this._wallet.signTypedData(typedData.domain, types, typedData.message);
42
+ return sig.startsWith("0x") ? sig : "0x" + sig;
43
+ }
44
+ }
45
+ exports.EthersSigner = EthersSigner;
46
+ /**
47
+ * Convenience factory: build a {@link Signer} from a raw private key.
48
+ *
49
+ * Currently always returns an {@link EthersSigner}. Async for forward
50
+ * compatibility with key-loaders that may need to await (e.g. keystore
51
+ * decryption).
52
+ */
53
+ async function signerFromPrivateKey(privateKey) {
54
+ return new EthersSigner(privateKey);
55
+ }
@@ -10,6 +10,7 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.SidecarWsClient = void 0;
12
12
  const errors_js_1 = require("./errors.js");
13
+ const logger_js_1 = require("./logger.js");
13
14
  const MAX_QUEUED_MESSAGES_PER_SUBSCRIPTION = 100_000;
14
15
  /**
15
16
  * Multiplexed WebSocket client for the pmxt sidecar.
@@ -120,7 +121,7 @@ class SidecarWsClient {
120
121
  }
121
122
  catch (err) {
122
123
  // Dispatch bug -- log and continue; don't kill the connection.
123
- console.error('[SidecarWsClient] dispatch error:', err);
124
+ logger_js_1.logger.error('[SidecarWsClient] dispatch error:', { err });
124
125
  }
125
126
  };
126
127
  });
@@ -8,6 +8,7 @@ Name | Type
8
8
  ------------ | -------------
9
9
  `price` | number
10
10
  `size` | number
11
+ `orderCount` | number
11
12
 
12
13
  ## Example
13
14
 
@@ -18,6 +19,7 @@ import type { OrderLevel } from 'pmxtjs'
18
19
  const example = {
19
20
  "price": null,
20
21
  "size": null,
22
+ "orderCount": null,
21
23
  } satisfies OrderLevel
22
24
 
23
25
  console.log(example)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmxtjs",
3
- "version": "2.48.5",
3
+ "version": "2.49.0",
4
4
  "description": "OpenAPI client for pmxtjs",
5
5
  "author": "OpenAPI-Generator",
6
6
  "repository": {
@@ -31,6 +31,12 @@ export interface OrderLevel {
31
31
  * @memberof OrderLevel
32
32
  */
33
33
  size: number;
34
+ /**
35
+ *
36
+ * @type {number}
37
+ * @memberof OrderLevel
38
+ */
39
+ orderCount?: number;
34
40
  }
35
41
 
36
42
  /**
@@ -54,6 +60,7 @@ export function OrderLevelFromJSONTyped(json: any, ignoreDiscriminator: boolean)
54
60
 
55
61
  'price': json['price'],
56
62
  'size': json['size'],
63
+ 'orderCount': json['orderCount'] == null ? undefined : json['orderCount'],
57
64
  };
58
65
  }
59
66
 
@@ -70,6 +77,7 @@ export function OrderLevelToJSONTyped(value?: OrderLevel | null, ignoreDiscrimin
70
77
 
71
78
  'price': value['price'],
72
79
  'size': value['size'],
80
+ 'orderCount': value['orderCount'],
73
81
  };
74
82
  }
75
83
 
@@ -64,11 +64,11 @@ export interface UnifiedMarket {
64
64
  */
65
65
  outcomes: Array<MarketOutcome>;
66
66
  /**
67
- * When the market is scheduled to resolve.
67
+ * When the market is scheduled to resolve. Optional because some venues do not publish a cutoff for every market (e.g. Opinion categorical children) — emit `undefined` rather than coercing to epoch.
68
68
  * @type {Date}
69
69
  * @memberof UnifiedMarket
70
70
  */
71
- resolutionDate: Date;
71
+ resolutionDate?: Date;
72
72
  /**
73
73
  * Trading volume over the past 24 hours (USD).
74
74
  * @type {number}
@@ -181,7 +181,6 @@ export function instanceOfUnifiedMarket(value: object): value is UnifiedMarket {
181
181
  if (!('title' in value) || value['title'] === undefined) return false;
182
182
  if (!('description' in value) || value['description'] === undefined) return false;
183
183
  if (!('outcomes' in value) || value['outcomes'] === undefined) return false;
184
- if (!('resolutionDate' in value) || value['resolutionDate'] === undefined) return false;
185
184
  if (!('volume24h' in value) || value['volume24h'] === undefined) return false;
186
185
  if (!('liquidity' in value) || value['liquidity'] === undefined) return false;
187
186
  if (!('url' in value) || value['url'] === undefined) return false;
@@ -204,7 +203,7 @@ export function UnifiedMarketFromJSONTyped(json: any, ignoreDiscriminator: boole
204
203
  'description': json['description'],
205
204
  'slug': json['slug'] == null ? undefined : json['slug'],
206
205
  'outcomes': ((json['outcomes'] as Array<any>).map(MarketOutcomeFromJSON)),
207
- 'resolutionDate': (new Date(json['resolutionDate'])),
206
+ 'resolutionDate': json['resolutionDate'] == null ? undefined : (new Date(json['resolutionDate'])),
208
207
  'volume24h': json['volume24h'],
209
208
  'volume': json['volume'] == null ? undefined : json['volume'],
210
209
  'liquidity': json['liquidity'],
@@ -242,7 +241,7 @@ export function UnifiedMarketToJSONTyped(value?: UnifiedMarket | null, ignoreDis
242
241
  'description': value['description'],
243
242
  'slug': value['slug'],
244
243
  'outcomes': ((value['outcomes'] as Array<any>).map(MarketOutcomeToJSON)),
245
- 'resolutionDate': value['resolutionDate'].toISOString(),
244
+ 'resolutionDate': value['resolutionDate'] == null ? value['resolutionDate'] : value['resolutionDate'].toISOString(),
246
245
  'volume24h': value['volume24h'],
247
246
  'volume': value['volume'],
248
247
  'liquidity': value['liquidity'],
package/index.ts CHANGED
@@ -36,6 +36,7 @@ export { MarketList } from "./pmxt/models.js";
36
36
  export type { UnifiedSeries } from "./pmxt/models.js";
37
37
  export type * from "./pmxt/models.js";
38
38
  export * from "./pmxt/errors.js";
39
+ export * from "./pmxt/hosted-errors.js";
39
40
 
40
41
 
41
42
  const defaultManager = new ServerManager();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmxtjs",
3
- "version": "2.48.5",
3
+ "version": "2.49.0",
4
4
  "description": "Unified prediction market data API - The ccxt for prediction markets",
5
5
  "author": "PMXT Contributors",
6
6
  "repository": {
@@ -43,12 +43,21 @@
43
43
  "unified"
44
44
  ],
45
45
  "dependencies": {
46
- "pmxt-core": "2.48.5",
46
+ "pmxt-core": "2.49.0",
47
47
  "ws": "^8.18.0"
48
48
  },
49
+ "peerDependencies": {
50
+ "ethers": ">=6.0.0 <7.0.0"
51
+ },
52
+ "peerDependenciesMeta": {
53
+ "ethers": {
54
+ "optional": true
55
+ }
56
+ },
49
57
  "devDependencies": {
50
58
  "@types/jest": "^30.0.0",
51
59
  "@types/node": "^20.0.0",
60
+ "ethers": "^6.16.0",
52
61
  "jest": "^30.4.2",
53
62
  "ts-jest": "^29.4.11",
54
63
  "typescript": "^5.0.0"