pmxtjs 1.0.3 → 1.1.0-b3
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 +45 -1
- package/dist/esm/generated/src/apis/DefaultApi.js +75 -1
- package/dist/esm/generated/src/models/WatchOrderBookRequest.d.ts +40 -0
- package/dist/esm/generated/src/models/WatchOrderBookRequest.js +47 -0
- package/dist/esm/generated/src/models/WatchOrderBookRequestArgsInner.d.ts +21 -0
- package/dist/esm/generated/src/models/WatchOrderBookRequestArgsInner.js +43 -0
- package/dist/esm/generated/src/models/WatchTradesRequest.d.ts +40 -0
- package/dist/esm/generated/src/models/WatchTradesRequest.js +47 -0
- package/dist/esm/generated/src/models/index.d.ts +3 -0
- package/dist/esm/generated/src/models/index.js +3 -0
- package/dist/esm/pmxt/client.d.ts +44 -0
- package/dist/esm/pmxt/client.js +99 -1
- package/dist/esm/pmxt/server-manager.d.ts +4 -1
- package/dist/esm/pmxt/server-manager.js +68 -3
- package/dist/generated/src/apis/DefaultApi.d.ts +45 -1
- package/dist/generated/src/apis/DefaultApi.js +75 -1
- package/dist/generated/src/models/WatchOrderBookRequest.d.ts +40 -0
- package/dist/generated/src/models/WatchOrderBookRequest.js +54 -0
- package/dist/generated/src/models/WatchOrderBookRequestArgsInner.d.ts +21 -0
- package/dist/generated/src/models/WatchOrderBookRequestArgsInner.js +49 -0
- package/dist/generated/src/models/WatchTradesRequest.d.ts +40 -0
- package/dist/generated/src/models/WatchTradesRequest.js +54 -0
- package/dist/generated/src/models/index.d.ts +3 -0
- package/dist/generated/src/models/index.js +3 -0
- package/dist/pmxt/client.d.ts +44 -0
- package/dist/pmxt/client.js +99 -1
- package/dist/pmxt/server-manager.d.ts +4 -1
- package/dist/pmxt/server-manager.js +68 -3
- package/generated/.openapi-generator/FILES +6 -0
- package/generated/docs/DefaultApi.md +142 -0
- package/generated/docs/WatchOrderBookRequest.md +36 -0
- package/generated/docs/WatchOrderBookRequestArgsInner.md +32 -0
- package/generated/docs/WatchTradesRequest.md +36 -0
- package/generated/package.json +1 -1
- package/generated/src/apis/DefaultApi.ts +116 -0
- package/generated/src/models/WatchOrderBookRequest.ts +89 -0
- package/generated/src/models/WatchOrderBookRequestArgsInner.ts +55 -0
- package/generated/src/models/WatchTradesRequest.ts +89 -0
- package/generated/src/models/index.ts +3 -0
- package/package.json +2 -2
- package/pmxt/client.ts +111 -1
- package/pmxt/server-manager.ts +71 -4
package/dist/pmxt/client.js
CHANGED
|
@@ -139,8 +139,16 @@ class Exchange {
|
|
|
139
139
|
// (may differ from default if default port was busy)
|
|
140
140
|
const actualPort = this.serverManager.getRunningPort();
|
|
141
141
|
const newBaseUrl = `http://localhost:${actualPort}`;
|
|
142
|
+
const accessToken = this.serverManager.getAccessToken();
|
|
143
|
+
const headers = {};
|
|
144
|
+
if (accessToken) {
|
|
145
|
+
headers['x-pmxt-access-token'] = accessToken;
|
|
146
|
+
}
|
|
142
147
|
// Update API client with actual base URL
|
|
143
|
-
const newConfig = new index_js_1.Configuration({
|
|
148
|
+
const newConfig = new index_js_1.Configuration({
|
|
149
|
+
basePath: newBaseUrl,
|
|
150
|
+
headers
|
|
151
|
+
});
|
|
144
152
|
this.api = new index_js_1.DefaultApi(newConfig);
|
|
145
153
|
}
|
|
146
154
|
catch (error) {
|
|
@@ -378,6 +386,96 @@ class Exchange {
|
|
|
378
386
|
throw new Error(`Failed to fetch trades: ${error}`);
|
|
379
387
|
}
|
|
380
388
|
}
|
|
389
|
+
// WebSocket Streaming Methods
|
|
390
|
+
/**
|
|
391
|
+
* Watch real-time order book updates via WebSocket.
|
|
392
|
+
*
|
|
393
|
+
* Returns a promise that resolves with the next order book update.
|
|
394
|
+
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
395
|
+
*
|
|
396
|
+
* @param outcomeId - Outcome ID to watch
|
|
397
|
+
* @param limit - Optional depth limit for order book
|
|
398
|
+
* @returns Next order book update
|
|
399
|
+
*
|
|
400
|
+
* @example
|
|
401
|
+
* ```typescript
|
|
402
|
+
* // Stream order book updates
|
|
403
|
+
* while (true) {
|
|
404
|
+
* const orderBook = await exchange.watchOrderBook(outcomeId);
|
|
405
|
+
* console.log(`Best bid: ${orderBook.bids[0].price}`);
|
|
406
|
+
* console.log(`Best ask: ${orderBook.asks[0].price}`);
|
|
407
|
+
* }
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
410
|
+
async watchOrderBook(outcomeId, limit) {
|
|
411
|
+
await this.initPromise;
|
|
412
|
+
try {
|
|
413
|
+
const args = [outcomeId];
|
|
414
|
+
if (limit !== undefined) {
|
|
415
|
+
args.push(limit);
|
|
416
|
+
}
|
|
417
|
+
const requestBody = {
|
|
418
|
+
args,
|
|
419
|
+
credentials: this.getCredentials()
|
|
420
|
+
};
|
|
421
|
+
const response = await this.api.watchOrderBook({
|
|
422
|
+
exchange: this.exchangeName,
|
|
423
|
+
watchOrderBookRequest: requestBody,
|
|
424
|
+
});
|
|
425
|
+
const data = this.handleResponse(response);
|
|
426
|
+
return convertOrderBook(data);
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
throw new Error(`Failed to watch order book: ${error}`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Watch real-time trade updates via WebSocket.
|
|
434
|
+
*
|
|
435
|
+
* Returns a promise that resolves with the next trade(s).
|
|
436
|
+
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
437
|
+
*
|
|
438
|
+
* @param outcomeId - Outcome ID to watch
|
|
439
|
+
* @param since - Optional timestamp to filter trades from
|
|
440
|
+
* @param limit - Optional limit for number of trades
|
|
441
|
+
* @returns Next trade update(s)
|
|
442
|
+
*
|
|
443
|
+
* @example
|
|
444
|
+
* ```typescript
|
|
445
|
+
* // Stream trade updates
|
|
446
|
+
* while (true) {
|
|
447
|
+
* const trades = await exchange.watchTrades(outcomeId);
|
|
448
|
+
* for (const trade of trades) {
|
|
449
|
+
* console.log(`Trade: ${trade.price} @ ${trade.amount}`);
|
|
450
|
+
* }
|
|
451
|
+
* }
|
|
452
|
+
* ```
|
|
453
|
+
*/
|
|
454
|
+
async watchTrades(outcomeId, since, limit) {
|
|
455
|
+
await this.initPromise;
|
|
456
|
+
try {
|
|
457
|
+
const args = [outcomeId];
|
|
458
|
+
if (since !== undefined) {
|
|
459
|
+
args.push(since);
|
|
460
|
+
}
|
|
461
|
+
if (limit !== undefined) {
|
|
462
|
+
args.push(limit);
|
|
463
|
+
}
|
|
464
|
+
const requestBody = {
|
|
465
|
+
args,
|
|
466
|
+
credentials: this.getCredentials()
|
|
467
|
+
};
|
|
468
|
+
const response = await this.api.watchTrades({
|
|
469
|
+
exchange: this.exchangeName,
|
|
470
|
+
watchTradesRequest: requestBody,
|
|
471
|
+
});
|
|
472
|
+
const data = this.handleResponse(response);
|
|
473
|
+
return data.map(convertTrade);
|
|
474
|
+
}
|
|
475
|
+
catch (error) {
|
|
476
|
+
throw new Error(`Failed to watch trades: ${error}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
381
479
|
// Trading Methods (require authentication)
|
|
382
480
|
/**
|
|
383
481
|
* Create a new order.
|
|
@@ -28,8 +28,9 @@ export declare class ServerManager {
|
|
|
28
28
|
*/
|
|
29
29
|
getRunningPort(): number;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Get the access token from the lock file.
|
|
32
32
|
*/
|
|
33
|
+
getAccessToken(): string | undefined;
|
|
33
34
|
/**
|
|
34
35
|
* Check if the server is running.
|
|
35
36
|
*/
|
|
@@ -42,4 +43,6 @@ export declare class ServerManager {
|
|
|
42
43
|
* Ensure the server is running, starting it if necessary.
|
|
43
44
|
*/
|
|
44
45
|
ensureServerRunning(): Promise<void>;
|
|
46
|
+
private isVersionMismatch;
|
|
47
|
+
private killOldServer;
|
|
45
48
|
}
|
|
@@ -84,8 +84,12 @@ class ServerManager {
|
|
|
84
84
|
return info?.port || ServerManager.DEFAULT_PORT;
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
87
|
-
*
|
|
87
|
+
* Get the access token from the lock file.
|
|
88
88
|
*/
|
|
89
|
+
getAccessToken() {
|
|
90
|
+
const info = this.getServerInfo();
|
|
91
|
+
return info?.accessToken;
|
|
92
|
+
}
|
|
89
93
|
/**
|
|
90
94
|
* Check if the server is running.
|
|
91
95
|
*/
|
|
@@ -122,9 +126,18 @@ class ServerManager {
|
|
|
122
126
|
* Ensure the server is running, starting it if necessary.
|
|
123
127
|
*/
|
|
124
128
|
async ensureServerRunning() {
|
|
125
|
-
// Check
|
|
129
|
+
// Check for force restart
|
|
130
|
+
if (process.env.PMXT_ALWAYS_RESTART === '1') {
|
|
131
|
+
await this.killOldServer();
|
|
132
|
+
}
|
|
133
|
+
// Check if already running and version matches
|
|
126
134
|
if (await this.isServerRunning()) {
|
|
127
|
-
|
|
135
|
+
if (await this.isVersionMismatch()) {
|
|
136
|
+
await this.killOldServer();
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
128
141
|
}
|
|
129
142
|
// Locate pmxt-ensure-server
|
|
130
143
|
let launcherPath = 'pmxt-ensure-server'; // Default to PATH
|
|
@@ -160,5 +173,57 @@ class ServerManager {
|
|
|
160
173
|
`Or start the server manually: pmxt-server`);
|
|
161
174
|
}
|
|
162
175
|
}
|
|
176
|
+
async isVersionMismatch() {
|
|
177
|
+
const info = this.getServerInfo();
|
|
178
|
+
if (!info || !info.version) {
|
|
179
|
+
return true; // Old server without version
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
// 1. Try to find package.json relative to the installed location (Production)
|
|
183
|
+
let corePackageJsonPath;
|
|
184
|
+
try {
|
|
185
|
+
corePackageJsonPath = require.resolve('pmxt-core/package.json');
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// 2. Try dev path (Monorepo)
|
|
189
|
+
const devPath = (0, path_1.join)((0, path_1.dirname)(__dirname), '../../core/package.json');
|
|
190
|
+
if ((0, fs_1.existsSync)(devPath)) {
|
|
191
|
+
corePackageJsonPath = devPath;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (corePackageJsonPath && (0, fs_1.existsSync)(corePackageJsonPath)) {
|
|
195
|
+
const content = (0, fs_1.readFileSync)(corePackageJsonPath, 'utf-8');
|
|
196
|
+
const pkg = JSON.parse(content);
|
|
197
|
+
// Check if running version starts with package version
|
|
198
|
+
// (Server version might have extra hash in dev mode)
|
|
199
|
+
if (pkg.version && !info.version.startsWith(pkg.version)) {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// Ignore errors
|
|
206
|
+
}
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
async killOldServer() {
|
|
210
|
+
const info = this.getServerInfo();
|
|
211
|
+
if (info && info.pid) {
|
|
212
|
+
try {
|
|
213
|
+
process.kill(info.pid, 'SIGTERM');
|
|
214
|
+
// Brief wait
|
|
215
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// Ignore
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Remove lock file (best effort)
|
|
222
|
+
try {
|
|
223
|
+
const { unlinkSync } = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
224
|
+
unlinkSync(this.lockPath);
|
|
225
|
+
}
|
|
226
|
+
catch { }
|
|
227
|
+
}
|
|
163
228
|
}
|
|
164
229
|
exports.ServerManager = ServerManager;
|
|
@@ -40,6 +40,9 @@ docs/SearchMarketsRequest.md
|
|
|
40
40
|
docs/SearchMarketsRequestArgsInner.md
|
|
41
41
|
docs/Trade.md
|
|
42
42
|
docs/UnifiedMarket.md
|
|
43
|
+
docs/WatchOrderBookRequest.md
|
|
44
|
+
docs/WatchOrderBookRequestArgsInner.md
|
|
45
|
+
docs/WatchTradesRequest.md
|
|
43
46
|
package.json
|
|
44
47
|
src/apis/DefaultApi.ts
|
|
45
48
|
src/apis/index.ts
|
|
@@ -82,6 +85,9 @@ src/models/SearchMarketsRequest.ts
|
|
|
82
85
|
src/models/SearchMarketsRequestArgsInner.ts
|
|
83
86
|
src/models/Trade.ts
|
|
84
87
|
src/models/UnifiedMarket.ts
|
|
88
|
+
src/models/WatchOrderBookRequest.ts
|
|
89
|
+
src/models/WatchOrderBookRequestArgsInner.ts
|
|
90
|
+
src/models/WatchTradesRequest.ts
|
|
85
91
|
src/models/index.ts
|
|
86
92
|
src/runtime.ts
|
|
87
93
|
tsconfig.esm.json
|
|
@@ -17,6 +17,8 @@ All URIs are relative to *http://localhost:3847*
|
|
|
17
17
|
| [**getMarketsBySlug**](DefaultApi.md#getmarketsbyslugoperation) | **POST** /api/{exchange}/getMarketsBySlug | Get Market by Slug |
|
|
18
18
|
| [**healthCheck**](DefaultApi.md#healthcheck) | **GET** /health | Server Health Check |
|
|
19
19
|
| [**searchMarkets**](DefaultApi.md#searchmarketsoperation) | **POST** /api/{exchange}/searchMarkets | Search Markets |
|
|
20
|
+
| [**watchOrderBook**](DefaultApi.md#watchorderbookoperation) | **POST** /api/{exchange}/watchOrderBook | Watch Order Book (WebSocket Stream) |
|
|
21
|
+
| [**watchTrades**](DefaultApi.md#watchtradesoperation) | **POST** /api/{exchange}/watchTrades | Watch Trades (WebSocket Stream) |
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
|
|
@@ -894,3 +896,143 @@ No authorization required
|
|
|
894
896
|
|
|
895
897
|
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
896
898
|
|
|
899
|
+
|
|
900
|
+
## watchOrderBook
|
|
901
|
+
|
|
902
|
+
> FetchOrderBook200Response watchOrderBook(exchange, watchOrderBookRequest)
|
|
903
|
+
|
|
904
|
+
Watch Order Book (WebSocket Stream)
|
|
905
|
+
|
|
906
|
+
Subscribe to real-time order book updates via WebSocket. Returns a promise that resolves with the next order book update. Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
907
|
+
|
|
908
|
+
### Example
|
|
909
|
+
|
|
910
|
+
```ts
|
|
911
|
+
import {
|
|
912
|
+
Configuration,
|
|
913
|
+
DefaultApi,
|
|
914
|
+
} from 'pmxtjs';
|
|
915
|
+
import type { WatchOrderBookOperationRequest } from 'pmxtjs';
|
|
916
|
+
|
|
917
|
+
async function example() {
|
|
918
|
+
console.log("🚀 Testing pmxtjs SDK...");
|
|
919
|
+
const api = new DefaultApi();
|
|
920
|
+
|
|
921
|
+
const body = {
|
|
922
|
+
// 'polymarket' | 'kalshi' | The prediction market exchange to target.
|
|
923
|
+
exchange: exchange_example,
|
|
924
|
+
// WatchOrderBookRequest (optional)
|
|
925
|
+
watchOrderBookRequest: ...,
|
|
926
|
+
} satisfies WatchOrderBookOperationRequest;
|
|
927
|
+
|
|
928
|
+
try {
|
|
929
|
+
const data = await api.watchOrderBook(body);
|
|
930
|
+
console.log(data);
|
|
931
|
+
} catch (error) {
|
|
932
|
+
console.error(error);
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
// Run the test
|
|
937
|
+
example().catch(console.error);
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
### Parameters
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
| Name | Type | Description | Notes |
|
|
944
|
+
|------------- | ------------- | ------------- | -------------|
|
|
945
|
+
| **exchange** | `polymarket`, `kalshi` | The prediction market exchange to target. | [Defaults to `undefined`] [Enum: polymarket, kalshi] |
|
|
946
|
+
| **watchOrderBookRequest** | [WatchOrderBookRequest](WatchOrderBookRequest.md) | | [Optional] |
|
|
947
|
+
|
|
948
|
+
### Return type
|
|
949
|
+
|
|
950
|
+
[**FetchOrderBook200Response**](FetchOrderBook200Response.md)
|
|
951
|
+
|
|
952
|
+
### Authorization
|
|
953
|
+
|
|
954
|
+
No authorization required
|
|
955
|
+
|
|
956
|
+
### HTTP request headers
|
|
957
|
+
|
|
958
|
+
- **Content-Type**: `application/json`
|
|
959
|
+
- **Accept**: `application/json`
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
### HTTP response details
|
|
963
|
+
| Status code | Description | Response headers |
|
|
964
|
+
|-------------|-------------|------------------|
|
|
965
|
+
| **200** | Next order book update | - |
|
|
966
|
+
|
|
967
|
+
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
## watchTrades
|
|
971
|
+
|
|
972
|
+
> FetchTrades200Response watchTrades(exchange, watchTradesRequest)
|
|
973
|
+
|
|
974
|
+
Watch Trades (WebSocket Stream)
|
|
975
|
+
|
|
976
|
+
Subscribe to real-time trade updates via WebSocket. Returns a promise that resolves with the next trade(s). Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
977
|
+
|
|
978
|
+
### Example
|
|
979
|
+
|
|
980
|
+
```ts
|
|
981
|
+
import {
|
|
982
|
+
Configuration,
|
|
983
|
+
DefaultApi,
|
|
984
|
+
} from 'pmxtjs';
|
|
985
|
+
import type { WatchTradesOperationRequest } from 'pmxtjs';
|
|
986
|
+
|
|
987
|
+
async function example() {
|
|
988
|
+
console.log("🚀 Testing pmxtjs SDK...");
|
|
989
|
+
const api = new DefaultApi();
|
|
990
|
+
|
|
991
|
+
const body = {
|
|
992
|
+
// 'polymarket' | 'kalshi' | The prediction market exchange to target.
|
|
993
|
+
exchange: exchange_example,
|
|
994
|
+
// WatchTradesRequest (optional)
|
|
995
|
+
watchTradesRequest: ...,
|
|
996
|
+
} satisfies WatchTradesOperationRequest;
|
|
997
|
+
|
|
998
|
+
try {
|
|
999
|
+
const data = await api.watchTrades(body);
|
|
1000
|
+
console.log(data);
|
|
1001
|
+
} catch (error) {
|
|
1002
|
+
console.error(error);
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
// Run the test
|
|
1007
|
+
example().catch(console.error);
|
|
1008
|
+
```
|
|
1009
|
+
|
|
1010
|
+
### Parameters
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
| Name | Type | Description | Notes |
|
|
1014
|
+
|------------- | ------------- | ------------- | -------------|
|
|
1015
|
+
| **exchange** | `polymarket`, `kalshi` | The prediction market exchange to target. | [Defaults to `undefined`] [Enum: polymarket, kalshi] |
|
|
1016
|
+
| **watchTradesRequest** | [WatchTradesRequest](WatchTradesRequest.md) | | [Optional] |
|
|
1017
|
+
|
|
1018
|
+
### Return type
|
|
1019
|
+
|
|
1020
|
+
[**FetchTrades200Response**](FetchTrades200Response.md)
|
|
1021
|
+
|
|
1022
|
+
### Authorization
|
|
1023
|
+
|
|
1024
|
+
No authorization required
|
|
1025
|
+
|
|
1026
|
+
### HTTP request headers
|
|
1027
|
+
|
|
1028
|
+
- **Content-Type**: `application/json`
|
|
1029
|
+
- **Accept**: `application/json`
|
|
1030
|
+
|
|
1031
|
+
|
|
1032
|
+
### HTTP response details
|
|
1033
|
+
| Status code | Description | Response headers |
|
|
1034
|
+
|-------------|-------------|------------------|
|
|
1035
|
+
| **200** | Next trade update(s) | - |
|
|
1036
|
+
|
|
1037
|
+
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
1038
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
# WatchOrderBookRequest
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## Properties
|
|
6
|
+
|
|
7
|
+
Name | Type
|
|
8
|
+
------------ | -------------
|
|
9
|
+
`args` | [Array<WatchOrderBookRequestArgsInner>](WatchOrderBookRequestArgsInner.md)
|
|
10
|
+
`credentials` | [ExchangeCredentials](ExchangeCredentials.md)
|
|
11
|
+
|
|
12
|
+
## Example
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import type { WatchOrderBookRequest } from 'pmxtjs'
|
|
16
|
+
|
|
17
|
+
// TODO: Update the object below with actual values
|
|
18
|
+
const example = {
|
|
19
|
+
"args": null,
|
|
20
|
+
"credentials": null,
|
|
21
|
+
} satisfies WatchOrderBookRequest
|
|
22
|
+
|
|
23
|
+
console.log(example)
|
|
24
|
+
|
|
25
|
+
// Convert the instance to a JSON string
|
|
26
|
+
const exampleJSON: string = JSON.stringify(example)
|
|
27
|
+
console.log(exampleJSON)
|
|
28
|
+
|
|
29
|
+
// Parse the JSON string back to an object
|
|
30
|
+
const exampleParsed = JSON.parse(exampleJSON) as WatchOrderBookRequest
|
|
31
|
+
console.log(exampleParsed)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
35
|
+
|
|
36
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
# WatchOrderBookRequestArgsInner
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## Properties
|
|
6
|
+
|
|
7
|
+
Name | Type
|
|
8
|
+
------------ | -------------
|
|
9
|
+
|
|
10
|
+
## Example
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import type { WatchOrderBookRequestArgsInner } from 'pmxtjs'
|
|
14
|
+
|
|
15
|
+
// TODO: Update the object below with actual values
|
|
16
|
+
const example = {
|
|
17
|
+
} satisfies WatchOrderBookRequestArgsInner
|
|
18
|
+
|
|
19
|
+
console.log(example)
|
|
20
|
+
|
|
21
|
+
// Convert the instance to a JSON string
|
|
22
|
+
const exampleJSON: string = JSON.stringify(example)
|
|
23
|
+
console.log(exampleJSON)
|
|
24
|
+
|
|
25
|
+
// Parse the JSON string back to an object
|
|
26
|
+
const exampleParsed = JSON.parse(exampleJSON) as WatchOrderBookRequestArgsInner
|
|
27
|
+
console.log(exampleParsed)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
31
|
+
|
|
32
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
# WatchTradesRequest
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## Properties
|
|
6
|
+
|
|
7
|
+
Name | Type
|
|
8
|
+
------------ | -------------
|
|
9
|
+
`args` | [Array<WatchOrderBookRequestArgsInner>](WatchOrderBookRequestArgsInner.md)
|
|
10
|
+
`credentials` | [ExchangeCredentials](ExchangeCredentials.md)
|
|
11
|
+
|
|
12
|
+
## Example
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import type { WatchTradesRequest } from 'pmxtjs'
|
|
16
|
+
|
|
17
|
+
// TODO: Update the object below with actual values
|
|
18
|
+
const example = {
|
|
19
|
+
"args": null,
|
|
20
|
+
"credentials": null,
|
|
21
|
+
} satisfies WatchTradesRequest
|
|
22
|
+
|
|
23
|
+
console.log(example)
|
|
24
|
+
|
|
25
|
+
// Convert the instance to a JSON string
|
|
26
|
+
const exampleJSON: string = JSON.stringify(example)
|
|
27
|
+
console.log(exampleJSON)
|
|
28
|
+
|
|
29
|
+
// Parse the JSON string back to an object
|
|
30
|
+
const exampleParsed = JSON.parse(exampleJSON) as WatchTradesRequest
|
|
31
|
+
console.log(exampleParsed)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md)
|
|
35
|
+
|
|
36
|
+
|
package/generated/package.json
CHANGED
|
@@ -34,6 +34,8 @@ import type {
|
|
|
34
34
|
GetMarketsBySlugRequest,
|
|
35
35
|
HealthCheck200Response,
|
|
36
36
|
SearchMarketsRequest,
|
|
37
|
+
WatchOrderBookRequest,
|
|
38
|
+
WatchTradesRequest,
|
|
37
39
|
} from '../models/index';
|
|
38
40
|
import {
|
|
39
41
|
CancelOrderRequestFromJSON,
|
|
@@ -74,6 +76,10 @@ import {
|
|
|
74
76
|
HealthCheck200ResponseToJSON,
|
|
75
77
|
SearchMarketsRequestFromJSON,
|
|
76
78
|
SearchMarketsRequestToJSON,
|
|
79
|
+
WatchOrderBookRequestFromJSON,
|
|
80
|
+
WatchOrderBookRequestToJSON,
|
|
81
|
+
WatchTradesRequestFromJSON,
|
|
82
|
+
WatchTradesRequestToJSON,
|
|
77
83
|
} from '../models/index';
|
|
78
84
|
|
|
79
85
|
export interface CancelOrderOperationRequest {
|
|
@@ -136,6 +142,16 @@ export interface SearchMarketsOperationRequest {
|
|
|
136
142
|
searchMarketsRequest?: SearchMarketsRequest;
|
|
137
143
|
}
|
|
138
144
|
|
|
145
|
+
export interface WatchOrderBookOperationRequest {
|
|
146
|
+
exchange: WatchOrderBookOperationExchangeEnum;
|
|
147
|
+
watchOrderBookRequest?: WatchOrderBookRequest;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export interface WatchTradesOperationRequest {
|
|
151
|
+
exchange: WatchTradesOperationExchangeEnum;
|
|
152
|
+
watchTradesRequest?: WatchTradesRequest;
|
|
153
|
+
}
|
|
154
|
+
|
|
139
155
|
/**
|
|
140
156
|
*
|
|
141
157
|
*/
|
|
@@ -652,6 +668,90 @@ export class DefaultApi extends runtime.BaseAPI {
|
|
|
652
668
|
return await response.value();
|
|
653
669
|
}
|
|
654
670
|
|
|
671
|
+
/**
|
|
672
|
+
* Subscribe to real-time order book updates via WebSocket. Returns a promise that resolves with the next order book update. Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
673
|
+
* Watch Order Book (WebSocket Stream)
|
|
674
|
+
*/
|
|
675
|
+
async watchOrderBookRaw(requestParameters: WatchOrderBookOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<FetchOrderBook200Response>> {
|
|
676
|
+
if (requestParameters['exchange'] == null) {
|
|
677
|
+
throw new runtime.RequiredError(
|
|
678
|
+
'exchange',
|
|
679
|
+
'Required parameter "exchange" was null or undefined when calling watchOrderBook().'
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
const queryParameters: any = {};
|
|
684
|
+
|
|
685
|
+
const headerParameters: runtime.HTTPHeaders = {};
|
|
686
|
+
|
|
687
|
+
headerParameters['Content-Type'] = 'application/json';
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
let urlPath = `/api/{exchange}/watchOrderBook`;
|
|
691
|
+
urlPath = urlPath.replace(`{${"exchange"}}`, encodeURIComponent(String(requestParameters['exchange'])));
|
|
692
|
+
|
|
693
|
+
const response = await this.request({
|
|
694
|
+
path: urlPath,
|
|
695
|
+
method: 'POST',
|
|
696
|
+
headers: headerParameters,
|
|
697
|
+
query: queryParameters,
|
|
698
|
+
body: WatchOrderBookRequestToJSON(requestParameters['watchOrderBookRequest']),
|
|
699
|
+
}, initOverrides);
|
|
700
|
+
|
|
701
|
+
return new runtime.JSONApiResponse(response, (jsonValue) => FetchOrderBook200ResponseFromJSON(jsonValue));
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* Subscribe to real-time order book updates via WebSocket. Returns a promise that resolves with the next order book update. Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
706
|
+
* Watch Order Book (WebSocket Stream)
|
|
707
|
+
*/
|
|
708
|
+
async watchOrderBook(requestParameters: WatchOrderBookOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FetchOrderBook200Response> {
|
|
709
|
+
const response = await this.watchOrderBookRaw(requestParameters, initOverrides);
|
|
710
|
+
return await response.value();
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Subscribe to real-time trade updates via WebSocket. Returns a promise that resolves with the next trade(s). Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
715
|
+
* Watch Trades (WebSocket Stream)
|
|
716
|
+
*/
|
|
717
|
+
async watchTradesRaw(requestParameters: WatchTradesOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<FetchTrades200Response>> {
|
|
718
|
+
if (requestParameters['exchange'] == null) {
|
|
719
|
+
throw new runtime.RequiredError(
|
|
720
|
+
'exchange',
|
|
721
|
+
'Required parameter "exchange" was null or undefined when calling watchTrades().'
|
|
722
|
+
);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
const queryParameters: any = {};
|
|
726
|
+
|
|
727
|
+
const headerParameters: runtime.HTTPHeaders = {};
|
|
728
|
+
|
|
729
|
+
headerParameters['Content-Type'] = 'application/json';
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
let urlPath = `/api/{exchange}/watchTrades`;
|
|
733
|
+
urlPath = urlPath.replace(`{${"exchange"}}`, encodeURIComponent(String(requestParameters['exchange'])));
|
|
734
|
+
|
|
735
|
+
const response = await this.request({
|
|
736
|
+
path: urlPath,
|
|
737
|
+
method: 'POST',
|
|
738
|
+
headers: headerParameters,
|
|
739
|
+
query: queryParameters,
|
|
740
|
+
body: WatchTradesRequestToJSON(requestParameters['watchTradesRequest']),
|
|
741
|
+
}, initOverrides);
|
|
742
|
+
|
|
743
|
+
return new runtime.JSONApiResponse(response, (jsonValue) => FetchTrades200ResponseFromJSON(jsonValue));
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/**
|
|
747
|
+
* Subscribe to real-time trade updates via WebSocket. Returns a promise that resolves with the next trade(s). Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
748
|
+
* Watch Trades (WebSocket Stream)
|
|
749
|
+
*/
|
|
750
|
+
async watchTrades(requestParameters: WatchTradesOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<FetchTrades200Response> {
|
|
751
|
+
const response = await this.watchTradesRaw(requestParameters, initOverrides);
|
|
752
|
+
return await response.value();
|
|
753
|
+
}
|
|
754
|
+
|
|
655
755
|
}
|
|
656
756
|
|
|
657
757
|
/**
|
|
@@ -750,3 +850,19 @@ export const SearchMarketsOperationExchangeEnum = {
|
|
|
750
850
|
Kalshi: 'kalshi'
|
|
751
851
|
} as const;
|
|
752
852
|
export type SearchMarketsOperationExchangeEnum = typeof SearchMarketsOperationExchangeEnum[keyof typeof SearchMarketsOperationExchangeEnum];
|
|
853
|
+
/**
|
|
854
|
+
* @export
|
|
855
|
+
*/
|
|
856
|
+
export const WatchOrderBookOperationExchangeEnum = {
|
|
857
|
+
Polymarket: 'polymarket',
|
|
858
|
+
Kalshi: 'kalshi'
|
|
859
|
+
} as const;
|
|
860
|
+
export type WatchOrderBookOperationExchangeEnum = typeof WatchOrderBookOperationExchangeEnum[keyof typeof WatchOrderBookOperationExchangeEnum];
|
|
861
|
+
/**
|
|
862
|
+
* @export
|
|
863
|
+
*/
|
|
864
|
+
export const WatchTradesOperationExchangeEnum = {
|
|
865
|
+
Polymarket: 'polymarket',
|
|
866
|
+
Kalshi: 'kalshi'
|
|
867
|
+
} as const;
|
|
868
|
+
export type WatchTradesOperationExchangeEnum = typeof WatchTradesOperationExchangeEnum[keyof typeof WatchTradesOperationExchangeEnum];
|