@qtsurfer/api-client 0.15.0 → 0.17.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/index.d.ts +885 -36
- package/dist/index.js +136 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/generated/schemas.gen.ts +723 -16
- package/src/generated/sdk.gen.ts +396 -15
- package/src/generated/types.gen.ts +773 -20
|
@@ -103,6 +103,111 @@ export type HalLink = {
|
|
|
103
103
|
templated?: boolean;
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Your identity and tier limits. No database call behind this one — safe to fetch on every
|
|
108
|
+
* page load. Live usage against these limits is a separate resource, `GET /account/usage`,
|
|
109
|
+
* deliberately: usage changes on every upload/execution and costs a query to compute, this
|
|
110
|
+
* one doesn't.
|
|
111
|
+
*
|
|
112
|
+
*/
|
|
113
|
+
export type Account = {
|
|
114
|
+
/**
|
|
115
|
+
* Your account id — the JWT `sub` claim.
|
|
116
|
+
*/
|
|
117
|
+
userId: string;
|
|
118
|
+
/**
|
|
119
|
+
* Your current subscription tier.
|
|
120
|
+
*/
|
|
121
|
+
tier: string;
|
|
122
|
+
/**
|
|
123
|
+
* Maximum number of active datasets your tier allows.
|
|
124
|
+
*/
|
|
125
|
+
maxDatasets: number;
|
|
126
|
+
/**
|
|
127
|
+
* Maximum size, in bytes, of a single dataset version.
|
|
128
|
+
*/
|
|
129
|
+
maxDatasetBytes: number;
|
|
130
|
+
/**
|
|
131
|
+
* Maximum combined storage, in bytes, across every dataset, strategy-execution signal,
|
|
132
|
+
* and registered strategy on your account — one shared pool, not a separate cap per
|
|
133
|
+
* resource type, since they all compete for the same underlying storage. See `GET
|
|
134
|
+
* /account/usage`'s `storageBytesUsed` for your current usage against this number.
|
|
135
|
+
*
|
|
136
|
+
*/
|
|
137
|
+
maxTotalStorageBytes: number;
|
|
138
|
+
_links: AccountLinks;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* HAL `_links` for `GET /account`
|
|
143
|
+
*/
|
|
144
|
+
export type AccountLinks = {
|
|
145
|
+
/**
|
|
146
|
+
* Link to this resource.
|
|
147
|
+
*/
|
|
148
|
+
self: HalLink;
|
|
149
|
+
/**
|
|
150
|
+
* Link to your live usage, `GET /account/usage`.
|
|
151
|
+
*/
|
|
152
|
+
usage: HalLink;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Your live usage of the shared storage pool `GET /account`'s `maxTotalStorageBytes` caps.
|
|
157
|
+
* Not guaranteed real-time — a just-completed upload or strategy execution may take a short
|
|
158
|
+
* moment to be reflected here.
|
|
159
|
+
*
|
|
160
|
+
*/
|
|
161
|
+
export type AccountUsage = {
|
|
162
|
+
/**
|
|
163
|
+
* Active datasets counted — the same set `GET /account`'s `maxDatasets` limits.
|
|
164
|
+
*/
|
|
165
|
+
datasetsUsed: number;
|
|
166
|
+
/**
|
|
167
|
+
* Combined bytes of every active dataset's current version.
|
|
168
|
+
*/
|
|
169
|
+
datasetBytesUsed: number;
|
|
170
|
+
/**
|
|
171
|
+
* Recorded strategy-execution signal uploads.
|
|
172
|
+
*/
|
|
173
|
+
signalsUsed: number;
|
|
174
|
+
/**
|
|
175
|
+
* Combined bytes of every recorded signal upload.
|
|
176
|
+
*/
|
|
177
|
+
signalBytesUsed: number;
|
|
178
|
+
/**
|
|
179
|
+
* Registered strategies (see `GET /strategies`).
|
|
180
|
+
*/
|
|
181
|
+
strategiesUsed: number;
|
|
182
|
+
/**
|
|
183
|
+
* Combined bytes of each registered strategy's source plus its latest compiled
|
|
184
|
+
* bytecode. Superseded (non-latest) compilations aren't counted.
|
|
185
|
+
*
|
|
186
|
+
*/
|
|
187
|
+
strategyBytesUsed: number;
|
|
188
|
+
/**
|
|
189
|
+
* `datasetBytesUsed + signalBytesUsed + strategyBytesUsed` — the number checked
|
|
190
|
+
* against `GET /account`'s `maxTotalStorageBytes`.
|
|
191
|
+
*
|
|
192
|
+
*/
|
|
193
|
+
storageBytesUsed: number;
|
|
194
|
+
_links: AccountUsageLinks;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* HAL `_links` for `GET /account/usage`
|
|
199
|
+
*/
|
|
200
|
+
export type AccountUsageLinks = {
|
|
201
|
+
/**
|
|
202
|
+
* Link to this resource.
|
|
203
|
+
*/
|
|
204
|
+
self: HalLink;
|
|
205
|
+
/**
|
|
206
|
+
* Link to your tier limits, `GET /account`.
|
|
207
|
+
*/
|
|
208
|
+
account: HalLink;
|
|
209
|
+
};
|
|
210
|
+
|
|
106
211
|
/**
|
|
107
212
|
* Exchange instrument with per-data-type coverage and market info
|
|
108
213
|
*/
|
|
@@ -182,8 +287,17 @@ export type Exchange = {
|
|
|
182
287
|
|
|
183
288
|
/**
|
|
184
289
|
* Managed exchange data sources available for backtesting.
|
|
290
|
+
*
|
|
291
|
+
* * `ticker` — trades. Can be prepared, executed and swept.
|
|
292
|
+
* * `kline` — aggregated bars (candlesticks). Can be prepared, executed and swept. A run reads
|
|
293
|
+
* bars of the `cadence` the data was prepared at: you choose the bar width when you prepare,
|
|
294
|
+
* and the strategy does not fix it. See `PrepareRequest.cadence` for the accepted values.
|
|
295
|
+
* * `funding` — funding rates. Can be **prepared but not executed or swept yet**: a `funding`
|
|
296
|
+
* request to `execute` or `executeSweep` is rejected with `400` before anything is queued,
|
|
297
|
+
* and the message names the sources that can be run.
|
|
298
|
+
*
|
|
185
299
|
*/
|
|
186
|
-
export type DataSourceType = "ticker";
|
|
300
|
+
export type DataSourceType = "ticker" | "kline" | "funding";
|
|
187
301
|
|
|
188
302
|
/**
|
|
189
303
|
* Two shapes, chosen by the `exchangeId` path segment. Against a managed exchange,
|
|
@@ -233,9 +347,14 @@ export type PrepareRequest = {
|
|
|
233
347
|
* than the source, or not an exact multiple of it, returns `400`. What's accepted, and
|
|
234
348
|
* what omitting it means, depends on the source:
|
|
235
349
|
*
|
|
236
|
-
* * Managed exchange — one of `1s`, `5s`, `1m`, `3m`, `5m`, `15m`,
|
|
237
|
-
* `4h`, `8h`, `12h`, `1d`, `1w`, `1q`; any other label returns `400`.
|
|
238
|
-
* the publisher's native cadence.
|
|
350
|
+
* * Managed exchange, `ticker` or `funding` — one of `1s`, `5s`, `1m`, `3m`, `5m`, `15m`,
|
|
351
|
+
* `30m`, `1h`, `2h`, `4h`, `8h`, `12h`, `1d`, `1w`, `1q`; any other label returns `400`.
|
|
352
|
+
* Omitted = `1s`, the publisher's native cadence.
|
|
353
|
+
* * Managed exchange, `kline` — one of `1s`, `1m`, `5m`, `15m`, `30m`, `1h`, `4h`, `1d`;
|
|
354
|
+
* any other label, including `5s`, `3m` and `8h`, returns `400` and names the accepted
|
|
355
|
+
* ones. Omitted = `1s`. This is the width of the bars a run reads: it is chosen here,
|
|
356
|
+
* once, and the same strategy can be run at several cadences by preparing the range at
|
|
357
|
+
* each.
|
|
239
358
|
* * Dataset (`exchangeId: user`) — omitted = the dataset version's own discovered
|
|
240
359
|
* `cadence` (see `DatasetVersion.cadence`), served as-is. Any cadence equal to or
|
|
241
360
|
* coarser than it and an exact multiple of it is accepted, including ones outside the
|
|
@@ -987,8 +1106,9 @@ export type EquityCurveResult = {
|
|
|
987
1106
|
|
|
988
1107
|
/**
|
|
989
1108
|
* Unique identifier for a compiled strategy, derived from the source itself: the same code
|
|
990
|
-
* always yields the same id, for every caller
|
|
991
|
-
* `POST /strategy` for exactly which rewrites preserve it and which do
|
|
1109
|
+
* always yields the same id, for every caller. How much formatting the id ignores depends on
|
|
1110
|
+
* the language — see `POST /strategy` for exactly which rewrites preserve it and which do
|
|
1111
|
+
* not.
|
|
992
1112
|
*
|
|
993
1113
|
*/
|
|
994
1114
|
export type StrategyId = string;
|
|
@@ -1165,9 +1285,10 @@ export type StrategyState = {
|
|
|
1165
1285
|
* A dataset's own metadata — not its data. `currentVersionId` is what a prepare against
|
|
1166
1286
|
* `exchangeId: user` reads by default; see `DatasetVersion` for what a version carries.
|
|
1167
1287
|
*
|
|
1168
|
-
* `from`/`to`/`cadence` mirror that
|
|
1169
|
-
*
|
|
1170
|
-
*
|
|
1288
|
+
* `from`/`to`/`cadence`/`timestampUnit`/`bytes`/`rows`/`gaps`/`largestGapSteps` mirror that
|
|
1289
|
+
* current version's own discovered range, cadence, timestamp unit and metrics, so you don't
|
|
1290
|
+
* need a second call to `GET /datasets/{datasetId}/uploads/{uploadId}` just to see what a
|
|
1291
|
+
* dataset covers.
|
|
1171
1292
|
*
|
|
1172
1293
|
*/
|
|
1173
1294
|
export type Dataset = {
|
|
@@ -1219,6 +1340,47 @@ export type Dataset = {
|
|
|
1219
1340
|
*
|
|
1220
1341
|
*/
|
|
1221
1342
|
cadence?: string;
|
|
1343
|
+
/**
|
|
1344
|
+
* `currentVersionId`'s own timestamp unit (see `DatasetVersion.timestampUnit`) — decode
|
|
1345
|
+
* the `timestamp` column of `dataUrl`'s file accordingly. Present only when `status` is
|
|
1346
|
+
* `ready`.
|
|
1347
|
+
*
|
|
1348
|
+
*/
|
|
1349
|
+
timestampUnit?: "iso" | "s" | "ms" | "us";
|
|
1350
|
+
/**
|
|
1351
|
+
* * `ready` — `currentVersionId` is set; `from`/`to`/`cadence`/`bytes`/`rows`/`gaps`/
|
|
1352
|
+
* `largestGapSteps` describe it.
|
|
1353
|
+
* * `failed` — the most recent upload/import attempt failed. `currentVersionId` and the
|
|
1354
|
+
* fields above are absent — there is nothing to read yet. See `error`.
|
|
1355
|
+
* * `pending` — nothing has ever been attempted (just created, or an upload was never
|
|
1356
|
+
* finalized).
|
|
1357
|
+
*
|
|
1358
|
+
*/
|
|
1359
|
+
status: "ready" | "failed" | "pending";
|
|
1360
|
+
/**
|
|
1361
|
+
* Size of `currentVersionId`'s own stored file. Present only when `status` is `ready` —
|
|
1362
|
+
* see `DatasetVersion.bytes` for what it measures exactly.
|
|
1363
|
+
*
|
|
1364
|
+
*/
|
|
1365
|
+
bytes?: number;
|
|
1366
|
+
/**
|
|
1367
|
+
* `currentVersionId`'s own row count. Present only when `status` is `ready`.
|
|
1368
|
+
*/
|
|
1369
|
+
rows?: number;
|
|
1370
|
+
/**
|
|
1371
|
+
* `currentVersionId`'s own gap count at its discovered cadence. Present only when `status` is `ready`.
|
|
1372
|
+
*/
|
|
1373
|
+
gaps?: number;
|
|
1374
|
+
/**
|
|
1375
|
+
* `currentVersionId`'s own largest gap, in units of its discovered cadence step. Present only when `status` is `ready`.
|
|
1376
|
+
*/
|
|
1377
|
+
largestGapSteps?: number;
|
|
1378
|
+
/**
|
|
1379
|
+
* A human-readable reason the most recent upload/import attempt failed. Present only
|
|
1380
|
+
* when `status` is `failed`.
|
|
1381
|
+
*
|
|
1382
|
+
*/
|
|
1383
|
+
error?: string;
|
|
1222
1384
|
};
|
|
1223
1385
|
|
|
1224
1386
|
/**
|
|
@@ -1237,8 +1399,9 @@ export type DatasetWithLinks = Dataset & {
|
|
|
1237
1399
|
/**
|
|
1238
1400
|
* Which format `dataUrl` is actually in — check this rather than assuming it
|
|
1239
1401
|
* matches how you uploaded it. `lastra` — our native columnar format — for a CSV (or
|
|
1240
|
-
* gzip/zip of one) upload, always converted on ingest
|
|
1241
|
-
*
|
|
1402
|
+
* gzip/zip of one) upload, always converted on ingest, or for a lastra upload,
|
|
1403
|
+
* stored as-is (the value alone doesn't tell you which). `parquet` for a parquet
|
|
1404
|
+
* upload, also stored as-is today.
|
|
1242
1405
|
*
|
|
1243
1406
|
*/
|
|
1244
1407
|
dataFormat?: "lastra" | "parquet";
|
|
@@ -1359,8 +1522,9 @@ export type DatasetVersion = {
|
|
|
1359
1522
|
/**
|
|
1360
1523
|
* Which format `dataUrl` is actually in — check this rather than assuming it matches
|
|
1361
1524
|
* how you uploaded it. `lastra` — our native columnar format — for a CSV (or gzip/zip
|
|
1362
|
-
* of one) upload, always converted on ingest
|
|
1363
|
-
*
|
|
1525
|
+
* of one) upload, always converted on ingest, or for a lastra upload, stored as-is
|
|
1526
|
+
* (the value alone doesn't tell you which). `parquet` for a parquet upload, also
|
|
1527
|
+
* stored as-is today.
|
|
1364
1528
|
*
|
|
1365
1529
|
*/
|
|
1366
1530
|
dataFormat?: "lastra" | "parquet";
|
|
@@ -1579,6 +1743,255 @@ export type AuthTokenError = {
|
|
|
1579
1743
|
message: string;
|
|
1580
1744
|
};
|
|
1581
1745
|
|
|
1746
|
+
/**
|
|
1747
|
+
* One market feed a live run consumes. Exactly one entry per run today.
|
|
1748
|
+
*/
|
|
1749
|
+
export type LiveSource = {
|
|
1750
|
+
/**
|
|
1751
|
+
* Venue category. `cx` (centralized exchange) is the only one live runs support today.
|
|
1752
|
+
*/
|
|
1753
|
+
venueType: string;
|
|
1754
|
+
exchange: string;
|
|
1755
|
+
segment: string;
|
|
1756
|
+
/**
|
|
1757
|
+
* Both `ticker` and `kline` connect to the lightest (fastest) cadence available for the exchange — today, 1 tick/second on every supported exchange. Choosing a specific cadence is not offered yet.
|
|
1758
|
+
*/
|
|
1759
|
+
type: "ticker" | "kline";
|
|
1760
|
+
/**
|
|
1761
|
+
* Instrument symbols, or `["*"]` for every instrument the exchange/segment offers (tier-gated).
|
|
1762
|
+
*/
|
|
1763
|
+
instruments: Array<string>;
|
|
1764
|
+
};
|
|
1765
|
+
|
|
1766
|
+
export type StartLiveRequest = {
|
|
1767
|
+
sources: [LiveSource];
|
|
1768
|
+
/**
|
|
1769
|
+
* Strategy parameters to start with. Opaque key/value pairs — see this strategy's own `declaredProperties` (from `POST /strategy`) for the keys it accepts.
|
|
1770
|
+
*/
|
|
1771
|
+
params?: {
|
|
1772
|
+
[key: string]: unknown;
|
|
1773
|
+
};
|
|
1774
|
+
/**
|
|
1775
|
+
* A `public` run appears in `GET /live/public` and its signal channel accepts subscriptions from anyone, not only you.
|
|
1776
|
+
*/
|
|
1777
|
+
visibility?: "private" | "public";
|
|
1778
|
+
/**
|
|
1779
|
+
* Request that this run's signals be relayed over its WebSocket channel once it reaches the `live` stage — see the "Live execution" guide. Has no effect while the run is still in the `sandbox` stage, regardless of this value.
|
|
1780
|
+
*/
|
|
1781
|
+
relay?: boolean;
|
|
1782
|
+
name?: string;
|
|
1783
|
+
description?: string;
|
|
1784
|
+
};
|
|
1785
|
+
|
|
1786
|
+
export type UpdateLiveRequest = {
|
|
1787
|
+
visibility?: "private" | "public";
|
|
1788
|
+
name?: string;
|
|
1789
|
+
description?: string;
|
|
1790
|
+
};
|
|
1791
|
+
|
|
1792
|
+
export type UpdateLiveParamsRequest = {
|
|
1793
|
+
/**
|
|
1794
|
+
* Must be non-empty; every key must be a property your strategy declares.
|
|
1795
|
+
*/
|
|
1796
|
+
params: {
|
|
1797
|
+
[key: string]: unknown;
|
|
1798
|
+
};
|
|
1799
|
+
};
|
|
1800
|
+
|
|
1801
|
+
/**
|
|
1802
|
+
* A live run's full state, as returned by starting, reading, or stopping it through its strategy.
|
|
1803
|
+
*/
|
|
1804
|
+
export type LiveRun = {
|
|
1805
|
+
strategyId: StrategyId;
|
|
1806
|
+
/**
|
|
1807
|
+
* This run's own id — its canonical identity for `PATCH`/`PUT .../params` and for `GET /live/public`.
|
|
1808
|
+
*/
|
|
1809
|
+
runId: string;
|
|
1810
|
+
name?: string;
|
|
1811
|
+
description?: string;
|
|
1812
|
+
visibility: "private" | "public";
|
|
1813
|
+
/**
|
|
1814
|
+
* A new run always starts `SANDBOX` — a trial run compared against a second execution for agreement — and moves to `LIVE` once it passes.
|
|
1815
|
+
*/
|
|
1816
|
+
stage: "SANDBOX" | "LIVE";
|
|
1817
|
+
/**
|
|
1818
|
+
* `STARTING` until first observed running; otherwise the runner's own reported state (e.g. `RUNNING`).
|
|
1819
|
+
*/
|
|
1820
|
+
state: string;
|
|
1821
|
+
/**
|
|
1822
|
+
* What you last asked for. `state` can lag this briefly after `DELETE`.
|
|
1823
|
+
*/
|
|
1824
|
+
desired: "RUNNING" | "STOPPED";
|
|
1825
|
+
/**
|
|
1826
|
+
* Present only when the run stopped because it exceeded its resource allowance.
|
|
1827
|
+
*/
|
|
1828
|
+
reason?: string;
|
|
1829
|
+
sources: Array<LiveSource>;
|
|
1830
|
+
params: {
|
|
1831
|
+
[key: string]: unknown;
|
|
1832
|
+
};
|
|
1833
|
+
/**
|
|
1834
|
+
* Increments on every accepted `PUT .../params` call, including one that resends the current values.
|
|
1835
|
+
*/
|
|
1836
|
+
paramsVersion: number;
|
|
1837
|
+
/**
|
|
1838
|
+
* Whether this run's signals are being relayed over the WebSocket channel described in the "Live execution" guide, right now. This is the effective value — `false` on a `sandbox` run regardless of what was requested at start; matches the requested value once `stage` reaches `live`.
|
|
1839
|
+
*/
|
|
1840
|
+
relay: boolean;
|
|
1841
|
+
/**
|
|
1842
|
+
* Epoch milliseconds.
|
|
1843
|
+
*/
|
|
1844
|
+
startedAtMs: number;
|
|
1845
|
+
/**
|
|
1846
|
+
* The sandbox trial's promotion verdict, once one exists. Shape is not yet stabilized as public API — treat as opaque diagnostics.
|
|
1847
|
+
*/
|
|
1848
|
+
gate?: {
|
|
1849
|
+
[key: string]: unknown;
|
|
1850
|
+
};
|
|
1851
|
+
};
|
|
1852
|
+
|
|
1853
|
+
/**
|
|
1854
|
+
* A run's state as returned by `PATCH /live/{runId}` — narrower than `LiveRun` (no `strategyId`, `params`, or `desired`), since this endpoint is addressed by `runId` alone.
|
|
1855
|
+
*/
|
|
1856
|
+
export type LiveRunCompact = {
|
|
1857
|
+
runId: string;
|
|
1858
|
+
name?: string;
|
|
1859
|
+
description?: string;
|
|
1860
|
+
visibility: "private" | "public";
|
|
1861
|
+
stage: "SANDBOX" | "LIVE";
|
|
1862
|
+
state: string;
|
|
1863
|
+
sources: Array<LiveSource>;
|
|
1864
|
+
};
|
|
1865
|
+
|
|
1866
|
+
/**
|
|
1867
|
+
* A run as it appears in `GET /live/public` — never reveals who owns it or which strategy it runs.
|
|
1868
|
+
*/
|
|
1869
|
+
export type PublicLiveRun = {
|
|
1870
|
+
runId: string;
|
|
1871
|
+
name?: string;
|
|
1872
|
+
description?: string;
|
|
1873
|
+
sources: Array<LiveSource>;
|
|
1874
|
+
state: string;
|
|
1875
|
+
createdAtMs: number;
|
|
1876
|
+
};
|
|
1877
|
+
|
|
1878
|
+
export type PublicLiveListResponse = {
|
|
1879
|
+
runs: Array<PublicLiveRun>;
|
|
1880
|
+
_links?: PublicLiveListLinks;
|
|
1881
|
+
};
|
|
1882
|
+
|
|
1883
|
+
/**
|
|
1884
|
+
* Present only when another page exists.
|
|
1885
|
+
*/
|
|
1886
|
+
export type PublicLiveListLinks = {
|
|
1887
|
+
next?: PublicLiveNextLink;
|
|
1888
|
+
};
|
|
1889
|
+
|
|
1890
|
+
export type PublicLiveNextLink = {
|
|
1891
|
+
href?: string;
|
|
1892
|
+
};
|
|
1893
|
+
|
|
1894
|
+
/**
|
|
1895
|
+
* One page of a run's recorded signals, oldest first.
|
|
1896
|
+
*/
|
|
1897
|
+
export type LiveSignalPage = {
|
|
1898
|
+
signals: Array<LiveSignal>;
|
|
1899
|
+
/**
|
|
1900
|
+
* The oldest moment this run's signals can still be read from. Absent when the run has produced nothing yet. It moves forward over time as older signals are discarded, so a `sinceMs` earlier than this is served from here instead.
|
|
1901
|
+
*/
|
|
1902
|
+
availableSinceMs?: number;
|
|
1903
|
+
_links?: PublicLiveListLinks;
|
|
1904
|
+
};
|
|
1905
|
+
|
|
1906
|
+
/**
|
|
1907
|
+
* One signal, in the same shape the real-time signal channel delivers.
|
|
1908
|
+
*/
|
|
1909
|
+
export type LiveSignal = {
|
|
1910
|
+
/**
|
|
1911
|
+
* Envelope schema version.
|
|
1912
|
+
*/
|
|
1913
|
+
v: number;
|
|
1914
|
+
/**
|
|
1915
|
+
* Stable id for this exact signal — dedupe on it across reconnects or overlapping reads.
|
|
1916
|
+
*/
|
|
1917
|
+
signalId: string;
|
|
1918
|
+
runId: string;
|
|
1919
|
+
/**
|
|
1920
|
+
* The stage the run was in when this signal was produced.
|
|
1921
|
+
*/
|
|
1922
|
+
stage: "sandbox" | "live";
|
|
1923
|
+
/**
|
|
1924
|
+
* The parameter set in force when this signal was produced.
|
|
1925
|
+
*/
|
|
1926
|
+
paramsVersion?: number;
|
|
1927
|
+
type: "hint" | "info" | "marker" | "command";
|
|
1928
|
+
/**
|
|
1929
|
+
* `BUY`/`SELL` for a `hint`, the command name for a `command`, absent otherwise.
|
|
1930
|
+
*/
|
|
1931
|
+
kind?: string | null;
|
|
1932
|
+
/**
|
|
1933
|
+
* Market time the signal was produced.
|
|
1934
|
+
*/
|
|
1935
|
+
eventTsMs: number;
|
|
1936
|
+
/**
|
|
1937
|
+
* Time it was published — always at or after `eventTsMs`.
|
|
1938
|
+
*/
|
|
1939
|
+
emittedAtMs: number;
|
|
1940
|
+
instrument: LiveSignalInstrument;
|
|
1941
|
+
order?: LiveSignalOrder;
|
|
1942
|
+
/**
|
|
1943
|
+
* The signal's own free-form payload.
|
|
1944
|
+
*/
|
|
1945
|
+
data?: {
|
|
1946
|
+
[key: string]: unknown;
|
|
1947
|
+
};
|
|
1948
|
+
/**
|
|
1949
|
+
* `true` only for a signal republished to fill a gap in the record.
|
|
1950
|
+
*/
|
|
1951
|
+
regenerated?: boolean;
|
|
1952
|
+
/**
|
|
1953
|
+
* Content hash, for checking that two independent deliveries of the same signal agree.
|
|
1954
|
+
*/
|
|
1955
|
+
digest: string;
|
|
1956
|
+
};
|
|
1957
|
+
|
|
1958
|
+
export type LiveSignalInstrument = {
|
|
1959
|
+
exchange?: string;
|
|
1960
|
+
segment?: string;
|
|
1961
|
+
/**
|
|
1962
|
+
* Slashed form, e.g. `BTC/USDT`.
|
|
1963
|
+
*/
|
|
1964
|
+
symbol?: string;
|
|
1965
|
+
};
|
|
1966
|
+
|
|
1967
|
+
/**
|
|
1968
|
+
* Present only for a `hint`.
|
|
1969
|
+
*/
|
|
1970
|
+
export type LiveSignalOrder = {
|
|
1971
|
+
orderKind?: string;
|
|
1972
|
+
price?: string | null;
|
|
1973
|
+
amount?: string | null;
|
|
1974
|
+
stopPrice?: string | null;
|
|
1975
|
+
trailPct?: string | null;
|
|
1976
|
+
} | null;
|
|
1977
|
+
|
|
1978
|
+
export type LiveConnectionToken = {
|
|
1979
|
+
/**
|
|
1980
|
+
* Pass as the `token` field of the WebSocket `connect` command — see the "Live execution" guide.
|
|
1981
|
+
*/
|
|
1982
|
+
token: string;
|
|
1983
|
+
expiresAtMs: number;
|
|
1984
|
+
};
|
|
1985
|
+
|
|
1986
|
+
export type LiveParamsUpdateResult = {
|
|
1987
|
+
runId: string;
|
|
1988
|
+
paramsVersion: number;
|
|
1989
|
+
/**
|
|
1990
|
+
* Epoch milliseconds — the earliest moment the new values are guaranteed to be in effect.
|
|
1991
|
+
*/
|
|
1992
|
+
effectiveAtMs: number;
|
|
1993
|
+
};
|
|
1994
|
+
|
|
1582
1995
|
export type AuthenticateData = {
|
|
1583
1996
|
body?: never;
|
|
1584
1997
|
path?: never;
|
|
@@ -1609,6 +2022,39 @@ export type AuthenticateResponses = {
|
|
|
1609
2022
|
export type AuthenticateResponse =
|
|
1610
2023
|
AuthenticateResponses[keyof AuthenticateResponses];
|
|
1611
2024
|
|
|
2025
|
+
export type GetAccountData = {
|
|
2026
|
+
body?: never;
|
|
2027
|
+
path?: never;
|
|
2028
|
+
query?: never;
|
|
2029
|
+
url: "/account";
|
|
2030
|
+
};
|
|
2031
|
+
|
|
2032
|
+
export type GetAccountResponses = {
|
|
2033
|
+
/**
|
|
2034
|
+
* Your account
|
|
2035
|
+
*/
|
|
2036
|
+
200: Account;
|
|
2037
|
+
};
|
|
2038
|
+
|
|
2039
|
+
export type GetAccountResponse = GetAccountResponses[keyof GetAccountResponses];
|
|
2040
|
+
|
|
2041
|
+
export type GetAccountUsageData = {
|
|
2042
|
+
body?: never;
|
|
2043
|
+
path?: never;
|
|
2044
|
+
query?: never;
|
|
2045
|
+
url: "/account/usage";
|
|
2046
|
+
};
|
|
2047
|
+
|
|
2048
|
+
export type GetAccountUsageResponses = {
|
|
2049
|
+
/**
|
|
2050
|
+
* Your current usage
|
|
2051
|
+
*/
|
|
2052
|
+
200: AccountUsage;
|
|
2053
|
+
};
|
|
2054
|
+
|
|
2055
|
+
export type GetAccountUsageResponse =
|
|
2056
|
+
GetAccountUsageResponses[keyof GetAccountUsageResponses];
|
|
2057
|
+
|
|
1612
2058
|
export type ListExchangesData = {
|
|
1613
2059
|
body?: never;
|
|
1614
2060
|
path?: never;
|
|
@@ -1846,7 +2292,7 @@ export type ListStrategiesResponse =
|
|
|
1846
2292
|
|
|
1847
2293
|
export type CompileStrategyData = {
|
|
1848
2294
|
/**
|
|
1849
|
-
* Raw strategy Java
|
|
2295
|
+
* Raw strategy source code, Java or QTScript
|
|
1850
2296
|
*/
|
|
1851
2297
|
body: string;
|
|
1852
2298
|
path?: never;
|
|
@@ -1856,7 +2302,8 @@ export type CompileStrategyData = {
|
|
|
1856
2302
|
|
|
1857
2303
|
export type CompileStrategyErrors = {
|
|
1858
2304
|
/**
|
|
1859
|
-
* The source is not valid
|
|
2305
|
+
* The source is not valid; the message carries the diagnostics — the compiler's for Java,
|
|
2306
|
+
* and for QTScript `Line N, Column M:` entries against your own source. Nothing is
|
|
1860
2307
|
* registered, so there is no id to look up afterwards.
|
|
1861
2308
|
*
|
|
1862
2309
|
*/
|
|
@@ -2027,7 +2474,7 @@ export type GetStrategyCodeResponses = {
|
|
|
2027
2474
|
200: {
|
|
2028
2475
|
strategyId: StrategyId;
|
|
2029
2476
|
/**
|
|
2030
|
-
* Raw strategy Java
|
|
2477
|
+
* Raw strategy source code (Java or QTScript), exactly as registered.
|
|
2031
2478
|
*/
|
|
2032
2479
|
code: string;
|
|
2033
2480
|
};
|
|
@@ -2060,7 +2507,9 @@ export type PrepareBacktestData = {
|
|
|
2060
2507
|
export type PrepareBacktestErrors = {
|
|
2061
2508
|
/**
|
|
2062
2509
|
* Invalid request or parameters. Also returned when `from` is older than the configured
|
|
2063
|
-
* lookback window or `to` is in the future
|
|
2510
|
+
* lookback window or `to` is in the future, or when `type` is `kline` and `cadence` is not
|
|
2511
|
+
* one of the cadences kline data is available at (the message lists them). For
|
|
2512
|
+
* `exchangeId: user`, also returned when
|
|
2064
2513
|
* the dataset's current upload has not finished ingesting, or `cadence` asks for a finer
|
|
2065
2514
|
* granularity than the dataset's own discovered cadence (or one that isn't an exact
|
|
2066
2515
|
* multiple of it), or the requested range exceeds your tier's range limit.
|
|
@@ -2157,7 +2606,9 @@ export type ExecuteSweepData = {
|
|
|
2157
2606
|
|
|
2158
2607
|
export type ExecuteSweepErrors = {
|
|
2159
2608
|
/**
|
|
2160
|
-
* Invalid sweep specification
|
|
2609
|
+
* Invalid sweep specification, a `type` that cannot be swept yet (`funding`), or the
|
|
2610
|
+
* expanded grid exceeds the server limit.
|
|
2611
|
+
*
|
|
2161
2612
|
*/
|
|
2162
2613
|
400: ResponseError;
|
|
2163
2614
|
/**
|
|
@@ -2424,7 +2875,9 @@ export type ExecuteBacktestData = {
|
|
|
2424
2875
|
|
|
2425
2876
|
export type ExecuteBacktestErrors = {
|
|
2426
2877
|
/**
|
|
2427
|
-
* Invalid request or parameters
|
|
2878
|
+
* Invalid request or parameters. Also returned for a `type` that cannot be executed yet
|
|
2879
|
+
* (`funding`); the message names the sources that can.
|
|
2880
|
+
*
|
|
2428
2881
|
*/
|
|
2429
2882
|
400: ResponseError;
|
|
2430
2883
|
/**
|
|
@@ -2738,6 +3191,12 @@ export type FinalizeDatasetUploadErrors = {
|
|
|
2738
3191
|
* The uploaded file exceeds your tier's size limit for a dataset.
|
|
2739
3192
|
*/
|
|
2740
3193
|
413: ResponseError;
|
|
3194
|
+
/**
|
|
3195
|
+
* Your account's total storage limit (`GET /account`'s `maxTotalStorageBytes`) is
|
|
3196
|
+
* reached or would be exceeded. Delete a dataset to free space, or upgrade.
|
|
3197
|
+
*
|
|
3198
|
+
*/
|
|
3199
|
+
429: ResponseError;
|
|
2741
3200
|
};
|
|
2742
3201
|
|
|
2743
3202
|
export type FinalizeDatasetUploadError =
|
|
@@ -2821,7 +3280,10 @@ export type ImportDatasetErrors = {
|
|
|
2821
3280
|
*/
|
|
2822
3281
|
409: ResponseError;
|
|
2823
3282
|
/**
|
|
2824
|
-
* Your tier's dataset count limit is reached
|
|
3283
|
+
* Your tier's dataset count limit is reached, or your account's total storage limit
|
|
3284
|
+
* (`GET /account`'s `maxTotalStorageBytes`) is already reached. Delete a dataset to free
|
|
3285
|
+
* a slot or space, or upgrade.
|
|
3286
|
+
*
|
|
2825
3287
|
*/
|
|
2826
3288
|
429: ResponseError;
|
|
2827
3289
|
};
|
|
@@ -2875,6 +3337,297 @@ export type GetDatasetImportResponses = {
|
|
|
2875
3337
|
export type GetDatasetImportResponse =
|
|
2876
3338
|
GetDatasetImportResponses[keyof GetDatasetImportResponses];
|
|
2877
3339
|
|
|
3340
|
+
export type StopLiveData = {
|
|
3341
|
+
body?: never;
|
|
3342
|
+
path: {
|
|
3343
|
+
/**
|
|
3344
|
+
* The id returned by `POST /strategy`
|
|
3345
|
+
*/
|
|
3346
|
+
strategyId: StrategyId;
|
|
3347
|
+
};
|
|
3348
|
+
query?: never;
|
|
3349
|
+
url: "/strategy/{strategyId}/live";
|
|
3350
|
+
};
|
|
3351
|
+
|
|
3352
|
+
export type StopLiveErrors = {
|
|
3353
|
+
/**
|
|
3354
|
+
* You have never started a live run for this strategy.
|
|
3355
|
+
*/
|
|
3356
|
+
404: ResponseError;
|
|
3357
|
+
};
|
|
3358
|
+
|
|
3359
|
+
export type StopLiveError = StopLiveErrors[keyof StopLiveErrors];
|
|
3360
|
+
|
|
3361
|
+
export type StopLiveResponses = {
|
|
3362
|
+
/**
|
|
3363
|
+
* Stop requested (or already stopped) — the run's current state
|
|
3364
|
+
*/
|
|
3365
|
+
200: LiveRun;
|
|
3366
|
+
};
|
|
3367
|
+
|
|
3368
|
+
export type StopLiveResponse = StopLiveResponses[keyof StopLiveResponses];
|
|
3369
|
+
|
|
3370
|
+
export type GetLiveData = {
|
|
3371
|
+
body?: never;
|
|
3372
|
+
path: {
|
|
3373
|
+
/**
|
|
3374
|
+
* The id returned by `POST /strategy`
|
|
3375
|
+
*/
|
|
3376
|
+
strategyId: StrategyId;
|
|
3377
|
+
};
|
|
3378
|
+
query?: never;
|
|
3379
|
+
url: "/strategy/{strategyId}/live";
|
|
3380
|
+
};
|
|
3381
|
+
|
|
3382
|
+
export type GetLiveErrors = {
|
|
3383
|
+
/**
|
|
3384
|
+
* You have never started a live run for this strategy.
|
|
3385
|
+
*/
|
|
3386
|
+
404: ResponseError;
|
|
3387
|
+
};
|
|
3388
|
+
|
|
3389
|
+
export type GetLiveError = GetLiveErrors[keyof GetLiveErrors];
|
|
3390
|
+
|
|
3391
|
+
export type GetLiveResponses = {
|
|
3392
|
+
/**
|
|
3393
|
+
* The run's current state
|
|
3394
|
+
*/
|
|
3395
|
+
200: LiveRun;
|
|
3396
|
+
};
|
|
3397
|
+
|
|
3398
|
+
export type GetLiveResponse = GetLiveResponses[keyof GetLiveResponses];
|
|
3399
|
+
|
|
3400
|
+
export type StartLiveData = {
|
|
3401
|
+
body: StartLiveRequest;
|
|
3402
|
+
path: {
|
|
3403
|
+
/**
|
|
3404
|
+
* The id returned by `POST /strategy`
|
|
3405
|
+
*/
|
|
3406
|
+
strategyId: StrategyId;
|
|
3407
|
+
};
|
|
3408
|
+
query?: never;
|
|
3409
|
+
url: "/strategy/{strategyId}/live";
|
|
3410
|
+
};
|
|
3411
|
+
|
|
3412
|
+
export type StartLiveErrors = {
|
|
3413
|
+
/**
|
|
3414
|
+
* Malformed `sources` (not exactly one entry, missing field, unsupported `type`), or an invalid `visibility`.
|
|
3415
|
+
*/
|
|
3416
|
+
400: ResponseError;
|
|
3417
|
+
/**
|
|
3418
|
+
* No such registered strategy for this user, or it has never been compiled.
|
|
3419
|
+
*/
|
|
3420
|
+
404: ResponseError;
|
|
3421
|
+
/**
|
|
3422
|
+
* A run for this strategy is already active. Stop it first.
|
|
3423
|
+
*/
|
|
3424
|
+
409: ResponseError;
|
|
3425
|
+
/**
|
|
3426
|
+
* Your plan does not include live runs, would exceed your concurrent-run or
|
|
3427
|
+
* instrument-count limit, or the platform is at capacity right now. Carries a
|
|
3428
|
+
* `Retry-After` header.
|
|
3429
|
+
*
|
|
3430
|
+
*/
|
|
3431
|
+
429: ResponseError;
|
|
3432
|
+
};
|
|
3433
|
+
|
|
3434
|
+
export type StartLiveError = StartLiveErrors[keyof StartLiveErrors];
|
|
3435
|
+
|
|
3436
|
+
export type StartLiveResponses = {
|
|
3437
|
+
/**
|
|
3438
|
+
* Started — the run's own state, in the sandbox stage
|
|
3439
|
+
*/
|
|
3440
|
+
201: LiveRun;
|
|
3441
|
+
};
|
|
3442
|
+
|
|
3443
|
+
export type StartLiveResponse = StartLiveResponses[keyof StartLiveResponses];
|
|
3444
|
+
|
|
3445
|
+
export type ListPublicLiveData = {
|
|
3446
|
+
body?: never;
|
|
3447
|
+
path?: never;
|
|
3448
|
+
query?: {
|
|
3449
|
+
/**
|
|
3450
|
+
* The `runId` from a previous page's `_links.next.href`. Omit for the first page.
|
|
3451
|
+
*/
|
|
3452
|
+
cursor?: string;
|
|
3453
|
+
/**
|
|
3454
|
+
* Page size. Larger values are capped, not rejected.
|
|
3455
|
+
*/
|
|
3456
|
+
limit?: number;
|
|
3457
|
+
};
|
|
3458
|
+
url: "/live/public";
|
|
3459
|
+
};
|
|
3460
|
+
|
|
3461
|
+
export type ListPublicLiveErrors = {
|
|
3462
|
+
/**
|
|
3463
|
+
* An invalid `cursor` or `limit`.
|
|
3464
|
+
*/
|
|
3465
|
+
400: ResponseError;
|
|
3466
|
+
};
|
|
3467
|
+
|
|
3468
|
+
export type ListPublicLiveError =
|
|
3469
|
+
ListPublicLiveErrors[keyof ListPublicLiveErrors];
|
|
3470
|
+
|
|
3471
|
+
export type ListPublicLiveResponses = {
|
|
3472
|
+
/**
|
|
3473
|
+
* A page of public runs
|
|
3474
|
+
*/
|
|
3475
|
+
200: PublicLiveListResponse;
|
|
3476
|
+
};
|
|
3477
|
+
|
|
3478
|
+
export type ListPublicLiveResponse =
|
|
3479
|
+
ListPublicLiveResponses[keyof ListPublicLiveResponses];
|
|
3480
|
+
|
|
3481
|
+
export type UpdateLiveData = {
|
|
3482
|
+
body?: UpdateLiveRequest;
|
|
3483
|
+
path: {
|
|
3484
|
+
/**
|
|
3485
|
+
* The `runId` from `POST`/`GET`/`DELETE` `.../live` or from `GET /live/public`
|
|
3486
|
+
*/
|
|
3487
|
+
runId: string;
|
|
3488
|
+
};
|
|
3489
|
+
query?: never;
|
|
3490
|
+
url: "/live/{runId}";
|
|
3491
|
+
};
|
|
3492
|
+
|
|
3493
|
+
export type UpdateLiveErrors = {
|
|
3494
|
+
/**
|
|
3495
|
+
* `visibility` present but not `private`/`public`.
|
|
3496
|
+
*/
|
|
3497
|
+
400: ResponseError;
|
|
3498
|
+
/**
|
|
3499
|
+
* No such run, or you do not own it — the two look identical on purpose.
|
|
3500
|
+
*/
|
|
3501
|
+
404: ResponseError;
|
|
3502
|
+
};
|
|
3503
|
+
|
|
3504
|
+
export type UpdateLiveError = UpdateLiveErrors[keyof UpdateLiveErrors];
|
|
3505
|
+
|
|
3506
|
+
export type UpdateLiveResponses = {
|
|
3507
|
+
/**
|
|
3508
|
+
* Updated
|
|
3509
|
+
*/
|
|
3510
|
+
200: LiveRunCompact;
|
|
3511
|
+
};
|
|
3512
|
+
|
|
3513
|
+
export type UpdateLiveResponse = UpdateLiveResponses[keyof UpdateLiveResponses];
|
|
3514
|
+
|
|
3515
|
+
export type UpdateLiveParamsData = {
|
|
3516
|
+
body: UpdateLiveParamsRequest;
|
|
3517
|
+
path: {
|
|
3518
|
+
runId: string;
|
|
3519
|
+
};
|
|
3520
|
+
query?: never;
|
|
3521
|
+
url: "/live/{runId}/params";
|
|
3522
|
+
};
|
|
3523
|
+
|
|
3524
|
+
export type UpdateLiveParamsErrors = {
|
|
3525
|
+
/**
|
|
3526
|
+
* `params` missing, not an object, empty, or contains a key your strategy does not declare.
|
|
3527
|
+
*/
|
|
3528
|
+
400: ResponseError;
|
|
3529
|
+
/**
|
|
3530
|
+
* No such run, or you do not own it.
|
|
3531
|
+
*/
|
|
3532
|
+
404: ResponseError;
|
|
3533
|
+
/**
|
|
3534
|
+
* This run's compilation has no declared properties on record — recompile the strategy to enable runtime parameter updates.
|
|
3535
|
+
*/
|
|
3536
|
+
409: ResponseError;
|
|
3537
|
+
};
|
|
3538
|
+
|
|
3539
|
+
export type UpdateLiveParamsError =
|
|
3540
|
+
UpdateLiveParamsErrors[keyof UpdateLiveParamsErrors];
|
|
3541
|
+
|
|
3542
|
+
export type UpdateLiveParamsResponses = {
|
|
3543
|
+
/**
|
|
3544
|
+
* Accepted
|
|
3545
|
+
*/
|
|
3546
|
+
200: LiveParamsUpdateResult;
|
|
3547
|
+
};
|
|
3548
|
+
|
|
3549
|
+
export type UpdateLiveParamsResponse =
|
|
3550
|
+
UpdateLiveParamsResponses[keyof UpdateLiveParamsResponses];
|
|
3551
|
+
|
|
3552
|
+
export type GetLiveRunSignalsData = {
|
|
3553
|
+
body?: never;
|
|
3554
|
+
path: {
|
|
3555
|
+
/**
|
|
3556
|
+
* The run whose signals to read.
|
|
3557
|
+
*/
|
|
3558
|
+
runId: string;
|
|
3559
|
+
};
|
|
3560
|
+
query?: {
|
|
3561
|
+
/**
|
|
3562
|
+
* Start from this moment (epoch ms). Omitted, or older than the available window, starts at `availableSinceMs`. Ignored when `cursor` is given.
|
|
3563
|
+
*/
|
|
3564
|
+
sinceMs?: number;
|
|
3565
|
+
/**
|
|
3566
|
+
* Narrow to one or more instruments. Omitted, or `*`, returns every instrument the run
|
|
3567
|
+
* covers. Accepts a single pair (`BTC/USDT`), either half as a wildcard (`*USDT` for any
|
|
3568
|
+
* base against that quote, `BTC*` for that base against any quote), or a comma-separated
|
|
3569
|
+
* list of pairs (`BTC/USDT,ETH/EUR`). Symbols are matched exactly, case included — pass
|
|
3570
|
+
* them as this API reports them.
|
|
3571
|
+
*
|
|
3572
|
+
*/
|
|
3573
|
+
instrument?: string;
|
|
3574
|
+
/**
|
|
3575
|
+
* Continue from a previous page's `_links.next`. Takes precedence over `sinceMs`.
|
|
3576
|
+
*/
|
|
3577
|
+
cursor?: string;
|
|
3578
|
+
/**
|
|
3579
|
+
* Page size.
|
|
3580
|
+
*/
|
|
3581
|
+
limit?: number;
|
|
3582
|
+
};
|
|
3583
|
+
url: "/live/{runId}/signals";
|
|
3584
|
+
};
|
|
3585
|
+
|
|
3586
|
+
export type GetLiveRunSignalsErrors = {
|
|
3587
|
+
/**
|
|
3588
|
+
* `instrument`, `sinceMs`, `limit` or `cursor` is malformed.
|
|
3589
|
+
*/
|
|
3590
|
+
400: ResponseError;
|
|
3591
|
+
/**
|
|
3592
|
+
* No such run, or not one you may read.
|
|
3593
|
+
*/
|
|
3594
|
+
404: ResponseError;
|
|
3595
|
+
/**
|
|
3596
|
+
* The cursor's position is no longer available — restart from the `availableSinceMs` named in the message.
|
|
3597
|
+
*/
|
|
3598
|
+
410: ResponseError;
|
|
3599
|
+
};
|
|
3600
|
+
|
|
3601
|
+
export type GetLiveRunSignalsError =
|
|
3602
|
+
GetLiveRunSignalsErrors[keyof GetLiveRunSignalsErrors];
|
|
3603
|
+
|
|
3604
|
+
export type GetLiveRunSignalsResponses = {
|
|
3605
|
+
/**
|
|
3606
|
+
* One page of signals
|
|
3607
|
+
*/
|
|
3608
|
+
200: LiveSignalPage;
|
|
3609
|
+
};
|
|
3610
|
+
|
|
3611
|
+
export type GetLiveRunSignalsResponse =
|
|
3612
|
+
GetLiveRunSignalsResponses[keyof GetLiveRunSignalsResponses];
|
|
3613
|
+
|
|
3614
|
+
export type MintLiveConnectionTokenData = {
|
|
3615
|
+
body?: never;
|
|
3616
|
+
path?: never;
|
|
3617
|
+
query?: never;
|
|
3618
|
+
url: "/live/token";
|
|
3619
|
+
};
|
|
3620
|
+
|
|
3621
|
+
export type MintLiveConnectionTokenResponses = {
|
|
3622
|
+
/**
|
|
3623
|
+
* Token minted
|
|
3624
|
+
*/
|
|
3625
|
+
200: LiveConnectionToken;
|
|
3626
|
+
};
|
|
3627
|
+
|
|
3628
|
+
export type MintLiveConnectionTokenResponse =
|
|
3629
|
+
MintLiveConnectionTokenResponses[keyof MintLiveConnectionTokenResponses];
|
|
3630
|
+
|
|
2878
3631
|
export type ClientOptions = {
|
|
2879
3632
|
baseUrl:
|
|
2880
3633
|
| "https://api.qtsurfer.net/v1"
|