@nadohq/mobile-client 0.53.0 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -4
- package/dist/{MobileClient-CEVEYnV1.cjs → MobileClient-BbTaqTzi.cjs} +141 -3
- package/dist/MobileClient-BbTaqTzi.cjs.map +1 -0
- package/dist/MobileClient.cjs +1 -1
- package/dist/MobileClient.d.cts +75 -8
- package/dist/MobileClient.d.cts.map +1 -1
- package/dist/MobileClient.d.ts +75 -8
- package/dist/MobileClient.d.ts.map +1 -1
- package/dist/MobileClient.js +141 -3
- package/dist/MobileClient.js.map +1 -1
- package/dist/{MobileServerFailureError-GsGrBgO0.d.ts → MobileServerFailureError-B2og8e5O.d.ts} +3 -3
- package/dist/{MobileServerFailureError-GsGrBgO0.d.ts.map → MobileServerFailureError-B2og8e5O.d.ts.map} +1 -1
- package/dist/{MobileServerFailureError-D4ina2b2.d.cts → MobileServerFailureError-BrLtaHnU.d.cts} +3 -3
- package/dist/{MobileServerFailureError-D4ina2b2.d.cts.map → MobileServerFailureError-BrLtaHnU.d.cts.map} +1 -1
- package/dist/{buildSignedMobileRequest-D9XzRTyq.d.cts → buildSignedMobileRequest-CZ-EdxYI.d.cts} +2 -2
- package/dist/{buildSignedMobileRequest-D9XzRTyq.d.cts.map → buildSignedMobileRequest-CZ-EdxYI.d.cts.map} +1 -1
- package/dist/{buildSignedMobileRequest-7Iwi5k6h.d.ts → buildSignedMobileRequest-CoAVSDPx.d.ts} +2 -2
- package/dist/{buildSignedMobileRequest-7Iwi5k6h.d.ts.map → buildSignedMobileRequest-CoAVSDPx.d.ts.map} +1 -1
- package/dist/{canonicalize-OYR35XMP.d.cts → canonicalize-0_B6UOxO.d.cts} +2 -2
- package/dist/canonicalize-0_B6UOxO.d.cts.map +1 -0
- package/dist/{canonicalize-T4ShepBu.d.ts → canonicalize-BC-JICjp.d.ts} +2 -2
- package/dist/canonicalize-BC-JICjp.d.ts.map +1 -0
- package/dist/clientTypes-P4LAjreY.d.ts +731 -0
- package/dist/clientTypes-P4LAjreY.d.ts.map +1 -0
- package/dist/clientTypes-YF5d8bvg.d.cts +731 -0
- package/dist/clientTypes-YF5d8bvg.d.cts.map +1 -0
- package/dist/dataMappers.cjs +358 -0
- package/dist/dataMappers.cjs.map +1 -1
- package/dist/dataMappers.d.cts +132 -6
- package/dist/dataMappers.d.cts.map +1 -1
- package/dist/dataMappers.d.ts +132 -6
- package/dist/dataMappers.d.ts.map +1 -1
- package/dist/dataMappers.js +339 -2
- package/dist/dataMappers.js.map +1 -1
- package/dist/{eip712MethodByType-D6edRSIs.d.ts → eip712MethodByType-DWtLyPY7.d.ts} +2 -2
- package/dist/eip712MethodByType-DWtLyPY7.d.ts.map +1 -0
- package/dist/{eip712MethodByType-BAqld4fP.d.cts → eip712MethodByType-sHQ-VTHd.d.cts} +2 -2
- package/dist/eip712MethodByType-sHQ-VTHd.d.cts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +15 -15
- package/dist/index.d.ts +15 -15
- package/dist/{mobileErrorCodes-CGYR3_Io.d.ts → mobileErrorCodes-DccrM4NI.d.cts} +8 -2
- package/dist/{mobileErrorCodes-CGYR3_Io.d.cts.map → mobileErrorCodes-DccrM4NI.d.cts.map} +1 -1
- package/dist/{mobileErrorCodes-CGYR3_Io.d.cts → mobileErrorCodes-DccrM4NI.d.ts} +8 -2
- package/dist/{mobileErrorCodes-CGYR3_Io.d.ts.map → mobileErrorCodes-DccrM4NI.d.ts.map} +1 -1
- package/dist/{payloadHash-B7Nmf64N.d.cts → payloadHash-CSgTglN4.d.cts} +2 -2
- package/dist/payloadHash-CSgTglN4.d.cts.map +1 -0
- package/dist/{payloadHash-RxkbwgTH.d.ts → payloadHash-qsU1DEF0.d.ts} +2 -2
- package/dist/payloadHash-qsU1DEF0.d.ts.map +1 -0
- package/dist/{serverBaseTypes-BOuAdmuQ.d.cts → serverBaseTypes-CuMsGXgc.d.cts} +2 -2
- package/dist/{serverBaseTypes-BOuAdmuQ.d.cts.map → serverBaseTypes-CuMsGXgc.d.cts.map} +1 -1
- package/dist/{serverBaseTypes-DDzfBA1a.d.ts → serverBaseTypes-DKCLDn3x.d.ts} +2 -2
- package/dist/{serverBaseTypes-DDzfBA1a.d.ts.map → serverBaseTypes-DKCLDn3x.d.ts.map} +1 -1
- package/dist/{serverExecuteTypes-DrxK2r7m.d.ts → serverExecuteTypes-DKG1mqy1.d.ts} +3 -3
- package/dist/{serverExecuteTypes-DrxK2r7m.d.ts.map → serverExecuteTypes-DKG1mqy1.d.ts.map} +1 -1
- package/dist/{serverExecuteTypes-DamHfu25.d.cts → serverExecuteTypes-TPX0GCgv.d.cts} +3 -3
- package/dist/{serverExecuteTypes-DamHfu25.d.cts.map → serverExecuteTypes-TPX0GCgv.d.cts.map} +1 -1
- package/dist/serverModelTypes-MlqdaMRd.d.cts +490 -0
- package/dist/serverModelTypes-MlqdaMRd.d.cts.map +1 -0
- package/dist/serverModelTypes-MlqdaMRd.d.ts +490 -0
- package/dist/serverModelTypes-MlqdaMRd.d.ts.map +1 -0
- package/dist/serverQueryTypes-BLUe10AI.d.ts +152 -0
- package/dist/serverQueryTypes-BLUe10AI.d.ts.map +1 -0
- package/dist/serverQueryTypes-BZOoJBpb.d.cts +152 -0
- package/dist/serverQueryTypes-BZOoJBpb.d.cts.map +1 -0
- package/dist/{serverRequestTypes-BylecTUn.d.cts → serverRequestTypes-BULjZnnz.d.ts} +69 -4
- package/dist/serverRequestTypes-BULjZnnz.d.ts.map +1 -0
- package/dist/{serverRequestTypes-DcdmGfTu.d.ts → serverRequestTypes-XbnLUsXT.d.cts} +69 -4
- package/dist/serverRequestTypes-XbnLUsXT.d.cts.map +1 -0
- package/dist/{serverResponseGuards-CjR1tv7G.d.cts → serverResponseGuards-DIj9MIrJ.d.cts} +2 -2
- package/dist/{serverResponseGuards-CjR1tv7G.d.cts.map → serverResponseGuards-DIj9MIrJ.d.cts.map} +1 -1
- package/dist/{serverResponseGuards-BspbRjOM.d.ts → serverResponseGuards-DY_8lAo7.d.ts} +2 -2
- package/dist/{serverResponseGuards-BspbRjOM.d.ts.map → serverResponseGuards-DY_8lAo7.d.ts.map} +1 -1
- package/dist/signing/buildSignedMobileRequest.d.cts +1 -1
- package/dist/signing/buildSignedMobileRequest.d.ts +1 -1
- package/dist/signing/canonicalize.d.cts +1 -1
- package/dist/signing/canonicalize.d.ts +1 -1
- package/dist/signing/eip712MethodByType.d.cts +1 -1
- package/dist/signing/eip712MethodByType.d.ts +1 -1
- package/dist/signing/index.d.cts +5 -5
- package/dist/signing/index.d.ts +5 -5
- package/dist/signing/payloadHash.d.cts +1 -1
- package/dist/signing/payloadHash.d.ts +1 -1
- package/dist/signing/types.d.cts +1 -1
- package/dist/signing/types.d.ts +1 -1
- package/dist/types/MobileServerFailureError.d.cts +1 -1
- package/dist/types/MobileServerFailureError.d.ts +1 -1
- package/dist/types/clientTypes.d.cts +2 -2
- package/dist/types/clientTypes.d.ts +2 -2
- package/dist/types/index.d.cts +9 -9
- package/dist/types/index.d.ts +9 -9
- package/dist/types/mobileErrorCodes.cjs +13 -1
- package/dist/types/mobileErrorCodes.cjs.map +1 -1
- package/dist/types/mobileErrorCodes.d.cts +1 -1
- package/dist/types/mobileErrorCodes.d.ts +1 -1
- package/dist/types/mobileErrorCodes.js +13 -1
- package/dist/types/mobileErrorCodes.js.map +1 -1
- package/dist/types/serverBaseTypes.d.cts +1 -1
- package/dist/types/serverBaseTypes.d.ts +1 -1
- package/dist/types/serverExecuteTypes.d.cts +1 -1
- package/dist/types/serverExecuteTypes.d.ts +1 -1
- package/dist/types/serverModelTypes.cjs.map +1 -1
- package/dist/types/serverModelTypes.d.cts +2 -2
- package/dist/types/serverModelTypes.d.ts +2 -2
- package/dist/types/serverModelTypes.js.map +1 -1
- package/dist/types/serverQueryTypes.d.cts +2 -2
- package/dist/types/serverQueryTypes.d.ts +2 -2
- package/dist/types/serverRequestTypes.d.cts +2 -2
- package/dist/types/serverRequestTypes.d.ts +2 -2
- package/dist/{types-BG321aOe.d.ts → types-B_4veFLc.d.ts} +3 -3
- package/dist/{types-BG321aOe.d.ts.map → types-B_4veFLc.d.ts.map} +1 -1
- package/dist/{types-D30luCKT.d.cts → types-CwpXP7xM.d.cts} +3 -3
- package/dist/{types-D30luCKT.d.cts.map → types-CwpXP7xM.d.cts.map} +1 -1
- package/dist/utils/index.d.cts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/serverResponseGuards.d.cts +1 -1
- package/dist/utils/serverResponseGuards.d.ts +1 -1
- package/package.json +3 -3
- package/src/MobileClient.ts +192 -2
- package/src/dataMappers.ts +503 -1
- package/src/socialFeed.test.ts +723 -0
- package/src/types/clientTypes.ts +467 -0
- package/src/types/mobileErrorCodes.ts +12 -0
- package/src/types/serverModelTypes.ts +388 -0
- package/src/types/serverQueryTypes.ts +74 -0
- package/src/types/serverRequestTypes.ts +94 -1
- package/dist/MobileClient-CEVEYnV1.cjs.map +0 -1
- package/dist/canonicalize-OYR35XMP.d.cts.map +0 -1
- package/dist/canonicalize-T4ShepBu.d.ts.map +0 -1
- package/dist/clientTypes-FQTkDfq3.d.cts +0 -349
- package/dist/clientTypes-FQTkDfq3.d.cts.map +0 -1
- package/dist/clientTypes-FaHdWkNu.d.ts +0 -349
- package/dist/clientTypes-FaHdWkNu.d.ts.map +0 -1
- package/dist/eip712MethodByType-BAqld4fP.d.cts.map +0 -1
- package/dist/eip712MethodByType-D6edRSIs.d.ts.map +0 -1
- package/dist/payloadHash-B7Nmf64N.d.cts.map +0 -1
- package/dist/payloadHash-RxkbwgTH.d.ts.map +0 -1
- package/dist/serverModelTypes-YmHqfxc8.d.cts +0 -173
- package/dist/serverModelTypes-YmHqfxc8.d.cts.map +0 -1
- package/dist/serverModelTypes-YmHqfxc8.d.ts +0 -173
- package/dist/serverModelTypes-YmHqfxc8.d.ts.map +0 -1
- package/dist/serverQueryTypes-C-_h9awN.d.ts +0 -89
- package/dist/serverQueryTypes-C-_h9awN.d.ts.map +0 -1
- package/dist/serverQueryTypes-CuVsrzGV.d.cts +0 -89
- package/dist/serverQueryTypes-CuVsrzGV.d.cts.map +0 -1
- package/dist/serverRequestTypes-BylecTUn.d.cts.map +0 -1
- package/dist/serverRequestTypes-DcdmGfTu.d.ts.map +0 -1
package/src/dataMappers.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { subaccountToHex } from '@nadohq/shared';
|
|
1
|
+
import { removeDecimals, subaccountToHex, toBigNumber } from '@nadohq/shared';
|
|
2
2
|
import {
|
|
3
3
|
GetMobileFollowListParams,
|
|
4
4
|
MobileFeedPage,
|
|
@@ -12,6 +12,27 @@ import {
|
|
|
12
12
|
MobileProfilesInclude,
|
|
13
13
|
MobilePublicProfile,
|
|
14
14
|
MobileRegisteredWallet,
|
|
15
|
+
MobileSocialFeedAuthor,
|
|
16
|
+
MobileSocialFeedInteraction,
|
|
17
|
+
MobileSocialFeedItem,
|
|
18
|
+
MobileSocialFeedItemBase,
|
|
19
|
+
MobileSocialFeedItemPatch,
|
|
20
|
+
MobileSocialFeedItemResponse,
|
|
21
|
+
MobileSocialFeedListParams,
|
|
22
|
+
MobileSocialFeedMarket,
|
|
23
|
+
MobileSocialFeedPage,
|
|
24
|
+
MobileSocialFeedPnl,
|
|
25
|
+
MobileSocialFeedPositionCard,
|
|
26
|
+
MobileSocialFeedPositionPatch,
|
|
27
|
+
MobileSocialFeedRankedPage,
|
|
28
|
+
MobileSocialFeedReadParams,
|
|
29
|
+
MobileSocialFeedReadSession,
|
|
30
|
+
MobileSocialFeedTopTradersPage,
|
|
31
|
+
MobileSocialFeedTradeCard,
|
|
32
|
+
MobileSocialFeedTradeRow,
|
|
33
|
+
MobileSocialFeedTradeRowBase,
|
|
34
|
+
MobileSocialFeedTraderBadge,
|
|
35
|
+
MobileSocialFeedUpdates,
|
|
15
36
|
} from './types/clientTypes';
|
|
16
37
|
import { MobileServerFollowMutationResponse } from './types/serverExecuteTypes';
|
|
17
38
|
import {
|
|
@@ -21,15 +42,36 @@ import {
|
|
|
21
42
|
MobileServerNotificationPreferenceScope,
|
|
22
43
|
MobileServerNotificationPreferences,
|
|
23
44
|
MobileServerProfile,
|
|
45
|
+
MobileServerSocialFeedAuthor,
|
|
46
|
+
MobileServerSocialFeedInteraction,
|
|
47
|
+
MobileServerSocialFeedItem,
|
|
48
|
+
MobileServerSocialFeedItemBase,
|
|
49
|
+
MobileServerSocialFeedItemPatch,
|
|
50
|
+
MobileServerSocialFeedMarket,
|
|
51
|
+
MobileServerSocialFeedPnl,
|
|
52
|
+
MobileServerSocialFeedPositionCard,
|
|
53
|
+
MobileServerSocialFeedPositionPatch,
|
|
54
|
+
MobileServerSocialFeedReadSession,
|
|
55
|
+
MobileServerSocialFeedTradeCard,
|
|
56
|
+
MobileServerSocialFeedTradeRow,
|
|
57
|
+
MobileServerSocialFeedTradeRowBase,
|
|
58
|
+
MobileServerSocialFeedTraderBadge,
|
|
24
59
|
} from './types/serverModelTypes';
|
|
25
60
|
import {
|
|
26
61
|
MobileServerFeedResponse,
|
|
27
62
|
MobileServerFollowListResponse,
|
|
28
63
|
MobileServerRegisteredWalletResponse,
|
|
64
|
+
MobileServerSocialFeedItemResponse,
|
|
65
|
+
MobileServerSocialFeedRankedResponse,
|
|
66
|
+
MobileServerSocialFeedResponse,
|
|
67
|
+
MobileServerSocialFeedTopTradersResponse,
|
|
68
|
+
MobileServerSocialFeedUpdatesResponse,
|
|
29
69
|
} from './types/serverQueryTypes';
|
|
30
70
|
import {
|
|
31
71
|
MobileServerFollowListRequest,
|
|
32
72
|
MobileServerProfilesInclude,
|
|
73
|
+
MobileServerSocialFeedListParams,
|
|
74
|
+
MobileServerSocialFeedReadParams,
|
|
33
75
|
} from './types/serverRequestTypes';
|
|
34
76
|
|
|
35
77
|
/**
|
|
@@ -236,3 +278,463 @@ export function mapMobileRegisteredWallet(
|
|
|
236
278
|
lastSeenAt: server.last_seen_at,
|
|
237
279
|
};
|
|
238
280
|
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Maps the official account PnL badge, retaining x18 amount units.
|
|
284
|
+
* @param server - The service response.
|
|
285
|
+
* @returns The mapped trader badge.
|
|
286
|
+
*/
|
|
287
|
+
export function mapMobileSocialFeedTraderBadge(
|
|
288
|
+
server: MobileServerSocialFeedTraderBadge,
|
|
289
|
+
): MobileSocialFeedTraderBadge {
|
|
290
|
+
return {
|
|
291
|
+
code: server.code,
|
|
292
|
+
pnl: toBigNumber(server.pnl_x18),
|
|
293
|
+
metricKey: server.metric_key,
|
|
294
|
+
window: server.window,
|
|
295
|
+
sourceAsOfMs: server.source_as_of_ms,
|
|
296
|
+
fetchedAtMs: server.fetched_at_ms,
|
|
297
|
+
snapshotId: server.snapshot_id,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Maps author identity, relationship state, and optional qualification badge.
|
|
303
|
+
* @param server - The service response.
|
|
304
|
+
* @returns The mapped feed author.
|
|
305
|
+
*/
|
|
306
|
+
export function mapMobileSocialFeedAuthor(
|
|
307
|
+
server: MobileServerSocialFeedAuthor,
|
|
308
|
+
): MobileSocialFeedAuthor {
|
|
309
|
+
return {
|
|
310
|
+
...mapMobileIdentitySummary(server),
|
|
311
|
+
isFollowing: server.is_following,
|
|
312
|
+
traderBadge:
|
|
313
|
+
server.trader_badge === null
|
|
314
|
+
? null
|
|
315
|
+
: mapMobileSocialFeedTraderBadge(server.trader_badge),
|
|
316
|
+
traderDataStatus: server.trader_data_status,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Maps social market metadata.
|
|
322
|
+
* @param server - The service response.
|
|
323
|
+
* @returns The mapped feed market.
|
|
324
|
+
*/
|
|
325
|
+
export function mapMobileSocialFeedMarket(
|
|
326
|
+
server: MobileServerSocialFeedMarket,
|
|
327
|
+
): MobileSocialFeedMarket {
|
|
328
|
+
return {
|
|
329
|
+
productId: server.product_id,
|
|
330
|
+
symbol: server.symbol,
|
|
331
|
+
logoUrl: server.logo_url,
|
|
332
|
+
category: server.category,
|
|
333
|
+
sourceCategories: server.source_categories,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Maps position PnL while retaining x18 amount units and availability.
|
|
339
|
+
* @param server - The service response.
|
|
340
|
+
* @returns The mapped feed pnl.
|
|
341
|
+
*/
|
|
342
|
+
export function mapMobileSocialFeedPnl(
|
|
343
|
+
server: MobileServerSocialFeedPnl,
|
|
344
|
+
): MobileSocialFeedPnl {
|
|
345
|
+
return {
|
|
346
|
+
amount: server.amount_x18 === null ? null : toBigNumber(server.amount_x18),
|
|
347
|
+
basis: server.basis,
|
|
348
|
+
mode: server.mode,
|
|
349
|
+
asOfMs: server.as_of_ms,
|
|
350
|
+
quality: server.quality,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Maps complete position facts, converting entry price to decimal units.
|
|
356
|
+
* @param server - The service response.
|
|
357
|
+
* @returns The mapped feed position patch.
|
|
358
|
+
*/
|
|
359
|
+
export function mapMobileSocialFeedPositionPatch(
|
|
360
|
+
server: MobileServerSocialFeedPositionPatch,
|
|
361
|
+
): MobileSocialFeedPositionPatch {
|
|
362
|
+
return {
|
|
363
|
+
positionId: server.position_id,
|
|
364
|
+
positionVersion: server.position_version,
|
|
365
|
+
stateAsOfMs: server.state_as_of_ms,
|
|
366
|
+
entryPrice: removeDecimals(server.entry_price_x18),
|
|
367
|
+
displayBasis: server.display_basis,
|
|
368
|
+
snapshotAtMs: server.snapshot_at_ms,
|
|
369
|
+
quantity: toBigNumber(server.quantity_x18),
|
|
370
|
+
notional: toBigNumber(server.notional_x18),
|
|
371
|
+
state: server.state,
|
|
372
|
+
historyQuality: server.history_quality,
|
|
373
|
+
marginMode: server.margin_mode,
|
|
374
|
+
leverage: server.leverage,
|
|
375
|
+
leverageAtMs: server.leverage_at_ms,
|
|
376
|
+
pnl: mapMobileSocialFeedPnl(server.pnl),
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Maps a position card with its current or frozen financial state.
|
|
382
|
+
* @param server - The service response.
|
|
383
|
+
* @returns The mapped feed position card.
|
|
384
|
+
*/
|
|
385
|
+
export function mapMobileSocialFeedPositionCard(
|
|
386
|
+
server: MobileServerSocialFeedPositionCard,
|
|
387
|
+
): MobileSocialFeedPositionCard {
|
|
388
|
+
return {
|
|
389
|
+
...mapMobileSocialFeedPositionPatch(server),
|
|
390
|
+
productId: server.product_id,
|
|
391
|
+
market: mapMobileSocialFeedMarket(server.market),
|
|
392
|
+
direction: server.direction,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Maps interaction counters without inventing unavailable relationship state.
|
|
398
|
+
* @param server - The service response.
|
|
399
|
+
* @returns The mapped feed interaction.
|
|
400
|
+
*/
|
|
401
|
+
export function mapMobileSocialFeedInteraction(
|
|
402
|
+
server: MobileServerSocialFeedInteraction,
|
|
403
|
+
): MobileSocialFeedInteraction {
|
|
404
|
+
return {
|
|
405
|
+
likeCount: server.like_count,
|
|
406
|
+
commentCount: server.comment_count,
|
|
407
|
+
viewCount: server.view_count,
|
|
408
|
+
likedByMe: server.liked_by_me,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Maps common item metadata and server capabilities.
|
|
414
|
+
* @param server - The service response.
|
|
415
|
+
* @returns The mapped social feed item base.
|
|
416
|
+
*/
|
|
417
|
+
export function mapMobileSocialFeedItemBase(
|
|
418
|
+
server: MobileServerSocialFeedItemBase,
|
|
419
|
+
): MobileSocialFeedItemBase {
|
|
420
|
+
return {
|
|
421
|
+
id: server.id,
|
|
422
|
+
hasAnalysis: server.has_analysis,
|
|
423
|
+
drawing: server.drawing,
|
|
424
|
+
author: mapMobileSocialFeedAuthor(server.author),
|
|
425
|
+
createdAtMs: server.created_at_ms,
|
|
426
|
+
displayAtMs: server.display_at_ms,
|
|
427
|
+
version: server.version,
|
|
428
|
+
market: mapMobileSocialFeedMarket(server.market),
|
|
429
|
+
capabilities: {
|
|
430
|
+
canLike: server.capabilities.can_like,
|
|
431
|
+
canComment: server.capabilities.can_comment,
|
|
432
|
+
canRecordView: server.capabilities.can_record_view,
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* Maps an automatic trade card and its position and interaction metadata.
|
|
439
|
+
* @param server - The service response.
|
|
440
|
+
* @returns The mapped social trade card.
|
|
441
|
+
*/
|
|
442
|
+
export function mapMobileSocialFeedTradeCard(
|
|
443
|
+
server: MobileServerSocialFeedTradeCard,
|
|
444
|
+
): MobileSocialFeedTradeCard {
|
|
445
|
+
return {
|
|
446
|
+
...mapMobileSocialFeedItemBase(server),
|
|
447
|
+
kind: server.kind,
|
|
448
|
+
action: server.action,
|
|
449
|
+
text: server.text,
|
|
450
|
+
mentions: server.mentions,
|
|
451
|
+
position: mapMobileSocialFeedPositionCard(server.position),
|
|
452
|
+
interaction: mapMobileSocialFeedInteraction(server.interaction),
|
|
453
|
+
commentPreview: {
|
|
454
|
+
items: server.comment_preview.items,
|
|
455
|
+
totalCount: server.comment_preview.total_count,
|
|
456
|
+
nextCursor: server.comment_preview.next_cursor,
|
|
457
|
+
},
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Maps historical trade facts with decimal execution prices and x18 quantities.
|
|
463
|
+
* @param server - The service response.
|
|
464
|
+
* @returns The mapped social trade row base.
|
|
465
|
+
*/
|
|
466
|
+
export function mapMobileSocialFeedTradeRowBase(
|
|
467
|
+
server: MobileServerSocialFeedTradeRowBase,
|
|
468
|
+
): MobileSocialFeedTradeRowBase {
|
|
469
|
+
return {
|
|
470
|
+
...mapMobileSocialFeedItemBase(server),
|
|
471
|
+
kind: server.kind,
|
|
472
|
+
positionId: server.position_id,
|
|
473
|
+
direction: server.direction,
|
|
474
|
+
marginMode: server.margin_mode,
|
|
475
|
+
leverage: server.leverage,
|
|
476
|
+
leverageAtMs: server.leverage_at_ms,
|
|
477
|
+
tradeCount: server.trade_count,
|
|
478
|
+
quantity: toBigNumber(server.quantity_x18),
|
|
479
|
+
averagePrice: removeDecimals(server.average_price_x18),
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Maps size changes and independently nullable liquidation facts.
|
|
485
|
+
* @param server - The service response.
|
|
486
|
+
* @returns The mapped social trade row.
|
|
487
|
+
*/
|
|
488
|
+
export function mapMobileSocialFeedTradeRow(
|
|
489
|
+
server: MobileServerSocialFeedTradeRow,
|
|
490
|
+
): MobileSocialFeedTradeRow {
|
|
491
|
+
const base = mapMobileSocialFeedTradeRowBase(server);
|
|
492
|
+
if (server.action === 'liquidated') {
|
|
493
|
+
return {
|
|
494
|
+
...base,
|
|
495
|
+
action: server.action,
|
|
496
|
+
notional:
|
|
497
|
+
server.notional_x18 === null ? null : toBigNumber(server.notional_x18),
|
|
498
|
+
entryPrice: removeDecimals(server.entry_price_x18),
|
|
499
|
+
liquidationOraclePrice: removeDecimals(
|
|
500
|
+
server.liquidation_oracle_price_x18,
|
|
501
|
+
),
|
|
502
|
+
liquidationExecutionPrice: removeDecimals(
|
|
503
|
+
server.liquidation_execution_price_x18,
|
|
504
|
+
),
|
|
505
|
+
realizedPnlDelta:
|
|
506
|
+
server.realized_pnl_delta_x18 === null
|
|
507
|
+
? null
|
|
508
|
+
: toBigNumber(server.realized_pnl_delta_x18),
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
return {
|
|
512
|
+
...base,
|
|
513
|
+
action: server.action,
|
|
514
|
+
notional: toBigNumber(server.notional_x18),
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Maps the item variant without mixing card and row fields.
|
|
520
|
+
* @param server - The service response.
|
|
521
|
+
* @returns The mapped social feed item.
|
|
522
|
+
*/
|
|
523
|
+
export function mapMobileSocialFeedItem(
|
|
524
|
+
server: MobileServerSocialFeedItem,
|
|
525
|
+
): MobileSocialFeedItem {
|
|
526
|
+
return server.kind === 'trade_card'
|
|
527
|
+
? mapMobileSocialFeedTradeCard(server)
|
|
528
|
+
: mapMobileSocialFeedTradeRow(server);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Maps a fixed reading session, preserving opaque credentials and cursors.
|
|
533
|
+
* @param server - The service response.
|
|
534
|
+
* @returns The mapped feed read session.
|
|
535
|
+
*/
|
|
536
|
+
export function mapMobileSocialFeedReadSession(
|
|
537
|
+
server: MobileServerSocialFeedReadSession,
|
|
538
|
+
): MobileSocialFeedReadSession {
|
|
539
|
+
return {
|
|
540
|
+
sessionId: server.session_id,
|
|
541
|
+
mode: server.mode,
|
|
542
|
+
expiresAtMs: server.expires_at_ms,
|
|
543
|
+
viewTracking: {
|
|
544
|
+
minVisibleRatio: server.view_tracking.min_visible_ratio,
|
|
545
|
+
minDurationMs: server.view_tracking.min_duration_ms,
|
|
546
|
+
},
|
|
547
|
+
updateCursor: server.update_cursor,
|
|
548
|
+
viewerToken: server.viewer_token,
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* Maps a fixed feed page without changing item order or pagination.
|
|
554
|
+
* @param server - The service response.
|
|
555
|
+
* @returns The mapped social feed page.
|
|
556
|
+
*/
|
|
557
|
+
export function mapMobileSocialFeedPage(
|
|
558
|
+
server: MobileServerSocialFeedResponse,
|
|
559
|
+
): MobileSocialFeedPage {
|
|
560
|
+
return {
|
|
561
|
+
readSession: mapMobileSocialFeedReadSession(server.read_session),
|
|
562
|
+
items: server.items.map(mapMobileSocialFeedItem),
|
|
563
|
+
nextCursor: server.next_cursor,
|
|
564
|
+
watermark: server.watermark,
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Maps a main feed page and its ranking version.
|
|
570
|
+
* @param server - The service response.
|
|
571
|
+
* @returns The mapped ranked feed page.
|
|
572
|
+
*/
|
|
573
|
+
export function mapMobileSocialFeedRankedPage(
|
|
574
|
+
server: MobileServerSocialFeedRankedResponse,
|
|
575
|
+
): MobileSocialFeedRankedPage {
|
|
576
|
+
return {
|
|
577
|
+
...mapMobileSocialFeedPage(server),
|
|
578
|
+
rankingVersion: server.ranking_version,
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
/**
|
|
583
|
+
* Maps qualified trader items and their shared eligibility snapshot.
|
|
584
|
+
* @param server - The service response.
|
|
585
|
+
* @returns The mapped top traders feed page.
|
|
586
|
+
*/
|
|
587
|
+
export function mapMobileSocialFeedTopTradersPage(
|
|
588
|
+
server: MobileServerSocialFeedTopTradersResponse,
|
|
589
|
+
): MobileSocialFeedTopTradersPage {
|
|
590
|
+
return {
|
|
591
|
+
...mapMobileSocialFeedRankedPage(server),
|
|
592
|
+
cohort: {
|
|
593
|
+
snapshotId: server.cohort.snapshot_id,
|
|
594
|
+
status: server.cohort.status,
|
|
595
|
+
coverage: {
|
|
596
|
+
scope: server.cohort.coverage.scope,
|
|
597
|
+
totalAuthors: server.cohort.coverage.total_authors,
|
|
598
|
+
queriedAuthors: server.cohort.coverage.queried_authors,
|
|
599
|
+
complete: server.cohort.coverage.complete,
|
|
600
|
+
},
|
|
601
|
+
},
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
* Maps item details and the authorized reading session.
|
|
607
|
+
* @param server - The service response.
|
|
608
|
+
* @returns The mapped social feed item response.
|
|
609
|
+
*/
|
|
610
|
+
export function mapMobileSocialFeedItemResponse(
|
|
611
|
+
server: MobileServerSocialFeedItemResponse,
|
|
612
|
+
): MobileSocialFeedItemResponse {
|
|
613
|
+
return {
|
|
614
|
+
item: mapMobileSocialFeedItem(server.item),
|
|
615
|
+
readSession: mapMobileSocialFeedReadSession(server.read_session),
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* Maps item deltas, preserving omitted fields and explicit null clears.
|
|
621
|
+
* @param server - The service response.
|
|
622
|
+
* @returns The mapped feed item patch.
|
|
623
|
+
*/
|
|
624
|
+
export function mapMobileSocialFeedItemPatch(
|
|
625
|
+
server: MobileServerSocialFeedItemPatch,
|
|
626
|
+
): MobileSocialFeedItemPatch {
|
|
627
|
+
return {
|
|
628
|
+
itemId: server.item_id,
|
|
629
|
+
version: server.version,
|
|
630
|
+
author: mapMobileSocialFeedAuthor(server.author),
|
|
631
|
+
displayAtMs: server.display_at_ms,
|
|
632
|
+
...(server.interaction === undefined
|
|
633
|
+
? {}
|
|
634
|
+
: { interaction: mapMobileSocialFeedInteraction(server.interaction) }),
|
|
635
|
+
...(server.trade_count === undefined
|
|
636
|
+
? {}
|
|
637
|
+
: { tradeCount: server.trade_count }),
|
|
638
|
+
...(server.quantity_x18 === undefined
|
|
639
|
+
? {}
|
|
640
|
+
: { quantity: toBigNumber(server.quantity_x18) }),
|
|
641
|
+
...(server.notional_x18 === undefined
|
|
642
|
+
? {}
|
|
643
|
+
: {
|
|
644
|
+
notional:
|
|
645
|
+
server.notional_x18 === null
|
|
646
|
+
? null
|
|
647
|
+
: toBigNumber(server.notional_x18),
|
|
648
|
+
}),
|
|
649
|
+
...(server.average_price_x18 === undefined
|
|
650
|
+
? {}
|
|
651
|
+
: {
|
|
652
|
+
averagePrice: removeDecimals(server.average_price_x18),
|
|
653
|
+
}),
|
|
654
|
+
...(server.entry_price_x18 === undefined
|
|
655
|
+
? {}
|
|
656
|
+
: {
|
|
657
|
+
entryPrice: removeDecimals(server.entry_price_x18),
|
|
658
|
+
}),
|
|
659
|
+
...(server.liquidation_oracle_price_x18 === undefined
|
|
660
|
+
? {}
|
|
661
|
+
: {
|
|
662
|
+
liquidationOraclePrice: removeDecimals(
|
|
663
|
+
server.liquidation_oracle_price_x18,
|
|
664
|
+
),
|
|
665
|
+
}),
|
|
666
|
+
...(server.liquidation_execution_price_x18 === undefined
|
|
667
|
+
? {}
|
|
668
|
+
: {
|
|
669
|
+
liquidationExecutionPrice: removeDecimals(
|
|
670
|
+
server.liquidation_execution_price_x18,
|
|
671
|
+
),
|
|
672
|
+
}),
|
|
673
|
+
...(server.realized_pnl_delta_x18 === undefined
|
|
674
|
+
? {}
|
|
675
|
+
: {
|
|
676
|
+
realizedPnlDelta:
|
|
677
|
+
server.realized_pnl_delta_x18 === null
|
|
678
|
+
? null
|
|
679
|
+
: toBigNumber(server.realized_pnl_delta_x18),
|
|
680
|
+
}),
|
|
681
|
+
...(server.leverage === undefined ? {} : { leverage: server.leverage }),
|
|
682
|
+
...(server.leverage_at_ms === undefined
|
|
683
|
+
? {}
|
|
684
|
+
: { leverageAtMs: server.leverage_at_ms }),
|
|
685
|
+
};
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* Maps viewport changes while preserving the sequence and update baseline.
|
|
690
|
+
* @param server - The service response.
|
|
691
|
+
* @returns The mapped feed updates.
|
|
692
|
+
*/
|
|
693
|
+
export function mapMobileSocialFeedUpdates(
|
|
694
|
+
server: MobileServerSocialFeedUpdatesResponse,
|
|
695
|
+
): MobileSocialFeedUpdates {
|
|
696
|
+
return {
|
|
697
|
+
itemPatches: server.item_patches.map(mapMobileSocialFeedItemPatch),
|
|
698
|
+
positionPatches: server.position_patches.map(
|
|
699
|
+
mapMobileSocialFeedPositionPatch,
|
|
700
|
+
),
|
|
701
|
+
unavailableTargets: server.unavailable_targets,
|
|
702
|
+
newItemsCount: server.new_items_count,
|
|
703
|
+
updateCursor: server.update_cursor,
|
|
704
|
+
reset: server.reset,
|
|
705
|
+
viewportRevision: server.viewport_revision,
|
|
706
|
+
requestSeq: server.request_seq,
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* Maps common list parameters to the public query wire format without inserting defaults.
|
|
712
|
+
* @param params - Client filters and session pagination.
|
|
713
|
+
* @returns Wire fields; undefined options are omitted when serialized to JSON.
|
|
714
|
+
*/
|
|
715
|
+
export function mapMobileSocialFeedListParamsToServer(
|
|
716
|
+
params: MobileSocialFeedListParams,
|
|
717
|
+
): MobileServerSocialFeedListParams {
|
|
718
|
+
return {
|
|
719
|
+
feed_types: params.feedTypes,
|
|
720
|
+
minimum_notional: params.minimumNotional,
|
|
721
|
+
limit: params.limit,
|
|
722
|
+
session_id: params.sessionId,
|
|
723
|
+
cursor: params.cursor,
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* Maps the public viewing account and browser credential without inferring an identity.
|
|
729
|
+
* @param params - Public relationship perspective and optional session credential.
|
|
730
|
+
* @returns Wire fields for a public feed read.
|
|
731
|
+
*/
|
|
732
|
+
export function mapMobileSocialFeedReadParamsToServer(
|
|
733
|
+
params: MobileSocialFeedReadParams,
|
|
734
|
+
): MobileServerSocialFeedReadParams {
|
|
735
|
+
return {
|
|
736
|
+
view_as:
|
|
737
|
+
params.viewAs === undefined ? undefined : subaccountToHex(params.viewAs),
|
|
738
|
+
viewer_token: params.viewerToken,
|
|
739
|
+
};
|
|
740
|
+
}
|