@nadohq/nuanze-client 0.43.0 → 0.44.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.
Files changed (67) hide show
  1. package/README.md +21 -0
  2. package/dist/{NuanzeClient-uL24b7LV.cjs → NuanzeClient-C707zWgg.cjs} +56 -47
  3. package/dist/NuanzeClient-C707zWgg.cjs.map +1 -0
  4. package/dist/NuanzeClient.cjs +1 -1
  5. package/dist/NuanzeClient.d.cts +46 -37
  6. package/dist/NuanzeClient.d.cts.map +1 -1
  7. package/dist/NuanzeClient.d.ts +46 -37
  8. package/dist/NuanzeClient.d.ts.map +1 -1
  9. package/dist/NuanzeClient.js +55 -46
  10. package/dist/NuanzeClient.js.map +1 -1
  11. package/dist/{NuanzeServerFailureError-DQ_Nf2c4.d.ts → NuanzeServerFailureError-BS6Gvwoy.d.ts} +2 -2
  12. package/dist/{NuanzeServerFailureError-DQ_Nf2c4.d.ts.map → NuanzeServerFailureError-BS6Gvwoy.d.ts.map} +1 -1
  13. package/dist/{NuanzeServerFailureError-BPgOv2fb.d.cts → NuanzeServerFailureError-Bn2iKpoY.d.cts} +2 -2
  14. package/dist/{NuanzeServerFailureError-BPgOv2fb.d.cts.map → NuanzeServerFailureError-Bn2iKpoY.d.cts.map} +1 -1
  15. package/dist/{clientModelTypes-BypVSi04.d.ts → clientModelTypes-CreYRHbE.d.ts} +4 -4
  16. package/dist/{clientModelTypes-BypVSi04.d.ts.map → clientModelTypes-CreYRHbE.d.ts.map} +1 -1
  17. package/dist/{clientModelTypes-QGu6fZtg.d.cts → clientModelTypes-DyNrbcyr.d.cts} +4 -4
  18. package/dist/{clientModelTypes-QGu6fZtg.d.cts.map → clientModelTypes-DyNrbcyr.d.cts.map} +1 -1
  19. package/dist/{clientTypes-DxWzvYkG.d.ts → clientTypes-BAfxfhmA.d.cts} +57 -74
  20. package/dist/clientTypes-BAfxfhmA.d.cts.map +1 -0
  21. package/dist/{clientTypes-BeCLgtYs.d.cts → clientTypes-vIgldUM_.d.ts} +57 -74
  22. package/dist/clientTypes-vIgldUM_.d.ts.map +1 -0
  23. package/dist/dataMappers.cjs +2 -2
  24. package/dist/dataMappers.cjs.map +1 -1
  25. package/dist/dataMappers.d.cts +4 -4
  26. package/dist/dataMappers.d.ts +4 -4
  27. package/dist/dataMappers.js +1 -1
  28. package/dist/dataMappers.js.map +1 -1
  29. package/dist/index.cjs +1 -1
  30. package/dist/index.d.cts +6 -6
  31. package/dist/index.d.ts +6 -6
  32. package/dist/{serverModelTypes-6Yh2CDPU.d.ts → serverModelTypes-DL_58zos.d.ts} +4 -4
  33. package/dist/{serverModelTypes-6Yh2CDPU.d.ts.map → serverModelTypes-DL_58zos.d.ts.map} +1 -1
  34. package/dist/{serverModelTypes-Boq1Oei1.d.cts → serverModelTypes-DUggGfPj.d.cts} +4 -4
  35. package/dist/{serverModelTypes-Boq1Oei1.d.cts.map → serverModelTypes-DUggGfPj.d.cts.map} +1 -1
  36. package/dist/{serverQueryTypes-ExbYAkBm.d.ts → serverQueryTypes-D8xcBytZ.d.ts} +11 -7
  37. package/dist/serverQueryTypes-D8xcBytZ.d.ts.map +1 -0
  38. package/dist/{serverQueryTypes-FSvlSr7y.d.cts → serverQueryTypes-wuju0Njg.d.cts} +11 -7
  39. package/dist/serverQueryTypes-wuju0Njg.d.cts.map +1 -0
  40. package/dist/types/NuanzeServerFailureError.d.cts +1 -1
  41. package/dist/types/NuanzeServerFailureError.d.ts +1 -1
  42. package/dist/types/clientModelTypes.cjs.map +1 -1
  43. package/dist/types/clientModelTypes.d.cts +1 -1
  44. package/dist/types/clientModelTypes.d.ts +1 -1
  45. package/dist/types/clientModelTypes.js.map +1 -1
  46. package/dist/types/clientTypes.d.cts +2 -2
  47. package/dist/types/clientTypes.d.ts +2 -2
  48. package/dist/types/index.d.cts +6 -6
  49. package/dist/types/index.d.ts +6 -6
  50. package/dist/types/serverModelTypes.d.cts +1 -1
  51. package/dist/types/serverModelTypes.d.ts +1 -1
  52. package/dist/types/serverQueryTypes.cjs.map +1 -1
  53. package/dist/types/serverQueryTypes.d.cts +1 -1
  54. package/dist/types/serverQueryTypes.d.ts +1 -1
  55. package/dist/types/serverQueryTypes.js.map +1 -1
  56. package/package.json +3 -3
  57. package/src/NuanzeClient.ts +73 -57
  58. package/src/dataMappers.ts +1 -1
  59. package/src/types/clientModelTypes.ts +3 -6
  60. package/src/types/clientTypes.ts +43 -37
  61. package/src/types/serverModelTypes.ts +2 -5
  62. package/src/types/serverQueryTypes.ts +8 -4
  63. package/dist/NuanzeClient-uL24b7LV.cjs.map +0 -1
  64. package/dist/clientTypes-BeCLgtYs.d.cts.map +0 -1
  65. package/dist/clientTypes-DxWzvYkG.d.ts.map +0 -1
  66. package/dist/serverQueryTypes-ExbYAkBm.d.ts.map +0 -1
  67. package/dist/serverQueryTypes-FSvlSr7y.d.cts.map +0 -1
package/README.md CHANGED
@@ -27,6 +27,27 @@ const markets = await nadoClient.context.nuanzeClient.getMarkets();
27
27
  Nuanze runs a single public deployment that serves mainnet data, so every entry in
28
28
  `NUANZE_CLIENT_ENDPOINTS` points at the same host.
29
29
 
30
+ ### Market selectors
31
+
32
+ Scoped market methods (`getMarketByTicker`, `getMarketTrades`, `getMarketCandles`,
33
+ `getMarketPositioning`, and `getMarketPositions`) require at least `ticker` or `productId`. When
34
+ both are supplied, `productId` is used for the path segment and `ticker` is ignored.
35
+
36
+ ```ts
37
+ // Ticker only (case-insensitive; canonical ticker or legacy symbol)
38
+ const eth = await nuanze.getMarketByTicker({ ticker: 'ETH' });
39
+
40
+ // Product ID only
41
+ const ethPerp = await nuanze.getMarketByTicker({ productId: 4 });
42
+
43
+ // Both: productId wins; ticker is ignored (BTC here is only illustrative)
44
+ const candles = await nuanze.getMarketCandles({
45
+ ticker: 'BTC',
46
+ productId: 4,
47
+ interval: '1h',
48
+ });
49
+ ```
50
+
30
51
  ## API Surface
31
52
 
32
53
  Each method maps one-to-one onto a public GET operation:
@@ -67,17 +67,17 @@ var NuanzeClient = class {
67
67
  return require_dataMappers.mapNuanzeMarketsResponse(await this.getJson("/markets", params));
68
68
  }
69
69
  /**
70
- * Resolves a market by ticker. Lookup is case-insensitive and accepts canonical tickers or
71
- * legacy source symbols. An explicit unavailable venue returns `MARKET_NOT_FOUND`. With no
72
- * venue, `strictVenue=true` returns `AMBIGUOUS_MARKET` for multi-venue assets; otherwise the
73
- * primary venue is used.
70
+ * Resolves a market by {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`;
71
+ * when both are given, `productId` is used for the path segment and `ticker` is ignored.
72
+ * Ticker lookup is case-insensitive and accepts canonical tickers or legacy source symbols.
73
+ * An explicit unavailable venue returns `MARKET_NOT_FOUND`. With no venue, `strictVenue=true`
74
+ * returns `AMBIGUOUS_MARKET` for multi-venue assets; otherwise the primary venue is used.
74
75
  *
75
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or
76
- * `BAD_REQUEST` on invalid selectors, and `MARKET_NOT_FOUND` when the ticker does not resolve.
76
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid
77
+ * selectors, and `MARKET_NOT_FOUND` when the selector does not resolve.
77
78
  */
78
79
  async getMarketByTicker(params) {
79
- const { ticker, ...query } = params;
80
- return require_dataMappers.mapNuanzeMarketByTickerResponse(await this.getJson(`/markets/${encodeURIComponent(ticker)}`, query));
80
+ return require_dataMappers.mapNuanzeMarketByTickerResponse(await this.getMarketJson(params));
81
81
  }
82
82
  /**
83
83
  * Lists the latest funding observation per active perpetual market, refreshed about every five
@@ -98,9 +98,10 @@ var NuanzeClient = class {
98
98
  return require_dataMappers.mapNuanzeLeaderboardResponse(await this.getJson("/leaderboard", params));
99
99
  }
100
100
  /**
101
- * Gets the global public leaderboard of username-claimed subaccounts. Results are sorted by
102
- * equity-basis account PnL descending with nulls last. `globalRank` is independent of the active
103
- * privacy and trading filters. Pagination uses a filter-bound opaque cursor.
101
+ * Gets the global public leaderboard of subaccounts. Results are sorted by equity-basis account
102
+ * PnL descending with nulls last. Username and display name are null when unavailable.
103
+ * `globalRank` is independent of the active privacy and trading filters. Pagination uses a
104
+ * filter-bound opaque cursor.
104
105
  *
105
106
  * @throws {NuanzeServerFailureError} With `BAD_REQUEST`, `INVALID_CURSOR`, or
106
107
  * `CURSOR_FILTER_MISMATCH` when filters or the cursor are invalid.
@@ -152,30 +153,32 @@ var NuanzeClient = class {
152
153
  return require_dataMappers.mapNuanzeWalletPositionsResponse(await this.getJson(`/wallets/${encodeURIComponent(address)}/positions`, query));
153
154
  }
154
155
  /**
155
- * Lists market trades: one taker-side row per match, sorted by `matchedAt` then `id` descending.
156
- * The exclusive cursor is bound to operation and normalized filters. `from` is inclusive and
157
- * `to` exclusive. Wallet identity is absent.
156
+ * Lists market trades for a {@link NuanzeMarketSelector}: one taker-side row per match, sorted
157
+ * by `matchedAt` then `id` descending. Supply at least `ticker` or `productId`; when both are
158
+ * given, `productId` is used for the path segment and `ticker` is ignored. The exclusive cursor
159
+ * is bound to operation and normalized filters. `from` is inclusive and `to` exclusive. Wallet
160
+ * identity is absent.
158
161
  *
159
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`,
160
- * `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid
161
- * input, and `MARKET_NOT_FOUND` when the ticker does not resolve.
162
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,
163
+ * `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid input, and
164
+ * `MARKET_NOT_FOUND` when the selector does not resolve.
162
165
  */
163
166
  async getMarketTrades(params) {
164
- const { ticker, ...query } = params;
165
- return require_dataMappers.mapNuanzeMarketTradesResponse(await this.getJson(`/markets/${encodeURIComponent(ticker)}/trades`, query));
167
+ return require_dataMappers.mapNuanzeMarketTradesResponse(await this.getMarketJson(params, "/trades"));
166
168
  }
167
169
  /**
168
- * Lists market candles. Source storage is 1h; 4h and 1d are UTC-aligned rollups and missing bars
169
- * are not interpolated. The newest `limit` matching bars are selected and returned
170
- * oldest-to-newest, at most 750, with no pagination. A current bucket has `complete=false`.
170
+ * Lists market candles for a {@link NuanzeMarketSelector}. Supply at least `ticker` or
171
+ * `productId`; when both are given, `productId` is used for the path segment and `ticker` is
172
+ * ignored. Source storage is 1h; 4h and 1d are UTC-aligned rollups and missing bars are not
173
+ * interpolated. The newest `limit` matching bars are selected and returned oldest-to-newest,
174
+ * at most 750, with no pagination. A current bucket has `complete=false`.
171
175
  *
172
176
  * @throws {NuanzeServerFailureError} With `UNSUPPORTED_INTERVAL`, `RANGE_TOO_LARGE`,
173
- * `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or `BAD_REQUEST` on invalid input, and
174
- * `MARKET_NOT_FOUND` when the ticker does not resolve.
177
+ * `AMBIGUOUS_MARKET`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the
178
+ * selector does not resolve.
175
179
  */
176
180
  async getMarketCandles(params) {
177
- const { ticker, ...query } = params;
178
- return require_dataMappers.mapNuanzeMarketCandlesResponse(await this.getJson(`/markets/${encodeURIComponent(ticker)}/candles`, query));
181
+ return require_dataMappers.mapNuanzeMarketCandlesResponse(await this.getMarketJson(params, "/candles"));
179
182
  }
180
183
  /**
181
184
  * Lists wallet-owned maker and taker execution rows, sorted by `matchedAt` then `id` descending.
@@ -243,40 +246,40 @@ var NuanzeClient = class {
243
246
  return require_dataMappers.mapNuanzeCollateralFlowSeriesResponse(await this.getJson("/flows/series", params));
244
247
  }
245
248
  /**
246
- * Gets privacy-preserving aggregate positioning for an active perpetual. Cross and isolated legs
247
- * are summed within owner/subaccount/product before direction classification. Every cell requires
248
- * at least 20 distinct contributing owners. No identity, individual position, entry price, PnL,
249
- * margin, or leverage fields are returned.
249
+ * Gets privacy-preserving aggregate positioning for an active perpetual identified by
250
+ * {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`; when both are given,
251
+ * `productId` is used for the path segment and `ticker` is ignored. Cross and isolated legs
252
+ * are summed within owner/subaccount/product before direction classification. Every cell
253
+ * requires at least 20 distinct contributing owners. No identity, individual position, entry
254
+ * price, PnL, margin, or leverage fields are returned.
250
255
  *
251
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or
252
- * `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the ticker does not resolve to a
253
- * perp.
256
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid input,
257
+ * and `MARKET_NOT_FOUND` when the selector does not resolve to a perp.
254
258
  */
255
259
  async getMarketPositioning(params) {
256
- const { ticker, ...query } = params;
257
- return require_dataMappers.mapNuanzeMarketPositioningResponse(await this.getJson(`/markets/${encodeURIComponent(ticker)}/positioning`, query));
260
+ return require_dataMappers.mapNuanzeMarketPositioningResponse(await this.getMarketJson(params, "/positioning"));
258
261
  }
259
262
  /**
260
- * Lists open perpetual position legs for the resolved market. Results default to absolute
261
- * notional descending and can be ordered by signed unrealized PnL or absolute base amount in
262
- * either direction. Spot markets are not supported. Legs below $10 absolute notional are excluded.
263
- * Wallet addresses, nullable synced usernames and display names, and signed exact base amounts
264
- * are returned.
263
+ * Lists open perpetual position legs for a market identified by {@link NuanzeMarketSelector}.
264
+ * Supply at least `ticker` or `productId`; when both are given, `productId` is used for the
265
+ * path segment and `ticker` is ignored. Results default to absolute notional descending and
266
+ * can be ordered by signed unrealized PnL or absolute base amount in either direction. Spot
267
+ * markets are not supported. Legs below $10 absolute notional are excluded. Wallet addresses,
268
+ * nullable synced usernames and display names, and signed exact base amounts are returned.
265
269
  *
266
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`,
267
- * `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, or `BAD_REQUEST` on invalid input, and
268
- * `MARKET_NOT_FOUND` when the ticker does not resolve to a perp.
270
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,
271
+ * `CURSOR_FILTER_MISMATCH`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the
272
+ * selector does not resolve to a perp.
269
273
  */
270
274
  async getMarketPositions(params) {
271
- const { ticker, ...query } = params;
272
- return require_dataMappers.mapNuanzeMarketPositionsResponse(await this.getJson(`/markets/${encodeURIComponent(ticker)}/positions`, query));
275
+ return require_dataMappers.mapNuanzeMarketPositionsResponse(await this.getMarketJson(params, "/positions"));
273
276
  }
274
277
  /**
275
278
  * Lists current open perpetual position legs across every market by signed unrealized PnL.
276
279
  * Descending returns the largest gainers and ascending returns the largest losers. This is a
277
280
  * latest indexed snapshot with no timeframe. Legs below $10 absolute notional are excluded.
278
281
  * Private subaccounts are excluded unless `includePrivate=true`. Each row includes market
279
- * identity and its source snapshot timestamp.
282
+ * identity, nullable synced username and display name, and its source snapshot timestamp.
280
283
  *
281
284
  * @throws {NuanzeServerFailureError} With `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, or
282
285
  * `BAD_REQUEST` when the query or cursor is invalid.
@@ -290,6 +293,12 @@ var NuanzeClient = class {
290
293
  async getJson(path, params) {
291
294
  return this.requestJson(path, { params });
292
295
  }
296
+ async getMarketJson(params, suffix = "") {
297
+ const { productId, ticker, ...query } = params;
298
+ const selector = productId ?? ticker;
299
+ if (selector === void 0) throw new Error("A market ticker or productId is required.");
300
+ return this.getJson(`/markets/${encodeURIComponent(selector.toString())}${suffix}`, query);
301
+ }
293
302
  async requestJson(path, config = {}) {
294
303
  const response = await this.axiosInstance.request({
295
304
  method: "GET",
@@ -323,4 +332,4 @@ Object.defineProperty(exports, "__toESM", {
323
332
  }
324
333
  });
325
334
 
326
- //# sourceMappingURL=NuanzeClient-uL24b7LV.cjs.map
335
+ //# sourceMappingURL=NuanzeClient-C707zWgg.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NuanzeClient-C707zWgg.cjs","names":["mapNuanzeNewsResponse","mapNuanzeMarketsResponse","mapNuanzeMarketByTickerResponse","mapNuanzeFundingRatesResponse","mapNuanzeLeaderboardResponse","mapNuanzeSubaccountLeaderboardResponse","mapNuanzePlatformSummaryResponse","mapNuanzeFollowedLeaderboardResponse","mapNuanzeWalletSummaryResponse","mapNuanzeWalletPositionsResponse","mapNuanzeMarketTradesResponse","mapNuanzeMarketCandlesResponse","mapNuanzeWalletTradesResponse","mapNuanzeWalletPnlResponse","mapNuanzeWalletPnlSeriesResponse","mapNuanzeCollateralFlowsResponse","mapNuanzeCollateralFlowSummaryResponse","mapNuanzeCollateralFlowSeriesResponse","mapNuanzeMarketPositioningResponse","mapNuanzeMarketPositionsResponse","mapNuanzeOpenPositionsResponse","isNuanzeServerFailureResponse","NuanzeServerFailureError"],"sources":["../src/NuanzeClient.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport {\n mapNuanzeCollateralFlowSeriesResponse,\n mapNuanzeCollateralFlowSummaryResponse,\n mapNuanzeCollateralFlowsResponse,\n mapNuanzeFollowedLeaderboardResponse,\n mapNuanzeFundingRatesResponse,\n mapNuanzeLeaderboardResponse,\n mapNuanzeMarketByTickerResponse,\n mapNuanzeMarketCandlesResponse,\n mapNuanzeMarketPositioningResponse,\n mapNuanzeMarketPositionsResponse,\n mapNuanzeMarketTradesResponse,\n mapNuanzeMarketsResponse,\n mapNuanzeNewsResponse,\n mapNuanzeOpenPositionsResponse,\n mapNuanzePlatformSummaryResponse,\n mapNuanzeSubaccountLeaderboardResponse,\n mapNuanzeWalletPnlResponse,\n mapNuanzeWalletPnlSeriesResponse,\n mapNuanzeWalletPositionsResponse,\n mapNuanzeWalletSummaryResponse,\n mapNuanzeWalletTradesResponse,\n} from './dataMappers';\nimport {\n GetNuanzeCollateralFlowSeriesParams,\n GetNuanzeCollateralFlowSeriesResponse,\n GetNuanzeCollateralFlowSummaryParams,\n GetNuanzeCollateralFlowSummaryResponse,\n GetNuanzeCollateralFlowsParams,\n GetNuanzeCollateralFlowsResponse,\n GetNuanzeFollowedLeaderboardParams,\n GetNuanzeFollowedLeaderboardResponse,\n GetNuanzeFundingRatesParams,\n GetNuanzeFundingRatesResponse,\n GetNuanzeLeaderboardParams,\n GetNuanzeLeaderboardResponse,\n GetNuanzeMarketByTickerParams,\n GetNuanzeMarketByTickerResponse,\n GetNuanzeMarketCandlesParams,\n GetNuanzeMarketCandlesResponse,\n GetNuanzeMarketPositioningParams,\n GetNuanzeMarketPositioningResponse,\n GetNuanzeMarketPositionsParams,\n GetNuanzeMarketPositionsResponse,\n GetNuanzeMarketTradesParams,\n GetNuanzeMarketTradesResponse,\n GetNuanzeMarketsParams,\n GetNuanzeMarketsResponse,\n GetNuanzeNewsParams,\n GetNuanzeNewsResponse,\n GetNuanzeOpenPositionsParams,\n GetNuanzeOpenPositionsResponse,\n GetNuanzePlatformSummaryParams,\n GetNuanzePlatformSummaryResponse,\n GetNuanzeSubaccountLeaderboardParams,\n GetNuanzeSubaccountLeaderboardResponse,\n GetNuanzeWalletPnlParams,\n GetNuanzeWalletPnlResponse,\n GetNuanzeWalletPnlSeriesParams,\n GetNuanzeWalletPnlSeriesResponse,\n GetNuanzeWalletPositionsParams,\n GetNuanzeWalletPositionsResponse,\n GetNuanzeWalletSummaryParams,\n GetNuanzeWalletSummaryResponse,\n GetNuanzeWalletTradesParams,\n GetNuanzeWalletTradesResponse,\n NuanzeMarketSelector,\n} from './types/clientTypes';\nimport { NuanzeServerFailureError } from './types/NuanzeServerFailureError';\nimport { NuanzeServerMarketPositioningResponse } from './types/serverModelTypes';\nimport {\n NuanzeServerCollateralFlowSeriesResponse,\n NuanzeServerCollateralFlowSummaryResponse,\n NuanzeServerCollateralFlowsResponse,\n NuanzeServerFollowedLeaderboardResponse,\n NuanzeServerFundingRatesResponse,\n NuanzeServerLeaderboardResponse,\n NuanzeServerMarketByTickerResponse,\n NuanzeServerMarketCandlesResponse,\n NuanzeServerMarketPositionsResponse,\n NuanzeServerMarketTradesResponse,\n NuanzeServerMarketsResponse,\n NuanzeServerNewsResponse,\n NuanzeServerOpenPositionsResponse,\n NuanzeServerPlatformSummaryResponse,\n NuanzeServerSubaccountLeaderboardResponse,\n NuanzeServerWalletPnlResponse,\n NuanzeServerWalletPnlSeriesResponse,\n NuanzeServerWalletPositionsResponse,\n NuanzeServerWalletSummaryResponse,\n NuanzeServerWalletTradesResponse,\n isNuanzeServerFailureResponse,\n} from './types/serverQueryTypes';\n\n/**\n * Options for constructing a {@link NuanzeClient}.\n */\nexport interface NuanzeClientOpts {\n /**\n * Base URL of the Nuanze API, including the version segment, e.g. {@link NUANZE_CLIENT_ENDPOINTS}.\n */\n url: string;\n}\n\n/**\n * Client for the Nuanze public analytics API: markets, wallets, trades, candles, collateral flows,\n * and positioning.\n *\n * Read-only and credential-free, so unlike the other service clients it takes no wallet client or\n * linked signer. It also sends no `x-nado-client-type` header: Nuanze is a public API that does not\n * attribute traffic per client, and its `Access-Control-Allow-Headers` does not list the header, so\n * sending it would fail CORS preflight in the browser. All operations are GET.\n */\nexport class NuanzeClient {\n readonly opts: NuanzeClientOpts;\n readonly axiosInstance: AxiosInstance;\n\n constructor(opts: NuanzeClientOpts) {\n this.opts = opts;\n this.axiosInstance = axios.create({\n // Nuanze is public and answers every origin with `Access-Control-Allow-Origin: *`, which\n // browsers reject for credentialed requests.\n withCredentials: false,\n // We have custom logic to validate response status and create an appropriate error\n validateStatus: () => true,\n // Repeatable `productId` must serialize as `productId=1&productId=2` (OpenAPI explode).\n paramsSerializer: { indexes: null },\n });\n }\n\n /**\n * Lists published editorial stories, sorted by `publishedAt` descending then `id` descending.\n * The opaque cursor is exclusive and bound to normalized filters. Raw article ingestion, scoring,\n * queue, and newsdesk fields are excluded.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST`, `INVALID_CURSOR`, or\n * `CURSOR_FILTER_MISMATCH` when filters or the cursor are invalid.\n */\n async getNews(\n params: GetNuanzeNewsParams = {},\n ): Promise<GetNuanzeNewsResponse> {\n return mapNuanzeNewsResponse(\n await this.getJson<NuanzeServerNewsResponse>('/news', params),\n );\n }\n\n /**\n * Gets the active market universe, ordered by `productId` ascending. Never truncated, so `count`\n * always equals the length of `markets`. Market metadata refreshes about every five minutes and\n * prices about every minute.\n *\n * @throws {NuanzeServerFailureError} With error code `BAD_REQUEST` if a filter value is not a\n * documented venue or tradability state.\n */\n async getMarkets(\n params: GetNuanzeMarketsParams = {},\n ): Promise<GetNuanzeMarketsResponse> {\n return mapNuanzeMarketsResponse(\n await this.getJson<NuanzeServerMarketsResponse>('/markets', params),\n );\n }\n\n /**\n * Resolves a market by {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`;\n * when both are given, `productId` is used for the path segment and `ticker` is ignored.\n * Ticker lookup is case-insensitive and accepts canonical tickers or legacy source symbols.\n * An explicit unavailable venue returns `MARKET_NOT_FOUND`. With no venue, `strictVenue=true`\n * returns `AMBIGUOUS_MARKET` for multi-venue assets; otherwise the primary venue is used.\n *\n * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid\n * selectors, and `MARKET_NOT_FOUND` when the selector does not resolve.\n */\n async getMarketByTicker(\n params: GetNuanzeMarketByTickerParams,\n ): Promise<GetNuanzeMarketByTickerResponse> {\n return mapNuanzeMarketByTickerResponse(\n await this.getMarketJson<NuanzeServerMarketByTickerResponse>(params),\n );\n }\n\n /**\n * Lists the latest funding observation per active perpetual market, refreshed about every five\n * minutes.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST` if a filter value is invalid.\n */\n async getFundingRates(\n params: GetNuanzeFundingRatesParams = {},\n ): Promise<GetNuanzeFundingRatesResponse> {\n return mapNuanzeFundingRatesResponse(\n await this.getJson<NuanzeServerFundingRatesResponse>(\n '/funding/rates',\n params,\n ),\n );\n }\n\n /**\n * Gets the account PnL leaderboard. Equity-basis account PnL includes realized and unrealized\n * movement plus funding and is not realized PnL.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST` if a filter value is invalid.\n */\n async getLeaderboard(\n params: GetNuanzeLeaderboardParams = {},\n ): Promise<GetNuanzeLeaderboardResponse> {\n return mapNuanzeLeaderboardResponse(\n await this.getJson<NuanzeServerLeaderboardResponse>(\n '/leaderboard',\n params,\n ),\n );\n }\n\n /**\n * Gets the global public leaderboard of subaccounts. Results are sorted by equity-basis account\n * PnL descending with nulls last. Username and display name are null when unavailable.\n * `globalRank` is independent of the active privacy and trading filters. Pagination uses a\n * filter-bound opaque cursor.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST`, `INVALID_CURSOR`, or\n * `CURSOR_FILTER_MISMATCH` when filters or the cursor are invalid.\n */\n async getSubaccountLeaderboard(\n params: GetNuanzeSubaccountLeaderboardParams = {},\n ): Promise<GetNuanzeSubaccountLeaderboardResponse> {\n return mapNuanzeSubaccountLeaderboardResponse(\n await this.getJson<NuanzeServerSubaccountLeaderboardResponse>(\n '/leaderboard/subaccounts',\n params,\n ),\n );\n }\n\n /**\n * Gets platform activity summary from five-minute aggregates.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST` if the window is not a documented value.\n */\n async getPlatformSummary(\n params: GetNuanzePlatformSummaryParams = {},\n ): Promise<GetNuanzePlatformSummaryResponse> {\n return mapNuanzePlatformSummaryResponse(\n await this.getJson<NuanzeServerPlatformSummaryResponse>(\n '/platform/summary',\n params,\n ),\n );\n }\n\n /**\n * Gets a keyset-paginated leaderboard for every subaccount a supplied bytes32 subaccount actively\n * follows, sorted by PnL descending with nulls last. The follower does not need a claimed\n * username. Subaccounts with no PnL in the window are included by default with null PnL/rank,\n * zero counts, and no products. Private subaccounts are excluded unless `includePrivate=true`.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST` when params are invalid.\n */\n async getFollowedLeaderboard(\n params: GetNuanzeFollowedLeaderboardParams,\n ): Promise<GetNuanzeFollowedLeaderboardResponse> {\n return mapNuanzeFollowedLeaderboardResponse(\n await this.getJson<NuanzeServerFollowedLeaderboardResponse>(\n '/wallets/leaderboard',\n params,\n ),\n );\n }\n\n /**\n * Gets replica-backed wallet analytics. Without `subaccountName`, latest cumulative values are\n * selected per known subaccount and then summed. The response is a snapshot and does not claim\n * live health, withdrawable collateral, open-order, or signer state.\n *\n * @throws {NuanzeServerFailureError} With `INVALID_ADDRESS` or `BAD_REQUEST` on invalid input,\n * and `WALLET_NOT_FOUND` when the address has no wallet data.\n */\n async getWalletSummary(\n params: GetNuanzeWalletSummaryParams,\n ): Promise<GetNuanzeWalletSummaryResponse> {\n const { address, ...query } = params;\n return mapNuanzeWalletSummaryResponse(\n await this.getJson<NuanzeServerWalletSummaryResponse>(\n `/wallets/${encodeURIComponent(address)}`,\n query,\n ),\n );\n }\n\n /**\n * Lists at most 500 current replica position rows across all known subaccounts by default. Rows\n * remain per subaccount. Spot rows are excluded unless `includeSpot=true`. This is not an\n * execution-grade live feed.\n *\n * @throws {NuanzeServerFailureError} With `INVALID_ADDRESS` or `BAD_REQUEST` on invalid input,\n * and `WALLET_NOT_FOUND` when the address has no wallet data.\n */\n async getWalletPositions(\n params: GetNuanzeWalletPositionsParams,\n ): Promise<GetNuanzeWalletPositionsResponse> {\n const { address, ...query } = params;\n return mapNuanzeWalletPositionsResponse(\n await this.getJson<NuanzeServerWalletPositionsResponse>(\n `/wallets/${encodeURIComponent(address)}/positions`,\n query,\n ),\n );\n }\n\n /**\n * Lists market trades for a {@link NuanzeMarketSelector}: one taker-side row per match, sorted\n * by `matchedAt` then `id` descending. Supply at least `ticker` or `productId`; when both are\n * given, `productId` is used for the path segment and `ticker` is ignored. The exclusive cursor\n * is bound to operation and normalized filters. `from` is inclusive and `to` exclusive. Wallet\n * identity is absent.\n *\n * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,\n * `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid input, and\n * `MARKET_NOT_FOUND` when the selector does not resolve.\n */\n async getMarketTrades(\n params: GetNuanzeMarketTradesParams,\n ): Promise<GetNuanzeMarketTradesResponse> {\n return mapNuanzeMarketTradesResponse(\n await this.getMarketJson<NuanzeServerMarketTradesResponse>(\n params,\n '/trades',\n ),\n );\n }\n\n /**\n * Lists market candles for a {@link NuanzeMarketSelector}. Supply at least `ticker` or\n * `productId`; when both are given, `productId` is used for the path segment and `ticker` is\n * ignored. Source storage is 1h; 4h and 1d are UTC-aligned rollups and missing bars are not\n * interpolated. The newest `limit` matching bars are selected and returned oldest-to-newest,\n * at most 750, with no pagination. A current bucket has `complete=false`.\n *\n * @throws {NuanzeServerFailureError} With `UNSUPPORTED_INTERVAL`, `RANGE_TOO_LARGE`,\n * `AMBIGUOUS_MARKET`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the\n * selector does not resolve.\n */\n async getMarketCandles(\n params: GetNuanzeMarketCandlesParams,\n ): Promise<GetNuanzeMarketCandlesResponse> {\n return mapNuanzeMarketCandlesResponse(\n await this.getMarketJson<NuanzeServerMarketCandlesResponse>(\n params,\n '/candles',\n ),\n );\n }\n\n /**\n * Lists wallet-owned maker and taker execution rows, sorted by `matchedAt` then `id` descending.\n * The cursor is exclusive and filter-bound. `from` is inclusive and `to` exclusive.\n *\n * @throws {NuanzeServerFailureError} With `INVALID_ADDRESS`, `INVALID_CURSOR`,\n * `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid input, and\n * `WALLET_NOT_FOUND` when the address has no wallet data.\n */\n async getWalletTrades(\n params: GetNuanzeWalletTradesParams,\n ): Promise<GetNuanzeWalletTradesResponse> {\n const { address, ...query } = params;\n return mapNuanzeWalletTradesResponse(\n await this.getJson<NuanzeServerWalletTradesResponse>(\n `/wallets/${encodeURIComponent(address)}/trades`,\n query,\n ),\n );\n }\n\n /**\n * Gets wallet account PnL. 24h is rolling and uses hourly snapshots with a daily fallback\n * baseline. Longer windows use daily snapshots; `all` starts at earliest coverage. PnL includes\n * realized and unrealized movement plus funding.\n *\n * @throws {NuanzeServerFailureError} With `INVALID_ADDRESS` or `BAD_REQUEST` on invalid input,\n * and `WALLET_NOT_FOUND` when the address has no wallet data.\n */\n async getWalletPnl(\n params: GetNuanzeWalletPnlParams,\n ): Promise<GetNuanzeWalletPnlResponse> {\n const { address, ...query } = params;\n return mapNuanzeWalletPnlResponse(\n await this.getJson<NuanzeServerWalletPnlResponse>(\n `/wallets/${encodeURIComponent(address)}/pnl`,\n query,\n ),\n );\n }\n\n /**\n * Gets a wallet account series of at most 1,000 deterministically sampled points ordered by\n * timestamp. Series contain a boundary anchor and a carried-forward request-time tip; synthetic\n * points are identified. Latest buckets may be provisional.\n *\n * @throws {NuanzeServerFailureError} With `INVALID_ADDRESS` or `BAD_REQUEST` on invalid input,\n * and `WALLET_NOT_FOUND` when the address has no wallet data.\n */\n async getWalletPnlSeries(\n params: GetNuanzeWalletPnlSeriesParams,\n ): Promise<GetNuanzeWalletPnlSeriesResponse> {\n const { address, ...query } = params;\n return mapNuanzeWalletPnlSeriesResponse(\n await this.getJson<NuanzeServerWalletPnlSeriesResponse>(\n `/wallets/${encodeURIComponent(address)}/pnl/series`,\n query,\n ),\n );\n }\n\n /**\n * Lists public collateral events, sorted by timestamp then `id` descending. Repeated `productId`\n * uses OR semantics. `minUsd` excludes unvalued events; without it unvalued events remain.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST`, `INVALID_CURSOR`, or\n * `CURSOR_FILTER_MISMATCH` when filters or the cursor are invalid.\n */\n async getCollateralFlows(\n params: GetNuanzeCollateralFlowsParams = {},\n ): Promise<GetNuanzeCollateralFlowsResponse> {\n return mapNuanzeCollateralFlowsResponse(\n await this.getJson<NuanzeServerCollateralFlowsResponse>('/flows', params),\n );\n }\n\n /**\n * Gets collateral flow aggregates: deposited, withdrawn, net, and gross, with valuation coverage\n * and a prior equal-window comparison. `all` has no prior window.\n *\n * @throws {NuanzeServerFailureError} With `BAD_REQUEST` if a filter value is invalid.\n */\n async getCollateralFlowSummary(\n params: GetNuanzeCollateralFlowSummaryParams = {},\n ): Promise<GetNuanzeCollateralFlowSummaryResponse> {\n return mapNuanzeCollateralFlowSummaryResponse(\n await this.getJson<NuanzeServerCollateralFlowSummaryResponse>(\n '/flows/summary',\n params,\n ),\n );\n }\n\n /**\n * Gets collateral flow series of at most 1,000 UTC buckets. Allowed timeframe/bucket pairs are\n * 24h/hour, 7d/hour or day (default hour), 30d/day, and all/day.\n *\n * @throws {NuanzeServerFailureError} With `UNSUPPORTED_BUCKET` or `BAD_REQUEST` when the pair or\n * filters are invalid.\n */\n async getCollateralFlowSeries(\n params: GetNuanzeCollateralFlowSeriesParams = {},\n ): Promise<GetNuanzeCollateralFlowSeriesResponse> {\n return mapNuanzeCollateralFlowSeriesResponse(\n await this.getJson<NuanzeServerCollateralFlowSeriesResponse>(\n '/flows/series',\n params,\n ),\n );\n }\n\n /**\n * Gets privacy-preserving aggregate positioning for an active perpetual identified by\n * {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`; when both are given,\n * `productId` is used for the path segment and `ticker` is ignored. Cross and isolated legs\n * are summed within owner/subaccount/product before direction classification. Every cell\n * requires at least 20 distinct contributing owners. No identity, individual position, entry\n * price, PnL, margin, or leverage fields are returned.\n *\n * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid input,\n * and `MARKET_NOT_FOUND` when the selector does not resolve to a perp.\n */\n async getMarketPositioning(\n params: GetNuanzeMarketPositioningParams,\n ): Promise<GetNuanzeMarketPositioningResponse> {\n return mapNuanzeMarketPositioningResponse(\n await this.getMarketJson<NuanzeServerMarketPositioningResponse>(\n params,\n '/positioning',\n ),\n );\n }\n\n /**\n * Lists open perpetual position legs for a market identified by {@link NuanzeMarketSelector}.\n * Supply at least `ticker` or `productId`; when both are given, `productId` is used for the\n * path segment and `ticker` is ignored. Results default to absolute notional descending and\n * can be ordered by signed unrealized PnL or absolute base amount in either direction. Spot\n * markets are not supported. Legs below $10 absolute notional are excluded. Wallet addresses,\n * nullable synced usernames and display names, and signed exact base amounts are returned.\n *\n * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,\n * `CURSOR_FILTER_MISMATCH`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the\n * selector does not resolve to a perp.\n */\n async getMarketPositions(\n params: GetNuanzeMarketPositionsParams,\n ): Promise<GetNuanzeMarketPositionsResponse> {\n return mapNuanzeMarketPositionsResponse(\n await this.getMarketJson<NuanzeServerMarketPositionsResponse>(\n params,\n '/positions',\n ),\n );\n }\n\n /**\n * Lists current open perpetual position legs across every market by signed unrealized PnL.\n * Descending returns the largest gainers and ascending returns the largest losers. This is a\n * latest indexed snapshot with no timeframe. Legs below $10 absolute notional are excluded.\n * Private subaccounts are excluded unless `includePrivate=true`. Each row includes market\n * identity, nullable synced username and display name, and its source snapshot timestamp.\n *\n * @throws {NuanzeServerFailureError} With `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, or\n * `BAD_REQUEST` when the query or cursor is invalid.\n */\n async getOpenPositions(\n params: GetNuanzeOpenPositionsParams = {},\n ): Promise<GetNuanzeOpenPositionsResponse> {\n return mapNuanzeOpenPositionsResponse(\n await this.getJson<NuanzeServerOpenPositionsResponse>(\n '/positions',\n params,\n ),\n );\n }\n\n /**\n * Performs a GET against `{baseUrl}{path}` and classifies the status before returning the body.\n */\n private async getJson<T>(path: string, params?: object): Promise<T> {\n return this.requestJson<T>(path, { params });\n }\n\n private async getMarketJson<T>(\n params: NuanzeMarketSelector & object,\n suffix = '',\n ): Promise<T> {\n const { productId, ticker, ...query } = params;\n const selector = productId ?? ticker;\n if (selector === undefined) {\n throw new Error('A market ticker or productId is required.');\n }\n return this.getJson<T>(\n `/markets/${encodeURIComponent(selector.toString())}${suffix}`,\n query,\n );\n }\n\n private async requestJson<T>(\n path: string,\n config: { params?: object } = {},\n ): Promise<T> {\n const response = await this.axiosInstance.request<T>({\n method: 'GET',\n url: `${this.opts.url}${path}`,\n ...config,\n });\n this.checkResponseStatus(response);\n return response.data;\n }\n\n /**\n * Validates the HTTP status before interpreting the body. Nuanze maps every domain failure onto a\n * non-2xx status carrying a failure envelope, so anything else is a transport-level error.\n */\n private checkResponseStatus(response: AxiosResponse<unknown>) {\n if (response.status >= 200 && response.status < 300) {\n return;\n }\n if (isNuanzeServerFailureResponse(response.data)) {\n throw new NuanzeServerFailureError(response.data, response.status);\n }\n throw new Error(\n `Unexpected response from Nuanze: ${response.status} ${response.statusText}. Data: ${JSON.stringify(response.data)}`,\n );\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_NuanzeClient = require("./NuanzeClient-uL24b7LV.cjs");
2
+ const require_NuanzeClient = require("./NuanzeClient-C707zWgg.cjs");
3
3
  require("./dataMappers.cjs");
4
4
  exports.NuanzeClient = require_NuanzeClient.NuanzeClient;
@@ -1,4 +1,4 @@
1
- import { A as GetNuanzePlatformSummaryResponse, B as GetNuanzeWalletSummaryResponse, C as GetNuanzeMarketsParams, D as GetNuanzeOpenPositionsParams, E as GetNuanzeNewsResponse, F as GetNuanzeWalletPnlSeriesParams, H as GetNuanzeWalletTradesResponse, I as GetNuanzeWalletPnlSeriesResponse, L as GetNuanzeWalletPositionsParams, M as GetNuanzeSubaccountLeaderboardResponse, N as GetNuanzeWalletPnlParams, O as GetNuanzeOpenPositionsResponse, P as GetNuanzeWalletPnlResponse, R as GetNuanzeWalletPositionsResponse, S as GetNuanzeMarketTradesResponse, T as GetNuanzeNewsParams, V as GetNuanzeWalletTradesParams, _ as GetNuanzeMarketPositioningParams, a as GetNuanzeCollateralFlowsParams, b as GetNuanzeMarketPositionsResponse, c as GetNuanzeFollowedLeaderboardResponse, d as GetNuanzeLeaderboardParams, f as GetNuanzeLeaderboardResponse, g as GetNuanzeMarketCandlesResponse, h as GetNuanzeMarketCandlesParams, i as GetNuanzeCollateralFlowSummaryResponse, j as GetNuanzeSubaccountLeaderboardParams, k as GetNuanzePlatformSummaryParams, l as GetNuanzeFundingRatesParams, m as GetNuanzeMarketByTickerResponse, n as GetNuanzeCollateralFlowSeriesResponse, o as GetNuanzeCollateralFlowsResponse, p as GetNuanzeMarketByTickerParams, r as GetNuanzeCollateralFlowSummaryParams, s as GetNuanzeFollowedLeaderboardParams, t as GetNuanzeCollateralFlowSeriesParams, u as GetNuanzeFundingRatesResponse, v as GetNuanzeMarketPositioningResponse, w as GetNuanzeMarketsResponse, x as GetNuanzeMarketTradesParams, y as GetNuanzeMarketPositionsParams, z as GetNuanzeWalletSummaryParams } from "./clientTypes-BeCLgtYs.cjs";
1
+ import { A as GetNuanzePlatformSummaryResponse, B as GetNuanzeWalletSummaryResponse, C as GetNuanzeMarketsParams, D as GetNuanzeOpenPositionsParams, E as GetNuanzeNewsResponse, F as GetNuanzeWalletPnlSeriesParams, H as GetNuanzeWalletTradesResponse, I as GetNuanzeWalletPnlSeriesResponse, L as GetNuanzeWalletPositionsParams, M as GetNuanzeSubaccountLeaderboardResponse, N as GetNuanzeWalletPnlParams, O as GetNuanzeOpenPositionsResponse, P as GetNuanzeWalletPnlResponse, R as GetNuanzeWalletPositionsResponse, S as GetNuanzeMarketTradesResponse, T as GetNuanzeNewsParams, V as GetNuanzeWalletTradesParams, _ as GetNuanzeMarketPositioningParams, a as GetNuanzeCollateralFlowsParams, b as GetNuanzeMarketPositionsResponse, c as GetNuanzeFollowedLeaderboardResponse, d as GetNuanzeLeaderboardParams, f as GetNuanzeLeaderboardResponse, g as GetNuanzeMarketCandlesResponse, h as GetNuanzeMarketCandlesParams, i as GetNuanzeCollateralFlowSummaryResponse, j as GetNuanzeSubaccountLeaderboardParams, k as GetNuanzePlatformSummaryParams, l as GetNuanzeFundingRatesParams, m as GetNuanzeMarketByTickerResponse, n as GetNuanzeCollateralFlowSeriesResponse, o as GetNuanzeCollateralFlowsResponse, p as GetNuanzeMarketByTickerParams, r as GetNuanzeCollateralFlowSummaryParams, s as GetNuanzeFollowedLeaderboardParams, t as GetNuanzeCollateralFlowSeriesParams, u as GetNuanzeFundingRatesResponse, v as GetNuanzeMarketPositioningResponse, w as GetNuanzeMarketsResponse, x as GetNuanzeMarketTradesParams, y as GetNuanzeMarketPositionsParams, z as GetNuanzeWalletSummaryParams } from "./clientTypes-BAfxfhmA.cjs";
2
2
  import { AxiosInstance } from "axios";
3
3
 
4
4
  //#region src/NuanzeClient.d.ts
@@ -43,13 +43,14 @@ declare class NuanzeClient {
43
43
  */
44
44
  getMarkets(params?: GetNuanzeMarketsParams): Promise<GetNuanzeMarketsResponse>;
45
45
  /**
46
- * Resolves a market by ticker. Lookup is case-insensitive and accepts canonical tickers or
47
- * legacy source symbols. An explicit unavailable venue returns `MARKET_NOT_FOUND`. With no
48
- * venue, `strictVenue=true` returns `AMBIGUOUS_MARKET` for multi-venue assets; otherwise the
49
- * primary venue is used.
46
+ * Resolves a market by {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`;
47
+ * when both are given, `productId` is used for the path segment and `ticker` is ignored.
48
+ * Ticker lookup is case-insensitive and accepts canonical tickers or legacy source symbols.
49
+ * An explicit unavailable venue returns `MARKET_NOT_FOUND`. With no venue, `strictVenue=true`
50
+ * returns `AMBIGUOUS_MARKET` for multi-venue assets; otherwise the primary venue is used.
50
51
  *
51
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or
52
- * `BAD_REQUEST` on invalid selectors, and `MARKET_NOT_FOUND` when the ticker does not resolve.
52
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid
53
+ * selectors, and `MARKET_NOT_FOUND` when the selector does not resolve.
53
54
  */
54
55
  getMarketByTicker(params: GetNuanzeMarketByTickerParams): Promise<GetNuanzeMarketByTickerResponse>;
55
56
  /**
@@ -67,9 +68,10 @@ declare class NuanzeClient {
67
68
  */
68
69
  getLeaderboard(params?: GetNuanzeLeaderboardParams): Promise<GetNuanzeLeaderboardResponse>;
69
70
  /**
70
- * Gets the global public leaderboard of username-claimed subaccounts. Results are sorted by
71
- * equity-basis account PnL descending with nulls last. `globalRank` is independent of the active
72
- * privacy and trading filters. Pagination uses a filter-bound opaque cursor.
71
+ * Gets the global public leaderboard of subaccounts. Results are sorted by equity-basis account
72
+ * PnL descending with nulls last. Username and display name are null when unavailable.
73
+ * `globalRank` is independent of the active privacy and trading filters. Pagination uses a
74
+ * filter-bound opaque cursor.
73
75
  *
74
76
  * @throws {NuanzeServerFailureError} With `BAD_REQUEST`, `INVALID_CURSOR`, or
75
77
  * `CURSOR_FILTER_MISMATCH` when filters or the cursor are invalid.
@@ -109,23 +111,27 @@ declare class NuanzeClient {
109
111
  */
110
112
  getWalletPositions(params: GetNuanzeWalletPositionsParams): Promise<GetNuanzeWalletPositionsResponse>;
111
113
  /**
112
- * Lists market trades: one taker-side row per match, sorted by `matchedAt` then `id` descending.
113
- * The exclusive cursor is bound to operation and normalized filters. `from` is inclusive and
114
- * `to` exclusive. Wallet identity is absent.
114
+ * Lists market trades for a {@link NuanzeMarketSelector}: one taker-side row per match, sorted
115
+ * by `matchedAt` then `id` descending. Supply at least `ticker` or `productId`; when both are
116
+ * given, `productId` is used for the path segment and `ticker` is ignored. The exclusive cursor
117
+ * is bound to operation and normalized filters. `from` is inclusive and `to` exclusive. Wallet
118
+ * identity is absent.
115
119
  *
116
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`,
117
- * `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid
118
- * input, and `MARKET_NOT_FOUND` when the ticker does not resolve.
120
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,
121
+ * `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid input, and
122
+ * `MARKET_NOT_FOUND` when the selector does not resolve.
119
123
  */
120
124
  getMarketTrades(params: GetNuanzeMarketTradesParams): Promise<GetNuanzeMarketTradesResponse>;
121
125
  /**
122
- * Lists market candles. Source storage is 1h; 4h and 1d are UTC-aligned rollups and missing bars
123
- * are not interpolated. The newest `limit` matching bars are selected and returned
124
- * oldest-to-newest, at most 750, with no pagination. A current bucket has `complete=false`.
126
+ * Lists market candles for a {@link NuanzeMarketSelector}. Supply at least `ticker` or
127
+ * `productId`; when both are given, `productId` is used for the path segment and `ticker` is
128
+ * ignored. Source storage is 1h; 4h and 1d are UTC-aligned rollups and missing bars are not
129
+ * interpolated. The newest `limit` matching bars are selected and returned oldest-to-newest,
130
+ * at most 750, with no pagination. A current bucket has `complete=false`.
125
131
  *
126
132
  * @throws {NuanzeServerFailureError} With `UNSUPPORTED_INTERVAL`, `RANGE_TOO_LARGE`,
127
- * `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or `BAD_REQUEST` on invalid input, and
128
- * `MARKET_NOT_FOUND` when the ticker does not resolve.
133
+ * `AMBIGUOUS_MARKET`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the
134
+ * selector does not resolve.
129
135
  */
130
136
  getMarketCandles(params: GetNuanzeMarketCandlesParams): Promise<GetNuanzeMarketCandlesResponse>;
131
137
  /**
@@ -179,26 +185,28 @@ declare class NuanzeClient {
179
185
  */
180
186
  getCollateralFlowSeries(params?: GetNuanzeCollateralFlowSeriesParams): Promise<GetNuanzeCollateralFlowSeriesResponse>;
181
187
  /**
182
- * Gets privacy-preserving aggregate positioning for an active perpetual. Cross and isolated legs
183
- * are summed within owner/subaccount/product before direction classification. Every cell requires
184
- * at least 20 distinct contributing owners. No identity, individual position, entry price, PnL,
185
- * margin, or leverage fields are returned.
188
+ * Gets privacy-preserving aggregate positioning for an active perpetual identified by
189
+ * {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`; when both are given,
190
+ * `productId` is used for the path segment and `ticker` is ignored. Cross and isolated legs
191
+ * are summed within owner/subaccount/product before direction classification. Every cell
192
+ * requires at least 20 distinct contributing owners. No identity, individual position, entry
193
+ * price, PnL, margin, or leverage fields are returned.
186
194
  *
187
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or
188
- * `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the ticker does not resolve to a
189
- * perp.
195
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid input,
196
+ * and `MARKET_NOT_FOUND` when the selector does not resolve to a perp.
190
197
  */
191
198
  getMarketPositioning(params: GetNuanzeMarketPositioningParams): Promise<GetNuanzeMarketPositioningResponse>;
192
199
  /**
193
- * Lists open perpetual position legs for the resolved market. Results default to absolute
194
- * notional descending and can be ordered by signed unrealized PnL or absolute base amount in
195
- * either direction. Spot markets are not supported. Legs below $10 absolute notional are excluded.
196
- * Wallet addresses, nullable synced usernames and display names, and signed exact base amounts
197
- * are returned.
200
+ * Lists open perpetual position legs for a market identified by {@link NuanzeMarketSelector}.
201
+ * Supply at least `ticker` or `productId`; when both are given, `productId` is used for the
202
+ * path segment and `ticker` is ignored. Results default to absolute notional descending and
203
+ * can be ordered by signed unrealized PnL or absolute base amount in either direction. Spot
204
+ * markets are not supported. Legs below $10 absolute notional are excluded. Wallet addresses,
205
+ * nullable synced usernames and display names, and signed exact base amounts are returned.
198
206
  *
199
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`,
200
- * `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, or `BAD_REQUEST` on invalid input, and
201
- * `MARKET_NOT_FOUND` when the ticker does not resolve to a perp.
207
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,
208
+ * `CURSOR_FILTER_MISMATCH`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the
209
+ * selector does not resolve to a perp.
202
210
  */
203
211
  getMarketPositions(params: GetNuanzeMarketPositionsParams): Promise<GetNuanzeMarketPositionsResponse>;
204
212
  /**
@@ -206,7 +214,7 @@ declare class NuanzeClient {
206
214
  * Descending returns the largest gainers and ascending returns the largest losers. This is a
207
215
  * latest indexed snapshot with no timeframe. Legs below $10 absolute notional are excluded.
208
216
  * Private subaccounts are excluded unless `includePrivate=true`. Each row includes market
209
- * identity and its source snapshot timestamp.
217
+ * identity, nullable synced username and display name, and its source snapshot timestamp.
210
218
  *
211
219
  * @throws {NuanzeServerFailureError} With `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, or
212
220
  * `BAD_REQUEST` when the query or cursor is invalid.
@@ -216,6 +224,7 @@ declare class NuanzeClient {
216
224
  * Performs a GET against `{baseUrl}{path}` and classifies the status before returning the body.
217
225
  */
218
226
  private getJson;
227
+ private getMarketJson;
219
228
  private requestJson;
220
229
  /**
221
230
  * Validates the HTTP status before interpreting the body. Nuanze maps every domain failure onto a
@@ -1 +1 @@
1
- {"version":3,"file":"NuanzeClient.d.cts","names":[],"sources":["../src/src/NuanzeClient.ts"],"mappings":";;;;;;AAiGA;UAAiB,gBAAA;;;AAIZ;EAAH,GAAG;AAAA;;;;;;;;;;cAYQ,YAAA;EAAA,SACF,IAAA,EAAM,gBAAA;EAAA,SACN,aAAA,EAAe,aAAA;cAEZ,IAAA,EAAM,gBAAA;EAyER;;;;;;;;EApDJ,OAAA,CACJ,MAAA,GAAQ,mBAAA,GACP,OAAA,CAAQ,qBAAA;EAsGD;;;;;;;;EAxFJ,UAAA,CACJ,MAAA,GAAQ,sBAAA,GACP,OAAA,CAAQ,wBAAA;EAgJD;;;;;;;;;EAjIJ,iBAAA,CACJ,MAAA,EAAQ,6BAAA,GACP,OAAA,CAAQ,+BAAA;EA8LA;;;;;;EA9KL,eAAA,CACJ,MAAA,GAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAoNR;;;;;;EArMG,cAAA,CACJ,MAAA,GAAQ,0BAAA,GACP,OAAA,CAAQ,4BAAA;EAqPD;;;;;;;;EApOJ,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAoSD;;;;;EAtRJ,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EAjII;;;;;;;;EAkJT,sBAAA,CACJ,MAAA,EAAQ,kCAAA,GACP,OAAA,CAAQ,oCAAA;EA1HR;;;;;;;;EA2IG,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EA7GT;;;;;;;;EA+HI,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EA9FD;;;;;;;;;EAiHJ,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAhFD;;;;;;;;;EAmGJ,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EA/DD;;;;;;;;EAiFJ,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EA3CL;;;;;;;;EA6DA,YAAA,CACJ,MAAA,EAAQ,wBAAA,GACP,OAAA,CAAQ,0BAAA;EAxCA;;;;;;;;EA0DL,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EApBR;;;;;;;EAqCG,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EADD;;;;;;EAaJ,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAAR;;;;;;;EAgBG,uBAAA,CACJ,MAAA,GAAQ,mCAAA,GACP,OAAA,CAAQ,qCAAA;EAoBD;;;;;;;;;;EADJ,oBAAA,CACJ,MAAA,EAAQ,gCAAA,GACP,OAAA,CAAQ,kCAAA;EA4CT;;;;;;;AAkCyB;;;;EAzDrB,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;;;;;;;;;;;EAoBL,gBAAA,CACJ,MAAA,GAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;;;;UAYG,OAAA;EAAA,QAIA,WAAA;;;;;UAiBN,mBAAA;AAAA"}
1
+ {"version":3,"file":"NuanzeClient.d.cts","names":[],"sources":["../src/src/NuanzeClient.ts"],"mappings":";;;;;;AAkGA;UAAiB,gBAAA;;;AAIZ;EAAH,GAAG;AAAA;;;;;;;;;;cAYQ,YAAA;EAAA,SACF,IAAA,EAAM,gBAAA;EAAA,SACN,aAAA,EAAe,aAAA;cAEZ,IAAA,EAAM,gBAAA;EAsER;;;;;;;;EAjDJ,OAAA,CACJ,MAAA,GAAQ,mBAAA,GACP,OAAA,CAAQ,qBAAA;EAoGD;;;;;;;;EAtFJ,UAAA,CACJ,MAAA,GAAQ,sBAAA,GACP,OAAA,CAAQ,wBAAA;EA8ID;;;;;;;;;;EA9HJ,iBAAA,CACJ,MAAA,EAAQ,6BAAA,GACP,OAAA,CAAQ,+BAAA;EA6LR;;;;;;EAjLG,eAAA,CACJ,MAAA,GAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAyOD;;;;;;EA1NJ,cAAA,CACJ,MAAA,GAAQ,0BAAA,GACP,OAAA,CAAQ,4BAAA;EAyPA;;;;;;;;;EAvOL,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAuSR;;;;;EAzRG,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EA9Ha;;;;;;;;EA+IlB,sBAAA,CACJ,MAAA,EAAQ,kCAAA,GACP,OAAA,CAAQ,oCAAA;EA1GL;;;;;;;;EA2HA,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EAzGA;;;;;;;;EA2HL,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EA9FR;;;;;;;;;;;EAmHG,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAhEL;;;;;;;;;;;EAoFA,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EA9CT;;;;;;;;EA+DI,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EApBD;;;;;;;;EAsCJ,YAAA,CACJ,MAAA,EAAQ,wBAAA,GACP,OAAA,CAAQ,0BAAA;EAFL;;;;;;;;EAoBA,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EAAA;;;;;;;EAiBL,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EAaT;;;;;;EADI,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAkBA;;;;;;;EAFL,uBAAA,CACJ,MAAA,GAAQ,mCAAA,GACP,OAAA,CAAQ,qCAAA;EA4CT;;;;;;;;;;;EAxBI,oBAAA,CACJ,MAAA,EAAQ,gCAAA,GACP,OAAA,CAAQ,kCAAA;EA4FgB;AAAA;;;;;;;;;;;EAvErB,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;;;;;;;;;;;EAmBL,gBAAA,CACJ,MAAA,GAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;;;;UAYG,OAAA;EAAA,QAIA,aAAA;EAAA,QAeA,WAAA;;;;;UAiBN,mBAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- import { A as GetNuanzePlatformSummaryResponse, B as GetNuanzeWalletSummaryResponse, C as GetNuanzeMarketsParams, D as GetNuanzeOpenPositionsParams, E as GetNuanzeNewsResponse, F as GetNuanzeWalletPnlSeriesParams, H as GetNuanzeWalletTradesResponse, I as GetNuanzeWalletPnlSeriesResponse, L as GetNuanzeWalletPositionsParams, M as GetNuanzeSubaccountLeaderboardResponse, N as GetNuanzeWalletPnlParams, O as GetNuanzeOpenPositionsResponse, P as GetNuanzeWalletPnlResponse, R as GetNuanzeWalletPositionsResponse, S as GetNuanzeMarketTradesResponse, T as GetNuanzeNewsParams, V as GetNuanzeWalletTradesParams, _ as GetNuanzeMarketPositioningParams, a as GetNuanzeCollateralFlowsParams, b as GetNuanzeMarketPositionsResponse, c as GetNuanzeFollowedLeaderboardResponse, d as GetNuanzeLeaderboardParams, f as GetNuanzeLeaderboardResponse, g as GetNuanzeMarketCandlesResponse, h as GetNuanzeMarketCandlesParams, i as GetNuanzeCollateralFlowSummaryResponse, j as GetNuanzeSubaccountLeaderboardParams, k as GetNuanzePlatformSummaryParams, l as GetNuanzeFundingRatesParams, m as GetNuanzeMarketByTickerResponse, n as GetNuanzeCollateralFlowSeriesResponse, o as GetNuanzeCollateralFlowsResponse, p as GetNuanzeMarketByTickerParams, r as GetNuanzeCollateralFlowSummaryParams, s as GetNuanzeFollowedLeaderboardParams, t as GetNuanzeCollateralFlowSeriesParams, u as GetNuanzeFundingRatesResponse, v as GetNuanzeMarketPositioningResponse, w as GetNuanzeMarketsResponse, x as GetNuanzeMarketTradesParams, y as GetNuanzeMarketPositionsParams, z as GetNuanzeWalletSummaryParams } from "./clientTypes-DxWzvYkG.js";
1
+ import { A as GetNuanzePlatformSummaryResponse, B as GetNuanzeWalletSummaryResponse, C as GetNuanzeMarketsParams, D as GetNuanzeOpenPositionsParams, E as GetNuanzeNewsResponse, F as GetNuanzeWalletPnlSeriesParams, H as GetNuanzeWalletTradesResponse, I as GetNuanzeWalletPnlSeriesResponse, L as GetNuanzeWalletPositionsParams, M as GetNuanzeSubaccountLeaderboardResponse, N as GetNuanzeWalletPnlParams, O as GetNuanzeOpenPositionsResponse, P as GetNuanzeWalletPnlResponse, R as GetNuanzeWalletPositionsResponse, S as GetNuanzeMarketTradesResponse, T as GetNuanzeNewsParams, V as GetNuanzeWalletTradesParams, _ as GetNuanzeMarketPositioningParams, a as GetNuanzeCollateralFlowsParams, b as GetNuanzeMarketPositionsResponse, c as GetNuanzeFollowedLeaderboardResponse, d as GetNuanzeLeaderboardParams, f as GetNuanzeLeaderboardResponse, g as GetNuanzeMarketCandlesResponse, h as GetNuanzeMarketCandlesParams, i as GetNuanzeCollateralFlowSummaryResponse, j as GetNuanzeSubaccountLeaderboardParams, k as GetNuanzePlatformSummaryParams, l as GetNuanzeFundingRatesParams, m as GetNuanzeMarketByTickerResponse, n as GetNuanzeCollateralFlowSeriesResponse, o as GetNuanzeCollateralFlowsResponse, p as GetNuanzeMarketByTickerParams, r as GetNuanzeCollateralFlowSummaryParams, s as GetNuanzeFollowedLeaderboardParams, t as GetNuanzeCollateralFlowSeriesParams, u as GetNuanzeFundingRatesResponse, v as GetNuanzeMarketPositioningResponse, w as GetNuanzeMarketsResponse, x as GetNuanzeMarketTradesParams, y as GetNuanzeMarketPositionsParams, z as GetNuanzeWalletSummaryParams } from "./clientTypes-vIgldUM_.js";
2
2
  import { AxiosInstance } from "axios";
3
3
 
4
4
  //#region src/NuanzeClient.d.ts
@@ -43,13 +43,14 @@ declare class NuanzeClient {
43
43
  */
44
44
  getMarkets(params?: GetNuanzeMarketsParams): Promise<GetNuanzeMarketsResponse>;
45
45
  /**
46
- * Resolves a market by ticker. Lookup is case-insensitive and accepts canonical tickers or
47
- * legacy source symbols. An explicit unavailable venue returns `MARKET_NOT_FOUND`. With no
48
- * venue, `strictVenue=true` returns `AMBIGUOUS_MARKET` for multi-venue assets; otherwise the
49
- * primary venue is used.
46
+ * Resolves a market by {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`;
47
+ * when both are given, `productId` is used for the path segment and `ticker` is ignored.
48
+ * Ticker lookup is case-insensitive and accepts canonical tickers or legacy source symbols.
49
+ * An explicit unavailable venue returns `MARKET_NOT_FOUND`. With no venue, `strictVenue=true`
50
+ * returns `AMBIGUOUS_MARKET` for multi-venue assets; otherwise the primary venue is used.
50
51
  *
51
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or
52
- * `BAD_REQUEST` on invalid selectors, and `MARKET_NOT_FOUND` when the ticker does not resolve.
52
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid
53
+ * selectors, and `MARKET_NOT_FOUND` when the selector does not resolve.
53
54
  */
54
55
  getMarketByTicker(params: GetNuanzeMarketByTickerParams): Promise<GetNuanzeMarketByTickerResponse>;
55
56
  /**
@@ -67,9 +68,10 @@ declare class NuanzeClient {
67
68
  */
68
69
  getLeaderboard(params?: GetNuanzeLeaderboardParams): Promise<GetNuanzeLeaderboardResponse>;
69
70
  /**
70
- * Gets the global public leaderboard of username-claimed subaccounts. Results are sorted by
71
- * equity-basis account PnL descending with nulls last. `globalRank` is independent of the active
72
- * privacy and trading filters. Pagination uses a filter-bound opaque cursor.
71
+ * Gets the global public leaderboard of subaccounts. Results are sorted by equity-basis account
72
+ * PnL descending with nulls last. Username and display name are null when unavailable.
73
+ * `globalRank` is independent of the active privacy and trading filters. Pagination uses a
74
+ * filter-bound opaque cursor.
73
75
  *
74
76
  * @throws {NuanzeServerFailureError} With `BAD_REQUEST`, `INVALID_CURSOR`, or
75
77
  * `CURSOR_FILTER_MISMATCH` when filters or the cursor are invalid.
@@ -109,23 +111,27 @@ declare class NuanzeClient {
109
111
  */
110
112
  getWalletPositions(params: GetNuanzeWalletPositionsParams): Promise<GetNuanzeWalletPositionsResponse>;
111
113
  /**
112
- * Lists market trades: one taker-side row per match, sorted by `matchedAt` then `id` descending.
113
- * The exclusive cursor is bound to operation and normalized filters. `from` is inclusive and
114
- * `to` exclusive. Wallet identity is absent.
114
+ * Lists market trades for a {@link NuanzeMarketSelector}: one taker-side row per match, sorted
115
+ * by `matchedAt` then `id` descending. Supply at least `ticker` or `productId`; when both are
116
+ * given, `productId` is used for the path segment and `ticker` is ignored. The exclusive cursor
117
+ * is bound to operation and normalized filters. `from` is inclusive and `to` exclusive. Wallet
118
+ * identity is absent.
115
119
  *
116
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`,
117
- * `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid
118
- * input, and `MARKET_NOT_FOUND` when the ticker does not resolve.
120
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,
121
+ * `CURSOR_FILTER_MISMATCH`, `RANGE_TOO_LARGE`, or `BAD_REQUEST` on invalid input, and
122
+ * `MARKET_NOT_FOUND` when the selector does not resolve.
119
123
  */
120
124
  getMarketTrades(params: GetNuanzeMarketTradesParams): Promise<GetNuanzeMarketTradesResponse>;
121
125
  /**
122
- * Lists market candles. Source storage is 1h; 4h and 1d are UTC-aligned rollups and missing bars
123
- * are not interpolated. The newest `limit` matching bars are selected and returned
124
- * oldest-to-newest, at most 750, with no pagination. A current bucket has `complete=false`.
126
+ * Lists market candles for a {@link NuanzeMarketSelector}. Supply at least `ticker` or
127
+ * `productId`; when both are given, `productId` is used for the path segment and `ticker` is
128
+ * ignored. Source storage is 1h; 4h and 1d are UTC-aligned rollups and missing bars are not
129
+ * interpolated. The newest `limit` matching bars are selected and returned oldest-to-newest,
130
+ * at most 750, with no pagination. A current bucket has `complete=false`.
125
131
  *
126
132
  * @throws {NuanzeServerFailureError} With `UNSUPPORTED_INTERVAL`, `RANGE_TOO_LARGE`,
127
- * `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or `BAD_REQUEST` on invalid input, and
128
- * `MARKET_NOT_FOUND` when the ticker does not resolve.
133
+ * `AMBIGUOUS_MARKET`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the
134
+ * selector does not resolve.
129
135
  */
130
136
  getMarketCandles(params: GetNuanzeMarketCandlesParams): Promise<GetNuanzeMarketCandlesResponse>;
131
137
  /**
@@ -179,26 +185,28 @@ declare class NuanzeClient {
179
185
  */
180
186
  getCollateralFlowSeries(params?: GetNuanzeCollateralFlowSeriesParams): Promise<GetNuanzeCollateralFlowSeriesResponse>;
181
187
  /**
182
- * Gets privacy-preserving aggregate positioning for an active perpetual. Cross and isolated legs
183
- * are summed within owner/subaccount/product before direction classification. Every cell requires
184
- * at least 20 distinct contributing owners. No identity, individual position, entry price, PnL,
185
- * margin, or leverage fields are returned.
188
+ * Gets privacy-preserving aggregate positioning for an active perpetual identified by
189
+ * {@link NuanzeMarketSelector}. Supply at least `ticker` or `productId`; when both are given,
190
+ * `productId` is used for the path segment and `ticker` is ignored. Cross and isolated legs
191
+ * are summed within owner/subaccount/product before direction classification. Every cell
192
+ * requires at least 20 distinct contributing owners. No identity, individual position, entry
193
+ * price, PnL, margin, or leverage fields are returned.
186
194
  *
187
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`, or
188
- * `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the ticker does not resolve to a
189
- * perp.
195
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET` or `BAD_REQUEST` on invalid input,
196
+ * and `MARKET_NOT_FOUND` when the selector does not resolve to a perp.
190
197
  */
191
198
  getMarketPositioning(params: GetNuanzeMarketPositioningParams): Promise<GetNuanzeMarketPositioningResponse>;
192
199
  /**
193
- * Lists open perpetual position legs for the resolved market. Results default to absolute
194
- * notional descending and can be ordered by signed unrealized PnL or absolute base amount in
195
- * either direction. Spot markets are not supported. Legs below $10 absolute notional are excluded.
196
- * Wallet addresses, nullable synced usernames and display names, and signed exact base amounts
197
- * are returned.
200
+ * Lists open perpetual position legs for a market identified by {@link NuanzeMarketSelector}.
201
+ * Supply at least `ticker` or `productId`; when both are given, `productId` is used for the
202
+ * path segment and `ticker` is ignored. Results default to absolute notional descending and
203
+ * can be ordered by signed unrealized PnL or absolute base amount in either direction. Spot
204
+ * markets are not supported. Legs below $10 absolute notional are excluded. Wallet addresses,
205
+ * nullable synced usernames and display names, and signed exact base amounts are returned.
198
206
  *
199
- * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `MARKET_SELECTOR_MISMATCH`,
200
- * `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, or `BAD_REQUEST` on invalid input, and
201
- * `MARKET_NOT_FOUND` when the ticker does not resolve to a perp.
207
+ * @throws {NuanzeServerFailureError} With `AMBIGUOUS_MARKET`, `INVALID_CURSOR`,
208
+ * `CURSOR_FILTER_MISMATCH`, or `BAD_REQUEST` on invalid input, and `MARKET_NOT_FOUND` when the
209
+ * selector does not resolve to a perp.
202
210
  */
203
211
  getMarketPositions(params: GetNuanzeMarketPositionsParams): Promise<GetNuanzeMarketPositionsResponse>;
204
212
  /**
@@ -206,7 +214,7 @@ declare class NuanzeClient {
206
214
  * Descending returns the largest gainers and ascending returns the largest losers. This is a
207
215
  * latest indexed snapshot with no timeframe. Legs below $10 absolute notional are excluded.
208
216
  * Private subaccounts are excluded unless `includePrivate=true`. Each row includes market
209
- * identity and its source snapshot timestamp.
217
+ * identity, nullable synced username and display name, and its source snapshot timestamp.
210
218
  *
211
219
  * @throws {NuanzeServerFailureError} With `INVALID_CURSOR`, `CURSOR_FILTER_MISMATCH`, or
212
220
  * `BAD_REQUEST` when the query or cursor is invalid.
@@ -216,6 +224,7 @@ declare class NuanzeClient {
216
224
  * Performs a GET against `{baseUrl}{path}` and classifies the status before returning the body.
217
225
  */
218
226
  private getJson;
227
+ private getMarketJson;
219
228
  private requestJson;
220
229
  /**
221
230
  * Validates the HTTP status before interpreting the body. Nuanze maps every domain failure onto a
@@ -1 +1 @@
1
- {"version":3,"file":"NuanzeClient.d.ts","names":[],"sources":["../src/src/NuanzeClient.ts"],"mappings":";;;;;;AAiGA;UAAiB,gBAAA;;;AAIZ;EAAH,GAAG;AAAA;;;;;;;;;;cAYQ,YAAA;EAAA,SACF,IAAA,EAAM,gBAAA;EAAA,SACN,aAAA,EAAe,aAAA;cAEZ,IAAA,EAAM,gBAAA;EAyER;;;;;;;;EApDJ,OAAA,CACJ,MAAA,GAAQ,mBAAA,GACP,OAAA,CAAQ,qBAAA;EAsGD;;;;;;;;EAxFJ,UAAA,CACJ,MAAA,GAAQ,sBAAA,GACP,OAAA,CAAQ,wBAAA;EAgJD;;;;;;;;;EAjIJ,iBAAA,CACJ,MAAA,EAAQ,6BAAA,GACP,OAAA,CAAQ,+BAAA;EA8LA;;;;;;EA9KL,eAAA,CACJ,MAAA,GAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAoNR;;;;;;EArMG,cAAA,CACJ,MAAA,GAAQ,0BAAA,GACP,OAAA,CAAQ,4BAAA;EAqPD;;;;;;;;EApOJ,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAoSD;;;;;EAtRJ,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EAjII;;;;;;;;EAkJT,sBAAA,CACJ,MAAA,EAAQ,kCAAA,GACP,OAAA,CAAQ,oCAAA;EA1HR;;;;;;;;EA2IG,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EA7GT;;;;;;;;EA+HI,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EA9FD;;;;;;;;;EAiHJ,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAhFD;;;;;;;;;EAmGJ,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EA/DD;;;;;;;;EAiFJ,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EA3CL;;;;;;;;EA6DA,YAAA,CACJ,MAAA,EAAQ,wBAAA,GACP,OAAA,CAAQ,0BAAA;EAxCA;;;;;;;;EA0DL,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EApBR;;;;;;;EAqCG,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EADD;;;;;;EAaJ,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAAR;;;;;;;EAgBG,uBAAA,CACJ,MAAA,GAAQ,mCAAA,GACP,OAAA,CAAQ,qCAAA;EAoBD;;;;;;;;;;EADJ,oBAAA,CACJ,MAAA,EAAQ,gCAAA,GACP,OAAA,CAAQ,kCAAA;EA4CT;;;;;;;AAkCyB;;;;EAzDrB,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;;;;;;;;;;;EAoBL,gBAAA,CACJ,MAAA,GAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;;;;UAYG,OAAA;EAAA,QAIA,WAAA;;;;;UAiBN,mBAAA;AAAA"}
1
+ {"version":3,"file":"NuanzeClient.d.ts","names":[],"sources":["../src/src/NuanzeClient.ts"],"mappings":";;;;;;AAkGA;UAAiB,gBAAA;;;AAIZ;EAAH,GAAG;AAAA;;;;;;;;;;cAYQ,YAAA;EAAA,SACF,IAAA,EAAM,gBAAA;EAAA,SACN,aAAA,EAAe,aAAA;cAEZ,IAAA,EAAM,gBAAA;EAsER;;;;;;;;EAjDJ,OAAA,CACJ,MAAA,GAAQ,mBAAA,GACP,OAAA,CAAQ,qBAAA;EAoGD;;;;;;;;EAtFJ,UAAA,CACJ,MAAA,GAAQ,sBAAA,GACP,OAAA,CAAQ,wBAAA;EA8ID;;;;;;;;;;EA9HJ,iBAAA,CACJ,MAAA,EAAQ,6BAAA,GACP,OAAA,CAAQ,+BAAA;EA6LR;;;;;;EAjLG,eAAA,CACJ,MAAA,GAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAyOD;;;;;;EA1NJ,cAAA,CACJ,MAAA,GAAQ,0BAAA,GACP,OAAA,CAAQ,4BAAA;EAyPA;;;;;;;;;EAvOL,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAuSR;;;;;EAzRG,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EA9Ha;;;;;;;;EA+IlB,sBAAA,CACJ,MAAA,EAAQ,kCAAA,GACP,OAAA,CAAQ,oCAAA;EA1GL;;;;;;;;EA2HA,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EAzGA;;;;;;;;EA2HL,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EA9FR;;;;;;;;;;;EAmHG,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EAhEL;;;;;;;;;;;EAoFA,gBAAA,CACJ,MAAA,EAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;EA9CT;;;;;;;;EA+DI,eAAA,CACJ,MAAA,EAAQ,2BAAA,GACP,OAAA,CAAQ,6BAAA;EApBD;;;;;;;;EAsCJ,YAAA,CACJ,MAAA,EAAQ,wBAAA,GACP,OAAA,CAAQ,0BAAA;EAFL;;;;;;;;EAoBA,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EAAA;;;;;;;EAiBL,kBAAA,CACJ,MAAA,GAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;EAaT;;;;;;EADI,wBAAA,CACJ,MAAA,GAAQ,oCAAA,GACP,OAAA,CAAQ,sCAAA;EAkBA;;;;;;;EAFL,uBAAA,CACJ,MAAA,GAAQ,mCAAA,GACP,OAAA,CAAQ,qCAAA;EA4CT;;;;;;;;;;;EAxBI,oBAAA,CACJ,MAAA,EAAQ,gCAAA,GACP,OAAA,CAAQ,kCAAA;EA4FgB;AAAA;;;;;;;;;;;EAvErB,kBAAA,CACJ,MAAA,EAAQ,8BAAA,GACP,OAAA,CAAQ,gCAAA;;;;;;;;;;;EAmBL,gBAAA,CACJ,MAAA,GAAQ,4BAAA,GACP,OAAA,CAAQ,8BAAA;;;;UAYG,OAAA;EAAA,QAIA,aAAA;EAAA,QAeA,WAAA;;;;;UAiBN,mBAAA;AAAA"}