@nadohq/mobile-client 0.29.0 → 0.31.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 (208) hide show
  1. package/README.md +15 -8
  2. package/dist/{MobileClient-9JSAzblH.cjs → MobileClient-_i0ZV6Dq.cjs} +104 -44
  3. package/dist/MobileClient-_i0ZV6Dq.cjs.map +1 -0
  4. package/dist/MobileClient.cjs +1 -1
  5. package/dist/MobileClient.d.cts +77 -36
  6. package/dist/MobileClient.d.cts.map +1 -1
  7. package/dist/MobileClient.d.ts +77 -36
  8. package/dist/MobileClient.d.ts.map +1 -1
  9. package/dist/MobileClient.js +105 -45
  10. package/dist/MobileClient.js.map +1 -1
  11. package/dist/{MobileServerFailureError-ZggEcEda.d.cts → MobileServerFailureError-BoyAfEZA.d.cts} +3 -2
  12. package/dist/MobileServerFailureError-BoyAfEZA.d.cts.map +1 -0
  13. package/dist/{MobileServerFailureError-f9KhKnJj.d.ts → MobileServerFailureError-MgYVBh5p.d.ts} +3 -2
  14. package/dist/MobileServerFailureError-MgYVBh5p.d.ts.map +1 -0
  15. package/dist/{buildSignedMobileRequest-BsbBkU0K.d.cts → buildSignedMobileRequest-CBMt97aY.d.cts} +2 -2
  16. package/dist/{buildSignedMobileRequest-BsbBkU0K.d.cts.map → buildSignedMobileRequest-CBMt97aY.d.cts.map} +1 -1
  17. package/dist/{buildSignedMobileRequest-CDRsRNHm.d.ts → buildSignedMobileRequest-qEC4gWaI.d.ts} +2 -2
  18. package/dist/{buildSignedMobileRequest-CDRsRNHm.d.ts.map → buildSignedMobileRequest-qEC4gWaI.d.ts.map} +1 -1
  19. package/dist/{canonicalize-PX6dTIdF.d.ts → canonicalize-QNARV_Xc.d.cts} +4 -4
  20. package/dist/canonicalize-QNARV_Xc.d.cts.map +1 -0
  21. package/dist/{canonicalize-Dm7sXwPg.d.cts → canonicalize-wVdGejB1.d.ts} +4 -4
  22. package/dist/canonicalize-wVdGejB1.d.ts.map +1 -0
  23. package/dist/clientTypes-6utzUU-b.d.ts +240 -0
  24. package/dist/clientTypes-6utzUU-b.d.ts.map +1 -0
  25. package/dist/clientTypes-D9qgtNlE.d.cts +240 -0
  26. package/dist/clientTypes-D9qgtNlE.d.cts.map +1 -0
  27. package/dist/dataMappers.cjs +35 -1
  28. package/dist/dataMappers.cjs.map +1 -1
  29. package/dist/dataMappers.d.cts +8 -3
  30. package/dist/dataMappers.d.cts.map +1 -1
  31. package/dist/dataMappers.d.ts +8 -3
  32. package/dist/dataMappers.d.ts.map +1 -1
  33. package/dist/dataMappers.js +35 -2
  34. package/dist/dataMappers.js.map +1 -1
  35. package/dist/{eip712MethodByType-DLh9MRsD.d.cts → eip712MethodByType-CroIPqsJ.d.cts} +2 -2
  36. package/dist/eip712MethodByType-CroIPqsJ.d.cts.map +1 -0
  37. package/dist/{eip712MethodByType-DJgXal9r.d.ts → eip712MethodByType-DBUy4AdI.d.ts} +2 -2
  38. package/dist/eip712MethodByType-DBUy4AdI.d.ts.map +1 -0
  39. package/dist/feed-BF5k6Ryu.d.ts +14 -0
  40. package/dist/feed-BF5k6Ryu.d.ts.map +1 -0
  41. package/dist/feed-CBIwOhTO.d.cts +14 -0
  42. package/dist/feed-CBIwOhTO.d.cts.map +1 -0
  43. package/dist/index.cjs +8 -1
  44. package/dist/index.d.cts +17 -15
  45. package/dist/index.d.ts +17 -15
  46. package/dist/index.js +3 -1
  47. package/dist/{mobileErrorCodes-BeyBKmwh.d.cts → mobileErrorCodes-CuQ5lyBV.d.ts} +8 -8
  48. package/dist/mobileErrorCodes-CuQ5lyBV.d.ts.map +1 -0
  49. package/dist/{mobileErrorCodes-QG5XbEY6.d.ts → mobileErrorCodes-D_SyBm0k.d.cts} +8 -8
  50. package/dist/mobileErrorCodes-D_SyBm0k.d.cts.map +1 -0
  51. package/dist/{patterns-BbxH3_VA.d.ts → patterns-B5gi7OfV.d.ts} +1 -1
  52. package/dist/patterns-B5gi7OfV.d.ts.map +1 -0
  53. package/dist/{patterns-B9J2ldpx.d.cts → patterns-Db6fgz8i.d.cts} +1 -1
  54. package/dist/patterns-Db6fgz8i.d.cts.map +1 -0
  55. package/dist/{payloadHash-nj8WuLUP.d.cts → payloadHash-B0tlFOK8.d.cts} +2 -2
  56. package/dist/payloadHash-B0tlFOK8.d.cts.map +1 -0
  57. package/dist/{payloadHash-Bmhzs78N.d.ts → payloadHash-D1yTQSF4.d.ts} +2 -2
  58. package/dist/payloadHash-D1yTQSF4.d.ts.map +1 -0
  59. package/dist/serverBaseTypes-CzRgwUvA.d.ts +25 -0
  60. package/dist/serverBaseTypes-CzRgwUvA.d.ts.map +1 -0
  61. package/dist/serverBaseTypes-DSRgU2Fb.d.cts +25 -0
  62. package/dist/serverBaseTypes-DSRgU2Fb.d.cts.map +1 -0
  63. package/dist/serverExecuteTypes-BCb6bUMP.d.cts +19 -0
  64. package/dist/serverExecuteTypes-BCb6bUMP.d.cts.map +1 -0
  65. package/dist/serverExecuteTypes-CI3NBW2Z.d.ts +19 -0
  66. package/dist/serverExecuteTypes-CI3NBW2Z.d.ts.map +1 -0
  67. package/dist/serverModelTypes-BYQcsRrx.d.cts +146 -0
  68. package/dist/serverModelTypes-BYQcsRrx.d.cts.map +1 -0
  69. package/dist/serverModelTypes-DvPs5qs3.d.ts +146 -0
  70. package/dist/serverModelTypes-DvPs5qs3.d.ts.map +1 -0
  71. package/dist/serverQueryTypes-9H6P1vJ5.d.cts +92 -0
  72. package/dist/serverQueryTypes-9H6P1vJ5.d.cts.map +1 -0
  73. package/dist/serverQueryTypes-Cbjx0bIj.d.ts +92 -0
  74. package/dist/serverQueryTypes-Cbjx0bIj.d.ts.map +1 -0
  75. package/dist/serverRequestTypes-CHDk6JwE.d.cts +85 -0
  76. package/dist/serverRequestTypes-CHDk6JwE.d.cts.map +1 -0
  77. package/dist/serverRequestTypes-DYTLrCpz.d.ts +85 -0
  78. package/dist/serverRequestTypes-DYTLrCpz.d.ts.map +1 -0
  79. package/dist/{serverResponseGuards-DjCNL3CR.d.cts → serverResponseGuards-DRMHmfXh.d.cts} +2 -2
  80. package/dist/{serverResponseGuards-DjCNL3CR.d.cts.map → serverResponseGuards-DRMHmfXh.d.cts.map} +1 -1
  81. package/dist/{serverResponseGuards-C_vZIgGl.d.ts → serverResponseGuards-DpbZvJfL.d.ts} +2 -2
  82. package/dist/{serverResponseGuards-C_vZIgGl.d.ts.map → serverResponseGuards-DpbZvJfL.d.ts.map} +1 -1
  83. package/dist/signing/buildSignedMobileRequest.cjs +1 -1
  84. package/dist/signing/buildSignedMobileRequest.d.cts +1 -1
  85. package/dist/signing/buildSignedMobileRequest.d.ts +1 -1
  86. package/dist/signing/canonicalize.cjs +4 -37
  87. package/dist/signing/canonicalize.cjs.map +1 -1
  88. package/dist/signing/canonicalize.d.cts +1 -1
  89. package/dist/signing/canonicalize.d.ts +1 -1
  90. package/dist/signing/canonicalize.js +4 -37
  91. package/dist/signing/canonicalize.js.map +1 -1
  92. package/dist/signing/eip712MethodByType.cjs +1 -5
  93. package/dist/signing/eip712MethodByType.cjs.map +1 -1
  94. package/dist/signing/eip712MethodByType.d.cts +1 -1
  95. package/dist/signing/eip712MethodByType.d.ts +1 -1
  96. package/dist/signing/eip712MethodByType.js +1 -5
  97. package/dist/signing/eip712MethodByType.js.map +1 -1
  98. package/dist/signing/index.d.cts +5 -5
  99. package/dist/signing/index.d.ts +5 -5
  100. package/dist/signing/payloadHash.cjs +1 -1
  101. package/dist/signing/payloadHash.d.cts +1 -1
  102. package/dist/signing/payloadHash.d.ts +1 -1
  103. package/dist/signing/types.d.cts +1 -1
  104. package/dist/signing/types.d.ts +1 -1
  105. package/dist/types/MobileServerFailureError.cjs +1 -1
  106. package/dist/types/MobileServerFailureError.cjs.map +1 -1
  107. package/dist/types/MobileServerFailureError.d.cts +1 -1
  108. package/dist/types/MobileServerFailureError.d.ts +1 -1
  109. package/dist/types/MobileServerFailureError.js.map +1 -1
  110. package/dist/types/clientTypes.d.cts +2 -2
  111. package/dist/types/clientTypes.d.ts +2 -2
  112. package/dist/types/index.cjs +4 -0
  113. package/dist/types/index.d.cts +9 -8
  114. package/dist/types/index.d.ts +9 -8
  115. package/dist/types/index.js +2 -1
  116. package/dist/types/mobileErrorCodes.cjs +10 -7
  117. package/dist/types/mobileErrorCodes.cjs.map +1 -1
  118. package/dist/types/mobileErrorCodes.d.cts +1 -1
  119. package/dist/types/mobileErrorCodes.d.ts +1 -1
  120. package/dist/types/mobileErrorCodes.js +9 -6
  121. package/dist/types/mobileErrorCodes.js.map +1 -1
  122. package/dist/types/serverBaseTypes.d.cts +2 -2
  123. package/dist/types/serverBaseTypes.d.ts +2 -2
  124. package/dist/types/serverExecuteTypes.d.cts +2 -2
  125. package/dist/types/serverExecuteTypes.d.ts +2 -2
  126. package/dist/types/serverModelTypes.cjs +29 -0
  127. package/dist/types/serverModelTypes.cjs.map +1 -0
  128. package/dist/types/serverModelTypes.d.cts +2 -2
  129. package/dist/types/serverModelTypes.d.ts +2 -2
  130. package/dist/types/serverModelTypes.js +26 -1
  131. package/dist/types/serverModelTypes.js.map +1 -0
  132. package/dist/types/serverQueryTypes.d.cts +2 -2
  133. package/dist/types/serverQueryTypes.d.ts +2 -2
  134. package/dist/types/serverRequestTypes.cjs +0 -0
  135. package/dist/types/serverRequestTypes.d.cts +2 -0
  136. package/dist/types/serverRequestTypes.d.ts +2 -0
  137. package/dist/types/serverRequestTypes.js +1 -0
  138. package/dist/{types-B76Pn7Sy.d.ts → types-CQE3HD2V.d.ts} +4 -15
  139. package/dist/types-CQE3HD2V.d.ts.map +1 -0
  140. package/dist/{types-uCD4BNZR.d.cts → types-bNB98pYk.d.cts} +4 -15
  141. package/dist/types-bNB98pYk.d.cts.map +1 -0
  142. package/dist/utils/feed.cjs +17 -0
  143. package/dist/utils/feed.cjs.map +1 -0
  144. package/dist/utils/feed.d.cts +2 -0
  145. package/dist/utils/feed.d.ts +2 -0
  146. package/dist/utils/feed.js +15 -0
  147. package/dist/utils/feed.js.map +1 -0
  148. package/dist/utils/index.cjs +3 -0
  149. package/dist/utils/index.d.cts +4 -3
  150. package/dist/utils/index.d.ts +4 -3
  151. package/dist/utils/index.js +2 -1
  152. package/dist/utils/patterns.d.cts +1 -1
  153. package/dist/utils/patterns.d.ts +1 -1
  154. package/dist/utils/serverResponseGuards.d.cts +1 -1
  155. package/dist/utils/serverResponseGuards.d.ts +1 -1
  156. package/package.json +3 -3
  157. package/src/MobileClient.ts +163 -112
  158. package/src/dataMappers.ts +41 -0
  159. package/src/signing/canonicalize.ts +4 -37
  160. package/src/signing/eip712MethodByType.ts +1 -5
  161. package/src/signing/signing.test.ts +17 -60
  162. package/src/signing/types.ts +2 -12
  163. package/src/types/MobileServerFailureError.ts +2 -4
  164. package/src/types/clientTypes.ts +105 -27
  165. package/src/types/index.ts +1 -0
  166. package/src/types/mobileErrorCodes.ts +8 -5
  167. package/src/types/serverBaseTypes.ts +7 -28
  168. package/src/types/serverExecuteTypes.ts +17 -0
  169. package/src/types/serverModelTypes.ts +104 -8
  170. package/src/types/serverQueryTypes.ts +84 -39
  171. package/src/types/serverRequestTypes.ts +91 -0
  172. package/src/utils/feed.ts +11 -0
  173. package/src/utils/index.ts +1 -0
  174. package/dist/MobileClient-9JSAzblH.cjs.map +0 -1
  175. package/dist/MobileServerFailureError-ZggEcEda.d.cts.map +0 -1
  176. package/dist/MobileServerFailureError-f9KhKnJj.d.ts.map +0 -1
  177. package/dist/canonicalize-Dm7sXwPg.d.cts.map +0 -1
  178. package/dist/canonicalize-PX6dTIdF.d.ts.map +0 -1
  179. package/dist/clientTypes-DWW2N66c.d.ts +0 -168
  180. package/dist/clientTypes-DWW2N66c.d.ts.map +0 -1
  181. package/dist/clientTypes-Et0PUa2d.d.cts +0 -168
  182. package/dist/clientTypes-Et0PUa2d.d.cts.map +0 -1
  183. package/dist/eip712MethodByType-DJgXal9r.d.ts.map +0 -1
  184. package/dist/eip712MethodByType-DLh9MRsD.d.cts.map +0 -1
  185. package/dist/mobileErrorCodes-BeyBKmwh.d.cts.map +0 -1
  186. package/dist/mobileErrorCodes-QG5XbEY6.d.ts.map +0 -1
  187. package/dist/patterns-B9J2ldpx.d.cts.map +0 -1
  188. package/dist/patterns-BbxH3_VA.d.ts.map +0 -1
  189. package/dist/payloadHash-Bmhzs78N.d.ts.map +0 -1
  190. package/dist/payloadHash-nj8WuLUP.d.cts.map +0 -1
  191. package/dist/serverBaseTypes-BicXMrZV.d.cts +0 -43
  192. package/dist/serverBaseTypes-BicXMrZV.d.cts.map +0 -1
  193. package/dist/serverBaseTypes-ewbo8l4R.d.ts +0 -43
  194. package/dist/serverBaseTypes-ewbo8l4R.d.ts.map +0 -1
  195. package/dist/serverExecuteTypes-CXnMjKnt.d.ts +0 -11
  196. package/dist/serverExecuteTypes-CXnMjKnt.d.ts.map +0 -1
  197. package/dist/serverExecuteTypes-DKYK1V7C.d.cts +0 -11
  198. package/dist/serverExecuteTypes-DKYK1V7C.d.cts.map +0 -1
  199. package/dist/serverModelTypes-CQgfqgW3.d.cts +0 -69
  200. package/dist/serverModelTypes-CQgfqgW3.d.cts.map +0 -1
  201. package/dist/serverModelTypes-vEPhHIit.d.ts +0 -69
  202. package/dist/serverModelTypes-vEPhHIit.d.ts.map +0 -1
  203. package/dist/serverQueryTypes-BI-2TD8F.d.ts +0 -53
  204. package/dist/serverQueryTypes-BI-2TD8F.d.ts.map +0 -1
  205. package/dist/serverQueryTypes-D7Yharse.d.cts +0 -53
  206. package/dist/serverQueryTypes-D7Yharse.d.cts.map +0 -1
  207. package/dist/types-B76Pn7Sy.d.ts.map +0 -1
  208. package/dist/types-uCD4BNZR.d.cts.map +0 -1
@@ -0,0 +1,240 @@
1
+ import { a as MobileFeedTradePosition, c as MobileNotificationCategory, i as MobileFeedMarginMode, l as MobileNotificationPlatform } from "./serverModelTypes-DvPs5qs3.js";
2
+ import { SignatureParams, Subaccount } from "@nadohq/shared";
3
+ import { Hex } from "viem";
4
+
5
+ //#region src/types/clientTypes.d.ts
6
+ /**
7
+ * A subaccount's identity on the mobile service API. Every non-isolated subaccount has one implicitly, so
8
+ * both name fields are `null` until a username is claimed — render a local fallback label in that case and
9
+ * key lookups, links, and caches off `subaccount`.
10
+ *
11
+ * `username` and `displayName` are two representations of the same claimed name: `displayName` is what the
12
+ * user entered (preserving casing, e.g. `Alice.One`), while `username` is the canonical, lowercased handle
13
+ * derived from it (e.g. `alice.one`), unique across identities.
14
+ */
15
+ interface MobileIdentity {
16
+ subaccount: Hex;
17
+ /**
18
+ * Canonical, lowercased handle derived from {@link MobileIdentity.displayName}, unique across identities,
19
+ * or `null` if no username has been claimed.
20
+ */
21
+ username: string | null;
22
+ /**
23
+ * User-facing name as claimed, preserving original casing, or `null` if no username has been claimed.
24
+ * Validated against `MOBILE_DISPLAY_NAME_PATTERN`.
25
+ */
26
+ displayName: string | null;
27
+ privateMode: boolean;
28
+ }
29
+ /**
30
+ * A subaccount's public profile, as returned by an unsigned profile lookup. Private Mode hides the account's
31
+ * activity, not its profile, so `privateMode` is exposed here too.
32
+ */
33
+ interface MobilePublicProfile {
34
+ subaccount: Hex;
35
+ /** Canonical, lowercased handle, or `null` if no username has been claimed. */
36
+ username: string | null;
37
+ /** User-facing name as claimed, or `null` if no username has been claimed. */
38
+ displayName: string | null;
39
+ privateMode: boolean;
40
+ }
41
+ /**
42
+ * Result of a username availability check.
43
+ */
44
+ interface MobileUsernameAvailability {
45
+ username: string;
46
+ available: boolean;
47
+ }
48
+ /**
49
+ * Margin of a feed trade. Branch on `mode` — do not infer isolated state from leverage presence:
50
+ * `estimatedLeverage` (a rounded whole-number estimate, not exact submitted leverage) is `undefined` on
51
+ * `cross`, and also `undefined` inside `isolated` when no estimate is available.
52
+ */
53
+ interface MobileFeedMargin {
54
+ mode: MobileFeedMarginMode;
55
+ estimatedLeverage?: number;
56
+ }
57
+ /**
58
+ * A single feed trade: one row per order digest, enriched with the trader's current identity at read time
59
+ * (a rename can change an already-fetched trade on the next read). Amounts are display-oriented human-unit
60
+ * numbers — do not use them for accounting, order construction, or exact threshold decisions.
61
+ */
62
+ interface MobileFeedTrade {
63
+ /** Order digest this trade is keyed by; the stable id for reconciling live pagination. */
64
+ orderDigest: Hex;
65
+ subaccount: Hex;
66
+ /** `null` when the trader has not claimed a username; render a local fallback label from `subaccount`. */
67
+ username: string | null;
68
+ /** `null` when the trader has not claimed a username; render a local fallback label from `subaccount`. */
69
+ displayName: string | null;
70
+ /** Reserved for a future avatar source; `null` until one is implemented. */
71
+ avatarUrl: string | null;
72
+ productId: number;
73
+ /** Executed quantity in human units. */
74
+ quantity: number;
75
+ /** Trade notional in whole-dollar human units. */
76
+ notional: number;
77
+ /** Average execution price in human units. */
78
+ averagePrice: number;
79
+ margin: MobileFeedMargin;
80
+ /** Resulting position change. `position.direction` is NOT the execution buy/sell side. */
81
+ position: MobileFeedTradePosition;
82
+ /** Realized PnL of the trade in human units; can be negative. */
83
+ realizedPnl: number;
84
+ /** Fill time as a Unix timestamp (milliseconds). */
85
+ filledAt: number;
86
+ }
87
+ /**
88
+ * A page of feed trades. `nextCursor` is `null` when there was no additional candidate at query time.
89
+ * Pagination is live, not snapshot, so a later fill can move a trade between pages — deduplicate by
90
+ * {@link MobileFeedTrade.orderDigest} and treat the merged list as a short-lived view, not an authoritative
91
+ * cache (removals from Private Mode or blacklists are not signaled).
92
+ */
93
+ interface MobileFeedPage {
94
+ trades: MobileFeedTrade[];
95
+ nextCursor: string | null;
96
+ }
97
+ /**
98
+ * Scope limiting a notification category preference. Scopes are part of the wire format but rejected by the
99
+ * backend for the MVP — `scopes` must be empty.
100
+ */
101
+ type MobileNotificationPreferenceScope = {
102
+ type: 'subaccount';
103
+ subaccount: Hex;
104
+ } | {
105
+ type: 'product';
106
+ productId: number;
107
+ };
108
+ /**
109
+ * A per-category push notification preference.
110
+ */
111
+ interface MobileNotificationCategoryPreference {
112
+ category: MobileNotificationCategory;
113
+ enabled: boolean;
114
+ scopes: MobileNotificationPreferenceScope[];
115
+ }
116
+ /**
117
+ * A wallet's push notification preferences. The backend requires exactly one entry per known category and
118
+ * `schemaVersion` of 1.
119
+ */
120
+ interface MobileNotificationPreferences {
121
+ /** Only `1` is accepted by the backend for the MVP. */
122
+ schemaVersion: 1;
123
+ categories: MobileNotificationCategoryPreference[];
124
+ }
125
+ /**
126
+ * A device registered for push notifications.
127
+ */
128
+ interface MobileRegisteredDevice {
129
+ /** Push platform the device registered under. */
130
+ platform: MobileNotificationPlatform;
131
+ /** BCP-47 locale tag reported at registration, or `null` if none was provided. */
132
+ locale: string | null;
133
+ /** App version string reported at registration, or `null` if none was provided. */
134
+ appVersion: string | null;
135
+ /**
136
+ * First 8 hex chars of `keccak256` over the bracket-stripped Expo token — a stable, non-reversible
137
+ * identifier for the device's push token. The raw token is never returned by the backend.
138
+ */
139
+ tokenFingerprintPrefix: string;
140
+ /**
141
+ * Unix timestamp (milliseconds) of the device's last registration refresh.
142
+ */
143
+ lastSeenAt: number;
144
+ }
145
+ /**
146
+ * Common params for signed requests that authenticate as a given subaccount.
147
+ */
148
+ interface MobileSignedRequestParams extends Subaccount, SignatureParams {}
149
+ /**
150
+ * Common params for the unsigned notification requests, which name their target with an Expo push token
151
+ * instead of a subaccount and signature — the counterpart to {@link MobileSignedRequestParams}. The backend
152
+ * resolves the token's owning wallet and reads or mutates that wallet's state.
153
+ */
154
+ interface MobileWithExpoTokenParams {
155
+ /** Expo push token, e.g. `ExponentPushToken[...]`. */
156
+ expoToken: string;
157
+ }
158
+ /**
159
+ * Params for {@link MobileClient.getUsernameAvailability}.
160
+ */
161
+ interface GetMobileUsernameAvailabilityParams {
162
+ displayName: string;
163
+ }
164
+ /**
165
+ * Params for {@link MobileClient.getPublicProfile}.
166
+ */
167
+ type GetMobilePublicProfileParams = Subaccount;
168
+ /**
169
+ * Params for {@link MobileClient.getFeed}.
170
+ */
171
+ interface GetMobileFeedParams {
172
+ /**
173
+ * Minimum notional filter as a whole-dollar safe integer, at least `MOBILE_FEED_MIN_NOTIONAL_FLOOR`
174
+ * ($1,000). Omit for the unfiltered feed.
175
+ */
176
+ minimumNotional?: number;
177
+ /** Page size, 1–`MOBILE_FEED_MAX_PAGE_SIZE` (50); the backend defaults to 50 when omitted. */
178
+ limit?: number;
179
+ /**
180
+ * Opaque keyset cursor from a prior page's {@link MobileFeedPage.nextCursor}. Send it back unchanged with
181
+ * the exact same `minimumNotional` it was issued for.
182
+ */
183
+ cursor?: string;
184
+ }
185
+ /**
186
+ * Params for {@link MobileClient.getSelfIdentity}.
187
+ */
188
+ type GetMobileSelfIdentityParams = MobileSignedRequestParams;
189
+ /**
190
+ * Params for {@link MobileClient.setUsername}.
191
+ */
192
+ interface MobileSetUsernameParams extends MobileSignedRequestParams {
193
+ /** User-facing name to claim, preserving casing. Must match `MOBILE_DISPLAY_NAME_PATTERN`. */
194
+ displayName: string;
195
+ }
196
+ /**
197
+ * Params for {@link MobileClient.setPrivateMode}.
198
+ */
199
+ interface MobileSetPrivateModeParams extends MobileSignedRequestParams {
200
+ privateMode: boolean;
201
+ }
202
+ /**
203
+ * Params for {@link MobileClient.registerExpoToken}.
204
+ */
205
+ interface MobileRegisterExpoTokenParams extends MobileSignedRequestParams {
206
+ /**
207
+ * Expo push token, e.g. `ExponentPushToken[...]`.
208
+ */
209
+ expoToken: string;
210
+ platform: MobileNotificationPlatform;
211
+ /**
212
+ * BCP-47 locale tag, max 35 chars.
213
+ */
214
+ locale?: string;
215
+ /**
216
+ * App version string, max 64 chars.
217
+ */
218
+ appVersion?: string;
219
+ }
220
+ /**
221
+ * Params for {@link MobileClient.unregisterExpoToken}.
222
+ */
223
+ type MobileUnregisterExpoTokenParams = MobileWithExpoTokenParams;
224
+ /**
225
+ * Params for {@link MobileClient.updateNotificationPreferences}.
226
+ */
227
+ interface MobileUpdateNotificationPreferencesParams extends MobileWithExpoTokenParams {
228
+ preferences: MobileNotificationPreferences;
229
+ }
230
+ /**
231
+ * Params for {@link MobileClient.getNotificationPreferences}.
232
+ */
233
+ type GetMobileNotificationPreferencesParams = MobileWithExpoTokenParams;
234
+ /**
235
+ * Params for {@link MobileClient.getRegisteredDevices}.
236
+ */
237
+ type GetMobileRegisteredDevicesParams = MobileSignedRequestParams;
238
+ //#endregion
239
+ export { MobileWithExpoTokenParams as C, MobileUsernameAvailability as S, MobileSetPrivateModeParams as _, GetMobileSelfIdentityParams as a, MobileUnregisterExpoTokenParams as b, MobileFeedPage as c, MobileNotificationCategoryPreference as d, MobileNotificationPreferenceScope as f, MobileRegisteredDevice as g, MobileRegisterExpoTokenParams as h, GetMobileRegisteredDevicesParams as i, MobileFeedTrade as l, MobilePublicProfile as m, GetMobileNotificationPreferencesParams as n, GetMobileUsernameAvailabilityParams as o, MobileNotificationPreferences as p, GetMobilePublicProfileParams as r, MobileFeedMargin as s, GetMobileFeedParams as t, MobileIdentity as u, MobileSetUsernameParams as v, MobileUpdateNotificationPreferencesParams as x, MobileSignedRequestParams as y };
240
+ //# sourceMappingURL=clientTypes-6utzUU-b.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientTypes-6utzUU-b.d.ts","names":[],"sources":["../src/types/src/types/clientTypes.ts"],"mappings":";;;;;;;AAkBA;;;;;;;UAAiB,cAAA;EACf,UAAA,EAAY,GAAG;EAWJ;AAAA;AAOb;;EAbE,QAAA;EAce;;;;EATf,WAAA;EACA,WAAA;AAAA;AAaW;AAMb;;;AANa,UANI,mBAAA;EACf,UAAA,EAAY,GAAG;EAqBA;EAnBf,QAAA;;EAEA,WAAA;EACA,WAAA;AAAA;;;AAkBiB;UAZF,0BAAA;EACf,QAAA;EACA,SAAS;AAAA;;;;;;UAQM,gBAAA;EACf,IAAA,EAAM,oBAAoB;EAC1B,iBAAA;AAAA;;;;;;UAQe,eAAA;EAgBf;EAdA,WAAA,EAAa,GAAA;EACb,UAAA,EAAY,GAAA;EAgBZ;EAdA,QAAA;EAgBA;EAdA,WAAA;EAgBQ;EAdR,SAAA;EACA,SAAA;EAsB6B;EApB7B,QAAA;EAqBuB;EAnBvB,QAAA;EAmBQ;EAjBR,YAAA;EACA,MAAA,EAAQ,gBAAA;EAiBE;EAfV,QAAA,EAAU,uBAAA;EAsBiC;EApB3C,WAAA;EAqBuC;EAnBvC,QAAA;AAAA;;;;;AAoB8B;AAKhC;UAhBiB,cAAA;EACf,MAAA,EAAQ,eAAe;EACvB,UAAA;AAAA;;;;;KAOU,iCAAA;EACN,IAAA;EAAoB,UAAA,EAAY,GAAG;AAAA;EACnC,IAAA;EAAiB,SAAA;AAAA;;;;UAKN,oCAAA;EACf,QAAA,EAAU,0BAAA;EACV,OAAA;EACA,MAAA,EAAQ,iCAAiC;AAAA;;;;;UAO1B,6BAAA;EAwBf;EAtBA,aAAA;EACA,UAAA,EAAY,oCAAoC;AAAA;;;;UAMjC,sBAAA;EA6BA;EA3Bf,QAAA,EAAU,0BAA0B;;EAEpC,MAAA;EA2BS;EAzBT,UAAA;EA+BkD;;;AACvC;EA3BX,sBAAA;EAiCsC;;;EA7BtC,UAAA;AAAA;;;;UAMe,yBAAA,SACP,UAAA,EAAY,eAAe;;;AAuC7B;AAMR;;UAtCiB,yBAAA;EAsCkD;EApCjE,SAAS;AAAA;;;;UAMM,mCAAA;EACf,WAAW;AAAA;;;AA2CA;KArCD,4BAAA,GAA+B,UAAU;;;;UAKpC,mBAAA;EA0Cf;;;;EArCA,eAAA;EA8CU;EA5CV,KAAA;EAkDU;;;;EA7CV,MAAA;AAAA;;;;KAMU,2BAAA,GAA8B,yBAAyB;;;;UAKlD,uBAAA,SAAgC,yBAAyB;EA8C9D;EA5CV,WAAW;AAAA;;AA4CiE;AAK9E;UA3CiB,0BAAA,SAAmC,yBAAyB;EAC3E,WAAW;AAAA;AA0C2D;;;AAAA,UApCvD,6BAAA,SAAsC,yBAAyB;;;;EAI9E,SAAA;EACA,QAAA,EAAU,0BAAA;;;;EAIV,MAAA;;;;EAIA,UAAA;AAAA;;;;KAMU,+BAAA,GAAkC,yBAAyB;;;;UAKtD,yCAAA,SAAkD,yBAAyB;EAC1F,WAAA,EAAa,6BAAA;AAAA;;;;KAMH,sCAAA,GAAyC,yBAAyB;;;;KAKlE,gCAAA,GAAmC,yBAAyB"}
@@ -0,0 +1,240 @@
1
+ import { a as MobileFeedTradePosition, c as MobileNotificationCategory, i as MobileFeedMarginMode, l as MobileNotificationPlatform } from "./serverModelTypes-BYQcsRrx.cjs";
2
+ import { SignatureParams, Subaccount } from "@nadohq/shared";
3
+ import { Hex } from "viem";
4
+
5
+ //#region src/types/clientTypes.d.ts
6
+ /**
7
+ * A subaccount's identity on the mobile service API. Every non-isolated subaccount has one implicitly, so
8
+ * both name fields are `null` until a username is claimed — render a local fallback label in that case and
9
+ * key lookups, links, and caches off `subaccount`.
10
+ *
11
+ * `username` and `displayName` are two representations of the same claimed name: `displayName` is what the
12
+ * user entered (preserving casing, e.g. `Alice.One`), while `username` is the canonical, lowercased handle
13
+ * derived from it (e.g. `alice.one`), unique across identities.
14
+ */
15
+ interface MobileIdentity {
16
+ subaccount: Hex;
17
+ /**
18
+ * Canonical, lowercased handle derived from {@link MobileIdentity.displayName}, unique across identities,
19
+ * or `null` if no username has been claimed.
20
+ */
21
+ username: string | null;
22
+ /**
23
+ * User-facing name as claimed, preserving original casing, or `null` if no username has been claimed.
24
+ * Validated against `MOBILE_DISPLAY_NAME_PATTERN`.
25
+ */
26
+ displayName: string | null;
27
+ privateMode: boolean;
28
+ }
29
+ /**
30
+ * A subaccount's public profile, as returned by an unsigned profile lookup. Private Mode hides the account's
31
+ * activity, not its profile, so `privateMode` is exposed here too.
32
+ */
33
+ interface MobilePublicProfile {
34
+ subaccount: Hex;
35
+ /** Canonical, lowercased handle, or `null` if no username has been claimed. */
36
+ username: string | null;
37
+ /** User-facing name as claimed, or `null` if no username has been claimed. */
38
+ displayName: string | null;
39
+ privateMode: boolean;
40
+ }
41
+ /**
42
+ * Result of a username availability check.
43
+ */
44
+ interface MobileUsernameAvailability {
45
+ username: string;
46
+ available: boolean;
47
+ }
48
+ /**
49
+ * Margin of a feed trade. Branch on `mode` — do not infer isolated state from leverage presence:
50
+ * `estimatedLeverage` (a rounded whole-number estimate, not exact submitted leverage) is `undefined` on
51
+ * `cross`, and also `undefined` inside `isolated` when no estimate is available.
52
+ */
53
+ interface MobileFeedMargin {
54
+ mode: MobileFeedMarginMode;
55
+ estimatedLeverage?: number;
56
+ }
57
+ /**
58
+ * A single feed trade: one row per order digest, enriched with the trader's current identity at read time
59
+ * (a rename can change an already-fetched trade on the next read). Amounts are display-oriented human-unit
60
+ * numbers — do not use them for accounting, order construction, or exact threshold decisions.
61
+ */
62
+ interface MobileFeedTrade {
63
+ /** Order digest this trade is keyed by; the stable id for reconciling live pagination. */
64
+ orderDigest: Hex;
65
+ subaccount: Hex;
66
+ /** `null` when the trader has not claimed a username; render a local fallback label from `subaccount`. */
67
+ username: string | null;
68
+ /** `null` when the trader has not claimed a username; render a local fallback label from `subaccount`. */
69
+ displayName: string | null;
70
+ /** Reserved for a future avatar source; `null` until one is implemented. */
71
+ avatarUrl: string | null;
72
+ productId: number;
73
+ /** Executed quantity in human units. */
74
+ quantity: number;
75
+ /** Trade notional in whole-dollar human units. */
76
+ notional: number;
77
+ /** Average execution price in human units. */
78
+ averagePrice: number;
79
+ margin: MobileFeedMargin;
80
+ /** Resulting position change. `position.direction` is NOT the execution buy/sell side. */
81
+ position: MobileFeedTradePosition;
82
+ /** Realized PnL of the trade in human units; can be negative. */
83
+ realizedPnl: number;
84
+ /** Fill time as a Unix timestamp (milliseconds). */
85
+ filledAt: number;
86
+ }
87
+ /**
88
+ * A page of feed trades. `nextCursor` is `null` when there was no additional candidate at query time.
89
+ * Pagination is live, not snapshot, so a later fill can move a trade between pages — deduplicate by
90
+ * {@link MobileFeedTrade.orderDigest} and treat the merged list as a short-lived view, not an authoritative
91
+ * cache (removals from Private Mode or blacklists are not signaled).
92
+ */
93
+ interface MobileFeedPage {
94
+ trades: MobileFeedTrade[];
95
+ nextCursor: string | null;
96
+ }
97
+ /**
98
+ * Scope limiting a notification category preference. Scopes are part of the wire format but rejected by the
99
+ * backend for the MVP — `scopes` must be empty.
100
+ */
101
+ type MobileNotificationPreferenceScope = {
102
+ type: 'subaccount';
103
+ subaccount: Hex;
104
+ } | {
105
+ type: 'product';
106
+ productId: number;
107
+ };
108
+ /**
109
+ * A per-category push notification preference.
110
+ */
111
+ interface MobileNotificationCategoryPreference {
112
+ category: MobileNotificationCategory;
113
+ enabled: boolean;
114
+ scopes: MobileNotificationPreferenceScope[];
115
+ }
116
+ /**
117
+ * A wallet's push notification preferences. The backend requires exactly one entry per known category and
118
+ * `schemaVersion` of 1.
119
+ */
120
+ interface MobileNotificationPreferences {
121
+ /** Only `1` is accepted by the backend for the MVP. */
122
+ schemaVersion: 1;
123
+ categories: MobileNotificationCategoryPreference[];
124
+ }
125
+ /**
126
+ * A device registered for push notifications.
127
+ */
128
+ interface MobileRegisteredDevice {
129
+ /** Push platform the device registered under. */
130
+ platform: MobileNotificationPlatform;
131
+ /** BCP-47 locale tag reported at registration, or `null` if none was provided. */
132
+ locale: string | null;
133
+ /** App version string reported at registration, or `null` if none was provided. */
134
+ appVersion: string | null;
135
+ /**
136
+ * First 8 hex chars of `keccak256` over the bracket-stripped Expo token — a stable, non-reversible
137
+ * identifier for the device's push token. The raw token is never returned by the backend.
138
+ */
139
+ tokenFingerprintPrefix: string;
140
+ /**
141
+ * Unix timestamp (milliseconds) of the device's last registration refresh.
142
+ */
143
+ lastSeenAt: number;
144
+ }
145
+ /**
146
+ * Common params for signed requests that authenticate as a given subaccount.
147
+ */
148
+ interface MobileSignedRequestParams extends Subaccount, SignatureParams {}
149
+ /**
150
+ * Common params for the unsigned notification requests, which name their target with an Expo push token
151
+ * instead of a subaccount and signature — the counterpart to {@link MobileSignedRequestParams}. The backend
152
+ * resolves the token's owning wallet and reads or mutates that wallet's state.
153
+ */
154
+ interface MobileWithExpoTokenParams {
155
+ /** Expo push token, e.g. `ExponentPushToken[...]`. */
156
+ expoToken: string;
157
+ }
158
+ /**
159
+ * Params for {@link MobileClient.getUsernameAvailability}.
160
+ */
161
+ interface GetMobileUsernameAvailabilityParams {
162
+ displayName: string;
163
+ }
164
+ /**
165
+ * Params for {@link MobileClient.getPublicProfile}.
166
+ */
167
+ type GetMobilePublicProfileParams = Subaccount;
168
+ /**
169
+ * Params for {@link MobileClient.getFeed}.
170
+ */
171
+ interface GetMobileFeedParams {
172
+ /**
173
+ * Minimum notional filter as a whole-dollar safe integer, at least `MOBILE_FEED_MIN_NOTIONAL_FLOOR`
174
+ * ($1,000). Omit for the unfiltered feed.
175
+ */
176
+ minimumNotional?: number;
177
+ /** Page size, 1–`MOBILE_FEED_MAX_PAGE_SIZE` (50); the backend defaults to 50 when omitted. */
178
+ limit?: number;
179
+ /**
180
+ * Opaque keyset cursor from a prior page's {@link MobileFeedPage.nextCursor}. Send it back unchanged with
181
+ * the exact same `minimumNotional` it was issued for.
182
+ */
183
+ cursor?: string;
184
+ }
185
+ /**
186
+ * Params for {@link MobileClient.getSelfIdentity}.
187
+ */
188
+ type GetMobileSelfIdentityParams = MobileSignedRequestParams;
189
+ /**
190
+ * Params for {@link MobileClient.setUsername}.
191
+ */
192
+ interface MobileSetUsernameParams extends MobileSignedRequestParams {
193
+ /** User-facing name to claim, preserving casing. Must match `MOBILE_DISPLAY_NAME_PATTERN`. */
194
+ displayName: string;
195
+ }
196
+ /**
197
+ * Params for {@link MobileClient.setPrivateMode}.
198
+ */
199
+ interface MobileSetPrivateModeParams extends MobileSignedRequestParams {
200
+ privateMode: boolean;
201
+ }
202
+ /**
203
+ * Params for {@link MobileClient.registerExpoToken}.
204
+ */
205
+ interface MobileRegisterExpoTokenParams extends MobileSignedRequestParams {
206
+ /**
207
+ * Expo push token, e.g. `ExponentPushToken[...]`.
208
+ */
209
+ expoToken: string;
210
+ platform: MobileNotificationPlatform;
211
+ /**
212
+ * BCP-47 locale tag, max 35 chars.
213
+ */
214
+ locale?: string;
215
+ /**
216
+ * App version string, max 64 chars.
217
+ */
218
+ appVersion?: string;
219
+ }
220
+ /**
221
+ * Params for {@link MobileClient.unregisterExpoToken}.
222
+ */
223
+ type MobileUnregisterExpoTokenParams = MobileWithExpoTokenParams;
224
+ /**
225
+ * Params for {@link MobileClient.updateNotificationPreferences}.
226
+ */
227
+ interface MobileUpdateNotificationPreferencesParams extends MobileWithExpoTokenParams {
228
+ preferences: MobileNotificationPreferences;
229
+ }
230
+ /**
231
+ * Params for {@link MobileClient.getNotificationPreferences}.
232
+ */
233
+ type GetMobileNotificationPreferencesParams = MobileWithExpoTokenParams;
234
+ /**
235
+ * Params for {@link MobileClient.getRegisteredDevices}.
236
+ */
237
+ type GetMobileRegisteredDevicesParams = MobileSignedRequestParams;
238
+ //#endregion
239
+ export { MobileWithExpoTokenParams as C, MobileUsernameAvailability as S, MobileSetPrivateModeParams as _, GetMobileSelfIdentityParams as a, MobileUnregisterExpoTokenParams as b, MobileFeedPage as c, MobileNotificationCategoryPreference as d, MobileNotificationPreferenceScope as f, MobileRegisteredDevice as g, MobileRegisterExpoTokenParams as h, GetMobileRegisteredDevicesParams as i, MobileFeedTrade as l, MobilePublicProfile as m, GetMobileNotificationPreferencesParams as n, GetMobileUsernameAvailabilityParams as o, MobileNotificationPreferences as p, GetMobilePublicProfileParams as r, MobileFeedMargin as s, GetMobileFeedParams as t, MobileIdentity as u, MobileSetUsernameParams as v, MobileUpdateNotificationPreferencesParams as x, MobileSignedRequestParams as y };
240
+ //# sourceMappingURL=clientTypes-D9qgtNlE.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientTypes-D9qgtNlE.d.cts","names":[],"sources":["../src/types/src/types/clientTypes.ts"],"mappings":";;;;;;;AAkBA;;;;;;;UAAiB,cAAA;EACf,UAAA,EAAY,GAAG;EAWJ;AAAA;AAOb;;EAbE,QAAA;EAce;;;;EATf,WAAA;EACA,WAAA;AAAA;AAaW;AAMb;;;AANa,UANI,mBAAA;EACf,UAAA,EAAY,GAAG;EAqBA;EAnBf,QAAA;;EAEA,WAAA;EACA,WAAA;AAAA;;;AAkBiB;UAZF,0BAAA;EACf,QAAA;EACA,SAAS;AAAA;;;;;;UAQM,gBAAA;EACf,IAAA,EAAM,oBAAoB;EAC1B,iBAAA;AAAA;;;;;;UAQe,eAAA;EAgBf;EAdA,WAAA,EAAa,GAAA;EACb,UAAA,EAAY,GAAA;EAgBZ;EAdA,QAAA;EAgBA;EAdA,WAAA;EAgBQ;EAdR,SAAA;EACA,SAAA;EAsB6B;EApB7B,QAAA;EAqBuB;EAnBvB,QAAA;EAmBQ;EAjBR,YAAA;EACA,MAAA,EAAQ,gBAAA;EAiBE;EAfV,QAAA,EAAU,uBAAA;EAsBiC;EApB3C,WAAA;EAqBuC;EAnBvC,QAAA;AAAA;;;;;AAoB8B;AAKhC;UAhBiB,cAAA;EACf,MAAA,EAAQ,eAAe;EACvB,UAAA;AAAA;;;;;KAOU,iCAAA;EACN,IAAA;EAAoB,UAAA,EAAY,GAAG;AAAA;EACnC,IAAA;EAAiB,SAAA;AAAA;;;;UAKN,oCAAA;EACf,QAAA,EAAU,0BAAA;EACV,OAAA;EACA,MAAA,EAAQ,iCAAiC;AAAA;;;;;UAO1B,6BAAA;EAwBf;EAtBA,aAAA;EACA,UAAA,EAAY,oCAAoC;AAAA;;;;UAMjC,sBAAA;EA6BA;EA3Bf,QAAA,EAAU,0BAA0B;;EAEpC,MAAA;EA2BS;EAzBT,UAAA;EA+BkD;;;AACvC;EA3BX,sBAAA;EAiCsC;;;EA7BtC,UAAA;AAAA;;;;UAMe,yBAAA,SACP,UAAA,EAAY,eAAe;;;AAuC7B;AAMR;;UAtCiB,yBAAA;EAsCkD;EApCjE,SAAS;AAAA;;;;UAMM,mCAAA;EACf,WAAW;AAAA;;;AA2CA;KArCD,4BAAA,GAA+B,UAAU;;;;UAKpC,mBAAA;EA0Cf;;;;EArCA,eAAA;EA8CU;EA5CV,KAAA;EAkDU;;;;EA7CV,MAAA;AAAA;;;;KAMU,2BAAA,GAA8B,yBAAyB;;;;UAKlD,uBAAA,SAAgC,yBAAyB;EA8C9D;EA5CV,WAAW;AAAA;;AA4CiE;AAK9E;UA3CiB,0BAAA,SAAmC,yBAAyB;EAC3E,WAAW;AAAA;AA0C2D;;;AAAA,UApCvD,6BAAA,SAAsC,yBAAyB;;;;EAI9E,SAAA;EACA,QAAA,EAAU,0BAAA;;;;EAIV,MAAA;;;;EAIA,UAAA;AAAA;;;;KAMU,+BAAA,GAAkC,yBAAyB;;;;UAKtD,yCAAA,SAAkD,yBAAyB;EAC1F,WAAA,EAAa,6BAAA;AAAA;;;;KAMH,sCAAA,GAAyC,yBAAyB;;;;KAKlE,gCAAA,GAAmC,yBAAyB"}
@@ -18,7 +18,8 @@ function mapMobilePublicProfile(server) {
18
18
  return {
19
19
  subaccount: server.subaccount,
20
20
  username: server.username,
21
- displayName: server.display_name
21
+ displayName: server.display_name,
22
+ privateMode: server.private_mode
22
23
  };
23
24
  }
24
25
  /**
@@ -68,6 +69,38 @@ function mapMobileNotificationPreferenceScopeToServer(scope) {
68
69
  };
69
70
  }
70
71
  /**
72
+ * Maps a server-side feed trade (snake_case) to its client-side (camelCase) representation.
73
+ */
74
+ function mapMobileFeedTrade(server) {
75
+ return {
76
+ orderDigest: server.order_digest,
77
+ subaccount: server.subaccount,
78
+ username: server.username,
79
+ displayName: server.display_name,
80
+ avatarUrl: server.avatar_url,
81
+ productId: server.product_id,
82
+ quantity: server.quantity,
83
+ notional: server.notional,
84
+ averagePrice: server.average_price,
85
+ margin: {
86
+ mode: server.margin.mode,
87
+ estimatedLeverage: server.margin.estimated_leverage
88
+ },
89
+ position: server.position,
90
+ realizedPnl: server.realized_pnl,
91
+ filledAt: server.filled_at_ms
92
+ };
93
+ }
94
+ /**
95
+ * Maps a server-side feed response to a client-side {@link MobileFeedPage}.
96
+ */
97
+ function mapMobileFeedPage(server) {
98
+ return {
99
+ trades: server.trades.map(mapMobileFeedTrade),
100
+ nextCursor: server.next_cursor
101
+ };
102
+ }
103
+ /**
71
104
  * Maps a server-side registered device (snake_case) to its client-side (camelCase) representation.
72
105
  */
73
106
  function mapMobileRegisteredDevice(server) {
@@ -80,6 +113,7 @@ function mapMobileRegisteredDevice(server) {
80
113
  };
81
114
  }
82
115
  //#endregion
116
+ exports.mapMobileFeedPage = mapMobileFeedPage;
83
117
  exports.mapMobileIdentity = mapMobileIdentity;
84
118
  exports.mapMobileNotificationPreferences = mapMobileNotificationPreferences;
85
119
  exports.mapMobileNotificationPreferencesToServer = mapMobileNotificationPreferencesToServer;
@@ -1 +1 @@
1
- {"version":3,"file":"dataMappers.cjs","names":[],"sources":["../src/dataMappers.ts"],"sourcesContent":["import {\n MobileIdentity,\n MobileNotificationPreferenceScope,\n MobileNotificationPreferences,\n MobilePublicProfile,\n MobileRegisteredDevice,\n} from './types/clientTypes';\nimport {\n MobileServerIdentity,\n MobileServerNotificationPreferenceScope,\n MobileServerNotificationPreferences,\n MobileServerProfile,\n MobileServerRegisteredDevice,\n} from './types/serverModelTypes';\n\n/**\n * Maps a server-side identity (snake_case) to its client-side (camelCase) representation.\n */\nexport function mapMobileIdentity(\n server: MobileServerIdentity,\n): MobileIdentity {\n return {\n subaccount: server.subaccount,\n username: server.username,\n displayName: server.display_name,\n privateMode: server.private_mode,\n };\n}\n\n/**\n * Maps a server-side public profile (snake_case) to its client-side (camelCase) representation.\n */\nexport function mapMobilePublicProfile(\n server: MobileServerProfile,\n): MobilePublicProfile {\n return {\n subaccount: server.subaccount,\n username: server.username,\n displayName: server.display_name,\n };\n}\n\n/**\n * Maps server-side notification preferences (snake_case) to their client-side (camelCase) representation.\n */\nexport function mapMobileNotificationPreferences(\n server: MobileServerNotificationPreferences,\n): MobileNotificationPreferences {\n return {\n schemaVersion: server.schema_version,\n categories: server.categories.map((category) => ({\n category: category.category,\n enabled: category.enabled,\n scopes: category.scopes.map(mapMobileNotificationPreferenceScope),\n })),\n };\n}\n\nfunction mapMobileNotificationPreferenceScope(\n server: MobileServerNotificationPreferenceScope,\n): MobileNotificationPreferenceScope {\n if (server.type === 'subaccount') {\n return { type: 'subaccount', subaccount: server.subaccount };\n }\n return { type: 'product', productId: server.product_id };\n}\n\n/**\n * Maps client-side notification preferences (camelCase) to the server-side (snake_case) wire shape.\n */\nexport function mapMobileNotificationPreferencesToServer(\n preferences: MobileNotificationPreferences,\n): MobileServerNotificationPreferences {\n return {\n schema_version: preferences.schemaVersion,\n categories: preferences.categories.map((category) => ({\n category: category.category,\n enabled: category.enabled,\n scopes: category.scopes.map(mapMobileNotificationPreferenceScopeToServer),\n })),\n };\n}\n\nfunction mapMobileNotificationPreferenceScopeToServer(\n scope: MobileNotificationPreferenceScope,\n): MobileServerNotificationPreferenceScope {\n if (scope.type === 'subaccount') {\n return { type: 'subaccount', subaccount: scope.subaccount };\n }\n return { type: 'product', product_id: scope.productId };\n}\n\n/**\n * Maps a server-side registered device (snake_case) to its client-side (camelCase) representation.\n */\nexport function mapMobileRegisteredDevice(\n server: MobileServerRegisteredDevice,\n): MobileRegisteredDevice {\n return {\n platform: server.platform,\n locale: server.locale,\n appVersion: server.app_version,\n tokenFingerprintPrefix: server.token_fingerprint_prefix,\n lastSeenAt: server.last_seen_at,\n };\n}\n"],"mappings":";;;;;AAkBA,SAAgB,kBACd,QACgB;CAChB,OAAO;EACL,YAAY,OAAO;EACnB,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB,aAAa,OAAO;CACtB;AACF;;;;AAKA,SAAgB,uBACd,QACqB;CACrB,OAAO;EACL,YAAY,OAAO;EACnB,UAAU,OAAO;EACjB,aAAa,OAAO;CACtB;AACF;;;;AAKA,SAAgB,iCACd,QAC+B;CAC/B,OAAO;EACL,eAAe,OAAO;EACtB,YAAY,OAAO,WAAW,KAAK,cAAc;GAC/C,UAAU,SAAS;GACnB,SAAS,SAAS;GAClB,QAAQ,SAAS,OAAO,IAAI,oCAAoC;EAClE,EAAE;CACJ;AACF;AAEA,SAAS,qCACP,QACmC;CACnC,IAAI,OAAO,SAAS,cAClB,OAAO;EAAE,MAAM;EAAc,YAAY,OAAO;CAAW;CAE7D,OAAO;EAAE,MAAM;EAAW,WAAW,OAAO;CAAW;AACzD;;;;AAKA,SAAgB,yCACd,aACqC;CACrC,OAAO;EACL,gBAAgB,YAAY;EAC5B,YAAY,YAAY,WAAW,KAAK,cAAc;GACpD,UAAU,SAAS;GACnB,SAAS,SAAS;GAClB,QAAQ,SAAS,OAAO,IAAI,4CAA4C;EAC1E,EAAE;CACJ;AACF;AAEA,SAAS,6CACP,OACyC;CACzC,IAAI,MAAM,SAAS,cACjB,OAAO;EAAE,MAAM;EAAc,YAAY,MAAM;CAAW;CAE5D,OAAO;EAAE,MAAM;EAAW,YAAY,MAAM;CAAU;AACxD;;;;AAKA,SAAgB,0BACd,QACwB;CACxB,OAAO;EACL,UAAU,OAAO;EACjB,QAAQ,OAAO;EACf,YAAY,OAAO;EACnB,wBAAwB,OAAO;EAC/B,YAAY,OAAO;CACrB;AACF"}
1
+ {"version":3,"file":"dataMappers.cjs","names":[],"sources":["../src/dataMappers.ts"],"sourcesContent":["import {\n MobileFeedPage,\n MobileFeedTrade,\n MobileIdentity,\n MobileNotificationPreferenceScope,\n MobileNotificationPreferences,\n MobilePublicProfile,\n MobileRegisteredDevice,\n} from './types/clientTypes';\nimport {\n MobileServerFeedTrade,\n MobileServerIdentity,\n MobileServerNotificationPreferenceScope,\n MobileServerNotificationPreferences,\n MobileServerProfile,\n MobileServerRegisteredDevice,\n} from './types/serverModelTypes';\nimport { MobileServerFeedResponse } from './types/serverQueryTypes';\n\n/**\n * Maps a server-side identity (snake_case) to its client-side (camelCase) representation.\n */\nexport function mapMobileIdentity(\n server: MobileServerIdentity,\n): MobileIdentity {\n return {\n subaccount: server.subaccount,\n username: server.username,\n displayName: server.display_name,\n privateMode: server.private_mode,\n };\n}\n\n/**\n * Maps a server-side public profile (snake_case) to its client-side (camelCase) representation.\n */\nexport function mapMobilePublicProfile(\n server: MobileServerProfile,\n): MobilePublicProfile {\n return {\n subaccount: server.subaccount,\n username: server.username,\n displayName: server.display_name,\n privateMode: server.private_mode,\n };\n}\n\n/**\n * Maps server-side notification preferences (snake_case) to their client-side (camelCase) representation.\n */\nexport function mapMobileNotificationPreferences(\n server: MobileServerNotificationPreferences,\n): MobileNotificationPreferences {\n return {\n schemaVersion: server.schema_version,\n categories: server.categories.map((category) => ({\n category: category.category,\n enabled: category.enabled,\n scopes: category.scopes.map(mapMobileNotificationPreferenceScope),\n })),\n };\n}\n\nfunction mapMobileNotificationPreferenceScope(\n server: MobileServerNotificationPreferenceScope,\n): MobileNotificationPreferenceScope {\n if (server.type === 'subaccount') {\n return { type: 'subaccount', subaccount: server.subaccount };\n }\n return { type: 'product', productId: server.product_id };\n}\n\n/**\n * Maps client-side notification preferences (camelCase) to the server-side (snake_case) wire shape.\n */\nexport function mapMobileNotificationPreferencesToServer(\n preferences: MobileNotificationPreferences,\n): MobileServerNotificationPreferences {\n return {\n schema_version: preferences.schemaVersion,\n categories: preferences.categories.map((category) => ({\n category: category.category,\n enabled: category.enabled,\n scopes: category.scopes.map(mapMobileNotificationPreferenceScopeToServer),\n })),\n };\n}\n\nfunction mapMobileNotificationPreferenceScopeToServer(\n scope: MobileNotificationPreferenceScope,\n): MobileServerNotificationPreferenceScope {\n if (scope.type === 'subaccount') {\n return { type: 'subaccount', subaccount: scope.subaccount };\n }\n return { type: 'product', product_id: scope.productId };\n}\n\n/**\n * Maps a server-side feed trade (snake_case) to its client-side (camelCase) representation.\n */\nfunction mapMobileFeedTrade(server: MobileServerFeedTrade): MobileFeedTrade {\n return {\n orderDigest: server.order_digest,\n subaccount: server.subaccount,\n username: server.username,\n displayName: server.display_name,\n avatarUrl: server.avatar_url,\n productId: server.product_id,\n quantity: server.quantity,\n notional: server.notional,\n averagePrice: server.average_price,\n margin: {\n mode: server.margin.mode,\n estimatedLeverage: server.margin.estimated_leverage,\n },\n position: server.position,\n realizedPnl: server.realized_pnl,\n filledAt: server.filled_at_ms,\n };\n}\n\n/**\n * Maps a server-side feed response to a client-side {@link MobileFeedPage}.\n */\nexport function mapMobileFeedPage(\n server: MobileServerFeedResponse,\n): MobileFeedPage {\n return {\n trades: server.trades.map(mapMobileFeedTrade),\n nextCursor: server.next_cursor,\n };\n}\n\n/**\n * Maps a server-side registered device (snake_case) to its client-side (camelCase) representation.\n */\nexport function mapMobileRegisteredDevice(\n server: MobileServerRegisteredDevice,\n): MobileRegisteredDevice {\n return {\n platform: server.platform,\n locale: server.locale,\n appVersion: server.app_version,\n tokenFingerprintPrefix: server.token_fingerprint_prefix,\n lastSeenAt: server.last_seen_at,\n };\n}\n"],"mappings":";;;;;AAsBA,SAAgB,kBACd,QACgB;CAChB,OAAO;EACL,YAAY,OAAO;EACnB,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB,aAAa,OAAO;CACtB;AACF;;;;AAKA,SAAgB,uBACd,QACqB;CACrB,OAAO;EACL,YAAY,OAAO;EACnB,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB,aAAa,OAAO;CACtB;AACF;;;;AAKA,SAAgB,iCACd,QAC+B;CAC/B,OAAO;EACL,eAAe,OAAO;EACtB,YAAY,OAAO,WAAW,KAAK,cAAc;GAC/C,UAAU,SAAS;GACnB,SAAS,SAAS;GAClB,QAAQ,SAAS,OAAO,IAAI,oCAAoC;EAClE,EAAE;CACJ;AACF;AAEA,SAAS,qCACP,QACmC;CACnC,IAAI,OAAO,SAAS,cAClB,OAAO;EAAE,MAAM;EAAc,YAAY,OAAO;CAAW;CAE7D,OAAO;EAAE,MAAM;EAAW,WAAW,OAAO;CAAW;AACzD;;;;AAKA,SAAgB,yCACd,aACqC;CACrC,OAAO;EACL,gBAAgB,YAAY;EAC5B,YAAY,YAAY,WAAW,KAAK,cAAc;GACpD,UAAU,SAAS;GACnB,SAAS,SAAS;GAClB,QAAQ,SAAS,OAAO,IAAI,4CAA4C;EAC1E,EAAE;CACJ;AACF;AAEA,SAAS,6CACP,OACyC;CACzC,IAAI,MAAM,SAAS,cACjB,OAAO;EAAE,MAAM;EAAc,YAAY,MAAM;CAAW;CAE5D,OAAO;EAAE,MAAM;EAAW,YAAY,MAAM;CAAU;AACxD;;;;AAKA,SAAS,mBAAmB,QAAgD;CAC1E,OAAO;EACL,aAAa,OAAO;EACpB,YAAY,OAAO;EACnB,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB,WAAW,OAAO;EAClB,WAAW,OAAO;EAClB,UAAU,OAAO;EACjB,UAAU,OAAO;EACjB,cAAc,OAAO;EACrB,QAAQ;GACN,MAAM,OAAO,OAAO;GACpB,mBAAmB,OAAO,OAAO;EACnC;EACA,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB,UAAU,OAAO;CACnB;AACF;;;;AAKA,SAAgB,kBACd,QACgB;CAChB,OAAO;EACL,QAAQ,OAAO,OAAO,IAAI,kBAAkB;EAC5C,YAAY,OAAO;CACrB;AACF;;;;AAKA,SAAgB,0BACd,QACwB;CACxB,OAAO;EACL,UAAU,OAAO;EACjB,QAAQ,OAAO;EACf,YAAY,OAAO;EACnB,wBAAwB,OAAO;EAC/B,YAAY,OAAO;CACrB;AACF"}
@@ -1,5 +1,6 @@
1
- import { c as MobileServerRegisteredDevice, o as MobileServerNotificationPreferences, r as MobileServerIdentity, s as MobileServerProfile } from "./serverModelTypes-CQgfqgW3.cjs";
2
- import { d as MobilePublicProfile, p as MobileRegisteredDevice, s as MobileIdentity, u as MobileNotificationPreferences } from "./clientTypes-Et0PUa2d.cjs";
1
+ import { _ as MobileServerRegisteredDevice, f as MobileServerIdentity, g as MobileServerProfile, h as MobileServerNotificationPreferences } from "./serverModelTypes-BYQcsRrx.cjs";
2
+ import { c as MobileFeedPage, g as MobileRegisteredDevice, m as MobilePublicProfile, p as MobileNotificationPreferences, u as MobileIdentity } from "./clientTypes-D9qgtNlE.cjs";
3
+ import { t as MobileServerFeedResponse } from "./serverQueryTypes-9H6P1vJ5.cjs";
3
4
 
4
5
  //#region src/dataMappers.d.ts
5
6
  /**
@@ -18,10 +19,14 @@ declare function mapMobileNotificationPreferences(server: MobileServerNotificati
18
19
  * Maps client-side notification preferences (camelCase) to the server-side (snake_case) wire shape.
19
20
  */
20
21
  declare function mapMobileNotificationPreferencesToServer(preferences: MobileNotificationPreferences): MobileServerNotificationPreferences;
22
+ /**
23
+ * Maps a server-side feed response to a client-side {@link MobileFeedPage}.
24
+ */
25
+ declare function mapMobileFeedPage(server: MobileServerFeedResponse): MobileFeedPage;
21
26
  /**
22
27
  * Maps a server-side registered device (snake_case) to its client-side (camelCase) representation.
23
28
  */
24
29
  declare function mapMobileRegisteredDevice(server: MobileServerRegisteredDevice): MobileRegisteredDevice;
25
30
  //#endregion
26
- export { mapMobileIdentity, mapMobileNotificationPreferences, mapMobileNotificationPreferencesToServer, mapMobilePublicProfile, mapMobileRegisteredDevice };
31
+ export { mapMobileFeedPage, mapMobileIdentity, mapMobileNotificationPreferences, mapMobileNotificationPreferencesToServer, mapMobilePublicProfile, mapMobileRegisteredDevice };
27
32
  //# sourceMappingURL=dataMappers.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataMappers.d.cts","names":[],"sources":["../src/src/dataMappers.ts"],"mappings":";;;;;;AAkBA;iBAAgB,iBAAA,CACd,MAAA,EAAQ,oBAAA,GACP,cAAc;;;;iBAYD,sBAAA,CACd,MAAA,EAAQ,mBAAA,GACP,mBAAmB;;;AAdL;iBAyBD,gCAAA,CACd,MAAA,EAAQ,mCAAA,GACP,6BAA6B;;;;iBAuBhB,wCAAA,CACd,WAAA,EAAa,6BAAA,GACZ,mCAAmC;;;;iBAuBtB,yBAAA,CACd,MAAA,EAAQ,4BAAA,GACP,sBAAsB"}
1
+ {"version":3,"file":"dataMappers.d.cts","names":[],"sources":["../src/src/dataMappers.ts"],"mappings":";;;;;;;AAsBA;iBAAgB,iBAAA,CACd,MAAA,EAAQ,oBAAA,GACP,cAAc;;;;iBAYD,sBAAA,CACd,MAAA,EAAQ,mBAAA,GACP,mBAAmB;;;AAdL;iBA0BD,gCAAA,CACd,MAAA,EAAQ,mCAAA,GACP,6BAA6B;;;;iBAuBhB,wCAAA,CACd,WAAA,EAAa,6BAAA,GACZ,mCAAmC;;;;iBA+CtB,iBAAA,CACd,MAAA,EAAQ,wBAAA,GACP,cAAc;AA5EjB;;;AAAA,iBAsFgB,yBAAA,CACd,MAAA,EAAQ,4BAAA,GACP,sBAAsB"}
@@ -1,5 +1,6 @@
1
- import { c as MobileServerRegisteredDevice, o as MobileServerNotificationPreferences, r as MobileServerIdentity, s as MobileServerProfile } from "./serverModelTypes-vEPhHIit.js";
2
- import { d as MobilePublicProfile, p as MobileRegisteredDevice, s as MobileIdentity, u as MobileNotificationPreferences } from "./clientTypes-DWW2N66c.js";
1
+ import { _ as MobileServerRegisteredDevice, f as MobileServerIdentity, g as MobileServerProfile, h as MobileServerNotificationPreferences } from "./serverModelTypes-DvPs5qs3.js";
2
+ import { c as MobileFeedPage, g as MobileRegisteredDevice, m as MobilePublicProfile, p as MobileNotificationPreferences, u as MobileIdentity } from "./clientTypes-6utzUU-b.js";
3
+ import { t as MobileServerFeedResponse } from "./serverQueryTypes-Cbjx0bIj.js";
3
4
 
4
5
  //#region src/dataMappers.d.ts
5
6
  /**
@@ -18,10 +19,14 @@ declare function mapMobileNotificationPreferences(server: MobileServerNotificati
18
19
  * Maps client-side notification preferences (camelCase) to the server-side (snake_case) wire shape.
19
20
  */
20
21
  declare function mapMobileNotificationPreferencesToServer(preferences: MobileNotificationPreferences): MobileServerNotificationPreferences;
22
+ /**
23
+ * Maps a server-side feed response to a client-side {@link MobileFeedPage}.
24
+ */
25
+ declare function mapMobileFeedPage(server: MobileServerFeedResponse): MobileFeedPage;
21
26
  /**
22
27
  * Maps a server-side registered device (snake_case) to its client-side (camelCase) representation.
23
28
  */
24
29
  declare function mapMobileRegisteredDevice(server: MobileServerRegisteredDevice): MobileRegisteredDevice;
25
30
  //#endregion
26
- export { mapMobileIdentity, mapMobileNotificationPreferences, mapMobileNotificationPreferencesToServer, mapMobilePublicProfile, mapMobileRegisteredDevice };
31
+ export { mapMobileFeedPage, mapMobileIdentity, mapMobileNotificationPreferences, mapMobileNotificationPreferencesToServer, mapMobilePublicProfile, mapMobileRegisteredDevice };
27
32
  //# sourceMappingURL=dataMappers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataMappers.d.ts","names":[],"sources":["../src/src/dataMappers.ts"],"mappings":";;;;;;AAkBA;iBAAgB,iBAAA,CACd,MAAA,EAAQ,oBAAA,GACP,cAAc;;;;iBAYD,sBAAA,CACd,MAAA,EAAQ,mBAAA,GACP,mBAAmB;;;AAdL;iBAyBD,gCAAA,CACd,MAAA,EAAQ,mCAAA,GACP,6BAA6B;;;;iBAuBhB,wCAAA,CACd,WAAA,EAAa,6BAAA,GACZ,mCAAmC;;;;iBAuBtB,yBAAA,CACd,MAAA,EAAQ,4BAAA,GACP,sBAAsB"}
1
+ {"version":3,"file":"dataMappers.d.ts","names":[],"sources":["../src/src/dataMappers.ts"],"mappings":";;;;;;;AAsBA;iBAAgB,iBAAA,CACd,MAAA,EAAQ,oBAAA,GACP,cAAc;;;;iBAYD,sBAAA,CACd,MAAA,EAAQ,mBAAA,GACP,mBAAmB;;;AAdL;iBA0BD,gCAAA,CACd,MAAA,EAAQ,mCAAA,GACP,6BAA6B;;;;iBAuBhB,wCAAA,CACd,WAAA,EAAa,6BAAA,GACZ,mCAAmC;;;;iBA+CtB,iBAAA,CACd,MAAA,EAAQ,wBAAA,GACP,cAAc;AA5EjB;;;AAAA,iBAsFgB,yBAAA,CACd,MAAA,EAAQ,4BAAA,GACP,sBAAsB"}