@nadohq/mobile-client 0.65.0 → 0.67.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 (211) hide show
  1. package/README.md +202 -10
  2. package/dist/{MobileClient-CfVZXTcz.cjs → MobileClient-vuI5wlB_.cjs} +303 -21
  3. package/dist/MobileClient-vuI5wlB_.cjs.map +1 -0
  4. package/dist/MobileClient.cjs +1 -1
  5. package/dist/MobileClient.d.cts +175 -20
  6. package/dist/MobileClient.d.cts.map +1 -1
  7. package/dist/MobileClient.d.ts +175 -20
  8. package/dist/MobileClient.d.ts.map +1 -1
  9. package/dist/MobileClient.js +303 -21
  10. package/dist/MobileClient.js.map +1 -1
  11. package/dist/{MobileServerFailureError-BZVwlsMg.d.ts → MobileServerFailureError-BeCCNShj.d.cts} +2 -3
  12. package/dist/MobileServerFailureError-BeCCNShj.d.cts.map +1 -0
  13. package/dist/{MobileServerFailureError-CbtK8kD4.d.cts → MobileServerFailureError-hHv28weI.d.ts} +2 -3
  14. package/dist/MobileServerFailureError-hHv28weI.d.ts.map +1 -0
  15. package/dist/MobileUnsupportedNotificationRouteError-DpiNBvvY.d.cts +15 -0
  16. package/dist/MobileUnsupportedNotificationRouteError-DpiNBvvY.d.cts.map +1 -0
  17. package/dist/MobileUnsupportedNotificationRouteError-DpiNBvvY.d.ts +15 -0
  18. package/dist/MobileUnsupportedNotificationRouteError-DpiNBvvY.d.ts.map +1 -0
  19. package/dist/{buildSignedMobileRequest-C1v0flCR.d.cts → buildSignedMobileRequest-DcEMKU_4.d.cts} +2 -2
  20. package/dist/{buildSignedMobileRequest-C1v0flCR.d.cts.map → buildSignedMobileRequest-DcEMKU_4.d.cts.map} +1 -1
  21. package/dist/{buildSignedMobileRequest-UeeWdYGU.d.ts → buildSignedMobileRequest-DlTMvoXR.d.ts} +2 -2
  22. package/dist/{buildSignedMobileRequest-UeeWdYGU.d.ts.map → buildSignedMobileRequest-DlTMvoXR.d.ts.map} +1 -1
  23. package/dist/{canonicalize-5eeZrkzQ.d.ts → canonicalize-BOZlflI3.d.ts} +2 -2
  24. package/dist/canonicalize-BOZlflI3.d.ts.map +1 -0
  25. package/dist/{canonicalize-CBaZprTo.d.cts → canonicalize-BvCozzvJ.d.cts} +2 -2
  26. package/dist/canonicalize-BvCozzvJ.d.cts.map +1 -0
  27. package/dist/{clientTypes-_mEgzmNs.d.cts → clientTypes-KpHlCDGZ.d.cts} +341 -38
  28. package/dist/clientTypes-KpHlCDGZ.d.cts.map +1 -0
  29. package/dist/{clientTypes-C9dJufxk.d.ts → clientTypes-XRI41VdC.d.ts} +341 -38
  30. package/dist/clientTypes-XRI41VdC.d.ts.map +1 -0
  31. package/dist/dataMappers.cjs +257 -20
  32. package/dist/dataMappers.cjs.map +1 -1
  33. package/dist/dataMappers.d.cts +98 -15
  34. package/dist/dataMappers.d.cts.map +1 -1
  35. package/dist/dataMappers.d.ts +98 -15
  36. package/dist/dataMappers.d.ts.map +1 -1
  37. package/dist/dataMappers.js +242 -20
  38. package/dist/dataMappers.js.map +1 -1
  39. package/dist/{eip712MethodByType-D8jLoxDu.d.cts → eip712MethodByType-DyAmzH7b.d.cts} +2 -2
  40. package/dist/eip712MethodByType-DyAmzH7b.d.cts.map +1 -0
  41. package/dist/{eip712MethodByType-DcUh8h-l.d.ts → eip712MethodByType-qSSAF6i2.d.ts} +2 -2
  42. package/dist/eip712MethodByType-qSSAF6i2.d.ts.map +1 -0
  43. package/dist/feed-BrgkFqP3.d.cts +23 -0
  44. package/dist/feed-BrgkFqP3.d.cts.map +1 -0
  45. package/dist/feed-DcbhLoo1.d.ts +23 -0
  46. package/dist/feed-DcbhLoo1.d.ts.map +1 -0
  47. package/dist/index-BVVgDSdq.d.cts +1 -0
  48. package/dist/index-BVVgDSdq.d.ts +1 -0
  49. package/dist/index.cjs +8 -2
  50. package/dist/index.d.cts +14 -16
  51. package/dist/index.d.ts +14 -16
  52. package/dist/index.js +4 -3
  53. package/dist/{mobileErrorCodes-CmjYEIYm.d.ts → mobileErrorCodes-CdwX6QTO.d.cts} +8 -3
  54. package/dist/mobileErrorCodes-CdwX6QTO.d.cts.map +1 -0
  55. package/dist/{mobileErrorCodes-CmjYEIYm.d.cts → mobileErrorCodes-CdwX6QTO.d.ts} +8 -3
  56. package/dist/mobileErrorCodes-CdwX6QTO.d.ts.map +1 -0
  57. package/dist/{payloadHash-DhHmgRqL.d.cts → payloadHash-BgGSZock.d.cts} +2 -2
  58. package/dist/payloadHash-BgGSZock.d.cts.map +1 -0
  59. package/dist/{payloadHash-E1_8fpLW.d.ts → payloadHash-Bi6upCLQ.d.ts} +2 -2
  60. package/dist/payloadHash-Bi6upCLQ.d.ts.map +1 -0
  61. package/dist/{serverExecuteTypes-BwWGspOg.d.ts → serverExecuteTypes-DuCWe_H_.d.cts} +23 -14
  62. package/dist/serverExecuteTypes-DuCWe_H_.d.cts.map +1 -0
  63. package/dist/{serverExecuteTypes-B-OJok19.d.cts → serverExecuteTypes-usJ6HMJv.d.ts} +23 -14
  64. package/dist/serverExecuteTypes-usJ6HMJv.d.ts.map +1 -0
  65. package/dist/{serverModelTypes-CiA-dy1R.d.ts → serverModelTypes-CTHMNIQS.d.cts} +170 -13
  66. package/dist/serverModelTypes-CTHMNIQS.d.cts.map +1 -0
  67. package/dist/{serverModelTypes-CiA-dy1R.d.cts → serverModelTypes-CTHMNIQS.d.ts} +170 -13
  68. package/dist/serverModelTypes-CTHMNIQS.d.ts.map +1 -0
  69. package/dist/{serverResponseGuards-CShiXpHT.d.ts → serverResponseGuards-CzmldAad.d.cts} +2 -2
  70. package/dist/{serverResponseGuards-BW69PS7O.d.cts.map → serverResponseGuards-CzmldAad.d.cts.map} +1 -1
  71. package/dist/{serverResponseGuards-BW69PS7O.d.cts → serverResponseGuards-Dvkbjp2_.d.ts} +2 -2
  72. package/dist/{serverResponseGuards-CShiXpHT.d.ts.map → serverResponseGuards-Dvkbjp2_.d.ts.map} +1 -1
  73. package/dist/signing/buildSignedMobileRequest.d.cts +1 -1
  74. package/dist/signing/buildSignedMobileRequest.d.ts +1 -1
  75. package/dist/signing/canonicalize.cjs +53 -2
  76. package/dist/signing/canonicalize.cjs.map +1 -1
  77. package/dist/signing/canonicalize.d.cts +1 -1
  78. package/dist/signing/canonicalize.d.ts +1 -1
  79. package/dist/signing/canonicalize.js +53 -2
  80. package/dist/signing/canonicalize.js.map +1 -1
  81. package/dist/signing/eip712MethodByType.cjs +7 -0
  82. package/dist/signing/eip712MethodByType.cjs.map +1 -1
  83. package/dist/signing/eip712MethodByType.d.cts +1 -1
  84. package/dist/signing/eip712MethodByType.d.ts +1 -1
  85. package/dist/signing/eip712MethodByType.js +7 -0
  86. package/dist/signing/eip712MethodByType.js.map +1 -1
  87. package/dist/signing/index.d.cts +5 -5
  88. package/dist/signing/index.d.ts +5 -5
  89. package/dist/signing/payloadHash.cjs +1 -1
  90. package/dist/signing/payloadHash.d.cts +1 -1
  91. package/dist/signing/payloadHash.d.ts +1 -1
  92. package/dist/signing/payloadHash.js +1 -1
  93. package/dist/signing/types.d.cts +1 -1
  94. package/dist/signing/types.d.ts +1 -1
  95. package/dist/types/MobileServerFailureError.d.cts +1 -1
  96. package/dist/types/MobileServerFailureError.d.ts +1 -1
  97. package/dist/types/MobileUnsupportedNotificationRouteError.cjs +19 -0
  98. package/dist/types/MobileUnsupportedNotificationRouteError.cjs.map +1 -0
  99. package/dist/types/MobileUnsupportedNotificationRouteError.d.cts +2 -0
  100. package/dist/types/MobileUnsupportedNotificationRouteError.d.ts +2 -0
  101. package/dist/types/MobileUnsupportedNotificationRouteError.js +18 -0
  102. package/dist/types/MobileUnsupportedNotificationRouteError.js.map +1 -0
  103. package/dist/types/clientTypes.d.cts +2 -2
  104. package/dist/types/clientTypes.d.ts +2 -2
  105. package/dist/types/index.cjs +4 -0
  106. package/dist/types/index.d.cts +8 -9
  107. package/dist/types/index.d.ts +8 -9
  108. package/dist/types/index.js +3 -2
  109. package/dist/types/mobileErrorCodes.cjs +11 -1
  110. package/dist/types/mobileErrorCodes.cjs.map +1 -1
  111. package/dist/types/mobileErrorCodes.d.cts +1 -1
  112. package/dist/types/mobileErrorCodes.d.ts +1 -1
  113. package/dist/types/mobileErrorCodes.js +11 -1
  114. package/dist/types/mobileErrorCodes.js.map +1 -1
  115. package/dist/types/serverBaseTypes.d.cts +1 -1
  116. package/dist/types/serverBaseTypes.d.ts +1 -1
  117. package/dist/types/serverExecuteTypes.d.cts +2 -2
  118. package/dist/types/serverExecuteTypes.d.ts +2 -2
  119. package/dist/types/serverModelTypes.cjs +15 -0
  120. package/dist/types/serverModelTypes.cjs.map +1 -1
  121. package/dist/types/serverModelTypes.d.cts +2 -2
  122. package/dist/types/serverModelTypes.d.ts +2 -2
  123. package/dist/types/serverModelTypes.js +14 -1
  124. package/dist/types/serverModelTypes.js.map +1 -1
  125. package/dist/types/serverQueryTypes.d.cts +2 -2
  126. package/dist/types/serverQueryTypes.d.ts +2 -2
  127. package/dist/types/serverRequestTypes.d.cts +2 -2
  128. package/dist/types/serverRequestTypes.d.ts +2 -2
  129. package/dist/types-CByl_NyJ.d.ts +825 -0
  130. package/dist/types-CByl_NyJ.d.ts.map +1 -0
  131. package/dist/types-CR5iaKR4.d.cts +825 -0
  132. package/dist/types-CR5iaKR4.d.cts.map +1 -0
  133. package/dist/utils/buildMobileFeedImageMultipart.cjs +31 -0
  134. package/dist/utils/buildMobileFeedImageMultipart.cjs.map +1 -0
  135. package/dist/utils/buildMobileFeedImageMultipart.d.cts +15 -0
  136. package/dist/utils/buildMobileFeedImageMultipart.d.cts.map +1 -0
  137. package/dist/utils/buildMobileFeedImageMultipart.d.ts +15 -0
  138. package/dist/utils/buildMobileFeedImageMultipart.d.ts.map +1 -0
  139. package/dist/utils/buildMobileFeedImageMultipart.js +30 -0
  140. package/dist/utils/buildMobileFeedImageMultipart.js.map +1 -0
  141. package/dist/utils/feed.cjs +12 -0
  142. package/dist/utils/feed.cjs.map +1 -1
  143. package/dist/utils/feed.d.cts +2 -2
  144. package/dist/utils/feed.d.ts +2 -2
  145. package/dist/utils/feed.js +11 -1
  146. package/dist/utils/feed.js.map +1 -1
  147. package/dist/utils/index.cjs +3 -1
  148. package/dist/utils/index.d.cts +3 -3
  149. package/dist/utils/index.d.ts +3 -3
  150. package/dist/utils/index.js +2 -2
  151. package/dist/utils/serverResponseGuards.d.cts +1 -1
  152. package/dist/utils/serverResponseGuards.d.ts +1 -1
  153. package/package.json +3 -3
  154. package/src/MobileClient.ts +444 -19
  155. package/src/dataMappers.test.ts +511 -6
  156. package/src/dataMappers.ts +325 -24
  157. package/src/feedImages.test.ts +309 -0
  158. package/src/notifications.test.ts +950 -0
  159. package/src/signing/canonicalize.ts +72 -0
  160. package/src/signing/eip712MethodByType.ts +10 -0
  161. package/src/signing/signing.test.ts +67 -1
  162. package/src/signing/types.ts +55 -9
  163. package/src/socialFeed.test.ts +63 -2
  164. package/src/types/MobileUnsupportedNotificationRouteError.ts +16 -0
  165. package/src/types/clientTypes.ts +427 -36
  166. package/src/types/index.ts +1 -0
  167. package/src/types/mobileErrorCodes.ts +10 -0
  168. package/src/types/serverExecuteTypes.ts +22 -10
  169. package/src/types/serverModelTypes.ts +216 -11
  170. package/src/types/serverQueryTypes.ts +106 -9
  171. package/src/types/serverRequestTypes.ts +114 -17
  172. package/src/utils/buildMobileFeedImageMultipart.test.ts +45 -0
  173. package/src/utils/buildMobileFeedImageMultipart.ts +36 -0
  174. package/src/utils/feed.ts +16 -0
  175. package/dist/MobileClient-CfVZXTcz.cjs.map +0 -1
  176. package/dist/MobileServerFailureError-BZVwlsMg.d.ts.map +0 -1
  177. package/dist/MobileServerFailureError-CbtK8kD4.d.cts.map +0 -1
  178. package/dist/canonicalize-5eeZrkzQ.d.ts.map +0 -1
  179. package/dist/canonicalize-CBaZprTo.d.cts.map +0 -1
  180. package/dist/clientTypes-C9dJufxk.d.ts.map +0 -1
  181. package/dist/clientTypes-_mEgzmNs.d.cts.map +0 -1
  182. package/dist/eip712MethodByType-D8jLoxDu.d.cts.map +0 -1
  183. package/dist/eip712MethodByType-DcUh8h-l.d.ts.map +0 -1
  184. package/dist/feed-DTJlsg8W.d.cts +0 -14
  185. package/dist/feed-DTJlsg8W.d.cts.map +0 -1
  186. package/dist/feed-DTJlsg8W.d.ts +0 -14
  187. package/dist/feed-DTJlsg8W.d.ts.map +0 -1
  188. package/dist/mobileErrorCodes-CmjYEIYm.d.cts.map +0 -1
  189. package/dist/mobileErrorCodes-CmjYEIYm.d.ts.map +0 -1
  190. package/dist/payloadHash-DhHmgRqL.d.cts.map +0 -1
  191. package/dist/payloadHash-E1_8fpLW.d.ts.map +0 -1
  192. package/dist/serverBaseTypes-B5J1_TyC.d.cts +0 -25
  193. package/dist/serverBaseTypes-B5J1_TyC.d.cts.map +0 -1
  194. package/dist/serverBaseTypes-DnLzsdm-.d.ts +0 -25
  195. package/dist/serverBaseTypes-DnLzsdm-.d.ts.map +0 -1
  196. package/dist/serverExecuteTypes-B-OJok19.d.cts.map +0 -1
  197. package/dist/serverExecuteTypes-BwWGspOg.d.ts.map +0 -1
  198. package/dist/serverModelTypes-CiA-dy1R.d.cts.map +0 -1
  199. package/dist/serverModelTypes-CiA-dy1R.d.ts.map +0 -1
  200. package/dist/serverQueryTypes-CJcjLB7n.d.ts +0 -283
  201. package/dist/serverQueryTypes-CJcjLB7n.d.ts.map +0 -1
  202. package/dist/serverQueryTypes-V1f9yE7L.d.cts +0 -283
  203. package/dist/serverQueryTypes-V1f9yE7L.d.cts.map +0 -1
  204. package/dist/serverRequestTypes-CRlkNSu5.d.cts +0 -270
  205. package/dist/serverRequestTypes-CRlkNSu5.d.cts.map +0 -1
  206. package/dist/serverRequestTypes-DZoOhV2o.d.ts +0 -270
  207. package/dist/serverRequestTypes-DZoOhV2o.d.ts.map +0 -1
  208. package/dist/types-BiRmH5Iv.d.cts +0 -108
  209. package/dist/types-BiRmH5Iv.d.cts.map +0 -1
  210. package/dist/types-DoJuq0Ij.d.ts +0 -108
  211. package/dist/types-DoJuq0Ij.d.ts.map +0 -1
@@ -11,8 +11,18 @@ import {
11
11
  MobileFollowMutationResult,
12
12
  MobileFollowSummary,
13
13
  MobileIdentitySummary,
14
+ MobileNotificationCapabilities,
15
+ MobileNotificationInboxV2,
16
+ MobileNotificationPayloadV2,
14
17
  MobileNotificationPreferenceScope,
15
18
  MobileNotificationPreferences,
19
+ MobileNotificationRegistrationV2,
20
+ MobileNotificationRoute,
21
+ MobileNotificationSettings,
22
+ MobileNotificationSettingsV2,
23
+ MobileNotificationSubscriptions,
24
+ MobileNotificationSubscriptionsUpdate,
25
+ MobileProductEvent,
16
26
  MobileProfileSearchPage,
17
27
  MobileProfilesInclude,
18
28
  MobilePublicProfile,
@@ -22,6 +32,7 @@ import {
22
32
  MobileSocialFeedActionResolutionResult,
23
33
  MobileSocialFeedAuthor,
24
34
  MobileSocialFeedCandle,
35
+ MobileSocialFeedCommentGroup,
25
36
  MobileSocialFeedCommentResult,
26
37
  MobileSocialFeedCommentsPage,
27
38
  MobileSocialFeedCompactCard,
@@ -31,6 +42,7 @@ import {
31
42
  MobileSocialFeedDrawingResult,
32
43
  MobileSocialFeedHistoryMetrics,
33
44
  MobileSocialFeedHistoryTake,
45
+ MobileSocialFeedImage,
34
46
  MobileSocialFeedInteraction,
35
47
  MobileSocialFeedItem,
36
48
  MobileSocialFeedItemBase,
@@ -48,6 +60,8 @@ import {
48
60
  MobileSocialFeedPositionHistory,
49
61
  MobileSocialFeedPositionPatch,
50
62
  MobileSocialFeedPositionResolutionResult,
63
+ MobileSocialFeedPositionThought,
64
+ MobileSocialFeedPositionThoughtsPage,
51
65
  MobileSocialFeedPositionsPage,
52
66
  MobileSocialFeedPost,
53
67
  MobileSocialFeedPresence,
@@ -65,11 +79,12 @@ import {
65
79
  MobileSocialFeedTradingContext,
66
80
  MobileSocialFeedTradingTarget,
67
81
  MobileSocialFeedUpdates,
68
- MobileSocialFeedViewsResult,
82
+ MobileSocialFeedUploadedImage,
69
83
  MobileSocialFeedWatchers,
70
84
  SearchMobileProfilesParams,
71
85
  } from './types/clientTypes';
72
86
  import { MobileUnsupportedFeedItemError } from './types/MobileUnsupportedFeedItemError';
87
+ import { MobileUnsupportedNotificationRouteError } from './types/MobileUnsupportedNotificationRouteError';
73
88
  import {
74
89
  MobileServerAvatarUploadResponse,
75
90
  MobileServerFollowBatchResponse,
@@ -78,7 +93,6 @@ import {
78
93
  MobileServerSocialFeedDrawingMutationResponse,
79
94
  MobileServerSocialFeedLikeResponse,
80
95
  MobileServerSocialFeedPresenceResponse,
81
- MobileServerSocialFeedViewsResponse,
82
96
  } from './types/serverExecuteTypes';
83
97
  import {
84
98
  MobileServerAvatarPreset,
@@ -86,18 +100,24 @@ import {
86
100
  MobileServerFeedTrade,
87
101
  MobileServerFollowSummary,
88
102
  MobileServerIdentitySummary,
103
+ MobileServerNotificationPayloadV2,
89
104
  MobileServerNotificationPreferenceScope,
90
105
  MobileServerNotificationPreferences,
106
+ MobileServerNotificationRoute,
107
+ MobileServerNotificationSettings,
108
+ MobileServerProductEvent,
91
109
  MobileServerProfile,
92
110
  MobileServerSocialFeedActionCandidate,
93
111
  MobileServerSocialFeedActionMarker,
94
112
  MobileServerSocialFeedAuthor,
95
113
  MobileServerSocialFeedCandle,
114
+ MobileServerSocialFeedCommentGroup,
96
115
  MobileServerSocialFeedCompactCard,
97
116
  MobileServerSocialFeedContentBase,
98
117
  MobileServerSocialFeedDrawing,
99
118
  MobileServerSocialFeedHistoryMetrics,
100
119
  MobileServerSocialFeedHistoryTake,
120
+ MobileServerSocialFeedImage,
101
121
  MobileServerSocialFeedInteraction,
102
122
  MobileServerSocialFeedItem,
103
123
  MobileServerSocialFeedItemBase,
@@ -118,11 +138,16 @@ import {
118
138
  MobileServerSocialFeedTraderBadge,
119
139
  MobileServerSocialFeedTradingContext,
120
140
  MobileServerSocialFeedTradingTarget,
141
+ MobileServerSocialFeedUploadedImage,
121
142
  MobileSocialFeedMention,
122
143
  } from './types/serverModelTypes';
123
144
  import {
124
145
  MobileServerFeedResponse,
125
146
  MobileServerFollowListResponse,
147
+ MobileServerNotificationInboxV2Response,
148
+ MobileServerNotificationRegistrationV2Response,
149
+ MobileServerNotificationSettingsV2Response,
150
+ MobileServerNotificationSubscriptionsResponse,
126
151
  MobileServerRegisteredWalletResponse,
127
152
  MobileServerSearchProfilesResponse,
128
153
  MobileServerSocialFeedActionResolutionResponse,
@@ -132,6 +157,8 @@ import {
132
157
  MobileServerSocialFeedPositionChartResponse,
133
158
  MobileServerSocialFeedPositionHistoryResponse,
134
159
  MobileServerSocialFeedPositionResolutionResponse,
160
+ MobileServerSocialFeedPositionThought,
161
+ MobileServerSocialFeedPositionThoughtsResponse,
135
162
  MobileServerSocialFeedPositionsResponse,
136
163
  MobileServerSocialFeedRankedResponse,
137
164
  MobileServerSocialFeedResponse,
@@ -141,7 +168,9 @@ import {
141
168
  } from './types/serverQueryTypes';
142
169
  import {
143
170
  MobileServerFollowListRequest,
171
+ MobileServerNotificationSubscriptionsUpdate,
144
172
  MobileServerProfilesInclude,
173
+ MobileServerRegisterExpoTokenV2Params,
145
174
  MobileServerSearchProfilesRequest,
146
175
  MobileServerSocialFeedListParams,
147
176
  MobileServerSocialFeedReadParams,
@@ -170,6 +199,209 @@ export function mapMobileAvatarUpload(
170
199
  };
171
200
  }
172
201
 
202
+ /** Maps a saved notification registration to the client model without the response envelope.
203
+ * @param server - Registration payload.
204
+ * @returns Saved generation and capabilities.
205
+ */
206
+ export function mapMobileNotificationRegistrationV2(
207
+ server: MobileServerNotificationRegistrationV2Response,
208
+ ): MobileNotificationRegistrationV2 {
209
+ return {
210
+ registrationGeneration: server.registration_generation,
211
+ capabilities: {
212
+ payloadVersions: server.capabilities.payload_versions,
213
+ typeIds: server.capabilities.type_ids,
214
+ routes: server.capabilities.routes,
215
+ },
216
+ };
217
+ }
218
+
219
+ /** Maps a v2 capability declaration to the registration wire format.
220
+ * @param capabilities - Device-supported features.
221
+ * @returns V2-only registration capabilities.
222
+ */
223
+ export function mapMobileNotificationCapabilitiesToServer(
224
+ capabilities: MobileNotificationCapabilities,
225
+ ): MobileServerRegisterExpoTokenV2Params['capabilities'] {
226
+ return {
227
+ payload_versions: capabilities.payloadVersions,
228
+ type_ids: capabilities.typeIds,
229
+ routes: capabilities.routes,
230
+ };
231
+ }
232
+
233
+ /** Maps complete notification settings to the client model.
234
+ * @param server - Saved settings.
235
+ * @returns CamelCase settings.
236
+ */
237
+ export function mapMobileNotificationSettings(
238
+ server: MobileServerNotificationSettings,
239
+ ): MobileNotificationSettings {
240
+ return {
241
+ myPositions: server.my_positions,
242
+ positionThresholds: server.position_thresholds,
243
+ myOrders: server.my_orders,
244
+ followingTrades: server.following_trades,
245
+ followingPosts: server.following_posts,
246
+ minTradeSizeUsd: server.min_trade_size_usd,
247
+ newFollowers: server.new_followers,
248
+ announcements: server.announcements,
249
+ discovery: server.discovery,
250
+ };
251
+ }
252
+
253
+ /** Maps a complete replacement settings document to wire format.
254
+ * @param settings - Complete client settings.
255
+ * @returns Settings accepted by the service.
256
+ */
257
+ export function mapMobileNotificationSettingsToServer(
258
+ settings: MobileNotificationSettings,
259
+ ): MobileServerNotificationSettings {
260
+ return {
261
+ my_positions: settings.myPositions,
262
+ position_thresholds: settings.positionThresholds,
263
+ my_orders: settings.myOrders,
264
+ following_trades: settings.followingTrades,
265
+ following_posts: settings.followingPosts,
266
+ min_trade_size_usd: settings.minTradeSizeUsd,
267
+ new_followers: settings.newFollowers,
268
+ announcements: settings.announcements,
269
+ discovery: settings.discovery,
270
+ };
271
+ }
272
+
273
+ /** Maps a revisioned settings response without the response envelope.
274
+ * @param server - Versioned settings payload.
275
+ * @returns Client settings and their revision.
276
+ */
277
+ export function mapMobileNotificationSettingsV2(
278
+ server: MobileServerNotificationSettingsV2Response,
279
+ ): MobileNotificationSettingsV2 {
280
+ return {
281
+ schemaVersion: server.schema_version,
282
+ revision: server.revision,
283
+ settings: mapMobileNotificationSettings(server.settings),
284
+ };
285
+ }
286
+
287
+ /** Maps wallet market subscriptions and Identity bells.
288
+ * @param server - Subscription payload.
289
+ * @returns Client subscription state without the response envelope.
290
+ */
291
+ export function mapMobileNotificationSubscriptions(
292
+ server: MobileServerNotificationSubscriptionsResponse,
293
+ ): MobileNotificationSubscriptions {
294
+ return {
295
+ revision: server.revision,
296
+ favoritesImported: server.favorites_imported,
297
+ marketIds: server.market_ids,
298
+ traderBells: server.trader_bells,
299
+ };
300
+ }
301
+
302
+ /** Maps one subscription operation, explicitly nulling unused wire operations.
303
+ * @param update - Exactly one revision-guarded operation.
304
+ * @returns The complete signed inner operation fields.
305
+ */
306
+ export function mapMobileNotificationSubscriptionsUpdateToServer(
307
+ update: MobileNotificationSubscriptionsUpdate,
308
+ ): MobileServerNotificationSubscriptionsUpdate {
309
+ return {
310
+ expected_revision: update.expectedRevision,
311
+ trader_bell:
312
+ update.traderBell == null
313
+ ? null
314
+ : {
315
+ subaccount: subaccountToHex(update.traderBell.subaccount),
316
+ enabled: update.traderBell.enabled,
317
+ },
318
+ market:
319
+ update.market == null
320
+ ? null
321
+ : {
322
+ product_id: update.market.productId,
323
+ subscribed: update.market.subscribed,
324
+ },
325
+ import_markets: update.importMarkets ?? null,
326
+ };
327
+ }
328
+
329
+ /** Maps an allowlisted notification destination.
330
+ * @param server - Named backend destination.
331
+ * @returns Client navigation data, never an arbitrary URL.
332
+ * @throws {MobileUnsupportedNotificationRouteError} If the service returns an unsupported route name.
333
+ */
334
+ export function mapMobileNotificationRoute(
335
+ server: MobileServerNotificationRoute,
336
+ ): MobileNotificationRoute {
337
+ const name = server.name;
338
+ switch (name) {
339
+ case 'market':
340
+ return { name: server.name, productId: server.product_id };
341
+ case 'profile':
342
+ return { name: server.name, subaccount: server.subaccount };
343
+ case 'portfolio':
344
+ return { name: server.name };
345
+ default:
346
+ throw new MobileUnsupportedNotificationRouteError(name satisfies never);
347
+ }
348
+ }
349
+
350
+ /** Maps v2 push or inbox navigation data.
351
+ * @param server - Wire-format notification payload.
352
+ * @returns Client notification data.
353
+ * @throws {MobileUnsupportedNotificationRouteError} If the service returns an unsupported route name.
354
+ */
355
+ export function mapMobileNotificationPayloadV2(
356
+ server: MobileServerNotificationPayloadV2,
357
+ ): MobileNotificationPayloadV2 {
358
+ return {
359
+ payloadVersion: server.payload_version,
360
+ notificationId: server.notification_id,
361
+ recipientWallet: server.recipient_wallet,
362
+ typeId: server.type_id,
363
+ templateVersion: server.template_version,
364
+ route: mapMobileNotificationRoute(server.route),
365
+ };
366
+ }
367
+
368
+ /** Maps a private notification page without the response envelope.
369
+ * @param server - Newest-first inbox payload.
370
+ * @returns Client items, attribution flags, and the next cursor.
371
+ * @throws {MobileUnsupportedNotificationRouteError} If a notification has an unsupported route name.
372
+ */
373
+ export function mapMobileNotificationInboxV2(
374
+ server: MobileServerNotificationInboxV2Response,
375
+ ): MobileNotificationInboxV2 {
376
+ return {
377
+ notifications: server.notifications.map((item) => ({
378
+ notificationId: item.notification_id,
379
+ typeId: item.type_id,
380
+ data: mapMobileNotificationPayloadV2(item.data),
381
+ createdAt: item.created_at,
382
+ tradeWithin24h: item.trade_within_24h,
383
+ })),
384
+ nextCursor: server.next_cursor,
385
+ };
386
+ }
387
+
388
+ /** Maps a typed analytics interaction, nulling unused wire fields.
389
+ * @param event - Event-specific client data.
390
+ * @returns Complete signed wire event.
391
+ */
392
+ export function mapMobileProductEventToServer(
393
+ event: MobileProductEvent,
394
+ ): MobileServerProductEvent {
395
+ return {
396
+ client_event_id: event.clientEventId,
397
+ event_name: event.eventName,
398
+ notification_id: event.notificationId ?? null,
399
+ occurred_at: event.occurredAt,
400
+ product_id: event.productId ?? null,
401
+ query: event.query ?? null,
402
+ };
403
+ }
404
+
173
405
  /**
174
406
  * Maps a client-side avatar selection to the signed wire payload; null clears the saved avatar.
175
407
  */
@@ -568,6 +800,43 @@ export function mapMobileSocialFeedInteraction(
568
800
  };
569
801
  }
570
802
 
803
+ /**
804
+ * Maps uploaded image metadata; bytes remain behind a protected GET.
805
+ * @param server - The service response.
806
+ * @returns The mapped feed image.
807
+ */
808
+ export function mapMobileSocialFeedUploadedImage(
809
+ server: MobileServerSocialFeedUploadedImage,
810
+ ): MobileSocialFeedUploadedImage {
811
+ return {
812
+ imageId: server.image_id,
813
+ url: server.url,
814
+ width: server.width,
815
+ height: server.height,
816
+ contentType: server.content_type,
817
+ byteSize: server.byte_size,
818
+ thumbnail: {
819
+ url: server.thumbnail.url,
820
+ width: server.thumbnail.width,
821
+ height: server.thumbnail.height,
822
+ },
823
+ };
824
+ }
825
+
826
+ /**
827
+ * Maps either protected upload metadata or an external URL without inventing metadata.
828
+ * @param server - The service response.
829
+ * @returns The mapped uploaded image or external URL.
830
+ */
831
+ export function mapMobileSocialFeedImage(
832
+ server: MobileServerSocialFeedImage,
833
+ ): MobileSocialFeedImage {
834
+ if ('image_id' in server) {
835
+ return mapMobileSocialFeedUploadedImage(server);
836
+ }
837
+ return { url: server.url };
838
+ }
839
+
571
840
  /**
572
841
  * Maps common item metadata and server capabilities.
573
842
  * @param server - The service response.
@@ -606,6 +875,7 @@ export function mapMobileSocialFeedContentBase(
606
875
  ): MobileSocialFeedContentBase {
607
876
  return {
608
877
  ...mapMobileSocialFeedItemBase(server),
878
+ images: server.images.map(mapMobileSocialFeedImage),
609
879
  text: server.text,
610
880
  mentions: server.mentions,
611
881
  position: mapMobileSocialFeedPositionCard(server.position),
@@ -715,7 +985,7 @@ export function mapMobileSocialFeedItem(
715
985
  }
716
986
 
717
987
  /**
718
- * Maps a fixed reading session, preserving opaque credentials and cursors.
988
+ * Maps a reading session and its current idle expiration, preserving opaque credentials and cursors.
719
989
  * @param server - The service response.
720
990
  * @returns The mapped feed read session.
721
991
  */
@@ -726,10 +996,6 @@ export function mapMobileSocialFeedReadSession(
726
996
  sessionId: server.session_id,
727
997
  mode: server.mode,
728
998
  expiresAtMs: server.expires_at_ms,
729
- viewTracking: {
730
- minVisibleRatio: server.view_tracking.min_visible_ratio,
731
- minDurationMs: server.view_tracking.min_duration_ms,
732
- },
733
999
  updateCursor: server.update_cursor,
734
1000
  viewerToken: server.viewer_token,
735
1001
  };
@@ -1023,6 +1289,7 @@ export function mapMobileSocialFeedReply(
1023
1289
  return {
1024
1290
  ...mapMobileSocialFeedItemBase(server),
1025
1291
  kind: server.kind,
1292
+ images: server.images.map(mapMobileSocialFeedImage),
1026
1293
  text: server.text,
1027
1294
  mentions: server.mentions,
1028
1295
  rootItemId: server.root_item_id,
@@ -1298,16 +1565,31 @@ export function mapMobileSocialFeedDrawingMutationResult(
1298
1565
  }
1299
1566
 
1300
1567
  /**
1301
- * Maps bidirectional comments and the actual returned session.
1568
+ * Maps a top-level comment and its complete flat descendants without sorting or dropping content.
1569
+ * @param server - A comment group from the service thread snapshot.
1570
+ * @returns The mapped top-level comment with each descendant's original parent relationship.
1571
+ */
1572
+ export function mapMobileSocialFeedCommentGroup(
1573
+ server: MobileServerSocialFeedCommentGroup,
1574
+ ): MobileSocialFeedCommentGroup {
1575
+ return {
1576
+ ...mapMobileSocialFeedReply(server),
1577
+ replies: server.replies.map(mapMobileSocialFeedReply),
1578
+ };
1579
+ }
1580
+
1581
+ /**
1582
+ * Maps complete comment groups in server order and the actual returned session.
1302
1583
  * @param server - Service payload with its original wire fields.
1303
- * @returns Mapped replies, total count, bidirectional cursors, nullable anchor, and the actual reading session.
1584
+ * @returns Mapped groups, whole-thread counts, bidirectional cursors, nullable anchor, and reading session.
1304
1585
  */
1305
1586
  export function mapMobileSocialFeedCommentsPage(
1306
1587
  server: MobileServerSocialFeedCommentsResponse,
1307
1588
  ): MobileSocialFeedCommentsPage {
1308
1589
  return {
1309
- comments: server.comments.map(mapMobileSocialFeedReply),
1590
+ comments: server.comments.map(mapMobileSocialFeedCommentGroup),
1310
1591
  totalCount: server.total_count,
1592
+ topLevelCount: server.top_level_count,
1311
1593
  nextCursor: server.next_cursor,
1312
1594
  previousCursor: server.previous_cursor,
1313
1595
  anchorReplyId: server.anchor_reply_id,
@@ -1345,20 +1627,6 @@ export function mapMobileSocialFeedLikeResult(
1345
1627
  };
1346
1628
  }
1347
1629
 
1348
- /**
1349
- * Maps exposure deduplication results without adding timestamps.
1350
- * @param server - Service payload with its original wire fields.
1351
- * @returns Newly accepted and duplicate item ID lists without inventing an observation timestamp.
1352
- */
1353
- export function mapMobileSocialFeedViewsResult(
1354
- server: MobileServerSocialFeedViewsResponse,
1355
- ): MobileSocialFeedViewsResult {
1356
- return {
1357
- acceptedItemIds: server.accepted_item_ids,
1358
- duplicateItemIds: server.duplicate_item_ids,
1359
- };
1360
- }
1361
-
1362
1630
  /**
1363
1631
  * Maps a published history take without treating unknown kinds as posts.
1364
1632
  * @param server - The published service item.
@@ -1420,6 +1688,7 @@ export function mapMobileSocialFeedPositionHistory(
1420
1688
  server: MobileServerSocialFeedPositionHistoryResponse,
1421
1689
  ): MobileSocialFeedPositionHistory {
1422
1690
  return {
1691
+ owner: mapMobileSocialFeedAuthor(server.owner),
1423
1692
  position: {
1424
1693
  ...mapMobileSocialFeedPositionCard(server.position),
1425
1694
  ...mapMobileSocialFeedHistoryMetrics(server.position),
@@ -1490,3 +1759,35 @@ export function mapMobileSocialFeedPresence(
1490
1759
  expiresInSeconds: server.expires_in_seconds,
1491
1760
  };
1492
1761
  }
1762
+
1763
+ /**
1764
+ * Maps a published thought, keeping its guaranteed analysis flag and drawing.
1765
+ * @param server - Service payload with its original wire fields.
1766
+ * @returns The mapped post or trade card with a non-null drawing.
1767
+ * @throws {MobileUnsupportedFeedItemError} If the service returns an unsupported take kind.
1768
+ */
1769
+ export function mapMobileSocialFeedPositionThought(
1770
+ server: MobileServerSocialFeedPositionThought,
1771
+ ): MobileSocialFeedPositionThought {
1772
+ return {
1773
+ ...mapMobileSocialFeedHistoryTake(server),
1774
+ hasAnalysis: server.has_analysis,
1775
+ drawing: mapMobileSocialFeedDrawing(server.drawing),
1776
+ };
1777
+ }
1778
+
1779
+ /**
1780
+ * Maps a thoughts page in server order, preserving empty pages with continuation cursors.
1781
+ * @param server - Service payload with its original wire fields.
1782
+ * @returns Thoughts, the next cursor, and the position reading session.
1783
+ * @throws {MobileUnsupportedFeedItemError} If an item is not a post or trade card.
1784
+ */
1785
+ export function mapMobileSocialFeedPositionThoughts(
1786
+ server: MobileServerSocialFeedPositionThoughtsResponse,
1787
+ ): MobileSocialFeedPositionThoughtsPage {
1788
+ return {
1789
+ items: server.items.map(mapMobileSocialFeedPositionThought),
1790
+ nextCursor: server.next_cursor,
1791
+ readSession: mapMobileSocialFeedReadSession(server.read_session),
1792
+ };
1793
+ }