@0xinsider/sdk 0.20.0 → 0.22.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/README.md CHANGED
@@ -234,10 +234,10 @@ if (board.object === "edge_hunter") {
234
234
  }
235
235
  ```
236
236
 
237
- The board covers all sports and esports, uses a fixed B grade floor, and returns
238
- at most 30 ranked rows. `total` counts rows before that cap. `horizon_hours`
239
- defaults to 48 and is clamped to 1..48. There is no category, cohort, cursor,
240
- limit, or minimum-grade option, and this endpoint does not provide an ETag.
237
+ The board defaults cover all sports and esports with a B grade floor and at most
238
+ 30 ranked rows. `total` counts selected admitted rows before the cap.
239
+ `horizon_hours` defaults to 48 and clamps to 1..48; `min_grade` accepts S/A/B
240
+ and `limit` defaults to 30 and clamps to 1..30. The board has no ETag or pagination.
241
241
 
242
242
  Every row includes provider participants, both outcome quotes, and backed-side
243
243
  analytics. Current prices are decimal strings with their own `basis`, `ts`,
@@ -251,6 +251,101 @@ A Pro credential throws `MaxPlanRequiredError` (403 `forbidden`,
251
251
  same key. All four previous sports-edge and pre-game-side paths are retired
252
252
  and return 410 `endpoint_retired`. Their list and conditional-read methods
253
253
  were removed in SDK 0.20.0. Migrate to `client.edgeHunter.get()`.
254
+ SDK 0.21.0 preserves the default board and adds the complete advanced contracts:
255
+
256
+ ```ts
257
+ const signals = await client.edgeHunter.get({ view: "signals", category: "Soccer", min_grade: "A", limit: 20 });
258
+ if (signals.object === "list") console.log(signals.view, signals.data, signals.next_cursor);
259
+
260
+ const observations = await client.edgeHunter.observations({ cohort: "in_play", limit: 20 });
261
+ if (observations.object === "list") console.log(observations.snapshot_as_of, observations.degraded, observations.funnel);
262
+
263
+ const unchanged = await client.edgeHunter.getConditional(
264
+ { view: "observations", cohort: "in_play" },
265
+ { headers: { "If-None-Match": observations.meta.etag ?? "" } },
266
+ );
267
+ if (unchanged.object === "not_modified") console.log("Unchanged snapshot");
268
+ ```
269
+
270
+ `view: "signals"` returns full ranked records, nullable `token_id`, snapshot clocks,
271
+ holder/directional analytics, category evidence and provenance. It accepts `category`,
272
+ `min_grade` (S/A/B, default B), `horizon_hours` (default 12, clamp 1..48), `limit`
273
+ (default 20, clamp 1..100) and `cursor`. Grade floor requires a holder at that grade or better;
274
+ it does not remove other holders. `signals()` is a convenience for the same mode.
275
+
276
+ `view: "observations"` requires `cohort` (`wider_holder`, `in_play`, `emerging_pile`)
277
+ and accepts `category`, `limit` and `cursor`. Records preserve verified token IDs,
278
+ midpoint `backed_price` marks, observation/holder clocks, provider/directional status,
279
+ and completeness. The envelope retains `snapshot_as_of`, `degraded` and all per-sport
280
+ funnel diagnostics. Price marks are not wallet entry costs; volume is shares.
281
+ In-play reuse is capped at 30 seconds and fails closed without fresh source evidence.
282
+
283
+ Literal view queries have distinct result types, including on empty pages. Advanced
284
+ responses add `view: "signals" | "observations"` beside `object: "list"`. Both advanced
285
+ views support ETag/304 and private revalidation. All public views read warmed generations only;
286
+ missing/stale readiness returns 503 `read_model_warming` with `Retry-After: 5`
287
+ without running holder/provider computation in the request. `getConditional()`
288
+ accepts advanced views only. Parameters for another view return 400, and a refreshed
289
+ snapshot expires its cursors. Start a new cursor walk when migrating from retired URLs.
290
+ The shared `list()`, `paginate()`, `paginatePages()` and `collect()` helpers accept
291
+ Edge Hunter only with an explicit advanced view and preserve the corresponding record
292
+ and envelope types:
293
+
294
+ ```ts
295
+ for await (const page of paginatePages(client, "getEdgeHunter", {
296
+ query: { view: "observations", cohort: "wider_holder", limit: 100 },
297
+ maxPages: 2,
298
+ })) console.log(page.view, page.funnel, page.data);
299
+ ```
300
+
301
+ SDK 0.22.0 adds common selections to every Edge Hunter view:
302
+
303
+ ```ts
304
+ const nfl = await client.edgeHunter.get({ kind: "sports", leagues: ["nfl"], limit: 10 });
305
+ if (nfl.object === "edge_hunter") {
306
+ console.log(nfl.selection, nfl.data.rows.map(row => row.market_context));
307
+ }
308
+ const selectedSignals = await client.edgeHunter.signals({
309
+ sports: ["Soccer", "Football"], market_types: ["moneyline"], min_grade: "A", limit: 20,
310
+ });
311
+ const selectedObservations = await client.edgeHunter.observations({
312
+ cohort: "in_play", kind: "esports", leagues: ["cs2", "lol"], limit: 20,
313
+ });
314
+ ```
315
+
316
+ | Selection | Meaning |
317
+ | --- | --- |
318
+ | `kind` | `sports` or `esports`; omit for both |
319
+ | `sports` | Canonical sport buckets, including `Football`, `Soccer`, `Esports` and `Table Tennis`; case-insensitive |
320
+ | `leagues` | Machine/provider league identities such as `nfl`, `epl`, `cs2` and `lol`; known wire/tag aliases normalize |
321
+ | `market_types` | Exact provider `sports_market_type` values from `market_context.market_type` |
322
+ | `condition_ids` | Exact markets by raw provider ID or `mkt_` alias |
323
+ | `event_slugs` / `series_slugs` | Exact provider event/series identities from the row and `market_context.series_slug` |
324
+ | `category` | Legacy canonical bucket alias: `NFL` selects all Football; use `leagues: ["nfl"]` for NFL only |
325
+
326
+ Lists match OR within an axis and AND across axes. Each array must contain 1..100
327
+ supplied values before server normalization and deduplication; empty SDK arrays
328
+ fail before HTTP. The SDK serializes repeated bare query names, and the server
329
+ also accepts CSV inside a value. Market types and event/series slugs are trimmed
330
+ exact case-sensitive strings. Unknown canonical sport names are invalid; unknown
331
+ provider identities or market IDs can yield an empty selected collection.
332
+
333
+ A selected 200 response adds top-level `selection` with only requested normalized
334
+ axes. Blank `category` retains omission behavior. Selected SDK reads always send
335
+ `X-Query-Validation: strict`, even if `strictQuery: false` was supplied, and refuse
336
+ responses missing their echo so an older serving instance cannot silently ignore
337
+ new filters. Generic `call()`, `list()` and pagination use the same protection.
338
+ Advanced cursors and ETags bind the normalized selection; restart at page one
339
+ when changing it.
340
+
341
+ Every row adds required nullable `market_context` with required nullable `league`,
342
+ `series_slug`, `market_type` and `metadata_updated_at`. Discover exact selectors
343
+ from those frozen facts. The clock is local `market_canonical.updated_at`, not a
344
+ provider observation time. Unselected legacy cache generations may carry
345
+ `market_context: null`; selected reads require a ready frozen sidecar and return
346
+ 503 warming if it is absent. Missing selected metadata excludes rows. Observation
347
+ `funnel` remains source-generation/category accounting rather than a league/type/ID
348
+ request-input census.
254
349
 
255
350
  ### Beyond the JSON envelope
256
351
 
@@ -350,7 +445,7 @@ for await (const trade of paginate(client, "listWhaleTrades", {
350
445
  }
351
446
  ```
352
447
 
353
- The loop ends when a page says `has_more: false`, whatever its `next_cursor` says. A page that says `has_more: true` with no usable `next_cursor`, or one whose `next_cursor` repeats a cursor the walk already requested, is a broken response rather than the end of the collection: the walk throws `PaginationError` (`reason` `missing_cursor` or `repeated_cursor`) before yielding that page and before any duplicate request, with the received `page` on the error so its data is not lost. The last 1,024 cursors are remembered for the repeat check (`CURSOR_HISTORY_LIMIT`), which keeps a long walk's memory flat. A list response whose `has_more` is not a boolean or whose `next_cursor` is not a string throws `InvalidResponseError`.
448
+ The loop ends when a page says `has_more: false`, whatever its `next_cursor` says. A page that says `has_more: true` with no usable `next_cursor`, or one whose `next_cursor` repeats a cursor the walk already requested, is a broken response rather than the end of the collection: the walk throws `PaginationError` (`reason` `missing_cursor` or `repeated_cursor`) before yielding that page and before any duplicate request, with the received `page` on the error so its data is not lost. The last 1,024 cursors are remembered for the repeat check (`CURSOR_HISTORY_LIMIT`), which keeps a long walk's memory flat. A list response whose `has_more` is not a boolean or whose `next_cursor` is neither a string, null nor omitted throws `InvalidResponseError`. A null terminal cursor is preserved for Edge Hunter observations.
354
449
 
355
450
  `maxPages` caps fetches and is checked before any request: a positive integer or `Infinity`; `0`, a negative, fractional or `NaN` value throws `RangeError`. Reaching it is your choice, not exhaustion. Pass a `progress` object to tell the two apart and keep the continuation:
356
451
 
package/dist/client.d.ts CHANGED
@@ -19,7 +19,7 @@
19
19
  * - Extra typed convenience methods for list/candle/webhook-event/stream
20
20
  * surfaces and a typed `Grade` enum.
21
21
  */
22
- import type { OperationBody, OperationData, OperationPath, OperationQuery, OperationResponse, ResponseMeta } from "./schema.js";
22
+ import type { OperationBody, OperationData, OperationPath, OperationQuery, OperationResponse, ResponseMeta, EdgeHunterBoardResponse, EdgeHunterSignalsResponse, EdgeHunterObservationsResponse } from "./schema.js";
23
23
  /**
24
24
  * The envelope `meta` as THIS client hands it to a caller: everything the
25
25
  * contract declares (`ResponseMeta`), plus `etag`.
@@ -852,8 +852,29 @@ export interface CategorySkillStatusCounts {
852
852
  export type GamesListParams = OperationQuery["listGames"];
853
853
  /** One game: both sides, its schedule, its provider status and its markets. */
854
854
  export type { Game } from "./schema.js";
855
- /** Query parameters accepted by the Max-only Edge Hunter board. */
856
- export type EdgeHunterParams = OperationQuery["getEdgeHunter"];
855
+ /** Optional selection axes shared by every Max-only Edge Hunter view. */
856
+ export type EdgeHunterSelectionParams = Pick<OperationQuery["getEdgeHunter"], "kind" | "sports" | "leagues" | "market_types" | "condition_ids" | "event_slugs" | "series_slugs" | "category">;
857
+ /** Quoted board selection, grade floor and cap; existing defaults remain compatible. */
858
+ export type EdgeHunterBoardParams = EdgeHunterSelectionParams & Pick<OperationQuery["getEdgeHunter"], "horizon_hours" | "min_grade" | "limit"> & {
859
+ view?: "board";
860
+ };
861
+ /** Full ranked records with category, grade and horizon projection before pagination. */
862
+ export type EdgeHunterSignalsParams = EdgeHunterSelectionParams & Pick<OperationQuery["getEdgeHunter"], "limit" | "cursor" | "horizon_hours" | "min_grade"> & {
863
+ view: "signals";
864
+ };
865
+ /** Full observation evidence; cohort is required, including for empty pages. */
866
+ export type EdgeHunterObservationsParams = EdgeHunterSelectionParams & Pick<OperationQuery["getEdgeHunter"], "limit" | "cursor"> & {
867
+ view: "observations";
868
+ cohort: NonNullable<OperationQuery["getEdgeHunter"]["cohort"]>;
869
+ };
870
+ export type EdgeHunterAdvancedParams = EdgeHunterSignalsParams | EdgeHunterObservationsParams;
871
+ export type EdgeHunterParams = EdgeHunterBoardParams | EdgeHunterAdvancedParams;
872
+ export type EdgeHunterBoardResult = ClientEnvelope<EdgeHunterBoardResponse> | ApiNotModifiedResponse;
873
+ export type EdgeHunterSignalsResult = ClientEnvelope<EdgeHunterSignalsResponse> | ApiNotModifiedResponse;
874
+ export type EdgeHunterObservationsResult = ClientEnvelope<EdgeHunterObservationsResponse> | ApiNotModifiedResponse;
875
+ export type EdgeHunterAdvancedResult = EdgeHunterSignalsResult | EdgeHunterObservationsResult;
876
+ /** Full advanced collection envelope for a literal view; excludes conditional 304 results. */
877
+ export type EdgeHunterCollection<P extends EdgeHunterAdvancedParams> = P extends EdgeHunterSignalsParams ? Exclude<EdgeHunterSignalsResult, ApiNotModifiedResponse> : Exclude<EdgeHunterObservationsResult, ApiNotModifiedResponse>;
857
878
  /** Public wallet facts associated with a recorded pick. */
858
879
  export interface PickQualifyingExpert {
859
880
  address: string;
@@ -935,9 +956,13 @@ export type OperationMeta<K extends ApiOperationId> = OperationResponse[K] exten
935
956
  * the replay, `ResponseMeta` elsewhere) plus this client's lifted `etag` and
936
957
  * `sandbox`.
937
958
  */
938
- export type OperationEnvelope<K extends EnvelopeOperationId> = Omit<OperationResponse[K], "meta"> & {
939
- meta: ClientMeta<OperationMeta<K>>;
940
- };
959
+ type ClientEnvelope<T> = T extends {
960
+ meta: infer M;
961
+ } ? Omit<T, "meta"> & {
962
+ meta: ClientMeta<M>;
963
+ } : never;
964
+ /** Distribute over response variants so view-specific pagination and evidence stay typed. */
965
+ export type OperationEnvelope<K extends EnvelopeOperationId> = ClientEnvelope<OperationResponse[K]>;
941
966
  /** A `call()` result: the envelope, or the typed 304 when `If-None-Match` matched. */
942
967
  export type OperationResult<K extends EnvelopeOperationId> = OperationEnvelope<K> | ApiNotModifiedResponse;
943
968
  /** One item of a list operation's `data`. */
@@ -989,6 +1014,8 @@ export type OperationOptionsArgs<K extends ApiOperationId, O> = OperationRequire
989
1014
  * parameter before any request.
990
1015
  */
991
1016
  export type RuntimeOperationId<I extends ApiOperationId> = I & (ApiOperationId extends I ? unknown : OptionalInputOperationId);
1017
+ /** A literal Edge Hunter list call must select an advanced view; runtime-chosen ids stay available. */
1018
+ export type RuntimeListOperationId<I extends ApiOperationId> = RuntimeOperationId<I> & ("getEdgeHunter" extends I ? ApiOperationId extends I ? unknown : never : unknown);
992
1019
  /** The transport options a convenience method forwards: everything but the parts it fills itself. */
993
1020
  export type ConvenienceOptions = Omit<ApiRequestOptions, "path" | "query" | "body">;
994
1021
  /** The MCP methods `POST /api/v1/mcp` accepts, from the operation's request body. */
@@ -1135,14 +1162,31 @@ export declare class OxinsiderApiClient {
1135
1162
  private readonly fetchImpl;
1136
1163
  private readonly timeoutMs;
1137
1164
  private readonly maxRetries;
1138
- /** Full experimental Edge Hunter board. Requires a Max credential. */
1165
+ /** Max-only Edge Hunter board and full ranked/observation collection views. */
1139
1166
  readonly edgeHunter: {
1140
- get: (params?: EdgeHunterParams, options?: ConvenienceOptions) => Promise<OperationResult<"getEdgeHunter">>;
1167
+ get: {
1168
+ (params?: EdgeHunterBoardParams, options?: ConvenienceOptions): Promise<EdgeHunterBoardResult>;
1169
+ (params: EdgeHunterSignalsParams, options?: ConvenienceOptions): Promise<EdgeHunterSignalsResult>;
1170
+ (params: EdgeHunterObservationsParams, options?: ConvenienceOptions): Promise<EdgeHunterObservationsResult>;
1171
+ (params: EdgeHunterParams, options?: ConvenienceOptions): Promise<OperationResult<"getEdgeHunter">>;
1172
+ };
1173
+ /** Conditional reads are supported only by the advanced snapshot views. */
1174
+ getConditional: {
1175
+ (params: EdgeHunterSignalsParams, options?: ConvenienceOptions): Promise<EdgeHunterSignalsResult>;
1176
+ (params: EdgeHunterObservationsParams, options?: ConvenienceOptions): Promise<EdgeHunterObservationsResult>;
1177
+ (params: EdgeHunterAdvancedParams, options?: ConvenienceOptions): Promise<EdgeHunterAdvancedResult>;
1178
+ };
1179
+ signals: (params?: Omit<EdgeHunterSignalsParams, "view">, options?: ConvenienceOptions) => Promise<EdgeHunterSignalsResult>;
1180
+ observations: (params: Omit<EdgeHunterObservationsParams, "view">, options?: ConvenienceOptions) => Promise<EdgeHunterObservationsResult>;
1141
1181
  };
1182
+ private getEdgeHunter;
1183
+ private getAdvancedEdgeHunter;
1142
1184
  /** Polymarket combo fills, live count, and one combo's observed details. */
1143
1185
  readonly combos: {
1144
1186
  /** Recent pages use next_cursor; ranked pages use next_offset. */
1145
- fills: (params?: ComboFillsParams, options?: ConvenienceOptions) => Promise<OperationEnvelope<"listComboFills">>;
1187
+ fills: (params?: ComboFillsParams, options?: ConvenienceOptions) => Promise<Omit<import("./schema.js").ComboFillsResponse, "meta"> & {
1188
+ meta: ClientMeta<ResponseMeta>;
1189
+ }>;
1146
1190
  summary: (options?: ConvenienceOptions) => Promise<OperationResult<"getCombosSummary">>;
1147
1191
  get: (conditionId: OperationPath["getCombo"]["condition_id"], options?: ConvenienceOptions) => Promise<OperationResult<"getCombo">>;
1148
1192
  };
@@ -1282,9 +1326,12 @@ export declare class OxinsiderApiClient {
1282
1326
  * `facets` or `totals`). Use `paginate()` (in `pagination.ts`) to
1283
1327
  * auto-follow `next_cursor`.
1284
1328
  */
1329
+ list<P extends EdgeHunterAdvancedParams>(operationId: "getEdgeHunter", options: ConvenienceOptions & {
1330
+ query: P;
1331
+ }): Promise<EdgeHunterCollection<P>>;
1285
1332
  list<K extends ListOperationId>(operationId: K, ...options: OperationOptionsArgs<K, OperationRequestOptions<K>>): Promise<OperationEnvelope<K>>;
1286
1333
  /** The untyped form; see the second `call` signature. */
1287
- list<T = unknown, I extends ApiOperationId = ApiOperationId>(operationId: RuntimeOperationId<I>, options?: ApiRequestOptions): Promise<ApiListEnvelope<T>>;
1334
+ list<T = unknown, I extends ApiOperationId = ApiOperationId>(operationId: RuntimeListOperationId<I>, options?: ApiRequestOptions): Promise<ApiListEnvelope<T>>;
1288
1335
  getTrader(address: OperationPath["getTrader"]["address"], options?: Omit<OperationRequestOptions<"getTrader">, "path">): Promise<OperationResult<"getTrader">>;
1289
1336
  getTraderPnl(address: OperationPath["getTraderPnl"]["address"], options?: Omit<OperationRequestOptions<"getTraderPnl">, "path">): Promise<OperationResult<"getTraderPnl">>;
1290
1337
  /**
@@ -1338,9 +1385,37 @@ export declare class OxinsiderApiClient {
1338
1385
  * `object: "market_intel_batch"`.
1339
1386
  */
1340
1387
  batchGetMarketIntel(body: OperationBody["batchGetMarketIntel"], options?: ConvenienceOptions): Promise<OperationResult<"batchGetMarketIntel">>;
1341
- listLeaderboard(params?: LeaderboardListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listLeaderboard">>;
1342
- listTrendingWallets(params?: TrendingWalletsParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listTrendingWallets">>;
1343
- listLargeTrades(params?: LargeTradeListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listLargeTrades">>;
1388
+ listLeaderboard(params?: LeaderboardListParams, options?: ConvenienceOptions): Promise<Omit<{
1389
+ object: "list";
1390
+ data: OperationData["listLeaderboard"];
1391
+ has_more: boolean;
1392
+ next_cursor?: string;
1393
+ total?: number;
1394
+ meta: ResponseMeta;
1395
+ }, "meta"> & {
1396
+ meta: ClientMeta<ResponseMeta>;
1397
+ }>;
1398
+ listTrendingWallets(params?: TrendingWalletsParams, options?: ConvenienceOptions): Promise<Omit<{
1399
+ object: "list";
1400
+ data: OperationData["listTrendingWallets"];
1401
+ has_more: boolean;
1402
+ next_cursor?: string;
1403
+ total?: number;
1404
+ meta: ResponseMeta;
1405
+ }, "meta"> & {
1406
+ meta: ClientMeta<ResponseMeta>;
1407
+ }>;
1408
+ listLargeTrades(params?: LargeTradeListParams, options?: ConvenienceOptions): Promise<Omit<{
1409
+ object: "list";
1410
+ data: OperationData["listLargeTrades"];
1411
+ data_quality: import("./schema.js").DataQuality;
1412
+ has_more: boolean;
1413
+ next_cursor?: string;
1414
+ total?: number;
1415
+ meta: ResponseMeta;
1416
+ }, "meta"> & {
1417
+ meta: ClientMeta<ResponseMeta>;
1418
+ }>;
1344
1419
  /**
1345
1420
  * Typed conditional-read variant of {@link listLargeTrades}, for polling
1346
1421
  * (#18507). Returns the list envelope on 200 or the typed `not_modified`
@@ -1349,24 +1424,96 @@ export declare class OxinsiderApiClient {
1349
1424
  * with `If-None-Match`: a poll that finds no new trade is a 304 with no body.
1350
1425
  */
1351
1426
  listLargeTradesConditional(params?: LargeTradeListParams, options?: ConvenienceOptions): Promise<OperationResult<"listLargeTrades">>;
1352
- listLargeTradeHistory(params?: LargeTradeHistoryParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listLargeTradeHistory">>;
1427
+ listLargeTradeHistory(params?: LargeTradeHistoryParams, options?: ConvenienceOptions): Promise<Omit<{
1428
+ object: "list";
1429
+ data: OperationData["listLargeTradeHistory"];
1430
+ data_quality: import("./schema.js").DataQuality;
1431
+ has_more: boolean;
1432
+ next_cursor?: string;
1433
+ total?: number;
1434
+ meta: import("./schema.js").LargeTradeHistoryMeta;
1435
+ }, "meta"> & {
1436
+ meta: ClientMeta<import("./schema.js").LargeTradeHistoryMeta>;
1437
+ }>;
1353
1438
  /** @deprecated Use {@link listLargeTrades} (#16304); calls the deprecated `/api/v1/whale-trades`. */
1354
- listWhaleTrades(params?: WhaleTradeListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listWhaleTrades">>;
1439
+ listWhaleTrades(params?: WhaleTradeListParams, options?: ConvenienceOptions): Promise<Omit<{
1440
+ object: "list";
1441
+ data: OperationData["listWhaleTrades"];
1442
+ data_quality: import("./schema.js").DataQuality;
1443
+ has_more: boolean;
1444
+ next_cursor?: string;
1445
+ total?: number;
1446
+ meta: ResponseMeta;
1447
+ }, "meta"> & {
1448
+ meta: ClientMeta<ResponseMeta>;
1449
+ }>;
1355
1450
  /** @deprecated Use {@link listLargeTradeHistory} (#16304); calls the deprecated `/api/v1/whale-trades/history`. */
1356
- listWhaleTradeHistory(params?: WhaleTradeHistoryParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listWhaleTradeHistory">>;
1357
- listPositions(params?: PositionsListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listPositions">>;
1358
- listLargePositions(params?: LargePositionsListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listLargePositions">>;
1451
+ listWhaleTradeHistory(params?: WhaleTradeHistoryParams, options?: ConvenienceOptions): Promise<Omit<{
1452
+ object: "list";
1453
+ data: OperationData["listWhaleTradeHistory"];
1454
+ data_quality: import("./schema.js").DataQuality;
1455
+ has_more: boolean;
1456
+ next_cursor?: string;
1457
+ total?: number;
1458
+ meta: import("./schema.js").LargeTradeHistoryMeta;
1459
+ }, "meta"> & {
1460
+ meta: ClientMeta<import("./schema.js").LargeTradeHistoryMeta>;
1461
+ }>;
1462
+ listPositions(params?: PositionsListParams, options?: ConvenienceOptions): Promise<Omit<{
1463
+ object: "list";
1464
+ data: OperationData["listPositions"];
1465
+ data_quality: import("./schema.js").DataQuality;
1466
+ has_more: boolean;
1467
+ next_cursor?: string;
1468
+ total?: number;
1469
+ snapshot?: {
1470
+ as_of: string;
1471
+ expires_at: string;
1472
+ row_count: number;
1473
+ };
1474
+ meta: ResponseMeta;
1475
+ }, "meta"> & {
1476
+ meta: ClientMeta<ResponseMeta>;
1477
+ }>;
1478
+ listLargePositions(params?: LargePositionsListParams, options?: ConvenienceOptions): Promise<Omit<{
1479
+ object: "list";
1480
+ data: OperationData["listLargePositions"];
1481
+ has_more: boolean;
1482
+ next_cursor?: string;
1483
+ total?: number;
1484
+ meta: ResponseMeta;
1485
+ }, "meta"> & {
1486
+ meta: ClientMeta<ResponseMeta>;
1487
+ }>;
1359
1488
  /**
1360
1489
  * List ranked sharp-money flows. Canonical since #16308 ("sharp money" is
1361
1490
  * the pinned product term); it calls `/api/v1/markets/sharp-money-flows`.
1362
1491
  */
1363
- listSharpMoneyFlows(params?: SharpMoneyFlowsParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listSharpMoneyFlows">>;
1492
+ listSharpMoneyFlows(params?: SharpMoneyFlowsParams, options?: ConvenienceOptions): Promise<Omit<{
1493
+ object: "list";
1494
+ data: OperationData["listSharpMoneyFlows"];
1495
+ has_more: boolean;
1496
+ next_cursor?: string;
1497
+ total?: number;
1498
+ meta: ResponseMeta;
1499
+ }, "meta"> & {
1500
+ meta: ClientMeta<ResponseMeta>;
1501
+ }>;
1364
1502
  /**
1365
1503
  * @deprecated Use {@link listSharpMoneyFlows} (#16308). Kept live; it calls
1366
1504
  * the deprecated `/api/v1/markets/smart-money-flows`, whose responses carry
1367
1505
  * `Deprecation` and a `Link rel="successor-version"`.
1368
1506
  */
1369
- listSmartMoneyFlows(params?: OperationQuery["listSmartMoneyFlows"], options?: ConvenienceOptions): Promise<OperationEnvelope<"listSmartMoneyFlows">>;
1507
+ listSmartMoneyFlows(params?: OperationQuery["listSmartMoneyFlows"], options?: ConvenienceOptions): Promise<Omit<{
1508
+ object: "list";
1509
+ data: OperationData["listSmartMoneyFlows"];
1510
+ has_more: boolean;
1511
+ next_cursor?: string;
1512
+ total?: number;
1513
+ meta: ResponseMeta;
1514
+ }, "meta"> & {
1515
+ meta: ClientMeta<ResponseMeta>;
1516
+ }>;
1370
1517
  /**
1371
1518
  * List covered games: both sides with their provider ids and live scores, the
1372
1519
  * UTC kickoff, the provider's own status, and every linked Polymarket market
@@ -1375,7 +1522,17 @@ export declare class OxinsiderApiClient {
1375
1522
  * returns an empty page rather than an error, and the response's `coverage`
1376
1523
  * names what this deployment serves.
1377
1524
  */
1378
- listGames(params?: GamesListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listGames">>;
1525
+ listGames(params?: GamesListParams, options?: ConvenienceOptions): Promise<Omit<{
1526
+ object: "list";
1527
+ data: OperationData["listGames"];
1528
+ has_more: boolean;
1529
+ next_cursor?: string;
1530
+ as_of: string;
1531
+ coverage: import("./schema.js").GamesCoverage;
1532
+ meta: ResponseMeta;
1533
+ }, "meta"> & {
1534
+ meta: ClientMeta<ResponseMeta>;
1535
+ }>;
1379
1536
  /**
1380
1537
  * Read one game by its `event_slug`, the identity the `live_sports_updated`
1381
1538
  * webhook pulse carries. A slug outside the published coverage returns 404.
@@ -1383,11 +1540,41 @@ export declare class OxinsiderApiClient {
1383
1540
  getGame(eventSlug: OperationPath["getGame"]["event_slug"], options?: ConvenienceOptions): Promise<OperationResult<"getGame">>;
1384
1541
  searchMarkets(q: OperationQuery["searchMarkets"]["q"], options?: ConvenienceOptions & {
1385
1542
  query?: Omit<OperationQuery["searchMarkets"], "q">;
1386
- }): Promise<OperationEnvelope<"searchMarkets">>;
1543
+ }): Promise<Omit<{
1544
+ object: "list";
1545
+ data: OperationData["searchMarkets"];
1546
+ has_more: boolean;
1547
+ next_cursor?: string;
1548
+ total?: number;
1549
+ meta: ResponseMeta;
1550
+ }, "meta"> & {
1551
+ meta: ClientMeta<ResponseMeta>;
1552
+ }>;
1387
1553
  searchContent(q: OperationQuery["searchContent"]["q"], options?: ConvenienceOptions & {
1388
1554
  query?: Omit<OperationQuery["searchContent"], "q">;
1389
- }): Promise<OperationEnvelope<"searchContent">>;
1390
- exploreMarkets(params?: ExploreMarketsParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"exploreMarkets">>;
1555
+ }): Promise<Omit<{
1556
+ object: "list";
1557
+ data: OperationData["searchContent"];
1558
+ has_more: false;
1559
+ next_cursor?: string;
1560
+ total?: number;
1561
+ meta: ResponseMeta;
1562
+ }, "meta"> & {
1563
+ meta: ClientMeta<ResponseMeta>;
1564
+ }>;
1565
+ exploreMarkets(params?: ExploreMarketsParams, options?: ConvenienceOptions): Promise<Omit<{
1566
+ object: "list";
1567
+ data: OperationData["exploreMarkets"];
1568
+ has_more: boolean;
1569
+ next_cursor?: string;
1570
+ total?: number;
1571
+ facets: import("./schema.js").ExploreFacets;
1572
+ meta: ResponseMeta;
1573
+ computed_at?: string;
1574
+ fresh_for_seconds?: number;
1575
+ }, "meta"> & {
1576
+ meta: ClientMeta<ResponseMeta>;
1577
+ }>;
1391
1578
  /** One market's flow and top positions (`GET /api/v1/market/{condition_id}/flow`). */
1392
1579
  getMarketFlow(conditionId: OperationPath["getMarketFlow"]["condition_id"], options?: Omit<OperationRequestOptions<"getMarketFlow">, "path">): Promise<OperationResult<"getMarketFlow">>;
1393
1580
  /**
@@ -1405,7 +1592,19 @@ export declare class OxinsiderApiClient {
1405
1592
  * the `market`, `scan` and roster `totals` beside `data`; `total` is the
1406
1593
  * count matching the filters across every page.
1407
1594
  */
1408
- getMarketHolders(conditionId: OperationPath["getMarketHolders"]["condition_id"], params?: OperationQuery["getMarketHolders"], options?: ConvenienceOptions): Promise<OperationEnvelope<"getMarketHolders">>;
1595
+ getMarketHolders(conditionId: OperationPath["getMarketHolders"]["condition_id"], params?: OperationQuery["getMarketHolders"], options?: ConvenienceOptions): Promise<Omit<{
1596
+ object: "list";
1597
+ data: OperationData["getMarketHolders"];
1598
+ has_more: boolean;
1599
+ next_cursor?: string;
1600
+ total?: number;
1601
+ market: import("./schema.js").MarketHoldersMarket;
1602
+ scan: import("./schema.js").MarketHoldersScan;
1603
+ totals: import("./schema.js").MarketHoldersTotals;
1604
+ meta: ResponseMeta;
1605
+ }, "meta"> & {
1606
+ meta: ClientMeta<ResponseMeta>;
1607
+ }>;
1409
1608
  /**
1410
1609
  * Fetch bucketed OHLC candles for a market's outcome tokens.
1411
1610
  * Resolution defaults to the server default; pass `params.resolution` as
@@ -1420,7 +1619,16 @@ export declare class OxinsiderApiClient {
1420
1619
  */
1421
1620
  getSuspiciousTrade(id: OperationPath["getSuspiciousTrade"]["id"], options?: ConvenienceOptions): Promise<OperationResult<"getSuspiciousTrade">>;
1422
1621
  /** List stored trades whose recorded suspicion score meets the flag threshold. */
1423
- listSuspiciousTrades(params?: SuspiciousTradesListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listSuspiciousTrades">>;
1622
+ listSuspiciousTrades(params?: SuspiciousTradesListParams, options?: ConvenienceOptions): Promise<Omit<{
1623
+ object: "list";
1624
+ data: OperationData["listSuspiciousTrades"];
1625
+ has_more: boolean;
1626
+ next_cursor?: string;
1627
+ total?: number;
1628
+ meta: ResponseMeta;
1629
+ }, "meta"> & {
1630
+ meta: ClientMeta<ResponseMeta>;
1631
+ }>;
1424
1632
  /**
1425
1633
  * @deprecated Use `getSuspiciousTrade()`; renamed in #16301. This method
1426
1634
  * keeps calling the deprecated `GET /api/v1/insider-radar/{id}`, which stays
@@ -1434,7 +1642,16 @@ export declare class OxinsiderApiClient {
1434
1642
  * with no retirement date and answers with `Deprecation` plus a `Link
1435
1643
  * rel="successor-version"` header.
1436
1644
  */
1437
- listInsiderRadar(params?: InsiderRadarListParams, options?: ConvenienceOptions): Promise<OperationEnvelope<"listInsiderRadar">>;
1645
+ listInsiderRadar(params?: InsiderRadarListParams, options?: ConvenienceOptions): Promise<Omit<{
1646
+ object: "list";
1647
+ data: OperationData["listInsiderRadar"];
1648
+ has_more: boolean;
1649
+ next_cursor?: string;
1650
+ total?: number;
1651
+ meta: ResponseMeta;
1652
+ }, "meta"> & {
1653
+ meta: ClientMeta<ResponseMeta>;
1654
+ }>;
1438
1655
  getLargeTrade(id: OperationPath["getLargeTrade"]["id"], options?: ConvenienceOptions): Promise<OperationResult<"getLargeTrade">>;
1439
1656
  /** @deprecated Use {@link getLargeTrade} (#16304); calls the deprecated `/api/v1/whale-trades/{id}`. */
1440
1657
  getWhaleTrade(id: OperationPath["getWhaleTrade"]["id"], options?: ConvenienceOptions): Promise<OperationResult<"getWhaleTrade">>;
@@ -1451,7 +1668,16 @@ export declare class OxinsiderApiClient {
1451
1668
  * repeat, so it is retried on a transport or 5xx failure like a read.
1452
1669
  */
1453
1670
  cancelTraderExport(address: OperationPath["cancelTraderExport"]["address"], jobId: OperationQuery["cancelTraderExport"]["job_id"], options?: ConvenienceOptions): Promise<OperationResult<"cancelTraderExport">>;
1454
- listWebhooks(options?: ConvenienceOptions): Promise<OperationEnvelope<"listWebhooks">>;
1671
+ listWebhooks(options?: ConvenienceOptions): Promise<Omit<{
1672
+ object: "list";
1673
+ data: OperationData["listWebhooks"];
1674
+ has_more: boolean;
1675
+ next_cursor?: string;
1676
+ total?: number;
1677
+ meta: ResponseMeta;
1678
+ }, "meta"> & {
1679
+ meta: ClientMeta<ResponseMeta>;
1680
+ }>;
1455
1681
  getWebhook(id: OperationPath["getWebhook"]["id"], options?: ConvenienceOptions): Promise<OperationResult<"getWebhook">>;
1456
1682
  createWebhook(body: OperationBody["createWebhook"], options?: ConvenienceOptions): Promise<OperationResult<"createWebhook">>;
1457
1683
  /** Admit durable consent; 202 acknowledges admission, not activation. */
@@ -1464,9 +1690,27 @@ export declare class OxinsiderApiClient {
1464
1690
  * Fetch the self-describing webhook event catalog (each entry's `id`,
1465
1691
  * description, payload shape, and active/dormant status).
1466
1692
  */
1467
- listWebhookEvents(options?: ConvenienceOptions): Promise<OperationEnvelope<"listWebhookEvents">>;
1693
+ listWebhookEvents(options?: ConvenienceOptions): Promise<Omit<{
1694
+ object: "list";
1695
+ data: OperationData["listWebhookEvents"];
1696
+ has_more: boolean;
1697
+ next_cursor?: string;
1698
+ total?: number;
1699
+ meta: ResponseMeta;
1700
+ }, "meta"> & {
1701
+ meta: ClientMeta<ResponseMeta>;
1702
+ }>;
1468
1703
  /** List delivery attempts for one webhook endpoint (Stripe-style list). */
1469
- listWebhookDeliveries(webhookId: OperationPath["listWebhookDeliveries"]["id"], params?: OperationQuery["listWebhookDeliveries"], options?: ConvenienceOptions): Promise<OperationEnvelope<"listWebhookDeliveries">>;
1704
+ listWebhookDeliveries(webhookId: OperationPath["listWebhookDeliveries"]["id"], params?: OperationQuery["listWebhookDeliveries"], options?: ConvenienceOptions): Promise<Omit<{
1705
+ object: "list";
1706
+ data: OperationData["listWebhookDeliveries"];
1707
+ has_more: boolean;
1708
+ next_cursor?: string;
1709
+ total?: number;
1710
+ meta: ResponseMeta;
1711
+ }, "meta"> & {
1712
+ meta: ClientMeta<ResponseMeta>;
1713
+ }>;
1470
1714
  /**
1471
1715
  * Requeue one `dead_letter` delivery with a fresh attempt budget and return
1472
1716
  * the delivery row. Re-enabling a disabled endpoint resends nothing, so this