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.
Files changed (42) hide show
  1. package/dist/esm/generated/src/apis/DefaultApi.d.ts +45 -1
  2. package/dist/esm/generated/src/apis/DefaultApi.js +75 -1
  3. package/dist/esm/generated/src/models/WatchOrderBookRequest.d.ts +40 -0
  4. package/dist/esm/generated/src/models/WatchOrderBookRequest.js +47 -0
  5. package/dist/esm/generated/src/models/WatchOrderBookRequestArgsInner.d.ts +21 -0
  6. package/dist/esm/generated/src/models/WatchOrderBookRequestArgsInner.js +43 -0
  7. package/dist/esm/generated/src/models/WatchTradesRequest.d.ts +40 -0
  8. package/dist/esm/generated/src/models/WatchTradesRequest.js +47 -0
  9. package/dist/esm/generated/src/models/index.d.ts +3 -0
  10. package/dist/esm/generated/src/models/index.js +3 -0
  11. package/dist/esm/pmxt/client.d.ts +44 -0
  12. package/dist/esm/pmxt/client.js +99 -1
  13. package/dist/esm/pmxt/server-manager.d.ts +4 -1
  14. package/dist/esm/pmxt/server-manager.js +68 -3
  15. package/dist/generated/src/apis/DefaultApi.d.ts +45 -1
  16. package/dist/generated/src/apis/DefaultApi.js +75 -1
  17. package/dist/generated/src/models/WatchOrderBookRequest.d.ts +40 -0
  18. package/dist/generated/src/models/WatchOrderBookRequest.js +54 -0
  19. package/dist/generated/src/models/WatchOrderBookRequestArgsInner.d.ts +21 -0
  20. package/dist/generated/src/models/WatchOrderBookRequestArgsInner.js +49 -0
  21. package/dist/generated/src/models/WatchTradesRequest.d.ts +40 -0
  22. package/dist/generated/src/models/WatchTradesRequest.js +54 -0
  23. package/dist/generated/src/models/index.d.ts +3 -0
  24. package/dist/generated/src/models/index.js +3 -0
  25. package/dist/pmxt/client.d.ts +44 -0
  26. package/dist/pmxt/client.js +99 -1
  27. package/dist/pmxt/server-manager.d.ts +4 -1
  28. package/dist/pmxt/server-manager.js +68 -3
  29. package/generated/.openapi-generator/FILES +6 -0
  30. package/generated/docs/DefaultApi.md +142 -0
  31. package/generated/docs/WatchOrderBookRequest.md +36 -0
  32. package/generated/docs/WatchOrderBookRequestArgsInner.md +32 -0
  33. package/generated/docs/WatchTradesRequest.md +36 -0
  34. package/generated/package.json +1 -1
  35. package/generated/src/apis/DefaultApi.ts +116 -0
  36. package/generated/src/models/WatchOrderBookRequest.ts +89 -0
  37. package/generated/src/models/WatchOrderBookRequestArgsInner.ts +55 -0
  38. package/generated/src/models/WatchTradesRequest.ts +89 -0
  39. package/generated/src/models/index.ts +3 -0
  40. package/package.json +2 -2
  41. package/pmxt/client.ts +111 -1
  42. package/pmxt/server-manager.ts +71 -4
@@ -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({ basePath: newBaseUrl });
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
- * Check if the server is running.
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
- * Check if the server is running.
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 if already running
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
- return;
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&lt;WatchOrderBookRequestArgsInner&gt;](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&lt;WatchOrderBookRequestArgsInner&gt;](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
+
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmxtjs",
3
- "version": "1.0.3",
3
+ "version": "1.1.0-b3",
4
4
  "description": "OpenAPI client for pmxtjs",
5
5
  "author": "OpenAPI-Generator",
6
6
  "repository": {
@@ -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];