pmxtjs 2.40.6 → 2.41.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/esm/generated/src/apis/DefaultApi.d.ts +24 -24
- package/dist/esm/generated/src/apis/DefaultApi.js +24 -24
- package/dist/esm/generated/src/models/UnwatchAddressRequest.d.ts +1 -1
- package/dist/esm/generated/src/models/UnwatchAddressRequest.js +1 -3
- package/dist/esm/generated/src/models/UnwatchOrderBookRequest.d.ts +1 -1
- package/dist/esm/generated/src/models/UnwatchOrderBookRequest.js +1 -3
- package/dist/esm/generated/src/models/WatchAddressRequest.d.ts +2 -3
- package/dist/esm/generated/src/models/WatchAddressRequest.js +2 -5
- package/dist/esm/generated/src/models/WatchOrderBookRequest.d.ts +2 -3
- package/dist/esm/generated/src/models/WatchOrderBookRequest.js +2 -5
- package/dist/esm/generated/src/models/WatchOrderBooksRequest.d.ts +2 -3
- package/dist/esm/generated/src/models/WatchOrderBooksRequest.js +2 -5
- package/dist/esm/generated/src/models/WatchTradesRequest.d.ts +2 -3
- package/dist/esm/generated/src/models/WatchTradesRequest.js +2 -5
- package/dist/esm/generated/src/models/index.d.ts +0 -3
- package/dist/esm/generated/src/models/index.js +0 -3
- package/dist/esm/pmxt/client.d.ts +27 -6
- package/dist/esm/pmxt/client.js +132 -14
- package/dist/esm/pmxt/models.d.ts +11 -0
- package/dist/esm/pmxt/ws-client.d.ts +2 -1
- package/dist/esm/pmxt/ws-client.js +25 -14
- package/dist/generated/src/apis/DefaultApi.d.ts +24 -24
- package/dist/generated/src/apis/DefaultApi.js +24 -24
- package/dist/generated/src/models/UnwatchAddressRequest.d.ts +1 -1
- package/dist/generated/src/models/UnwatchAddressRequest.js +1 -3
- package/dist/generated/src/models/UnwatchOrderBookRequest.d.ts +1 -1
- package/dist/generated/src/models/UnwatchOrderBookRequest.js +1 -3
- package/dist/generated/src/models/WatchAddressRequest.d.ts +2 -3
- package/dist/generated/src/models/WatchAddressRequest.js +2 -5
- package/dist/generated/src/models/WatchOrderBookRequest.d.ts +2 -3
- package/dist/generated/src/models/WatchOrderBookRequest.js +2 -5
- package/dist/generated/src/models/WatchOrderBooksRequest.d.ts +2 -3
- package/dist/generated/src/models/WatchOrderBooksRequest.js +2 -5
- package/dist/generated/src/models/WatchTradesRequest.d.ts +2 -3
- package/dist/generated/src/models/WatchTradesRequest.js +2 -5
- package/dist/generated/src/models/index.d.ts +0 -3
- package/dist/generated/src/models/index.js +0 -3
- package/dist/pmxt/client.d.ts +27 -6
- package/dist/pmxt/client.js +132 -14
- package/dist/pmxt/models.d.ts +11 -0
- package/dist/pmxt/ws-client.d.ts +2 -1
- package/dist/pmxt/ws-client.js +25 -14
- package/generated/.openapi-generator/FILES +0 -6
- package/generated/docs/DefaultApi.md +24 -24
- package/generated/docs/WatchAddressRequest.md +1 -1
- package/generated/docs/WatchOrderBookRequest.md +1 -1
- package/generated/docs/WatchOrderBooksRequest.md +1 -1
- package/generated/docs/WatchTradesRequest.md +1 -1
- package/generated/package.json +1 -1
- package/generated/src/apis/DefaultApi.ts +24 -24
- package/generated/src/models/UnwatchAddressRequest.ts +2 -3
- package/generated/src/models/UnwatchOrderBookRequest.ts +2 -3
- package/generated/src/models/WatchAddressRequest.ts +4 -12
- package/generated/src/models/WatchOrderBookRequest.ts +4 -12
- package/generated/src/models/WatchOrderBooksRequest.ts +4 -12
- package/generated/src/models/WatchTradesRequest.ts +4 -12
- package/generated/src/models/index.ts +0 -3
- package/package.json +3 -2
- package/pmxt/client.ts +137 -16
- package/pmxt/models.ts +14 -0
- package/pmxt/ws-client.ts +26 -13
- package/dist/esm/generated/src/models/WatchAddressRequestArgsInner.d.ts +0 -21
- package/dist/esm/generated/src/models/WatchAddressRequestArgsInner.js +0 -37
- package/dist/esm/generated/src/models/WatchOrderBookRequestArgsInner.d.ts +0 -21
- package/dist/esm/generated/src/models/WatchOrderBookRequestArgsInner.js +0 -43
- package/dist/esm/generated/src/models/WatchOrderBooksRequestArgsInner.d.ts +0 -21
- package/dist/esm/generated/src/models/WatchOrderBooksRequestArgsInner.js +0 -47
- package/dist/generated/src/models/WatchAddressRequestArgsInner.d.ts +0 -21
- package/dist/generated/src/models/WatchAddressRequestArgsInner.js +0 -43
- package/dist/generated/src/models/WatchOrderBookRequestArgsInner.d.ts +0 -21
- package/dist/generated/src/models/WatchOrderBookRequestArgsInner.js +0 -49
- package/dist/generated/src/models/WatchOrderBooksRequestArgsInner.d.ts +0 -21
- package/dist/generated/src/models/WatchOrderBooksRequestArgsInner.js +0 -53
- package/generated/docs/WatchAddressRequestArgsInner.md +0 -32
- package/generated/docs/WatchOrderBookRequestArgsInner.md +0 -32
- package/generated/docs/WatchOrderBooksRequestArgsInner.md +0 -32
- package/generated/src/models/WatchAddressRequestArgsInner.ts +0 -49
- package/generated/src/models/WatchOrderBookRequestArgsInner.ts +0 -55
- package/generated/src/models/WatchOrderBooksRequestArgsInner.ts +0 -59
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* https://openapi-generator.tech
|
|
10
10
|
* Do not edit the class manually.
|
|
11
11
|
*/
|
|
12
|
-
import type { WatchAddressRequestArgsInner } from './WatchAddressRequestArgsInner';
|
|
13
12
|
import type { ExchangeCredentials } from './ExchangeCredentials';
|
|
14
13
|
/**
|
|
15
14
|
*
|
|
@@ -19,10 +18,10 @@ import type { ExchangeCredentials } from './ExchangeCredentials';
|
|
|
19
18
|
export interface WatchAddressRequest {
|
|
20
19
|
/**
|
|
21
20
|
*
|
|
22
|
-
* @type {Array<
|
|
21
|
+
* @type {Array<string>}
|
|
23
22
|
* @memberof WatchAddressRequest
|
|
24
23
|
*/
|
|
25
|
-
args
|
|
24
|
+
args?: Array<string>;
|
|
26
25
|
/**
|
|
27
26
|
*
|
|
28
27
|
* @type {ExchangeCredentials}
|
|
@@ -18,14 +18,11 @@ exports.WatchAddressRequestFromJSON = WatchAddressRequestFromJSON;
|
|
|
18
18
|
exports.WatchAddressRequestFromJSONTyped = WatchAddressRequestFromJSONTyped;
|
|
19
19
|
exports.WatchAddressRequestToJSON = WatchAddressRequestToJSON;
|
|
20
20
|
exports.WatchAddressRequestToJSONTyped = WatchAddressRequestToJSONTyped;
|
|
21
|
-
const WatchAddressRequestArgsInner_1 = require("./WatchAddressRequestArgsInner");
|
|
22
21
|
const ExchangeCredentials_1 = require("./ExchangeCredentials");
|
|
23
22
|
/**
|
|
24
23
|
* Check if a given object implements the WatchAddressRequest interface.
|
|
25
24
|
*/
|
|
26
25
|
function instanceOfWatchAddressRequest(value) {
|
|
27
|
-
if (!('args' in value) || value['args'] === undefined)
|
|
28
|
-
return false;
|
|
29
26
|
return true;
|
|
30
27
|
}
|
|
31
28
|
function WatchAddressRequestFromJSON(json) {
|
|
@@ -36,7 +33,7 @@ function WatchAddressRequestFromJSONTyped(json, ignoreDiscriminator) {
|
|
|
36
33
|
return json;
|
|
37
34
|
}
|
|
38
35
|
return {
|
|
39
|
-
'args':
|
|
36
|
+
'args': json['args'] == null ? undefined : json['args'],
|
|
40
37
|
'credentials': json['credentials'] == null ? undefined : (0, ExchangeCredentials_1.ExchangeCredentialsFromJSON)(json['credentials']),
|
|
41
38
|
};
|
|
42
39
|
}
|
|
@@ -48,7 +45,7 @@ function WatchAddressRequestToJSONTyped(value, ignoreDiscriminator = false) {
|
|
|
48
45
|
return value;
|
|
49
46
|
}
|
|
50
47
|
return {
|
|
51
|
-
'args':
|
|
48
|
+
'args': value['args'],
|
|
52
49
|
'credentials': (0, ExchangeCredentials_1.ExchangeCredentialsToJSON)(value['credentials']),
|
|
53
50
|
};
|
|
54
51
|
}
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
* Do not edit the class manually.
|
|
11
11
|
*/
|
|
12
12
|
import type { ExchangeCredentials } from './ExchangeCredentials';
|
|
13
|
-
import type { WatchOrderBookRequestArgsInner } from './WatchOrderBookRequestArgsInner';
|
|
14
13
|
/**
|
|
15
14
|
*
|
|
16
15
|
* @export
|
|
@@ -19,10 +18,10 @@ import type { WatchOrderBookRequestArgsInner } from './WatchOrderBookRequestArgs
|
|
|
19
18
|
export interface WatchOrderBookRequest {
|
|
20
19
|
/**
|
|
21
20
|
*
|
|
22
|
-
* @type {Array<
|
|
21
|
+
* @type {Array<string>}
|
|
23
22
|
* @memberof WatchOrderBookRequest
|
|
24
23
|
*/
|
|
25
|
-
args
|
|
24
|
+
args?: Array<string>;
|
|
26
25
|
/**
|
|
27
26
|
*
|
|
28
27
|
* @type {ExchangeCredentials}
|
|
@@ -19,13 +19,10 @@ exports.WatchOrderBookRequestFromJSONTyped = WatchOrderBookRequestFromJSONTyped;
|
|
|
19
19
|
exports.WatchOrderBookRequestToJSON = WatchOrderBookRequestToJSON;
|
|
20
20
|
exports.WatchOrderBookRequestToJSONTyped = WatchOrderBookRequestToJSONTyped;
|
|
21
21
|
const ExchangeCredentials_1 = require("./ExchangeCredentials");
|
|
22
|
-
const WatchOrderBookRequestArgsInner_1 = require("./WatchOrderBookRequestArgsInner");
|
|
23
22
|
/**
|
|
24
23
|
* Check if a given object implements the WatchOrderBookRequest interface.
|
|
25
24
|
*/
|
|
26
25
|
function instanceOfWatchOrderBookRequest(value) {
|
|
27
|
-
if (!('args' in value) || value['args'] === undefined)
|
|
28
|
-
return false;
|
|
29
26
|
return true;
|
|
30
27
|
}
|
|
31
28
|
function WatchOrderBookRequestFromJSON(json) {
|
|
@@ -36,7 +33,7 @@ function WatchOrderBookRequestFromJSONTyped(json, ignoreDiscriminator) {
|
|
|
36
33
|
return json;
|
|
37
34
|
}
|
|
38
35
|
return {
|
|
39
|
-
'args':
|
|
36
|
+
'args': json['args'] == null ? undefined : json['args'],
|
|
40
37
|
'credentials': json['credentials'] == null ? undefined : (0, ExchangeCredentials_1.ExchangeCredentialsFromJSON)(json['credentials']),
|
|
41
38
|
};
|
|
42
39
|
}
|
|
@@ -48,7 +45,7 @@ function WatchOrderBookRequestToJSONTyped(value, ignoreDiscriminator = false) {
|
|
|
48
45
|
return value;
|
|
49
46
|
}
|
|
50
47
|
return {
|
|
51
|
-
'args':
|
|
48
|
+
'args': value['args'],
|
|
52
49
|
'credentials': (0, ExchangeCredentials_1.ExchangeCredentialsToJSON)(value['credentials']),
|
|
53
50
|
};
|
|
54
51
|
}
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
* Do not edit the class manually.
|
|
11
11
|
*/
|
|
12
12
|
import type { ExchangeCredentials } from './ExchangeCredentials';
|
|
13
|
-
import type { WatchOrderBooksRequestArgsInner } from './WatchOrderBooksRequestArgsInner';
|
|
14
13
|
/**
|
|
15
14
|
*
|
|
16
15
|
* @export
|
|
@@ -19,10 +18,10 @@ import type { WatchOrderBooksRequestArgsInner } from './WatchOrderBooksRequestAr
|
|
|
19
18
|
export interface WatchOrderBooksRequest {
|
|
20
19
|
/**
|
|
21
20
|
*
|
|
22
|
-
* @type {Array<
|
|
21
|
+
* @type {Array<string>}
|
|
23
22
|
* @memberof WatchOrderBooksRequest
|
|
24
23
|
*/
|
|
25
|
-
args
|
|
24
|
+
args?: Array<string>;
|
|
26
25
|
/**
|
|
27
26
|
*
|
|
28
27
|
* @type {ExchangeCredentials}
|
|
@@ -19,13 +19,10 @@ exports.WatchOrderBooksRequestFromJSONTyped = WatchOrderBooksRequestFromJSONType
|
|
|
19
19
|
exports.WatchOrderBooksRequestToJSON = WatchOrderBooksRequestToJSON;
|
|
20
20
|
exports.WatchOrderBooksRequestToJSONTyped = WatchOrderBooksRequestToJSONTyped;
|
|
21
21
|
const ExchangeCredentials_1 = require("./ExchangeCredentials");
|
|
22
|
-
const WatchOrderBooksRequestArgsInner_1 = require("./WatchOrderBooksRequestArgsInner");
|
|
23
22
|
/**
|
|
24
23
|
* Check if a given object implements the WatchOrderBooksRequest interface.
|
|
25
24
|
*/
|
|
26
25
|
function instanceOfWatchOrderBooksRequest(value) {
|
|
27
|
-
if (!('args' in value) || value['args'] === undefined)
|
|
28
|
-
return false;
|
|
29
26
|
return true;
|
|
30
27
|
}
|
|
31
28
|
function WatchOrderBooksRequestFromJSON(json) {
|
|
@@ -36,7 +33,7 @@ function WatchOrderBooksRequestFromJSONTyped(json, ignoreDiscriminator) {
|
|
|
36
33
|
return json;
|
|
37
34
|
}
|
|
38
35
|
return {
|
|
39
|
-
'args':
|
|
36
|
+
'args': json['args'] == null ? undefined : json['args'],
|
|
40
37
|
'credentials': json['credentials'] == null ? undefined : (0, ExchangeCredentials_1.ExchangeCredentialsFromJSON)(json['credentials']),
|
|
41
38
|
};
|
|
42
39
|
}
|
|
@@ -48,7 +45,7 @@ function WatchOrderBooksRequestToJSONTyped(value, ignoreDiscriminator = false) {
|
|
|
48
45
|
return value;
|
|
49
46
|
}
|
|
50
47
|
return {
|
|
51
|
-
'args':
|
|
48
|
+
'args': value['args'],
|
|
52
49
|
'credentials': (0, ExchangeCredentials_1.ExchangeCredentialsToJSON)(value['credentials']),
|
|
53
50
|
};
|
|
54
51
|
}
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
* Do not edit the class manually.
|
|
11
11
|
*/
|
|
12
12
|
import type { ExchangeCredentials } from './ExchangeCredentials';
|
|
13
|
-
import type { WatchOrderBookRequestArgsInner } from './WatchOrderBookRequestArgsInner';
|
|
14
13
|
/**
|
|
15
14
|
*
|
|
16
15
|
* @export
|
|
@@ -19,10 +18,10 @@ import type { WatchOrderBookRequestArgsInner } from './WatchOrderBookRequestArgs
|
|
|
19
18
|
export interface WatchTradesRequest {
|
|
20
19
|
/**
|
|
21
20
|
*
|
|
22
|
-
* @type {Array<
|
|
21
|
+
* @type {Array<string>}
|
|
23
22
|
* @memberof WatchTradesRequest
|
|
24
23
|
*/
|
|
25
|
-
args
|
|
24
|
+
args?: Array<string>;
|
|
26
25
|
/**
|
|
27
26
|
*
|
|
28
27
|
* @type {ExchangeCredentials}
|
|
@@ -19,13 +19,10 @@ exports.WatchTradesRequestFromJSONTyped = WatchTradesRequestFromJSONTyped;
|
|
|
19
19
|
exports.WatchTradesRequestToJSON = WatchTradesRequestToJSON;
|
|
20
20
|
exports.WatchTradesRequestToJSONTyped = WatchTradesRequestToJSONTyped;
|
|
21
21
|
const ExchangeCredentials_1 = require("./ExchangeCredentials");
|
|
22
|
-
const WatchOrderBookRequestArgsInner_1 = require("./WatchOrderBookRequestArgsInner");
|
|
23
22
|
/**
|
|
24
23
|
* Check if a given object implements the WatchTradesRequest interface.
|
|
25
24
|
*/
|
|
26
25
|
function instanceOfWatchTradesRequest(value) {
|
|
27
|
-
if (!('args' in value) || value['args'] === undefined)
|
|
28
|
-
return false;
|
|
29
26
|
return true;
|
|
30
27
|
}
|
|
31
28
|
function WatchTradesRequestFromJSON(json) {
|
|
@@ -36,7 +33,7 @@ function WatchTradesRequestFromJSONTyped(json, ignoreDiscriminator) {
|
|
|
36
33
|
return json;
|
|
37
34
|
}
|
|
38
35
|
return {
|
|
39
|
-
'args':
|
|
36
|
+
'args': json['args'] == null ? undefined : json['args'],
|
|
40
37
|
'credentials': json['credentials'] == null ? undefined : (0, ExchangeCredentials_1.ExchangeCredentialsFromJSON)(json['credentials']),
|
|
41
38
|
};
|
|
42
39
|
}
|
|
@@ -48,7 +45,7 @@ function WatchTradesRequestToJSONTyped(value, ignoreDiscriminator = false) {
|
|
|
48
45
|
return value;
|
|
49
46
|
}
|
|
50
47
|
return {
|
|
51
|
-
'args':
|
|
48
|
+
'args': value['args'],
|
|
52
49
|
'credentials': (0, ExchangeCredentials_1.ExchangeCredentialsToJSON)(value['credentials']),
|
|
53
50
|
};
|
|
54
51
|
}
|
|
@@ -90,10 +90,7 @@ export * from './UnwatchOrderBookRequest';
|
|
|
90
90
|
export * from './UserTrade';
|
|
91
91
|
export * from './WatchAddress200Response';
|
|
92
92
|
export * from './WatchAddressRequest';
|
|
93
|
-
export * from './WatchAddressRequestArgsInner';
|
|
94
93
|
export * from './WatchOrderBookRequest';
|
|
95
|
-
export * from './WatchOrderBookRequestArgsInner';
|
|
96
94
|
export * from './WatchOrderBooks200Response';
|
|
97
95
|
export * from './WatchOrderBooksRequest';
|
|
98
|
-
export * from './WatchOrderBooksRequestArgsInner';
|
|
99
96
|
export * from './WatchTradesRequest';
|
|
@@ -108,10 +108,7 @@ __exportStar(require("./UnwatchOrderBookRequest"), exports);
|
|
|
108
108
|
__exportStar(require("./UserTrade"), exports);
|
|
109
109
|
__exportStar(require("./WatchAddress200Response"), exports);
|
|
110
110
|
__exportStar(require("./WatchAddressRequest"), exports);
|
|
111
|
-
__exportStar(require("./WatchAddressRequestArgsInner"), exports);
|
|
112
111
|
__exportStar(require("./WatchOrderBookRequest"), exports);
|
|
113
|
-
__exportStar(require("./WatchOrderBookRequestArgsInner"), exports);
|
|
114
112
|
__exportStar(require("./WatchOrderBooks200Response"), exports);
|
|
115
113
|
__exportStar(require("./WatchOrderBooksRequest"), exports);
|
|
116
|
-
__exportStar(require("./WatchOrderBooksRequestArgsInner"), exports);
|
|
117
114
|
__exportStar(require("./WatchTradesRequest"), exports);
|
package/dist/pmxt/client.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* OpenAPI client, matching the Python API exactly.
|
|
6
6
|
*/
|
|
7
7
|
import { Configuration, DefaultApi, ExchangeCredentials } from "../generated/src/index.js";
|
|
8
|
-
import { Balance, BuiltOrder, CreateOrderParams, EventFetchParams, EventFilterCriteria, EventFilterFunction, ExecutionPriceResult, MarketFetchParams, MarketFilterCriteria, MarketFilterFunction, MarketOutcome, MyTradesParams, Order, OrderBook, OrderHistoryParams, PaginatedMarketsResult, Position, PriceCandle, SubscribedAddressSnapshot, SubscriptionOption, Trade, UnifiedEvent, UnifiedMarket, UserTrade } from "./models.js";
|
|
8
|
+
import { Balance, BuiltOrder, CreateOrderParams, EventFetchParams, EventFilterCriteria, EventFilterFunction, ExecutionPriceResult, MarketFetchParams, MarketFilterCriteria, MarketFilterFunction, MarketOutcome, MyTradesParams, Order, OrderBook, OrderHistoryParams, PaginatedMarketsResult, Position, PriceCandle, SubscribedAddressSnapshot, SubscriptionOption, Trade, UnifiedEvent, UnifiedMarket, UserTrade, FirehoseEvent } from "./models.js";
|
|
9
9
|
import { ServerManager } from "./server-manager.js";
|
|
10
10
|
/**
|
|
11
11
|
* Base exchange client options.
|
|
@@ -68,6 +68,8 @@ export declare abstract class Exchange {
|
|
|
68
68
|
protected serverManager: ServerManager;
|
|
69
69
|
protected initPromise: Promise<void>;
|
|
70
70
|
protected isHosted: boolean;
|
|
71
|
+
private _hostedAccount?;
|
|
72
|
+
private _accountDiscoveryPromise?;
|
|
71
73
|
/**
|
|
72
74
|
* Sticky flag: set to `true` the first time a GET read is rejected by
|
|
73
75
|
* the sidecar with 404/405 (i.e. an older pmxt-core that only supports
|
|
@@ -252,6 +254,28 @@ export declare abstract class Exchange {
|
|
|
252
254
|
* ```
|
|
253
255
|
*/
|
|
254
256
|
watchOrderBooks(outcomeIds: (string | MarketOutcome)[], limit?: number): Promise<Record<string, OrderBook>>;
|
|
257
|
+
/**
|
|
258
|
+
* Stream all orderbook updates across venues via the hosted WebSocket API.
|
|
259
|
+
*
|
|
260
|
+
* Returns a promise that resolves with the next book event.
|
|
261
|
+
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
262
|
+
* Requires hosted mode (`pmxtApiKey` set).
|
|
263
|
+
*
|
|
264
|
+
* @param venues - Optional venue filter (e.g. ["polymarket", "limitless"])
|
|
265
|
+
* @returns Next event with source, symbol, and orderbook
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* const poly = new Polymarket({ pmxtApiKey: "pmxt_xxx" });
|
|
270
|
+
* while (true) {
|
|
271
|
+
* const event = await poly.watchAllOrderBooks();
|
|
272
|
+
* console.log(event.source, event.symbol, event.orderbook.bids[0]);
|
|
273
|
+
* }
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
watchAllOrderBooks(venues?: string[]): Promise<FirehoseEvent>;
|
|
277
|
+
/** @deprecated Use {@link watchAllOrderBooks} instead. */
|
|
278
|
+
firehose(venues?: string[]): Promise<FirehoseEvent>;
|
|
255
279
|
/**
|
|
256
280
|
* Watch real-time trade updates via WebSocket.
|
|
257
281
|
*
|
|
@@ -337,12 +361,9 @@ export declare abstract class Exchange {
|
|
|
337
361
|
buildOrder(params: CreateOrderParams & {
|
|
338
362
|
outcome?: MarketOutcome;
|
|
339
363
|
}): Promise<BuiltOrder>;
|
|
364
|
+
private _discoverHostedAccount;
|
|
365
|
+
private _executeSorOrder;
|
|
340
366
|
/**
|
|
341
|
-
* Create a new order.
|
|
342
|
-
*
|
|
343
|
-
* @param params - Order parameters
|
|
344
|
-
* @returns Created order
|
|
345
|
-
*
|
|
346
367
|
* @example
|
|
347
368
|
* ```typescript
|
|
348
369
|
* const order = await exchange.createOrder({
|
package/dist/pmxt/client.js
CHANGED
|
@@ -134,6 +134,8 @@ class Exchange {
|
|
|
134
134
|
serverManager;
|
|
135
135
|
initPromise;
|
|
136
136
|
isHosted;
|
|
137
|
+
_hostedAccount;
|
|
138
|
+
_accountDiscoveryPromise;
|
|
137
139
|
/**
|
|
138
140
|
* Sticky flag: set to `true` the first time a GET read is rejected by
|
|
139
141
|
* the sidecar with 404/405 (i.e. an older pmxt-core that only supports
|
|
@@ -191,9 +193,14 @@ class Exchange {
|
|
|
191
193
|
this.api = new index_js_1.DefaultApi(this.config);
|
|
192
194
|
}
|
|
193
195
|
catch (error) {
|
|
194
|
-
|
|
196
|
+
const msg = `Failed to start PMXT server: ${error instanceof Error ? error.message : error}\n\n` +
|
|
195
197
|
`Please ensure 'pmxt-core' is installed: npm install -g pmxt-core\n` +
|
|
196
|
-
`Or start the server manually: pmxt-server
|
|
198
|
+
`Or start the server manually: pmxt-server`;
|
|
199
|
+
const pmxtError = new errors_js_1.PmxtError(msg);
|
|
200
|
+
if (error instanceof Error) {
|
|
201
|
+
pmxtError.cause = error;
|
|
202
|
+
}
|
|
203
|
+
throw pmxtError;
|
|
197
204
|
}
|
|
198
205
|
}
|
|
199
206
|
}
|
|
@@ -292,8 +299,11 @@ class Exchange {
|
|
|
292
299
|
if (this._wsClient?.connected)
|
|
293
300
|
return this._wsClient;
|
|
294
301
|
const host = this.resolveBaseUrl();
|
|
295
|
-
const accessToken = this.
|
|
296
|
-
|
|
302
|
+
const accessToken = this.isHosted
|
|
303
|
+
? this.pmxtApiKey
|
|
304
|
+
: this.serverManager.getAccessToken();
|
|
305
|
+
const authParamName = this.isHosted ? "apiKey" : "token";
|
|
306
|
+
const client = new ws_client_js_1.SidecarWsClient(host, accessToken || undefined, authParamName);
|
|
297
307
|
try {
|
|
298
308
|
// Trigger connection to validate the endpoint exists.
|
|
299
309
|
// subscribe() calls ensureConnected internally, but we want
|
|
@@ -328,8 +338,12 @@ class Exchange {
|
|
|
328
338
|
try {
|
|
329
339
|
return await ws.subscribe(this.exchangeName, method, args, this.getCredentials());
|
|
330
340
|
}
|
|
331
|
-
catch {
|
|
332
|
-
|
|
341
|
+
catch (error) {
|
|
342
|
+
// Only fall back to HTTP for transport-level failures
|
|
343
|
+
if (error instanceof errors_js_1.PmxtError && /connection failed|no websocket/i.test(error.message)) {
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
throw error;
|
|
333
347
|
}
|
|
334
348
|
}
|
|
335
349
|
// Low-Level API Access
|
|
@@ -1426,8 +1440,11 @@ class Exchange {
|
|
|
1426
1440
|
return result;
|
|
1427
1441
|
}
|
|
1428
1442
|
}
|
|
1429
|
-
catch {
|
|
1430
|
-
// fall through to HTTP
|
|
1443
|
+
catch (error) {
|
|
1444
|
+
// Only fall through to HTTP for transport-level WS failures
|
|
1445
|
+
if (!(error instanceof errors_js_1.PmxtError) || !/connection failed|no websocket/i.test(error.message)) {
|
|
1446
|
+
throw error;
|
|
1447
|
+
}
|
|
1431
1448
|
}
|
|
1432
1449
|
}
|
|
1433
1450
|
// HTTP fallback
|
|
@@ -1453,7 +1470,7 @@ class Exchange {
|
|
|
1453
1470
|
}
|
|
1454
1471
|
return result;
|
|
1455
1472
|
}
|
|
1456
|
-
|
|
1473
|
+
throw new errors_js_1.PmxtError("watchOrderBooks: unexpected response shape from server");
|
|
1457
1474
|
}
|
|
1458
1475
|
catch (error) {
|
|
1459
1476
|
if (error instanceof errors_js_1.PmxtError)
|
|
@@ -1461,6 +1478,45 @@ class Exchange {
|
|
|
1461
1478
|
throw new errors_js_1.PmxtError(`Failed to watch order books: ${error}`);
|
|
1462
1479
|
}
|
|
1463
1480
|
}
|
|
1481
|
+
/**
|
|
1482
|
+
* Stream all orderbook updates across venues via the hosted WebSocket API.
|
|
1483
|
+
*
|
|
1484
|
+
* Returns a promise that resolves with the next book event.
|
|
1485
|
+
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
1486
|
+
* Requires hosted mode (`pmxtApiKey` set).
|
|
1487
|
+
*
|
|
1488
|
+
* @param venues - Optional venue filter (e.g. ["polymarket", "limitless"])
|
|
1489
|
+
* @returns Next event with source, symbol, and orderbook
|
|
1490
|
+
*
|
|
1491
|
+
* @example
|
|
1492
|
+
* ```typescript
|
|
1493
|
+
* const poly = new Polymarket({ pmxtApiKey: "pmxt_xxx" });
|
|
1494
|
+
* while (true) {
|
|
1495
|
+
* const event = await poly.watchAllOrderBooks();
|
|
1496
|
+
* console.log(event.source, event.symbol, event.orderbook.bids[0]);
|
|
1497
|
+
* }
|
|
1498
|
+
* ```
|
|
1499
|
+
*/
|
|
1500
|
+
async watchAllOrderBooks(venues) {
|
|
1501
|
+
await this.initPromise;
|
|
1502
|
+
if (!this.isHosted) {
|
|
1503
|
+
throw new errors_js_1.PmxtError("watchAllOrderBooks() requires hosted mode (set pmxtApiKey)");
|
|
1504
|
+
}
|
|
1505
|
+
const args = venues ? [venues] : [];
|
|
1506
|
+
const wsData = await this.watchViaWs("watchAllOrderBooks", args);
|
|
1507
|
+
if (wsData !== null) {
|
|
1508
|
+
return {
|
|
1509
|
+
source: wsData._source || "",
|
|
1510
|
+
symbol: wsData._symbol || "",
|
|
1511
|
+
orderbook: convertOrderBook(wsData),
|
|
1512
|
+
};
|
|
1513
|
+
}
|
|
1514
|
+
throw new errors_js_1.PmxtError("watchAllOrderBooks() requires WebSocket transport — connection failed");
|
|
1515
|
+
}
|
|
1516
|
+
/** @deprecated Use {@link watchAllOrderBooks} instead. */
|
|
1517
|
+
async firehose(venues) {
|
|
1518
|
+
return this.watchAllOrderBooks(venues);
|
|
1519
|
+
}
|
|
1464
1520
|
/**
|
|
1465
1521
|
* Watch real-time trade updates via WebSocket.
|
|
1466
1522
|
*
|
|
@@ -1663,12 +1719,71 @@ class Exchange {
|
|
|
1663
1719
|
throw new errors_js_1.PmxtError(`Failed to build order: ${error}`);
|
|
1664
1720
|
}
|
|
1665
1721
|
}
|
|
1722
|
+
async _discoverHostedAccount() {
|
|
1723
|
+
if (this._hostedAccount)
|
|
1724
|
+
return;
|
|
1725
|
+
if (!this._accountDiscoveryPromise) {
|
|
1726
|
+
this._accountDiscoveryPromise = (async () => {
|
|
1727
|
+
try {
|
|
1728
|
+
const res = await this.fetchWithRetry(`${this.resolveBaseUrl()}/v0/account`, { method: 'GET', headers: { ...this.getAuthHeaders() } });
|
|
1729
|
+
if (res.ok) {
|
|
1730
|
+
const body = await res.json();
|
|
1731
|
+
this._hostedAccount = { depositWallet: body.deposit_wallet, signatureType: body.signature_type };
|
|
1732
|
+
}
|
|
1733
|
+
else {
|
|
1734
|
+
this._hostedAccount = {};
|
|
1735
|
+
}
|
|
1736
|
+
}
|
|
1737
|
+
catch {
|
|
1738
|
+
this._hostedAccount = {};
|
|
1739
|
+
}
|
|
1740
|
+
})();
|
|
1741
|
+
}
|
|
1742
|
+
await this._accountDiscoveryPromise;
|
|
1743
|
+
}
|
|
1744
|
+
async _executeSorOrder(params) {
|
|
1745
|
+
await this._discoverHostedAccount();
|
|
1746
|
+
const buildRes = await this.fetchWithRetry(`${this.resolveBaseUrl()}/api/sor/buildOrder`, {
|
|
1747
|
+
method: 'POST',
|
|
1748
|
+
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
1749
|
+
body: JSON.stringify({ args: [params] }),
|
|
1750
|
+
});
|
|
1751
|
+
if (!buildRes.ok)
|
|
1752
|
+
throw new errors_js_1.PmxtError(`buildOrder failed: ${await buildRes.text()}`);
|
|
1753
|
+
const buildJson = await buildRes.json();
|
|
1754
|
+
const { orderId, legs } = buildJson.data || buildJson;
|
|
1755
|
+
const fills = [];
|
|
1756
|
+
for (const leg of legs) {
|
|
1757
|
+
try {
|
|
1758
|
+
const { Polymarket, Limitless } = require('pmxt-core');
|
|
1759
|
+
const VenueClass = leg.venue === 'polymarket' ? Polymarket : leg.venue === 'limitless' ? Limitless : null;
|
|
1760
|
+
if (!VenueClass)
|
|
1761
|
+
throw new Error(`unsupported venue: ${leg.venue}`);
|
|
1762
|
+
const venueOpts = { privateKey: this.privateKey };
|
|
1763
|
+
if (leg.venue === 'polymarket' && this._hostedAccount?.depositWallet) {
|
|
1764
|
+
venueOpts.funderAddress = this._hostedAccount.depositWallet;
|
|
1765
|
+
venueOpts.signatureType = this._hostedAccount.signatureType || 3;
|
|
1766
|
+
}
|
|
1767
|
+
const venue = new VenueClass(venueOpts);
|
|
1768
|
+
const order = await venue.createOrder({ outcomeId: leg.tokenId, side: leg.side, amount: leg.shares, price: leg.price });
|
|
1769
|
+
const filledShares = order.filled || 0;
|
|
1770
|
+
fills.push({ venue: leg.venue, venueOrderId: order.id, venueMarketId: leg.venueMarketId, venueOutcomeId: leg.venueOutcomeId, shares: filledShares > 0 ? filledShares : leg.shares, price: order.price || leg.price, status: filledShares > 0 ? 'filled' : 'open' });
|
|
1771
|
+
}
|
|
1772
|
+
catch (err) {
|
|
1773
|
+
fills.push({ venue: leg.venue, venueMarketId: leg.venueMarketId, venueOutcomeId: leg.venueOutcomeId, shares: leg.shares, price: leg.price, status: 'failed', error: err.message });
|
|
1774
|
+
}
|
|
1775
|
+
}
|
|
1776
|
+
const submitRes = await this.fetchWithRetry(`${this.resolveBaseUrl()}/api/sor/submitOrder`, {
|
|
1777
|
+
method: 'POST',
|
|
1778
|
+
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
1779
|
+
body: JSON.stringify({ args: [{ orderId, fills }] }),
|
|
1780
|
+
});
|
|
1781
|
+
if (!submitRes.ok)
|
|
1782
|
+
throw new errors_js_1.PmxtError(`submitOrder failed: ${await submitRes.text()}`);
|
|
1783
|
+
const submitJson = await submitRes.json();
|
|
1784
|
+
return convertOrder(submitJson.data || submitJson);
|
|
1785
|
+
}
|
|
1666
1786
|
/**
|
|
1667
|
-
* Create a new order.
|
|
1668
|
-
*
|
|
1669
|
-
* @param params - Order parameters
|
|
1670
|
-
* @returns Created order
|
|
1671
|
-
*
|
|
1672
1787
|
* @example
|
|
1673
1788
|
* ```typescript
|
|
1674
1789
|
* const order = await exchange.createOrder({
|
|
@@ -1683,6 +1798,9 @@ class Exchange {
|
|
|
1683
1798
|
*/
|
|
1684
1799
|
async createOrder(params) {
|
|
1685
1800
|
if (this.isHosted) {
|
|
1801
|
+
if (this.exchangeName === 'sor' && this.privateKey) {
|
|
1802
|
+
return this._executeSorOrder(params);
|
|
1803
|
+
}
|
|
1686
1804
|
throw new errors_js_1.PmxtError("Trade execution is not available through the hosted API. " +
|
|
1687
1805
|
"Use the local PMXT SDK with your venue credentials instead. " +
|
|
1688
1806
|
"See https://pmxt.dev/docs/quickstart for setup instructions.");
|
package/dist/pmxt/models.d.ts
CHANGED
|
@@ -112,6 +112,17 @@ export interface OrderBook {
|
|
|
112
112
|
/** Unix timestamp (milliseconds) */
|
|
113
113
|
timestamp?: number;
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* A single event from the firehose stream.
|
|
117
|
+
*/
|
|
118
|
+
export interface FirehoseEvent {
|
|
119
|
+
/** The venue this event originated from (e.g. "polymarket", "limitless") */
|
|
120
|
+
source: string;
|
|
121
|
+
/** The outcome token id / asset id */
|
|
122
|
+
symbol: string;
|
|
123
|
+
/** The order book snapshot */
|
|
124
|
+
orderbook: OrderBook;
|
|
125
|
+
}
|
|
115
126
|
/**
|
|
116
127
|
* Result of an execution price calculation.
|
|
117
128
|
*/
|
package/dist/pmxt/ws-client.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare class SidecarWsClient {
|
|
|
16
16
|
private ws;
|
|
17
17
|
private host;
|
|
18
18
|
private accessToken;
|
|
19
|
+
private authParamName;
|
|
19
20
|
private closed;
|
|
20
21
|
/** requestId -> latest data payload */
|
|
21
22
|
private dataStore;
|
|
@@ -24,7 +25,7 @@ export declare class SidecarWsClient {
|
|
|
24
25
|
/** (method:symbolKey) -> requestId -- avoids duplicate subscribes */
|
|
25
26
|
private activeSubs;
|
|
26
27
|
private connectPromise;
|
|
27
|
-
constructor(host: string, accessToken?: string);
|
|
28
|
+
constructor(host: string, accessToken?: string, authParamName?: string);
|
|
28
29
|
private ensureConnected;
|
|
29
30
|
private connect;
|
|
30
31
|
private getWebSocketConstructor;
|
package/dist/pmxt/ws-client.js
CHANGED
|
@@ -20,6 +20,7 @@ class SidecarWsClient {
|
|
|
20
20
|
ws = null;
|
|
21
21
|
host;
|
|
22
22
|
accessToken;
|
|
23
|
+
authParamName;
|
|
23
24
|
closed = false;
|
|
24
25
|
/** requestId -> latest data payload */
|
|
25
26
|
dataStore = new Map();
|
|
@@ -28,9 +29,10 @@ class SidecarWsClient {
|
|
|
28
29
|
/** (method:symbolKey) -> requestId -- avoids duplicate subscribes */
|
|
29
30
|
activeSubs = new Map();
|
|
30
31
|
connectPromise = null;
|
|
31
|
-
constructor(host, accessToken) {
|
|
32
|
+
constructor(host, accessToken, authParamName = "token") {
|
|
32
33
|
this.host = host;
|
|
33
34
|
this.accessToken = accessToken;
|
|
35
|
+
this.authParamName = authParamName;
|
|
34
36
|
}
|
|
35
37
|
// ------------------------------------------------------------------
|
|
36
38
|
// Connection lifecycle
|
|
@@ -61,7 +63,7 @@ class SidecarWsClient {
|
|
|
61
63
|
}
|
|
62
64
|
let url = `${scheme}://${hostPart}/ws`;
|
|
63
65
|
if (this.accessToken) {
|
|
64
|
-
url = `${url}
|
|
66
|
+
url = `${url}?${this.authParamName}=${this.accessToken}`;
|
|
65
67
|
}
|
|
66
68
|
// Use the ws package in Node.js, native WebSocket in browsers
|
|
67
69
|
const WsConstructor = this.getWebSocketConstructor();
|
|
@@ -80,22 +82,30 @@ class SidecarWsClient {
|
|
|
80
82
|
// Connection failed during handshake
|
|
81
83
|
reject(new errors_js_1.PmxtError(`WebSocket connection failed: ${err.message || err}`));
|
|
82
84
|
}
|
|
85
|
+
else {
|
|
86
|
+
// Post-handshake error — propagate to all pending subscribers
|
|
87
|
+
const error = new errors_js_1.PmxtError(`WebSocket error: ${err.message || err}`);
|
|
88
|
+
for (const sub of this.subscriptions.values()) {
|
|
89
|
+
if (sub.reject) {
|
|
90
|
+
sub.reject(error);
|
|
91
|
+
sub.reject = null;
|
|
92
|
+
sub.resolve = null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.closed = true;
|
|
96
|
+
this.ws = null;
|
|
97
|
+
}
|
|
83
98
|
};
|
|
84
99
|
ws.onclose = () => {
|
|
85
100
|
this.closed = true;
|
|
86
101
|
this.ws = null;
|
|
87
102
|
};
|
|
88
103
|
ws.onmessage = (event) => {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
this.dispatch(msg);
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
// Ignore unparseable frames
|
|
98
|
-
}
|
|
104
|
+
const raw = typeof event.data === "string"
|
|
105
|
+
? event.data
|
|
106
|
+
: event.data.toString();
|
|
107
|
+
const msg = JSON.parse(raw);
|
|
108
|
+
this.dispatch(msg);
|
|
99
109
|
};
|
|
100
110
|
});
|
|
101
111
|
}
|
|
@@ -104,14 +114,15 @@ class SidecarWsClient {
|
|
|
104
114
|
if (typeof globalThis !== "undefined" && globalThis.WebSocket) {
|
|
105
115
|
return globalThis.WebSocket;
|
|
106
116
|
}
|
|
107
|
-
// Node.js --
|
|
117
|
+
// Node.js -- require ws
|
|
108
118
|
try {
|
|
109
119
|
// Dynamic require to avoid bundler issues
|
|
110
120
|
const wsModule = require("ws");
|
|
111
121
|
return wsModule.default || wsModule;
|
|
112
122
|
}
|
|
113
123
|
catch {
|
|
114
|
-
|
|
124
|
+
throw new errors_js_1.PmxtError("WebSocket support in Node.js requires the 'ws' package. " +
|
|
125
|
+
"Install it with: npm install ws");
|
|
115
126
|
}
|
|
116
127
|
}
|
|
117
128
|
dispatch(msg) {
|
|
@@ -95,12 +95,9 @@ docs/UnwatchOrderBookRequest.md
|
|
|
95
95
|
docs/UserTrade.md
|
|
96
96
|
docs/WatchAddress200Response.md
|
|
97
97
|
docs/WatchAddressRequest.md
|
|
98
|
-
docs/WatchAddressRequestArgsInner.md
|
|
99
98
|
docs/WatchOrderBookRequest.md
|
|
100
|
-
docs/WatchOrderBookRequestArgsInner.md
|
|
101
99
|
docs/WatchOrderBooks200Response.md
|
|
102
100
|
docs/WatchOrderBooksRequest.md
|
|
103
|
-
docs/WatchOrderBooksRequestArgsInner.md
|
|
104
101
|
docs/WatchTradesRequest.md
|
|
105
102
|
package.json
|
|
106
103
|
src/apis/DefaultApi.ts
|
|
@@ -198,12 +195,9 @@ src/models/UnwatchOrderBookRequest.ts
|
|
|
198
195
|
src/models/UserTrade.ts
|
|
199
196
|
src/models/WatchAddress200Response.ts
|
|
200
197
|
src/models/WatchAddressRequest.ts
|
|
201
|
-
src/models/WatchAddressRequestArgsInner.ts
|
|
202
198
|
src/models/WatchOrderBookRequest.ts
|
|
203
|
-
src/models/WatchOrderBookRequestArgsInner.ts
|
|
204
199
|
src/models/WatchOrderBooks200Response.ts
|
|
205
200
|
src/models/WatchOrderBooksRequest.ts
|
|
206
|
-
src/models/WatchOrderBooksRequestArgsInner.ts
|
|
207
201
|
src/models/WatchTradesRequest.ts
|
|
208
202
|
src/models/index.ts
|
|
209
203
|
src/runtime.ts
|