pmxtjs 2.19.5 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/generated/src/apis/DefaultApi.d.ts +53 -1
- package/dist/esm/generated/src/apis/DefaultApi.js +83 -1
- package/dist/esm/generated/src/models/FetchBalanceRequest.d.ts +2 -2
- package/dist/esm/generated/src/models/FetchPositionsRequest.d.ts +2 -2
- package/dist/esm/generated/src/models/UnwatchAddressRequest.d.ts +39 -0
- package/dist/esm/generated/src/models/UnwatchAddressRequest.js +46 -0
- package/dist/esm/generated/src/models/WatchAddress200Response.d.ts +45 -0
- package/dist/esm/generated/src/models/WatchAddress200Response.js +46 -0
- package/dist/esm/generated/src/models/WatchAddressRequest.d.ts +40 -0
- package/dist/esm/generated/src/models/WatchAddressRequest.js +47 -0
- package/dist/esm/generated/src/models/WatchAddressRequestArgsInner.d.ts +21 -0
- package/dist/esm/generated/src/models/WatchAddressRequestArgsInner.js +37 -0
- package/dist/esm/generated/src/models/index.d.ts +4 -0
- package/dist/esm/generated/src/models/index.js +4 -0
- package/dist/esm/pmxt/args.d.ts +1 -0
- package/dist/esm/pmxt/args.js +3 -0
- package/dist/esm/pmxt/client.d.ts +94 -5
- package/dist/esm/pmxt/client.js +217 -33
- package/dist/esm/pmxt/models.d.ts +45 -0
- package/dist/generated/src/apis/DefaultApi.d.ts +53 -1
- package/dist/generated/src/apis/DefaultApi.js +83 -1
- package/dist/generated/src/models/FetchBalanceRequest.d.ts +2 -2
- package/dist/generated/src/models/FetchPositionsRequest.d.ts +2 -2
- package/dist/generated/src/models/UnwatchAddressRequest.d.ts +39 -0
- package/dist/generated/src/models/UnwatchAddressRequest.js +53 -0
- package/dist/generated/src/models/WatchAddress200Response.d.ts +45 -0
- package/dist/generated/src/models/WatchAddress200Response.js +53 -0
- package/dist/generated/src/models/WatchAddressRequest.d.ts +40 -0
- package/dist/generated/src/models/WatchAddressRequest.js +54 -0
- package/dist/generated/src/models/WatchAddressRequestArgsInner.d.ts +21 -0
- package/dist/generated/src/models/WatchAddressRequestArgsInner.js +43 -0
- package/dist/generated/src/models/index.d.ts +4 -0
- package/dist/generated/src/models/index.js +4 -0
- package/dist/pmxt/args.d.ts +1 -0
- package/dist/pmxt/args.js +6 -0
- package/dist/pmxt/client.d.ts +94 -5
- package/dist/pmxt/client.js +216 -32
- package/dist/pmxt/models.d.ts +45 -0
- package/generated/.openapi-generator/FILES +8 -0
- package/generated/docs/DefaultApi.md +142 -0
- package/generated/docs/FetchBalanceRequest.md +1 -1
- package/generated/docs/FetchPositionsRequest.md +1 -1
- package/generated/docs/UnwatchAddressRequest.md +36 -0
- package/generated/docs/WatchAddress200Response.md +38 -0
- package/generated/docs/WatchAddressRequest.md +36 -0
- package/generated/docs/WatchAddressRequestArgsInner.md +32 -0
- package/generated/package.json +1 -1
- package/generated/src/apis/DefaultApi.ts +127 -0
- package/generated/src/models/FetchBalanceRequest.ts +2 -2
- package/generated/src/models/FetchPositionsRequest.ts +2 -2
- package/generated/src/models/UnwatchAddressRequest.ts +82 -0
- package/generated/src/models/WatchAddress200Response.ts +89 -0
- package/generated/src/models/WatchAddressRequest.ts +89 -0
- package/generated/src/models/WatchAddressRequestArgsInner.ts +49 -0
- package/generated/src/models/index.ts +4 -0
- package/package.json +2 -2
- package/pmxt/args.ts +3 -0
- package/pmxt/client.ts +263 -39
- package/pmxt/models.ts +55 -1
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* This module provides clean, TypeScript-friendly wrappers around the auto-generated
|
|
5
5
|
* OpenAPI client, matching the Python API exactly.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { Configuration, DefaultApi, ExchangeCredentials } from "../generated/src/index.js";
|
|
8
|
+
import { Balance, BuiltOrder, CreateOrderParams, EventFilterCriteria, EventFilterFunction, ExecutionPriceResult, MarketFilterCriteria, MarketFilterFunction, MarketOutcome, Order, OrderBook, PaginatedMarketsResult, Position, PriceCandle, SubscribedAddressSnapshot, SubscriptionOption, Trade, UnifiedEvent, UnifiedMarket, UserTrade } from "./models.js";
|
|
9
9
|
import { ServerManager } from "./server-manager.js";
|
|
10
10
|
/**
|
|
11
11
|
* Base exchange client options.
|
|
@@ -74,8 +74,8 @@ export declare abstract class Exchange {
|
|
|
74
74
|
fetchMyTrades(params?: any): Promise<UserTrade[]>;
|
|
75
75
|
fetchClosedOrders(params?: any): Promise<Order[]>;
|
|
76
76
|
fetchAllOrders(params?: any): Promise<Order[]>;
|
|
77
|
-
fetchPositions(): Promise<Position[]>;
|
|
78
|
-
fetchBalance(): Promise<Balance[]>;
|
|
77
|
+
fetchPositions(address?: string): Promise<Position[]>;
|
|
78
|
+
fetchBalance(address?: string): Promise<Balance[]>;
|
|
79
79
|
close(): Promise<void>;
|
|
80
80
|
/**
|
|
81
81
|
* Get historical price candles.
|
|
@@ -133,6 +133,7 @@ export declare abstract class Exchange {
|
|
|
133
133
|
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
134
134
|
*
|
|
135
135
|
* @param outcomeId - Outcome ID to watch
|
|
136
|
+
* @param address - Public wallet to be watched
|
|
136
137
|
* @param since - Optional timestamp to filter trades from
|
|
137
138
|
* @param limit - Optional limit for number of trades
|
|
138
139
|
* @returns Next trade update(s)
|
|
@@ -148,7 +149,95 @@ export declare abstract class Exchange {
|
|
|
148
149
|
* }
|
|
149
150
|
* ```
|
|
150
151
|
*/
|
|
151
|
-
watchTrades(outcomeId: string, since?: number, limit?: number): Promise<Trade[]>;
|
|
152
|
+
watchTrades(outcomeId: string, address?: string, since?: number, limit?: number): Promise<Trade[]>;
|
|
153
|
+
/**
|
|
154
|
+
* Watch real-time updates of a public wallet via WebSocket.
|
|
155
|
+
*
|
|
156
|
+
* Returns a promise that resolves with the next update(s).
|
|
157
|
+
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
158
|
+
*
|
|
159
|
+
* @param address - Public wallet to be watched
|
|
160
|
+
* @param types - Subscription options including 'trades', 'positions', and 'balances'
|
|
161
|
+
* @returns Next update(s)
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* // Stream updates of a public wallet address
|
|
166
|
+
* while (true) {
|
|
167
|
+
* const snapshots = await exchange.watchAddress(address, types);
|
|
168
|
+
* for (const snapshot of snapshots) {
|
|
169
|
+
* console.log(`Trade: ${snapshot.trades}`);
|
|
170
|
+
* }
|
|
171
|
+
* }
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
watchAddress(address: string, types?: SubscriptionOption[]): Promise<SubscribedAddressSnapshot>;
|
|
175
|
+
/**
|
|
176
|
+
* Stop watching a previously registered wallet address and release its resource updates.
|
|
177
|
+
*
|
|
178
|
+
* @param address - Public wallet to be watched
|
|
179
|
+
* @returns
|
|
180
|
+
*/
|
|
181
|
+
unwatchAddress(address: string): Promise<Trade[]>;
|
|
182
|
+
/**
|
|
183
|
+
* Build an order payload without submitting it to the exchange.
|
|
184
|
+
* Returns the exchange-native signed order or transaction payload for
|
|
185
|
+
* inspection, forwarding through a middleware layer, or deferred
|
|
186
|
+
* submission via {@link submitOrder}.
|
|
187
|
+
*
|
|
188
|
+
* You can specify the market either with explicit marketId/outcomeId,
|
|
189
|
+
* or by passing an outcome object directly (e.g., market.yes).
|
|
190
|
+
*
|
|
191
|
+
* @param params - Order parameters (same as createOrder)
|
|
192
|
+
* @returns A BuiltOrder containing the exchange-native payload
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* // Build, inspect, then submit:
|
|
197
|
+
* const built = await exchange.buildOrder({
|
|
198
|
+
* marketId: "663583",
|
|
199
|
+
* outcomeId: "10991849...",
|
|
200
|
+
* side: "buy",
|
|
201
|
+
* type: "limit",
|
|
202
|
+
* amount: 10,
|
|
203
|
+
* price: 0.55
|
|
204
|
+
* });
|
|
205
|
+
*
|
|
206
|
+
* console.log(built.signedOrder); // inspect before submitting
|
|
207
|
+
* const order = await exchange.submitOrder(built);
|
|
208
|
+
*
|
|
209
|
+
* // Using outcome shorthand:
|
|
210
|
+
* const built2 = await exchange.buildOrder({
|
|
211
|
+
* outcome: market.yes,
|
|
212
|
+
* side: "buy",
|
|
213
|
+
* type: "market",
|
|
214
|
+
* amount: 10
|
|
215
|
+
* });
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
218
|
+
buildOrder(params: CreateOrderParams & {
|
|
219
|
+
outcome?: MarketOutcome;
|
|
220
|
+
}): Promise<BuiltOrder>;
|
|
221
|
+
/**
|
|
222
|
+
* Submit a pre-built order returned by {@link buildOrder}.
|
|
223
|
+
*
|
|
224
|
+
* @param built - The BuiltOrder payload from buildOrder()
|
|
225
|
+
* @returns The submitted order
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* ```typescript
|
|
229
|
+
* const built = await exchange.buildOrder({
|
|
230
|
+
* outcome: market.yes,
|
|
231
|
+
* side: "buy",
|
|
232
|
+
* type: "limit",
|
|
233
|
+
* amount: 10,
|
|
234
|
+
* price: 0.55
|
|
235
|
+
* });
|
|
236
|
+
* const order = await exchange.submitOrder(built);
|
|
237
|
+
* console.log(order.id, order.status);
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
submitOrder(built: BuiltOrder): Promise<Order>;
|
|
152
241
|
/**
|
|
153
242
|
* Create a new order.
|
|
154
243
|
*
|
package/dist/esm/pmxt/client.js
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* This module provides clean, TypeScript-friendly wrappers around the auto-generated
|
|
5
5
|
* OpenAPI client, matching the Python API exactly.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { Configuration, DefaultApi, } from "../generated/src/index.js";
|
|
8
8
|
import { MarketList, } from "./models.js";
|
|
9
9
|
import { ServerManager } from "./server-manager.js";
|
|
10
|
+
import { buildArgsWithOptionalOptions } from "./args.js";
|
|
10
11
|
// Converter functions
|
|
11
12
|
function convertMarket(raw) {
|
|
12
13
|
const outcomes = (raw.outcomes || []).map((o) => ({
|
|
@@ -143,6 +144,19 @@ function convertEvent(raw) {
|
|
|
143
144
|
};
|
|
144
145
|
return event;
|
|
145
146
|
}
|
|
147
|
+
function convertSubscriptionSnapshot(raw) {
|
|
148
|
+
const trades = (raw.trades ?? []).map(convertTrade);
|
|
149
|
+
const balances = (raw.balances ?? []).map(convertBalance);
|
|
150
|
+
const positions = (raw.positions ?? []).map(convertPosition);
|
|
151
|
+
const snapShot = {
|
|
152
|
+
address: raw.address,
|
|
153
|
+
trades,
|
|
154
|
+
balances,
|
|
155
|
+
positions,
|
|
156
|
+
timestamp: raw.timestamp,
|
|
157
|
+
};
|
|
158
|
+
return snapShot;
|
|
159
|
+
}
|
|
146
160
|
/**
|
|
147
161
|
* Base class for prediction market exchanges.
|
|
148
162
|
*
|
|
@@ -295,9 +309,7 @@ export class Exchange {
|
|
|
295
309
|
async fetchMarkets(params) {
|
|
296
310
|
await this.initPromise;
|
|
297
311
|
try {
|
|
298
|
-
const args =
|
|
299
|
-
if (params !== undefined)
|
|
300
|
-
args.push(params);
|
|
312
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
301
313
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMarkets`, {
|
|
302
314
|
method: 'POST',
|
|
303
315
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -318,9 +330,7 @@ export class Exchange {
|
|
|
318
330
|
async fetchMarketsPaginated(params) {
|
|
319
331
|
await this.initPromise;
|
|
320
332
|
try {
|
|
321
|
-
const args =
|
|
322
|
-
if (params !== undefined)
|
|
323
|
-
args.push(params);
|
|
333
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
324
334
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMarketsPaginated`, {
|
|
325
335
|
method: 'POST',
|
|
326
336
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -345,9 +355,7 @@ export class Exchange {
|
|
|
345
355
|
async fetchEvents(params) {
|
|
346
356
|
await this.initPromise;
|
|
347
357
|
try {
|
|
348
|
-
const args =
|
|
349
|
-
if (params !== undefined)
|
|
350
|
-
args.push(params);
|
|
358
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
351
359
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchEvents`, {
|
|
352
360
|
method: 'POST',
|
|
353
361
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -368,9 +376,7 @@ export class Exchange {
|
|
|
368
376
|
async fetchMarket(params) {
|
|
369
377
|
await this.initPromise;
|
|
370
378
|
try {
|
|
371
|
-
const args =
|
|
372
|
-
if (params !== undefined)
|
|
373
|
-
args.push(params);
|
|
379
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
374
380
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMarket`, {
|
|
375
381
|
method: 'POST',
|
|
376
382
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -391,9 +397,7 @@ export class Exchange {
|
|
|
391
397
|
async fetchEvent(params) {
|
|
392
398
|
await this.initPromise;
|
|
393
399
|
try {
|
|
394
|
-
const args =
|
|
395
|
-
if (params !== undefined)
|
|
396
|
-
args.push(params);
|
|
400
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
397
401
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchEvent`, {
|
|
398
402
|
method: 'POST',
|
|
399
403
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -480,9 +484,7 @@ export class Exchange {
|
|
|
480
484
|
async fetchOpenOrders(marketId) {
|
|
481
485
|
await this.initPromise;
|
|
482
486
|
try {
|
|
483
|
-
const args =
|
|
484
|
-
if (marketId !== undefined)
|
|
485
|
-
args.push(marketId);
|
|
487
|
+
const args = buildArgsWithOptionalOptions(marketId);
|
|
486
488
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchOpenOrders`, {
|
|
487
489
|
method: 'POST',
|
|
488
490
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -503,9 +505,7 @@ export class Exchange {
|
|
|
503
505
|
async fetchMyTrades(params) {
|
|
504
506
|
await this.initPromise;
|
|
505
507
|
try {
|
|
506
|
-
const args =
|
|
507
|
-
if (params !== undefined)
|
|
508
|
-
args.push(params);
|
|
508
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
509
509
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchMyTrades`, {
|
|
510
510
|
method: 'POST',
|
|
511
511
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -526,9 +526,7 @@ export class Exchange {
|
|
|
526
526
|
async fetchClosedOrders(params) {
|
|
527
527
|
await this.initPromise;
|
|
528
528
|
try {
|
|
529
|
-
const args =
|
|
530
|
-
if (params !== undefined)
|
|
531
|
-
args.push(params);
|
|
529
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
532
530
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchClosedOrders`, {
|
|
533
531
|
method: 'POST',
|
|
534
532
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -549,9 +547,7 @@ export class Exchange {
|
|
|
549
547
|
async fetchAllOrders(params) {
|
|
550
548
|
await this.initPromise;
|
|
551
549
|
try {
|
|
552
|
-
const args =
|
|
553
|
-
if (params !== undefined)
|
|
554
|
-
args.push(params);
|
|
550
|
+
const args = buildArgsWithOptionalOptions(params);
|
|
555
551
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchAllOrders`, {
|
|
556
552
|
method: 'POST',
|
|
557
553
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -569,10 +565,10 @@ export class Exchange {
|
|
|
569
565
|
throw new Error(`Failed to fetchAllOrders: ${error}`);
|
|
570
566
|
}
|
|
571
567
|
}
|
|
572
|
-
async fetchPositions() {
|
|
568
|
+
async fetchPositions(address) {
|
|
573
569
|
await this.initPromise;
|
|
574
570
|
try {
|
|
575
|
-
const args = [];
|
|
571
|
+
const args = address ? [address] : [];
|
|
576
572
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchPositions`, {
|
|
577
573
|
method: 'POST',
|
|
578
574
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -590,10 +586,10 @@ export class Exchange {
|
|
|
590
586
|
throw new Error(`Failed to fetchPositions: ${error}`);
|
|
591
587
|
}
|
|
592
588
|
}
|
|
593
|
-
async fetchBalance() {
|
|
589
|
+
async fetchBalance(address) {
|
|
594
590
|
await this.initPromise;
|
|
595
591
|
try {
|
|
596
|
-
const args = [];
|
|
592
|
+
const args = address ? [address] : [];
|
|
597
593
|
const response = await fetch(`${this.config.basePath}/api/${this.exchangeName}/fetchBalance`, {
|
|
598
594
|
method: 'POST',
|
|
599
595
|
headers: { 'Content-Type': 'application/json', ...this.getAuthHeaders() },
|
|
@@ -758,6 +754,7 @@ export class Exchange {
|
|
|
758
754
|
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
759
755
|
*
|
|
760
756
|
* @param outcomeId - Outcome ID to watch
|
|
757
|
+
* @param address - Public wallet to be watched
|
|
761
758
|
* @param since - Optional timestamp to filter trades from
|
|
762
759
|
* @param limit - Optional limit for number of trades
|
|
763
760
|
* @returns Next trade update(s)
|
|
@@ -773,10 +770,13 @@ export class Exchange {
|
|
|
773
770
|
* }
|
|
774
771
|
* ```
|
|
775
772
|
*/
|
|
776
|
-
async watchTrades(outcomeId, since, limit) {
|
|
773
|
+
async watchTrades(outcomeId, address, since, limit) {
|
|
777
774
|
await this.initPromise;
|
|
778
775
|
try {
|
|
779
776
|
const args = [outcomeId];
|
|
777
|
+
if (address !== undefined) {
|
|
778
|
+
args.push(address);
|
|
779
|
+
}
|
|
780
780
|
if (since !== undefined) {
|
|
781
781
|
args.push(since);
|
|
782
782
|
}
|
|
@@ -798,7 +798,191 @@ export class Exchange {
|
|
|
798
798
|
throw new Error(`Failed to watch trades: ${error}`);
|
|
799
799
|
}
|
|
800
800
|
}
|
|
801
|
+
/**
|
|
802
|
+
* Watch real-time updates of a public wallet via WebSocket.
|
|
803
|
+
*
|
|
804
|
+
* Returns a promise that resolves with the next update(s).
|
|
805
|
+
* Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
806
|
+
*
|
|
807
|
+
* @param address - Public wallet to be watched
|
|
808
|
+
* @param types - Subscription options including 'trades', 'positions', and 'balances'
|
|
809
|
+
* @returns Next update(s)
|
|
810
|
+
*
|
|
811
|
+
* @example
|
|
812
|
+
* ```typescript
|
|
813
|
+
* // Stream updates of a public wallet address
|
|
814
|
+
* while (true) {
|
|
815
|
+
* const snapshots = await exchange.watchAddress(address, types);
|
|
816
|
+
* for (const snapshot of snapshots) {
|
|
817
|
+
* console.log(`Trade: ${snapshot.trades}`);
|
|
818
|
+
* }
|
|
819
|
+
* }
|
|
820
|
+
* ```
|
|
821
|
+
*/
|
|
822
|
+
async watchAddress(address, types) {
|
|
823
|
+
await this.initPromise;
|
|
824
|
+
try {
|
|
825
|
+
const args = [address];
|
|
826
|
+
if (types !== undefined) {
|
|
827
|
+
args.push(types);
|
|
828
|
+
}
|
|
829
|
+
const requestBody = {
|
|
830
|
+
args,
|
|
831
|
+
credentials: this.getCredentials()
|
|
832
|
+
};
|
|
833
|
+
const response = await this.api.watchAddress({
|
|
834
|
+
exchange: this.exchangeName,
|
|
835
|
+
watchAddressRequest: requestBody,
|
|
836
|
+
});
|
|
837
|
+
const data = this.handleResponse(response);
|
|
838
|
+
return convertSubscriptionSnapshot(data);
|
|
839
|
+
}
|
|
840
|
+
catch (error) {
|
|
841
|
+
throw new Error(`Failed to watch address: ${error}`);
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
/**
|
|
845
|
+
* Stop watching a previously registered wallet address and release its resource updates.
|
|
846
|
+
*
|
|
847
|
+
* @param address - Public wallet to be watched
|
|
848
|
+
* @returns
|
|
849
|
+
*/
|
|
850
|
+
async unwatchAddress(address) {
|
|
851
|
+
await this.initPromise;
|
|
852
|
+
try {
|
|
853
|
+
const args = [address];
|
|
854
|
+
const requestBody = {
|
|
855
|
+
args,
|
|
856
|
+
credentials: this.getCredentials()
|
|
857
|
+
};
|
|
858
|
+
const response = await this.api.unwatchAddress({
|
|
859
|
+
exchange: this.exchangeName,
|
|
860
|
+
unwatchAddressRequest: requestBody,
|
|
861
|
+
});
|
|
862
|
+
return this.handleResponse(response);
|
|
863
|
+
}
|
|
864
|
+
catch (error) {
|
|
865
|
+
throw new Error(`Failed to unwatch address: ${error}`);
|
|
866
|
+
}
|
|
867
|
+
}
|
|
801
868
|
// Trading Methods (require authentication)
|
|
869
|
+
/**
|
|
870
|
+
* Build an order payload without submitting it to the exchange.
|
|
871
|
+
* Returns the exchange-native signed order or transaction payload for
|
|
872
|
+
* inspection, forwarding through a middleware layer, or deferred
|
|
873
|
+
* submission via {@link submitOrder}.
|
|
874
|
+
*
|
|
875
|
+
* You can specify the market either with explicit marketId/outcomeId,
|
|
876
|
+
* or by passing an outcome object directly (e.g., market.yes).
|
|
877
|
+
*
|
|
878
|
+
* @param params - Order parameters (same as createOrder)
|
|
879
|
+
* @returns A BuiltOrder containing the exchange-native payload
|
|
880
|
+
*
|
|
881
|
+
* @example
|
|
882
|
+
* ```typescript
|
|
883
|
+
* // Build, inspect, then submit:
|
|
884
|
+
* const built = await exchange.buildOrder({
|
|
885
|
+
* marketId: "663583",
|
|
886
|
+
* outcomeId: "10991849...",
|
|
887
|
+
* side: "buy",
|
|
888
|
+
* type: "limit",
|
|
889
|
+
* amount: 10,
|
|
890
|
+
* price: 0.55
|
|
891
|
+
* });
|
|
892
|
+
*
|
|
893
|
+
* console.log(built.signedOrder); // inspect before submitting
|
|
894
|
+
* const order = await exchange.submitOrder(built);
|
|
895
|
+
*
|
|
896
|
+
* // Using outcome shorthand:
|
|
897
|
+
* const built2 = await exchange.buildOrder({
|
|
898
|
+
* outcome: market.yes,
|
|
899
|
+
* side: "buy",
|
|
900
|
+
* type: "market",
|
|
901
|
+
* amount: 10
|
|
902
|
+
* });
|
|
903
|
+
* ```
|
|
904
|
+
*/
|
|
905
|
+
async buildOrder(params) {
|
|
906
|
+
await this.initPromise;
|
|
907
|
+
try {
|
|
908
|
+
let marketId = params.marketId;
|
|
909
|
+
let outcomeId = params.outcomeId;
|
|
910
|
+
if (params.outcome) {
|
|
911
|
+
if (marketId !== undefined || outcomeId !== undefined) {
|
|
912
|
+
throw new Error("Cannot specify both 'outcome' and 'marketId'/'outcomeId'. Use one or the other.");
|
|
913
|
+
}
|
|
914
|
+
const outcome = params.outcome;
|
|
915
|
+
if (!outcome.marketId) {
|
|
916
|
+
throw new Error("outcome.marketId is not set. Ensure the outcome comes from a fetched market.");
|
|
917
|
+
}
|
|
918
|
+
marketId = outcome.marketId;
|
|
919
|
+
outcomeId = outcome.outcomeId;
|
|
920
|
+
}
|
|
921
|
+
const paramsDict = {
|
|
922
|
+
marketId,
|
|
923
|
+
outcomeId,
|
|
924
|
+
side: params.side,
|
|
925
|
+
type: params.type,
|
|
926
|
+
amount: params.amount,
|
|
927
|
+
};
|
|
928
|
+
if (params.price !== undefined) {
|
|
929
|
+
paramsDict.price = params.price;
|
|
930
|
+
}
|
|
931
|
+
if (params.fee !== undefined) {
|
|
932
|
+
paramsDict.fee = params.fee;
|
|
933
|
+
}
|
|
934
|
+
const requestBody = {
|
|
935
|
+
args: [paramsDict],
|
|
936
|
+
credentials: this.getCredentials()
|
|
937
|
+
};
|
|
938
|
+
const response = await this.api.buildOrder({
|
|
939
|
+
exchange: this.exchangeName,
|
|
940
|
+
buildOrderRequest: requestBody,
|
|
941
|
+
});
|
|
942
|
+
const data = this.handleResponse(response);
|
|
943
|
+
return data;
|
|
944
|
+
}
|
|
945
|
+
catch (error) {
|
|
946
|
+
throw new Error(`Failed to build order: ${error}`);
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Submit a pre-built order returned by {@link buildOrder}.
|
|
951
|
+
*
|
|
952
|
+
* @param built - The BuiltOrder payload from buildOrder()
|
|
953
|
+
* @returns The submitted order
|
|
954
|
+
*
|
|
955
|
+
* @example
|
|
956
|
+
* ```typescript
|
|
957
|
+
* const built = await exchange.buildOrder({
|
|
958
|
+
* outcome: market.yes,
|
|
959
|
+
* side: "buy",
|
|
960
|
+
* type: "limit",
|
|
961
|
+
* amount: 10,
|
|
962
|
+
* price: 0.55
|
|
963
|
+
* });
|
|
964
|
+
* const order = await exchange.submitOrder(built);
|
|
965
|
+
* console.log(order.id, order.status);
|
|
966
|
+
* ```
|
|
967
|
+
*/
|
|
968
|
+
async submitOrder(built) {
|
|
969
|
+
await this.initPromise;
|
|
970
|
+
try {
|
|
971
|
+
const requestBody = {
|
|
972
|
+
args: [built],
|
|
973
|
+
credentials: this.getCredentials()
|
|
974
|
+
};
|
|
975
|
+
const response = await this.api.submitOrder({
|
|
976
|
+
exchange: this.exchangeName,
|
|
977
|
+
submitOrderRequest: requestBody,
|
|
978
|
+
});
|
|
979
|
+
const data = this.handleResponse(response);
|
|
980
|
+
return convertOrder(data);
|
|
981
|
+
}
|
|
982
|
+
catch (error) {
|
|
983
|
+
throw new Error(`Failed to submit order: ${error}`);
|
|
984
|
+
}
|
|
985
|
+
}
|
|
802
986
|
/**
|
|
803
987
|
* Create a new order.
|
|
804
988
|
*
|
|
@@ -273,6 +273,26 @@ export interface CreateOrderParams {
|
|
|
273
273
|
/** Optional fee rate (e.g., 1000 for 0.1%) */
|
|
274
274
|
fee?: number;
|
|
275
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* An order payload built but not yet submitted to the exchange.
|
|
278
|
+
*/
|
|
279
|
+
export interface BuiltOrder {
|
|
280
|
+
/** The exchange name this order was built for. */
|
|
281
|
+
exchange: string;
|
|
282
|
+
/** The original params used to build this order. */
|
|
283
|
+
params: CreateOrderParams;
|
|
284
|
+
/** For CLOB exchanges (Polymarket): the EIP-712 signed order. */
|
|
285
|
+
signedOrder?: Record<string, unknown>;
|
|
286
|
+
/** For on-chain AMM exchanges: the EVM transaction payload. */
|
|
287
|
+
tx?: {
|
|
288
|
+
to: string;
|
|
289
|
+
data: string;
|
|
290
|
+
value: string;
|
|
291
|
+
chainId: number;
|
|
292
|
+
};
|
|
293
|
+
/** The raw, exchange-native payload. Always present. */
|
|
294
|
+
raw: unknown;
|
|
295
|
+
}
|
|
276
296
|
/**
|
|
277
297
|
* A list of UnifiedMarket objects with a convenience match() method.
|
|
278
298
|
* Extends Array so all standard array operations work unchanged.
|
|
@@ -393,3 +413,28 @@ export interface EventFilterCriteria {
|
|
|
393
413
|
* Function type for custom event filtering logic.
|
|
394
414
|
*/
|
|
395
415
|
export type EventFilterFunction = (event: UnifiedEvent) => boolean;
|
|
416
|
+
/**
|
|
417
|
+
* Subscription options.
|
|
418
|
+
*/
|
|
419
|
+
export type SubscriptionOption = 'trades' | 'positions' | 'balances';
|
|
420
|
+
/**
|
|
421
|
+
* Subscription snapshot of a watched public wallet address.
|
|
422
|
+
*/
|
|
423
|
+
export interface SubscribedAddressSnapshot {
|
|
424
|
+
/** The wallet address being watched */
|
|
425
|
+
address: string;
|
|
426
|
+
/** Recent trades for this address
|
|
427
|
+
* (if the above SubscriptionOption 'trades' option was requested)
|
|
428
|
+
*/
|
|
429
|
+
trades?: Trade[];
|
|
430
|
+
/** Current open positions for this address
|
|
431
|
+
* (if the above SubscriptionOption 'positions' option was requested)
|
|
432
|
+
*/
|
|
433
|
+
positions?: Position[];
|
|
434
|
+
/** Current balances for this address
|
|
435
|
+
* (if the above SubscriptionOption 'balances' option was requested)
|
|
436
|
+
*/
|
|
437
|
+
balances?: Balance[];
|
|
438
|
+
/** Unix timestamp (ms) of this snapshot */
|
|
439
|
+
timestamp: number;
|
|
440
|
+
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Do not edit the class manually.
|
|
11
11
|
*/
|
|
12
12
|
import * as runtime from '../runtime';
|
|
13
|
-
import type { BaseResponse, BuildOrder200Response, BuildOrderRequest, CancelOrderRequest, CloseRequest, CreateOrder200Response, CreateOrderRequest, FetchAllOrdersRequest, FetchBalance200Response, FetchBalanceRequest, FetchClosedOrdersRequest, FetchEvent200Response, FetchEventRequest, FetchEvents200Response, FetchEventsRequest, FetchMarket200Response, FetchMarketRequest, FetchMarkets200Response, FetchMarketsPaginated200Response, FetchMarketsPaginatedRequest, FetchMarketsRequest, FetchMyTrades200Response, FetchMyTradesRequest, FetchOHLCV200Response, FetchOHLCVRequest, FetchOpenOrders200Response, FetchOpenOrdersRequest, FetchOrderBook200Response, FetchOrderBookRequest, FetchOrderRequest, FetchPositions200Response, FetchPositionsRequest, FetchTrades200Response, FetchTradesRequest, FilterEventsRequest, FilterMarketsRequest, GetExecutionPrice200Response, GetExecutionPriceDetailed200Response, GetExecutionPriceDetailedRequest, GetExecutionPriceRequest, HealthCheck200Response, LoadMarkets200Response, LoadMarketsRequest, SubmitOrderRequest, WatchOrderBookRequest, WatchTradesRequest } from '../models/index';
|
|
13
|
+
import type { BaseResponse, BuildOrder200Response, BuildOrderRequest, CancelOrderRequest, CloseRequest, CreateOrder200Response, CreateOrderRequest, FetchAllOrdersRequest, FetchBalance200Response, FetchBalanceRequest, FetchClosedOrdersRequest, FetchEvent200Response, FetchEventRequest, FetchEvents200Response, FetchEventsRequest, FetchMarket200Response, FetchMarketRequest, FetchMarkets200Response, FetchMarketsPaginated200Response, FetchMarketsPaginatedRequest, FetchMarketsRequest, FetchMyTrades200Response, FetchMyTradesRequest, FetchOHLCV200Response, FetchOHLCVRequest, FetchOpenOrders200Response, FetchOpenOrdersRequest, FetchOrderBook200Response, FetchOrderBookRequest, FetchOrderRequest, FetchPositions200Response, FetchPositionsRequest, FetchTrades200Response, FetchTradesRequest, FilterEventsRequest, FilterMarketsRequest, GetExecutionPrice200Response, GetExecutionPriceDetailed200Response, GetExecutionPriceDetailedRequest, GetExecutionPriceRequest, HealthCheck200Response, LoadMarkets200Response, LoadMarketsRequest, SubmitOrderRequest, UnwatchAddressRequest, WatchAddress200Response, WatchAddressRequest, WatchOrderBookRequest, WatchTradesRequest } from '../models/index';
|
|
14
14
|
export interface BuildOrderOperationRequest {
|
|
15
15
|
exchange: BuildOrderOperationExchangeEnum;
|
|
16
16
|
buildOrderRequest?: BuildOrderRequest;
|
|
@@ -111,6 +111,14 @@ export interface SubmitOrderOperationRequest {
|
|
|
111
111
|
exchange: SubmitOrderOperationExchangeEnum;
|
|
112
112
|
submitOrderRequest?: SubmitOrderRequest;
|
|
113
113
|
}
|
|
114
|
+
export interface UnwatchAddressOperationRequest {
|
|
115
|
+
exchange: UnwatchAddressOperationExchangeEnum;
|
|
116
|
+
unwatchAddressRequest?: UnwatchAddressRequest;
|
|
117
|
+
}
|
|
118
|
+
export interface WatchAddressOperationRequest {
|
|
119
|
+
exchange: WatchAddressOperationExchangeEnum;
|
|
120
|
+
watchAddressRequest?: WatchAddressRequest;
|
|
121
|
+
}
|
|
114
122
|
export interface WatchOrderBookOperationRequest {
|
|
115
123
|
exchange: WatchOrderBookOperationExchangeEnum;
|
|
116
124
|
watchOrderBookRequest?: WatchOrderBookRequest;
|
|
@@ -375,6 +383,26 @@ export declare class DefaultApi extends runtime.BaseAPI {
|
|
|
375
383
|
* Submit Order
|
|
376
384
|
*/
|
|
377
385
|
submitOrder(requestParameters: SubmitOrderOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CreateOrder200Response>;
|
|
386
|
+
/**
|
|
387
|
+
* Stop watching a previously registered wallet address and release its resource updates.
|
|
388
|
+
* Unwatch Address
|
|
389
|
+
*/
|
|
390
|
+
unwatchAddressRaw(requestParameters: UnwatchAddressOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<BaseResponse>>;
|
|
391
|
+
/**
|
|
392
|
+
* Stop watching a previously registered wallet address and release its resource updates.
|
|
393
|
+
* Unwatch Address
|
|
394
|
+
*/
|
|
395
|
+
unwatchAddress(requestParameters: UnwatchAddressOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<BaseResponse>;
|
|
396
|
+
/**
|
|
397
|
+
* Stream activity for a public wallet address Returns a promise that resolves with the next activity snapshot whenever a change is detected. Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
398
|
+
* Watch Address
|
|
399
|
+
*/
|
|
400
|
+
watchAddressRaw(requestParameters: WatchAddressOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<WatchAddress200Response>>;
|
|
401
|
+
/**
|
|
402
|
+
* Stream activity for a public wallet address Returns a promise that resolves with the next activity snapshot whenever a change is detected. Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
403
|
+
* Watch Address
|
|
404
|
+
*/
|
|
405
|
+
watchAddress(requestParameters: WatchAddressOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<WatchAddress200Response>;
|
|
378
406
|
/**
|
|
379
407
|
* Watch order book updates in real-time via WebSocket. Returns a promise that resolves with the next order book update. Call repeatedly in a loop to stream updates (CCXT Pro pattern).
|
|
380
408
|
* Watch Order Book
|
|
@@ -696,6 +724,30 @@ export declare const SubmitOrderOperationExchangeEnum: {
|
|
|
696
724
|
readonly Myriad: "myriad";
|
|
697
725
|
};
|
|
698
726
|
export type SubmitOrderOperationExchangeEnum = typeof SubmitOrderOperationExchangeEnum[keyof typeof SubmitOrderOperationExchangeEnum];
|
|
727
|
+
/**
|
|
728
|
+
* @export
|
|
729
|
+
*/
|
|
730
|
+
export declare const UnwatchAddressOperationExchangeEnum: {
|
|
731
|
+
readonly Polymarket: "polymarket";
|
|
732
|
+
readonly Kalshi: "kalshi";
|
|
733
|
+
readonly Limitless: "limitless";
|
|
734
|
+
readonly Probable: "probable";
|
|
735
|
+
readonly Baozi: "baozi";
|
|
736
|
+
readonly Myriad: "myriad";
|
|
737
|
+
};
|
|
738
|
+
export type UnwatchAddressOperationExchangeEnum = typeof UnwatchAddressOperationExchangeEnum[keyof typeof UnwatchAddressOperationExchangeEnum];
|
|
739
|
+
/**
|
|
740
|
+
* @export
|
|
741
|
+
*/
|
|
742
|
+
export declare const WatchAddressOperationExchangeEnum: {
|
|
743
|
+
readonly Polymarket: "polymarket";
|
|
744
|
+
readonly Kalshi: "kalshi";
|
|
745
|
+
readonly Limitless: "limitless";
|
|
746
|
+
readonly Probable: "probable";
|
|
747
|
+
readonly Baozi: "baozi";
|
|
748
|
+
readonly Myriad: "myriad";
|
|
749
|
+
};
|
|
750
|
+
export type WatchAddressOperationExchangeEnum = typeof WatchAddressOperationExchangeEnum[keyof typeof WatchAddressOperationExchangeEnum];
|
|
699
751
|
/**
|
|
700
752
|
* @export
|
|
701
753
|
*/
|