@nadohq/nuanze-client 0.41.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 (102) hide show
  1. package/README.md +72 -0
  2. package/dist/NuanzeClient-BUjoXpWV.cjs +327 -0
  3. package/dist/NuanzeClient-BUjoXpWV.cjs.map +1 -0
  4. package/dist/NuanzeClient.cjs +4 -0
  5. package/dist/NuanzeClient.d.cts +229 -0
  6. package/dist/NuanzeClient.d.cts.map +1 -0
  7. package/dist/NuanzeClient.d.ts +229 -0
  8. package/dist/NuanzeClient.d.ts.map +1 -0
  9. package/dist/NuanzeClient.js +293 -0
  10. package/dist/NuanzeClient.js.map +1 -0
  11. package/dist/NuanzeServerFailureError-B9EhXPyW.d.cts +29 -0
  12. package/dist/NuanzeServerFailureError-B9EhXPyW.d.cts.map +1 -0
  13. package/dist/NuanzeServerFailureError-DqWaKEMA.d.ts +29 -0
  14. package/dist/NuanzeServerFailureError-DqWaKEMA.d.ts.map +1 -0
  15. package/dist/clientModelTypes-A-D7ER-p.d.ts +932 -0
  16. package/dist/clientModelTypes-A-D7ER-p.d.ts.map +1 -0
  17. package/dist/clientModelTypes-BLPA-e3V.d.cts +932 -0
  18. package/dist/clientModelTypes-BLPA-e3V.d.cts.map +1 -0
  19. package/dist/clientTypes-DdpinbkS.d.ts +642 -0
  20. package/dist/clientTypes-DdpinbkS.d.ts.map +1 -0
  21. package/dist/clientTypes-Du2RLy4W.d.cts +642 -0
  22. package/dist/clientTypes-Du2RLy4W.d.cts.map +1 -0
  23. package/dist/dataMappers.cjs +688 -0
  24. package/dist/dataMappers.cjs.map +1 -0
  25. package/dist/dataMappers.d.cts +159 -0
  26. package/dist/dataMappers.d.cts.map +1 -0
  27. package/dist/dataMappers.d.ts +159 -0
  28. package/dist/dataMappers.d.ts.map +1 -0
  29. package/dist/dataMappers.js +650 -0
  30. package/dist/dataMappers.js.map +1 -0
  31. package/dist/endpoints.cjs +18 -0
  32. package/dist/endpoints.cjs.map +1 -0
  33. package/dist/endpoints.d.cts +14 -0
  34. package/dist/endpoints.d.cts.map +1 -0
  35. package/dist/endpoints.d.ts +14 -0
  36. package/dist/endpoints.d.ts.map +1 -0
  37. package/dist/endpoints.js +17 -0
  38. package/dist/endpoints.js.map +1 -0
  39. package/dist/index.cjs +79 -0
  40. package/dist/index.d.cts +10 -0
  41. package/dist/index.d.ts +10 -0
  42. package/dist/index.js +9 -0
  43. package/dist/nuanzeErrorCodes-CWCTWh2k.d.cts +14 -0
  44. package/dist/nuanzeErrorCodes-CWCTWh2k.d.cts.map +1 -0
  45. package/dist/nuanzeErrorCodes-Dh6juim0.d.ts +14 -0
  46. package/dist/nuanzeErrorCodes-Dh6juim0.d.ts.map +1 -0
  47. package/dist/serverModelTypes-D-vS_7uc.d.ts +377 -0
  48. package/dist/serverModelTypes-D-vS_7uc.d.ts.map +1 -0
  49. package/dist/serverModelTypes-DZDxdIzz.d.cts +377 -0
  50. package/dist/serverModelTypes-DZDxdIzz.d.cts.map +1 -0
  51. package/dist/serverQueryTypes-BBIFZZ36.d.cts +240 -0
  52. package/dist/serverQueryTypes-BBIFZZ36.d.cts.map +1 -0
  53. package/dist/serverQueryTypes-e7HWmE8t.d.ts +240 -0
  54. package/dist/serverQueryTypes-e7HWmE8t.d.ts.map +1 -0
  55. package/dist/types/NuanzeServerFailureError.cjs +21 -0
  56. package/dist/types/NuanzeServerFailureError.cjs.map +1 -0
  57. package/dist/types/NuanzeServerFailureError.d.cts +2 -0
  58. package/dist/types/NuanzeServerFailureError.d.ts +2 -0
  59. package/dist/types/NuanzeServerFailureError.js +20 -0
  60. package/dist/types/NuanzeServerFailureError.js.map +1 -0
  61. package/dist/types/clientModelTypes.cjs +236 -0
  62. package/dist/types/clientModelTypes.cjs.map +1 -0
  63. package/dist/types/clientModelTypes.d.cts +2 -0
  64. package/dist/types/clientModelTypes.d.ts +2 -0
  65. package/dist/types/clientModelTypes.js +208 -0
  66. package/dist/types/clientModelTypes.js.map +1 -0
  67. package/dist/types/clientTypes.cjs +0 -0
  68. package/dist/types/clientTypes.d.cts +2 -0
  69. package/dist/types/clientTypes.d.ts +2 -0
  70. package/dist/types/clientTypes.js +1 -0
  71. package/dist/types/index.cjs +36 -0
  72. package/dist/types/index.d.cts +7 -0
  73. package/dist/types/index.d.ts +7 -0
  74. package/dist/types/index.js +5 -0
  75. package/dist/types/nuanzeErrorCodes.cjs +32 -0
  76. package/dist/types/nuanzeErrorCodes.cjs.map +1 -0
  77. package/dist/types/nuanzeErrorCodes.d.cts +2 -0
  78. package/dist/types/nuanzeErrorCodes.d.ts +2 -0
  79. package/dist/types/nuanzeErrorCodes.js +31 -0
  80. package/dist/types/nuanzeErrorCodes.js.map +1 -0
  81. package/dist/types/serverModelTypes.cjs +0 -0
  82. package/dist/types/serverModelTypes.d.cts +2 -0
  83. package/dist/types/serverModelTypes.d.ts +2 -0
  84. package/dist/types/serverModelTypes.js +1 -0
  85. package/dist/types/serverQueryTypes.cjs +15 -0
  86. package/dist/types/serverQueryTypes.cjs.map +1 -0
  87. package/dist/types/serverQueryTypes.d.cts +2 -0
  88. package/dist/types/serverQueryTypes.d.ts +2 -0
  89. package/dist/types/serverQueryTypes.js +14 -0
  90. package/dist/types/serverQueryTypes.js.map +1 -0
  91. package/package.json +54 -0
  92. package/src/NuanzeClient.ts +556 -0
  93. package/src/dataMappers.ts +889 -0
  94. package/src/endpoints.ts +14 -0
  95. package/src/index.ts +4 -0
  96. package/src/types/NuanzeServerFailureError.ts +36 -0
  97. package/src/types/clientModelTypes.ts +1085 -0
  98. package/src/types/clientTypes.ts +719 -0
  99. package/src/types/index.ts +6 -0
  100. package/src/types/nuanzeErrorCodes.ts +31 -0
  101. package/src/types/serverModelTypes.ts +422 -0
  102. package/src/types/serverQueryTypes.ts +298 -0
@@ -0,0 +1,889 @@
1
+ import { toBigNumber } from '@nadohq/shared';
2
+ import BigNumber from 'bignumber.js';
3
+ import {
4
+ NuanzeCandle,
5
+ NuanzeCollateralFlow,
6
+ NuanzeCollateralFlowPoint,
7
+ NuanzeFollowedLeaderboardItem,
8
+ NuanzeFundamentalsKeyData,
9
+ NuanzeFundamentalsPerformance,
10
+ NuanzeFundamentalsValuation,
11
+ NuanzeFundingObservation,
12
+ NuanzeFundingRate,
13
+ NuanzeLatestTicker,
14
+ NuanzeLeaderboardItem,
15
+ NuanzeMarket,
16
+ NuanzeMarketDetail,
17
+ NuanzeMarketPosition,
18
+ NuanzeMarketPositioningBase,
19
+ NuanzeMarketTrade,
20
+ NuanzeOpenPosition,
21
+ NuanzePlatformDeltas,
22
+ NuanzePositioningCellBase,
23
+ NuanzePositioningTotals,
24
+ NuanzeSeriesPoint,
25
+ NuanzeStockFundamentals,
26
+ NuanzeWalletPosition,
27
+ NuanzeWalletTrade,
28
+ } from './types/clientModelTypes';
29
+ import {
30
+ GetNuanzeCollateralFlowSeriesResponse,
31
+ GetNuanzeCollateralFlowSummaryResponse,
32
+ GetNuanzeCollateralFlowsResponse,
33
+ GetNuanzeFollowedLeaderboardResponse,
34
+ GetNuanzeFundingRatesResponse,
35
+ GetNuanzeLeaderboardResponse,
36
+ GetNuanzeMarketByTickerResponse,
37
+ GetNuanzeMarketCandlesResponse,
38
+ GetNuanzeMarketPositioningResponse,
39
+ GetNuanzeMarketPositionsResponse,
40
+ GetNuanzeMarketTradesResponse,
41
+ GetNuanzeMarketsResponse,
42
+ GetNuanzeNewsResponse,
43
+ GetNuanzeOpenPositionsResponse,
44
+ GetNuanzePlatformSummaryResponse,
45
+ GetNuanzeWalletPnlResponse,
46
+ GetNuanzeWalletPnlSeriesResponse,
47
+ GetNuanzeWalletPositionsResponse,
48
+ GetNuanzeWalletSummaryResponse,
49
+ GetNuanzeWalletTradesResponse,
50
+ } from './types/clientTypes';
51
+ import {
52
+ NuanzeServerCandle,
53
+ NuanzeServerCohortPositioningCell,
54
+ NuanzeServerCollateralFlow,
55
+ NuanzeServerCollateralFlowPoint,
56
+ NuanzeServerFollowedLeaderboardItem,
57
+ NuanzeServerFundamentalsKeyData,
58
+ NuanzeServerFundamentalsPerformance,
59
+ NuanzeServerFundamentalsValuation,
60
+ NuanzeServerFundingObservation,
61
+ NuanzeServerFundingRate,
62
+ NuanzeServerLatestTicker,
63
+ NuanzeServerLeaderboardItem,
64
+ NuanzeServerMarket,
65
+ NuanzeServerMarketDetail,
66
+ NuanzeServerMarketPosition,
67
+ NuanzeServerMarketPositioningBase,
68
+ NuanzeServerMarketPositioningResponse,
69
+ NuanzeServerMarketTrade,
70
+ NuanzeServerNotionalBucketPositioningCell,
71
+ NuanzeServerOpenPosition,
72
+ NuanzeServerPlatformDeltas,
73
+ NuanzeServerPositioningCellBase,
74
+ NuanzeServerPositioningTotals,
75
+ NuanzeServerSeriesPoint,
76
+ NuanzeServerSidePositioningCell,
77
+ NuanzeServerStockFundamentals,
78
+ NuanzeServerWalletPosition,
79
+ NuanzeServerWalletTrade,
80
+ } from './types/serverModelTypes';
81
+ import {
82
+ NuanzeServerCollateralFlowSeriesResponse,
83
+ NuanzeServerCollateralFlowSummaryResponse,
84
+ NuanzeServerCollateralFlowsResponse,
85
+ NuanzeServerFollowedLeaderboardResponse,
86
+ NuanzeServerFundingRatesResponse,
87
+ NuanzeServerLeaderboardResponse,
88
+ NuanzeServerMarketCandlesResponse,
89
+ NuanzeServerMarketPositionsResponse,
90
+ NuanzeServerMarketTradesResponse,
91
+ NuanzeServerMarketsResponse,
92
+ NuanzeServerNewsResponse,
93
+ NuanzeServerOpenPositionsResponse,
94
+ NuanzeServerPlatformSummaryResponse,
95
+ NuanzeServerWalletPnlResponse,
96
+ NuanzeServerWalletPnlSeriesResponse,
97
+ NuanzeServerWalletPositionsResponse,
98
+ NuanzeServerWalletSummaryResponse,
99
+ NuanzeServerWalletTradesResponse,
100
+ } from './types/serverQueryTypes';
101
+
102
+ function mapNuanzeDecimal(value: string | null): BigNumber | null {
103
+ return value === null ? null : toBigNumber(value);
104
+ }
105
+
106
+ /**
107
+ * Maps a server-side latest ticker to its client-side representation, converting decimal strings to
108
+ * `BigNumber`.
109
+ */
110
+ export function mapNuanzeLatestTicker(
111
+ server: NuanzeServerLatestTicker,
112
+ ): NuanzeLatestTicker {
113
+ return {
114
+ midPrice: mapNuanzeDecimal(server.midPrice),
115
+ bidPrice: mapNuanzeDecimal(server.bidPrice),
116
+ askPrice: mapNuanzeDecimal(server.askPrice),
117
+ volume24h: mapNuanzeDecimal(server.volume24h),
118
+ openInterest: mapNuanzeDecimal(server.openInterest),
119
+ priceChange24hPct: mapNuanzeDecimal(server.priceChange24hPct),
120
+ updatedAt: server.updatedAt,
121
+ };
122
+ }
123
+
124
+ /**
125
+ * Maps a server-side market to its client-side representation. Only the decimal fields change: IDs,
126
+ * enums, and timestamps keep their wire types.
127
+ */
128
+ export function mapNuanzeMarket(server: NuanzeServerMarket): NuanzeMarket {
129
+ return {
130
+ productId: server.productId,
131
+ symbol: server.symbol,
132
+ ticker: server.ticker,
133
+ venue: server.venue,
134
+ tradingStatus: server.tradingStatus,
135
+ priceIncrement: toBigNumber(server.priceIncrement),
136
+ sizeIncrement: toBigNumber(server.sizeIncrement),
137
+ minSize: toBigNumber(server.minSize),
138
+ latest:
139
+ server.latest === null ? null : mapNuanzeLatestTicker(server.latest),
140
+ skew: mapNuanzeDecimal(server.skew),
141
+ skewUpdatedAt: server.skewUpdatedAt,
142
+ updatedAt: server.updatedAt,
143
+ };
144
+ }
145
+
146
+ /**
147
+ * Maps a server-side `GET /markets` response to its client-side representation.
148
+ */
149
+ export function mapNuanzeMarketsResponse(
150
+ server: NuanzeServerMarketsResponse,
151
+ ): GetNuanzeMarketsResponse {
152
+ return {
153
+ markets: server.markets.map(mapNuanzeMarket),
154
+ count: server.count,
155
+ asOf: server.asOf,
156
+ };
157
+ }
158
+
159
+ /**
160
+ * Maps a server-side `GET /news` response. Stories have no decimal fields.
161
+ */
162
+ export function mapNuanzeNewsResponse(
163
+ server: NuanzeServerNewsResponse,
164
+ ): GetNuanzeNewsResponse {
165
+ return {
166
+ stories: server.stories,
167
+ nextCursor: server.nextCursor,
168
+ asOf: server.asOf,
169
+ };
170
+ }
171
+
172
+ /**
173
+ * Maps a server-side funding observation to `BigNumber` rates.
174
+ */
175
+ export function mapNuanzeFundingObservation(
176
+ server: NuanzeServerFundingObservation,
177
+ ): NuanzeFundingObservation {
178
+ return {
179
+ rate: toBigNumber(server.rate),
180
+ annualizedRate: toBigNumber(server.annualizedRate),
181
+ observedAt: server.observedAt,
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Maps a server-side funding rate row.
187
+ */
188
+ export function mapNuanzeFundingRate(
189
+ server: NuanzeServerFundingRate,
190
+ ): NuanzeFundingRate {
191
+ return {
192
+ productId: server.productId,
193
+ symbol: server.symbol,
194
+ ticker: server.ticker,
195
+ venue: server.venue,
196
+ ...mapNuanzeFundingObservation(server),
197
+ };
198
+ }
199
+
200
+ /**
201
+ * Maps a server-side `GET /funding/rates` response.
202
+ */
203
+ export function mapNuanzeFundingRatesResponse(
204
+ server: NuanzeServerFundingRatesResponse,
205
+ ): GetNuanzeFundingRatesResponse {
206
+ return {
207
+ rates: server.rates.map(mapNuanzeFundingRate),
208
+ asOf: server.asOf,
209
+ };
210
+ }
211
+
212
+ function mapNuanzeFundamentalsKeyData(
213
+ server: NuanzeServerFundamentalsKeyData,
214
+ ): NuanzeFundamentalsKeyData {
215
+ return {
216
+ dividendYield: mapNuanzeDecimal(server.dividendYield),
217
+ employees: server.employees,
218
+ enterpriseValue: mapNuanzeDecimal(server.enterpriseValue),
219
+ sharesOutstanding: mapNuanzeDecimal(server.sharesOutstanding),
220
+ beta: mapNuanzeDecimal(server.beta),
221
+ fiftyTwoWeekHigh: mapNuanzeDecimal(server.fiftyTwoWeekHigh),
222
+ fiftyTwoWeekLow: mapNuanzeDecimal(server.fiftyTwoWeekLow),
223
+ volume: mapNuanzeDecimal(server.volume),
224
+ averageVolume: mapNuanzeDecimal(server.averageVolume),
225
+ circulatingSupply: mapNuanzeDecimal(server.circulatingSupply),
226
+ totalSupply: mapNuanzeDecimal(server.totalSupply),
227
+ maxSupply: mapNuanzeDecimal(server.maxSupply),
228
+ fullyDilutedValuation: mapNuanzeDecimal(server.fullyDilutedValuation),
229
+ ath: mapNuanzeDecimal(server.ath),
230
+ atl: mapNuanzeDecimal(server.atl),
231
+ high24h: mapNuanzeDecimal(server.high24h),
232
+ low24h: mapNuanzeDecimal(server.low24h),
233
+ };
234
+ }
235
+
236
+ function mapNuanzeFundamentalsValuation(
237
+ server: NuanzeServerFundamentalsValuation,
238
+ ): NuanzeFundamentalsValuation {
239
+ return {
240
+ trailingPE: mapNuanzeDecimal(server.trailingPE),
241
+ forwardPE: mapNuanzeDecimal(server.forwardPE),
242
+ priceToBook: mapNuanzeDecimal(server.priceToBook),
243
+ enterpriseToRevenue: mapNuanzeDecimal(server.enterpriseToRevenue),
244
+ enterpriseToEbitda: mapNuanzeDecimal(server.enterpriseToEbitda),
245
+ revenue: mapNuanzeDecimal(server.revenue),
246
+ profitMargins: mapNuanzeDecimal(server.profitMargins),
247
+ };
248
+ }
249
+
250
+ function mapNuanzeFundamentalsPerformance(
251
+ server: NuanzeServerFundamentalsPerformance,
252
+ ): NuanzeFundamentalsPerformance {
253
+ return {
254
+ oneMonth: mapNuanzeDecimal(server.oneMonth),
255
+ threeMonth: mapNuanzeDecimal(server.threeMonth),
256
+ ytd: mapNuanzeDecimal(server.ytd),
257
+ oneYear: mapNuanzeDecimal(server.oneYear),
258
+ };
259
+ }
260
+
261
+ /**
262
+ * Maps a server-side fundamentals projection. Employee counts stay integers.
263
+ */
264
+ export function mapNuanzeStockFundamentals(
265
+ server: NuanzeServerStockFundamentals,
266
+ ): NuanzeStockFundamentals {
267
+ return {
268
+ productId: server.productId,
269
+ source: server.source,
270
+ quoteType: server.quoteType,
271
+ currency: server.currency,
272
+ name: server.name,
273
+ description: server.description,
274
+ sector: server.sector,
275
+ industry: server.industry,
276
+ website: server.website,
277
+ employees: server.employees,
278
+ marketCap: mapNuanzeDecimal(server.marketCap),
279
+ keyData: mapNuanzeFundamentalsKeyData(server.keyData),
280
+ valuation: mapNuanzeFundamentalsValuation(server.valuation),
281
+ performance: mapNuanzeFundamentalsPerformance(server.performance),
282
+ social: server.social,
283
+ updatedAt: server.updatedAt,
284
+ };
285
+ }
286
+
287
+ /**
288
+ * Maps a server-side market detail to its client-side representation.
289
+ */
290
+ export function mapNuanzeMarketDetail(
291
+ server: NuanzeServerMarketDetail,
292
+ ): NuanzeMarketDetail {
293
+ return {
294
+ ...mapNuanzeMarket(server),
295
+ primaryProductId: server.primaryProductId,
296
+ availableVenues: server.availableVenues,
297
+ primaryVenue: server.primaryVenue,
298
+ funding:
299
+ server.funding === null
300
+ ? null
301
+ : mapNuanzeFundingObservation(server.funding),
302
+ fundamentals:
303
+ server.fundamentals === null
304
+ ? null
305
+ : mapNuanzeStockFundamentals(server.fundamentals),
306
+ news: server.news,
307
+ componentUpdatedAt: server.componentUpdatedAt,
308
+ };
309
+ }
310
+
311
+ /**
312
+ * Maps a server-side `GET /markets/{ticker}` response.
313
+ */
314
+ export function mapNuanzeMarketByTickerResponse(
315
+ server: NuanzeServerMarketDetail,
316
+ ): GetNuanzeMarketByTickerResponse {
317
+ return mapNuanzeMarketDetail(server);
318
+ }
319
+
320
+ /**
321
+ * Maps a server-side leaderboard row.
322
+ */
323
+ export function mapNuanzeLeaderboardItem(
324
+ server: NuanzeServerLeaderboardItem,
325
+ ): NuanzeLeaderboardItem {
326
+ return {
327
+ rank: server.rank,
328
+ rankDelta: server.rankDelta,
329
+ address: server.address,
330
+ accountPnl: toBigNumber(server.accountPnl),
331
+ pnl24h: mapNuanzeDecimal(server.pnl24h),
332
+ pnl7d: mapNuanzeDecimal(server.pnl7d),
333
+ pnl30d: mapNuanzeDecimal(server.pnl30d),
334
+ pnlAll: toBigNumber(server.pnlAll),
335
+ wins: server.wins,
336
+ losses: server.losses,
337
+ winRate: mapNuanzeDecimal(server.winRate),
338
+ };
339
+ }
340
+
341
+ /**
342
+ * Maps a server-side `GET /leaderboard` response.
343
+ */
344
+ export function mapNuanzeLeaderboardResponse(
345
+ server: NuanzeServerLeaderboardResponse,
346
+ ): GetNuanzeLeaderboardResponse {
347
+ return {
348
+ timeframe: server.timeframe,
349
+ items: server.items.map(mapNuanzeLeaderboardItem),
350
+ limit: server.limit,
351
+ offset: server.offset,
352
+ total: server.total,
353
+ asOf: server.asOf,
354
+ };
355
+ }
356
+
357
+ /**
358
+ * Maps a server-side followed-leaderboard row.
359
+ */
360
+ export function mapNuanzeFollowedLeaderboardItem(
361
+ server: NuanzeServerFollowedLeaderboardItem,
362
+ ): NuanzeFollowedLeaderboardItem {
363
+ return {
364
+ subaccountHex: server.subaccountHex,
365
+ pnl: mapNuanzeDecimal(server.pnl),
366
+ wins: server.wins,
367
+ losses: server.losses,
368
+ winRate: mapNuanzeDecimal(server.winRate),
369
+ trades: server.trades,
370
+ productIds: server.productIds,
371
+ productCount: server.productCount,
372
+ globalRank: server.globalRank,
373
+ };
374
+ }
375
+
376
+ /**
377
+ * Maps a server-side `POST /wallets/leaderboard` response.
378
+ */
379
+ export function mapNuanzeFollowedLeaderboardResponse(
380
+ server: NuanzeServerFollowedLeaderboardResponse,
381
+ ): GetNuanzeFollowedLeaderboardResponse {
382
+ return {
383
+ timeframe: server.timeframe,
384
+ items: server.items.map(mapNuanzeFollowedLeaderboardItem),
385
+ count: server.count,
386
+ asOf: server.asOf,
387
+ };
388
+ }
389
+
390
+ function mapNuanzePlatformDeltas(
391
+ server: NuanzeServerPlatformDeltas,
392
+ ): NuanzePlatformDeltas {
393
+ return {
394
+ volumePct: mapNuanzeDecimal(server.volumePct),
395
+ tradesPct: mapNuanzeDecimal(server.tradesPct),
396
+ tradersPct: mapNuanzeDecimal(server.tradersPct),
397
+ };
398
+ }
399
+
400
+ /**
401
+ * Maps a server-side `GET /platform/summary` response.
402
+ */
403
+ export function mapNuanzePlatformSummaryResponse(
404
+ server: NuanzeServerPlatformSummaryResponse,
405
+ ): GetNuanzePlatformSummaryResponse {
406
+ return {
407
+ window: server.window,
408
+ volume24h: toBigNumber(server.volume24h),
409
+ trades24h: server.trades24h,
410
+ traders24h: server.traders24h,
411
+ windowVolume: toBigNumber(server.windowVolume),
412
+ windowTrades: server.windowTrades,
413
+ windowTraders: server.windowTraders,
414
+ deltas: mapNuanzePlatformDeltas(server.deltas),
415
+ asOf: server.asOf,
416
+ };
417
+ }
418
+
419
+ /**
420
+ * Maps a server-side `GET /wallets/{address}` response.
421
+ */
422
+ export function mapNuanzeWalletSummaryResponse(
423
+ server: NuanzeServerWalletSummaryResponse,
424
+ ): GetNuanzeWalletSummaryResponse {
425
+ return {
426
+ address: server.address,
427
+ subaccountName: server.subaccountName,
428
+ subaccountCount: server.subaccountCount,
429
+ pnlWindow: server.pnlWindow,
430
+ accountPnl: toBigNumber(server.accountPnl),
431
+ windowPnl: toBigNumber(server.windowPnl),
432
+ equity: mapNuanzeDecimal(server.equity),
433
+ cumulativeVolume: toBigNumber(server.cumulativeVolume),
434
+ windowVolume: toBigNumber(server.windowVolume),
435
+ totalTrades: server.totalTrades,
436
+ wins: server.wins,
437
+ losses: server.losses,
438
+ winRate: mapNuanzeDecimal(server.winRate),
439
+ snapshotAt: server.snapshotAt,
440
+ coverage: server.coverage,
441
+ asOf: server.asOf,
442
+ };
443
+ }
444
+
445
+ /**
446
+ * Maps a server-side wallet position snapshot.
447
+ */
448
+ export function mapNuanzeWalletPosition(
449
+ server: NuanzeServerWalletPosition,
450
+ ): NuanzeWalletPosition {
451
+ return {
452
+ subaccountName: server.subaccountName,
453
+ productId: server.productId,
454
+ symbol: server.symbol,
455
+ ticker: server.ticker,
456
+ venue: server.venue,
457
+ side: server.side,
458
+ isSpot: server.isSpot,
459
+ amount: toBigNumber(server.amount),
460
+ oraclePrice: toBigNumber(server.oraclePrice),
461
+ notional: toBigNumber(server.notional),
462
+ unrealizedPnl: toBigNumber(server.unrealizedPnl),
463
+ snapshotAt: server.snapshotAt,
464
+ };
465
+ }
466
+
467
+ /**
468
+ * Maps a server-side `GET /wallets/{address}/positions` response.
469
+ */
470
+ export function mapNuanzeWalletPositionsResponse(
471
+ server: NuanzeServerWalletPositionsResponse,
472
+ ): GetNuanzeWalletPositionsResponse {
473
+ return {
474
+ address: server.address,
475
+ positions: server.positions.map(mapNuanzeWalletPosition),
476
+ count: server.count,
477
+ newestSnapshotAt: server.newestSnapshotAt,
478
+ oldestSnapshotAt: server.oldestSnapshotAt,
479
+ asOf: server.asOf,
480
+ };
481
+ }
482
+
483
+ /**
484
+ * Maps a server-side market tape row.
485
+ */
486
+ export function mapNuanzeMarketTrade(
487
+ server: NuanzeServerMarketTrade,
488
+ ): NuanzeMarketTrade {
489
+ return {
490
+ id: server.id,
491
+ productId: server.productId,
492
+ symbol: server.symbol,
493
+ ticker: server.ticker,
494
+ venue: server.venue,
495
+ side: server.side,
496
+ price: toBigNumber(server.price),
497
+ amount: toBigNumber(server.amount),
498
+ notional: toBigNumber(server.notional),
499
+ matchedAt: server.matchedAt,
500
+ };
501
+ }
502
+
503
+ /**
504
+ * Maps a server-side `GET /markets/{ticker}/trades` response.
505
+ */
506
+ export function mapNuanzeMarketTradesResponse(
507
+ server: NuanzeServerMarketTradesResponse,
508
+ ): GetNuanzeMarketTradesResponse {
509
+ return {
510
+ productId: server.productId,
511
+ symbol: server.symbol,
512
+ ticker: server.ticker,
513
+ venue: server.venue,
514
+ trades: server.trades.map(mapNuanzeMarketTrade),
515
+ nextCursor: server.nextCursor,
516
+ asOf: server.asOf,
517
+ };
518
+ }
519
+
520
+ /**
521
+ * Maps a server-side candle.
522
+ */
523
+ export function mapNuanzeCandle(server: NuanzeServerCandle): NuanzeCandle {
524
+ return {
525
+ openTime: server.openTime,
526
+ open: toBigNumber(server.open),
527
+ high: toBigNumber(server.high),
528
+ low: toBigNumber(server.low),
529
+ close: toBigNumber(server.close),
530
+ volume: toBigNumber(server.volume),
531
+ complete: server.complete,
532
+ };
533
+ }
534
+
535
+ /**
536
+ * Maps a server-side `GET /markets/{ticker}/candles` response.
537
+ */
538
+ export function mapNuanzeMarketCandlesResponse(
539
+ server: NuanzeServerMarketCandlesResponse,
540
+ ): GetNuanzeMarketCandlesResponse {
541
+ return {
542
+ productId: server.productId,
543
+ symbol: server.symbol,
544
+ ticker: server.ticker,
545
+ venue: server.venue,
546
+ interval: server.interval,
547
+ candles: server.candles.map(mapNuanzeCandle),
548
+ asOf: server.asOf,
549
+ };
550
+ }
551
+
552
+ /**
553
+ * Maps a server-side wallet trade.
554
+ */
555
+ export function mapNuanzeWalletTrade(
556
+ server: NuanzeServerWalletTrade,
557
+ ): NuanzeWalletTrade {
558
+ return {
559
+ id: server.id,
560
+ subaccountName: server.subaccountName,
561
+ productId: server.productId,
562
+ symbol: server.symbol,
563
+ ticker: server.ticker,
564
+ venue: server.venue,
565
+ side: server.side,
566
+ isMaker: server.isMaker,
567
+ price: toBigNumber(server.price),
568
+ amount: toBigNumber(server.amount),
569
+ notional: toBigNumber(server.notional),
570
+ matchedAt: server.matchedAt,
571
+ };
572
+ }
573
+
574
+ /**
575
+ * Maps a server-side `GET /wallets/{address}/trades` response.
576
+ */
577
+ export function mapNuanzeWalletTradesResponse(
578
+ server: NuanzeServerWalletTradesResponse,
579
+ ): GetNuanzeWalletTradesResponse {
580
+ return {
581
+ address: server.address,
582
+ trades: server.trades.map(mapNuanzeWalletTrade),
583
+ nextCursor: server.nextCursor,
584
+ asOf: server.asOf,
585
+ };
586
+ }
587
+
588
+ /**
589
+ * Maps a server-side `GET /wallets/{address}/pnl` response.
590
+ */
591
+ export function mapNuanzeWalletPnlResponse(
592
+ server: NuanzeServerWalletPnlResponse,
593
+ ): GetNuanzeWalletPnlResponse {
594
+ return {
595
+ address: server.address,
596
+ subaccountName: server.subaccountName,
597
+ window: server.window,
598
+ windowStart: server.windowStart,
599
+ windowEnd: server.windowEnd,
600
+ openingAccountPnl: toBigNumber(server.openingAccountPnl),
601
+ latestAccountPnl: toBigNumber(server.latestAccountPnl),
602
+ windowPnl: toBigNumber(server.windowPnl),
603
+ openingEquity: mapNuanzeDecimal(server.openingEquity),
604
+ latestEquity: mapNuanzeDecimal(server.latestEquity),
605
+ volumeDelta: toBigNumber(server.volumeDelta),
606
+ sourceInterval: server.sourceInterval,
607
+ latestSnapshotAt: server.latestSnapshotAt,
608
+ coverage: server.coverage,
609
+ asOf: server.asOf,
610
+ };
611
+ }
612
+
613
+ /**
614
+ * Maps a server-side series point.
615
+ */
616
+ export function mapNuanzeSeriesPoint(
617
+ server: NuanzeServerSeriesPoint,
618
+ ): NuanzeSeriesPoint {
619
+ return {
620
+ timestamp: server.timestamp,
621
+ value: mapNuanzeDecimal(server.value),
622
+ synthetic: server.synthetic,
623
+ provisional: server.provisional,
624
+ };
625
+ }
626
+
627
+ /**
628
+ * Maps a server-side `GET /wallets/{address}/pnl/series` response.
629
+ */
630
+ export function mapNuanzeWalletPnlSeriesResponse(
631
+ server: NuanzeServerWalletPnlSeriesResponse,
632
+ ): GetNuanzeWalletPnlSeriesResponse {
633
+ return {
634
+ address: server.address,
635
+ subaccountName: server.subaccountName,
636
+ metric: server.metric,
637
+ window: server.window,
638
+ points: server.points.map(mapNuanzeSeriesPoint),
639
+ sourceInterval: server.sourceInterval,
640
+ coverage: server.coverage,
641
+ asOf: server.asOf,
642
+ };
643
+ }
644
+
645
+ /**
646
+ * Maps a server-side collateral event.
647
+ */
648
+ export function mapNuanzeCollateralFlow(
649
+ server: NuanzeServerCollateralFlow,
650
+ ): NuanzeCollateralFlow {
651
+ return {
652
+ id: server.id,
653
+ eventType: server.eventType,
654
+ productId: server.productId,
655
+ symbol: server.symbol,
656
+ assetAmount: toBigNumber(server.assetAmount),
657
+ oraclePrice: mapNuanzeDecimal(server.oraclePrice),
658
+ usdValue: mapNuanzeDecimal(server.usdValue),
659
+ owner: server.owner,
660
+ subaccountName: server.subaccountName,
661
+ timestamp: server.timestamp,
662
+ tags: server.tags,
663
+ };
664
+ }
665
+
666
+ /**
667
+ * Maps a server-side `GET /flows` response.
668
+ */
669
+ export function mapNuanzeCollateralFlowsResponse(
670
+ server: NuanzeServerCollateralFlowsResponse,
671
+ ): GetNuanzeCollateralFlowsResponse {
672
+ return {
673
+ events: server.events.map(mapNuanzeCollateralFlow),
674
+ nextCursor: server.nextCursor,
675
+ asOf: server.asOf,
676
+ };
677
+ }
678
+
679
+ /**
680
+ * Maps a server-side `GET /flows/summary` response.
681
+ */
682
+ export function mapNuanzeCollateralFlowSummaryResponse(
683
+ server: NuanzeServerCollateralFlowSummaryResponse,
684
+ ): GetNuanzeCollateralFlowSummaryResponse {
685
+ return {
686
+ timeframe: server.timeframe,
687
+ deposited: toBigNumber(server.deposited),
688
+ withdrawn: toBigNumber(server.withdrawn),
689
+ net: toBigNumber(server.net),
690
+ gross: toBigNumber(server.gross),
691
+ depositCount: server.depositCount,
692
+ withdrawalCount: server.withdrawalCount,
693
+ valuedCount: server.valuedCount,
694
+ unvaluedCount: server.unvaluedCount,
695
+ priorNet: mapNuanzeDecimal(server.priorNet),
696
+ asOf: server.asOf,
697
+ };
698
+ }
699
+
700
+ /**
701
+ * Maps a server-side collateral flow series point.
702
+ */
703
+ export function mapNuanzeCollateralFlowPoint(
704
+ server: NuanzeServerCollateralFlowPoint,
705
+ ): NuanzeCollateralFlowPoint {
706
+ return {
707
+ timestamp: server.timestamp,
708
+ deposited: toBigNumber(server.deposited),
709
+ withdrawn: toBigNumber(server.withdrawn),
710
+ net: toBigNumber(server.net),
711
+ cumulativeNet: toBigNumber(server.cumulativeNet),
712
+ eventCount: server.eventCount,
713
+ valuedCount: server.valuedCount,
714
+ unvaluedCount: server.unvaluedCount,
715
+ };
716
+ }
717
+
718
+ /**
719
+ * Maps a server-side `GET /flows/series` response.
720
+ */
721
+ export function mapNuanzeCollateralFlowSeriesResponse(
722
+ server: NuanzeServerCollateralFlowSeriesResponse,
723
+ ): GetNuanzeCollateralFlowSeriesResponse {
724
+ return {
725
+ timeframe: server.timeframe,
726
+ bucket: server.bucket,
727
+ points: server.points.map(mapNuanzeCollateralFlowPoint),
728
+ asOf: server.asOf,
729
+ };
730
+ }
731
+
732
+ function mapNuanzePositioningTotals(
733
+ server: NuanzeServerPositioningTotals,
734
+ ): NuanzePositioningTotals {
735
+ return {
736
+ longPositions: server.longPositions,
737
+ shortPositions: server.shortPositions,
738
+ longOwners: server.longOwners,
739
+ shortOwners: server.shortOwners,
740
+ netFlatOwners: server.netFlatOwners,
741
+ longNotional: mapNuanzeDecimal(server.longNotional),
742
+ shortNotional: mapNuanzeDecimal(server.shortNotional),
743
+ longPositionPct: mapNuanzeDecimal(server.longPositionPct),
744
+ shortPositionPct: mapNuanzeDecimal(server.shortPositionPct),
745
+ longShortRatio: mapNuanzeDecimal(server.longShortRatio),
746
+ };
747
+ }
748
+
749
+ function mapNuanzePositioningCellBase(
750
+ server: NuanzeServerPositioningCellBase,
751
+ ): NuanzePositioningCellBase {
752
+ return {
753
+ label: server.label,
754
+ side: server.side,
755
+ suppressed: server.suppressed,
756
+ suppressionThreshold: server.suppressionThreshold,
757
+ positions: server.positions,
758
+ owners: server.owners,
759
+ notional: mapNuanzeDecimal(server.notional),
760
+ averageNotional: mapNuanzeDecimal(server.averageNotional),
761
+ percentage: mapNuanzeDecimal(server.percentage),
762
+ };
763
+ }
764
+
765
+ function mapNuanzeMarketPositioningBase(
766
+ server: NuanzeServerMarketPositioningBase,
767
+ ): NuanzeMarketPositioningBase {
768
+ return {
769
+ productId: server.productId,
770
+ symbol: server.symbol,
771
+ ticker: server.ticker,
772
+ venue: server.venue,
773
+ effectiveMinPositionUsd: server.effectiveMinPositionUsd,
774
+ suppressionThreshold: server.suppressionThreshold,
775
+ totals: mapNuanzePositioningTotals(server.totals),
776
+ newestSnapshotAt: server.newestSnapshotAt,
777
+ oldestSnapshotAt: server.oldestSnapshotAt,
778
+ asOf: server.asOf,
779
+ };
780
+ }
781
+
782
+ /**
783
+ * Maps a server-side `GET /markets/{ticker}/positioning` response.
784
+ */
785
+ export function mapNuanzeMarketPositioningResponse(
786
+ server: NuanzeServerMarketPositioningResponse,
787
+ ): GetNuanzeMarketPositioningResponse {
788
+ const base = mapNuanzeMarketPositioningBase(server);
789
+
790
+ if (server.groupBy === 'side') {
791
+ return {
792
+ ...base,
793
+ groupBy: 'side',
794
+ cells: server.cells.map((cell: NuanzeServerSidePositioningCell) => ({
795
+ ...mapNuanzePositioningCellBase(cell),
796
+ key: cell.key,
797
+ })),
798
+ };
799
+ }
800
+
801
+ if (server.groupBy === 'cohort') {
802
+ return {
803
+ ...base,
804
+ groupBy: 'cohort',
805
+ cells: server.cells.map((cell: NuanzeServerCohortPositioningCell) => ({
806
+ ...mapNuanzePositioningCellBase(cell),
807
+ key: cell.key,
808
+ })),
809
+ };
810
+ }
811
+
812
+ return {
813
+ ...base,
814
+ groupBy: 'notionalBucket',
815
+ cells: server.cells.map(
816
+ (cell: NuanzeServerNotionalBucketPositioningCell) => ({
817
+ ...mapNuanzePositioningCellBase(cell),
818
+ key: cell.key,
819
+ }),
820
+ ),
821
+ };
822
+ }
823
+
824
+ /**
825
+ * Maps a server-side market position leg.
826
+ */
827
+ export function mapNuanzeMarketPosition(
828
+ server: NuanzeServerMarketPosition,
829
+ ): NuanzeMarketPosition {
830
+ return {
831
+ subaccountOwner: server.subaccountOwner,
832
+ subaccountName: server.subaccountName,
833
+ symbol: server.symbol,
834
+ marginKind: server.marginKind,
835
+ side: server.side,
836
+ amount: toBigNumber(server.amount),
837
+ notional: toBigNumber(server.notional),
838
+ upnl: toBigNumber(server.upnl),
839
+ margin: mapNuanzeDecimal(server.margin),
840
+ entryPrice: mapNuanzeDecimal(server.entryPrice),
841
+ };
842
+ }
843
+
844
+ /**
845
+ * Maps a server-side `GET /markets/{ticker}/positions` response.
846
+ */
847
+ export function mapNuanzeMarketPositionsResponse(
848
+ server: NuanzeServerMarketPositionsResponse,
849
+ ): GetNuanzeMarketPositionsResponse {
850
+ return {
851
+ productId: server.productId,
852
+ symbol: server.symbol,
853
+ ticker: server.ticker,
854
+ venue: server.venue,
855
+ positions: server.positions.map(mapNuanzeMarketPosition),
856
+ nextCursor: server.nextCursor,
857
+ dataUpdatedAt: server.dataUpdatedAt,
858
+ asOf: server.asOf,
859
+ };
860
+ }
861
+
862
+ /**
863
+ * Maps one server-side globally ranked open position leg.
864
+ */
865
+ export function mapNuanzeOpenPosition(
866
+ server: NuanzeServerOpenPosition,
867
+ ): NuanzeOpenPosition {
868
+ return {
869
+ productId: server.productId,
870
+ ticker: server.ticker,
871
+ venue: server.venue,
872
+ snapshotAt: server.snapshotAt,
873
+ ...mapNuanzeMarketPosition(server),
874
+ };
875
+ }
876
+
877
+ /**
878
+ * Maps a server-side `GET /positions` response.
879
+ */
880
+ export function mapNuanzeOpenPositionsResponse(
881
+ server: NuanzeServerOpenPositionsResponse,
882
+ ): GetNuanzeOpenPositionsResponse {
883
+ return {
884
+ positions: server.positions.map(mapNuanzeOpenPosition),
885
+ nextCursor: server.nextCursor,
886
+ dataUpdatedAt: server.dataUpdatedAt,
887
+ asOf: server.asOf,
888
+ };
889
+ }