@nadohq/mobile-client 0.66.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 (156) hide show
  1. package/README.md +110 -17
  2. package/dist/{MobileClient-M4oC4lrX.cjs → MobileClient-vuI5wlB_.cjs} +69 -29
  3. package/dist/MobileClient-vuI5wlB_.cjs.map +1 -0
  4. package/dist/MobileClient.cjs +1 -1
  5. package/dist/MobileClient.d.cts +50 -25
  6. package/dist/MobileClient.d.cts.map +1 -1
  7. package/dist/MobileClient.d.ts +50 -25
  8. package/dist/MobileClient.d.ts.map +1 -1
  9. package/dist/MobileClient.js +69 -29
  10. package/dist/MobileClient.js.map +1 -1
  11. package/dist/{MobileServerFailureError-MtS2reel.d.cts → MobileServerFailureError-BeCCNShj.d.cts} +2 -2
  12. package/dist/{MobileServerFailureError-MtS2reel.d.cts.map → MobileServerFailureError-BeCCNShj.d.cts.map} +1 -1
  13. package/dist/{MobileServerFailureError-C9iqNsxI.d.ts → MobileServerFailureError-hHv28weI.d.ts} +2 -2
  14. package/dist/{MobileServerFailureError-C9iqNsxI.d.ts.map → MobileServerFailureError-hHv28weI.d.ts.map} +1 -1
  15. package/dist/{buildSignedMobileRequest-DyKCK34Y.d.cts → buildSignedMobileRequest-DcEMKU_4.d.cts} +2 -2
  16. package/dist/{buildSignedMobileRequest-DyKCK34Y.d.cts.map → buildSignedMobileRequest-DcEMKU_4.d.cts.map} +1 -1
  17. package/dist/{buildSignedMobileRequest-BR-KJhIF.d.ts → buildSignedMobileRequest-DlTMvoXR.d.ts} +2 -2
  18. package/dist/{buildSignedMobileRequest-BR-KJhIF.d.ts.map → buildSignedMobileRequest-DlTMvoXR.d.ts.map} +1 -1
  19. package/dist/{canonicalize-Bv6UIAbR.d.ts → canonicalize-BOZlflI3.d.ts} +2 -2
  20. package/dist/canonicalize-BOZlflI3.d.ts.map +1 -0
  21. package/dist/{canonicalize-CWh3XZzj.d.cts → canonicalize-BvCozzvJ.d.cts} +2 -2
  22. package/dist/canonicalize-BvCozzvJ.d.cts.map +1 -0
  23. package/dist/{clientTypes-DOpUcu80.d.cts → clientTypes-KpHlCDGZ.d.cts} +75 -49
  24. package/dist/clientTypes-KpHlCDGZ.d.cts.map +1 -0
  25. package/dist/{clientTypes-BUn5_OzK.d.ts → clientTypes-XRI41VdC.d.ts} +75 -49
  26. package/dist/clientTypes-XRI41VdC.d.ts.map +1 -0
  27. package/dist/dataMappers.cjs +56 -17
  28. package/dist/dataMappers.cjs.map +1 -1
  29. package/dist/dataMappers.d.cts +33 -13
  30. package/dist/dataMappers.d.cts.map +1 -1
  31. package/dist/dataMappers.d.ts +33 -13
  32. package/dist/dataMappers.d.ts.map +1 -1
  33. package/dist/dataMappers.js +53 -17
  34. package/dist/dataMappers.js.map +1 -1
  35. package/dist/{eip712MethodByType-CJ6BoayT.d.cts → eip712MethodByType-DyAmzH7b.d.cts} +2 -2
  36. package/dist/eip712MethodByType-DyAmzH7b.d.cts.map +1 -0
  37. package/dist/{eip712MethodByType-Dx4mvgni.d.ts → eip712MethodByType-qSSAF6i2.d.ts} +2 -2
  38. package/dist/eip712MethodByType-qSSAF6i2.d.ts.map +1 -0
  39. package/dist/feed-BrgkFqP3.d.cts +23 -0
  40. package/dist/feed-BrgkFqP3.d.cts.map +1 -0
  41. package/dist/feed-DcbhLoo1.d.ts +23 -0
  42. package/dist/feed-DcbhLoo1.d.ts.map +1 -0
  43. package/dist/index-BVVgDSdq.d.cts +1 -0
  44. package/dist/index-BVVgDSdq.d.ts +1 -0
  45. package/dist/index.cjs +2 -1
  46. package/dist/index.d.cts +13 -13
  47. package/dist/index.d.ts +13 -13
  48. package/dist/index.js +2 -2
  49. package/dist/{mobileErrorCodes-vD6rbFuF.d.ts → mobileErrorCodes-CdwX6QTO.d.cts} +3 -3
  50. package/dist/{mobileErrorCodes-vD6rbFuF.d.cts.map → mobileErrorCodes-CdwX6QTO.d.cts.map} +1 -1
  51. package/dist/{mobileErrorCodes-vD6rbFuF.d.cts → mobileErrorCodes-CdwX6QTO.d.ts} +3 -3
  52. package/dist/{mobileErrorCodes-vD6rbFuF.d.ts.map → mobileErrorCodes-CdwX6QTO.d.ts.map} +1 -1
  53. package/dist/{payloadHash-CdkF2Ocr.d.cts → payloadHash-BgGSZock.d.cts} +2 -2
  54. package/dist/payloadHash-BgGSZock.d.cts.map +1 -0
  55. package/dist/{payloadHash-HD29K77M.d.ts → payloadHash-Bi6upCLQ.d.ts} +2 -2
  56. package/dist/payloadHash-Bi6upCLQ.d.ts.map +1 -0
  57. package/dist/{serverExecuteTypes-5JyyIXRK.d.ts → serverExecuteTypes-DuCWe_H_.d.cts} +7 -14
  58. package/dist/{serverExecuteTypes-CHrQ9Rtq.d.cts.map → serverExecuteTypes-DuCWe_H_.d.cts.map} +1 -1
  59. package/dist/{serverExecuteTypes-CHrQ9Rtq.d.cts → serverExecuteTypes-usJ6HMJv.d.ts} +7 -14
  60. package/dist/{serverExecuteTypes-5JyyIXRK.d.ts.map → serverExecuteTypes-usJ6HMJv.d.ts.map} +1 -1
  61. package/dist/{serverModelTypes-CGUZCi0y.d.ts → serverModelTypes-CTHMNIQS.d.cts} +16 -14
  62. package/dist/serverModelTypes-CTHMNIQS.d.cts.map +1 -0
  63. package/dist/{serverModelTypes-CGUZCi0y.d.cts → serverModelTypes-CTHMNIQS.d.ts} +16 -14
  64. package/dist/serverModelTypes-CTHMNIQS.d.ts.map +1 -0
  65. package/dist/{serverResponseGuards-i1njcYKN.d.cts → serverResponseGuards-CzmldAad.d.cts} +2 -2
  66. package/dist/{serverResponseGuards-i1njcYKN.d.cts.map → serverResponseGuards-CzmldAad.d.cts.map} +1 -1
  67. package/dist/{serverResponseGuards-Bvw8ltYJ.d.ts → serverResponseGuards-Dvkbjp2_.d.ts} +2 -2
  68. package/dist/{serverResponseGuards-Bvw8ltYJ.d.ts.map → serverResponseGuards-Dvkbjp2_.d.ts.map} +1 -1
  69. package/dist/signing/buildSignedMobileRequest.d.cts +1 -1
  70. package/dist/signing/buildSignedMobileRequest.d.ts +1 -1
  71. package/dist/signing/canonicalize.cjs +4 -2
  72. package/dist/signing/canonicalize.cjs.map +1 -1
  73. package/dist/signing/canonicalize.d.cts +1 -1
  74. package/dist/signing/canonicalize.d.ts +1 -1
  75. package/dist/signing/canonicalize.js +4 -2
  76. package/dist/signing/canonicalize.js.map +1 -1
  77. package/dist/signing/eip712MethodByType.d.cts +1 -1
  78. package/dist/signing/eip712MethodByType.d.ts +1 -1
  79. package/dist/signing/index.d.cts +5 -5
  80. package/dist/signing/index.d.ts +5 -5
  81. package/dist/signing/payloadHash.d.cts +1 -1
  82. package/dist/signing/payloadHash.d.ts +1 -1
  83. package/dist/signing/types.d.cts +1 -1
  84. package/dist/signing/types.d.ts +1 -1
  85. package/dist/types/MobileServerFailureError.d.cts +1 -1
  86. package/dist/types/MobileServerFailureError.d.ts +1 -1
  87. package/dist/types/clientTypes.d.cts +2 -2
  88. package/dist/types/clientTypes.d.ts +2 -2
  89. package/dist/types/index.d.cts +7 -7
  90. package/dist/types/index.d.ts +7 -7
  91. package/dist/types/mobileErrorCodes.cjs +2 -2
  92. package/dist/types/mobileErrorCodes.cjs.map +1 -1
  93. package/dist/types/mobileErrorCodes.d.cts +1 -1
  94. package/dist/types/mobileErrorCodes.d.ts +1 -1
  95. package/dist/types/mobileErrorCodes.js +2 -2
  96. package/dist/types/mobileErrorCodes.js.map +1 -1
  97. package/dist/types/serverBaseTypes.d.cts +1 -1
  98. package/dist/types/serverBaseTypes.d.ts +1 -1
  99. package/dist/types/serverExecuteTypes.d.cts +2 -2
  100. package/dist/types/serverExecuteTypes.d.ts +2 -2
  101. package/dist/types/serverModelTypes.cjs.map +1 -1
  102. package/dist/types/serverModelTypes.d.cts +2 -2
  103. package/dist/types/serverModelTypes.d.ts +2 -2
  104. package/dist/types/serverModelTypes.js.map +1 -1
  105. package/dist/types/serverQueryTypes.d.cts +2 -2
  106. package/dist/types/serverQueryTypes.d.ts +2 -2
  107. package/dist/types/serverRequestTypes.d.cts +1 -1
  108. package/dist/types/serverRequestTypes.d.ts +1 -1
  109. package/dist/{types-C9YE4EIt.d.cts → types-CByl_NyJ.d.ts} +49 -18
  110. package/dist/types-CByl_NyJ.d.ts.map +1 -0
  111. package/dist/{types-Cwy1y_9x.d.ts → types-CR5iaKR4.d.cts} +49 -18
  112. package/dist/types-CR5iaKR4.d.cts.map +1 -0
  113. package/dist/utils/feed.cjs +9 -0
  114. package/dist/utils/feed.cjs.map +1 -1
  115. package/dist/utils/feed.d.cts +2 -2
  116. package/dist/utils/feed.d.ts +2 -2
  117. package/dist/utils/feed.js +9 -1
  118. package/dist/utils/feed.js.map +1 -1
  119. package/dist/utils/index.cjs +1 -0
  120. package/dist/utils/index.d.cts +3 -3
  121. package/dist/utils/index.d.ts +3 -3
  122. package/dist/utils/index.js +2 -2
  123. package/dist/utils/serverResponseGuards.d.cts +1 -1
  124. package/dist/utils/serverResponseGuards.d.ts +1 -1
  125. package/package.json +3 -3
  126. package/src/MobileClient.ts +82 -34
  127. package/src/dataMappers.test.ts +408 -9
  128. package/src/dataMappers.ts +76 -23
  129. package/src/signing/canonicalize.ts +6 -0
  130. package/src/signing/signing.test.ts +51 -0
  131. package/src/signing/types.ts +4 -0
  132. package/src/socialFeed.test.ts +53 -28
  133. package/src/types/clientTypes.ts +82 -47
  134. package/src/types/mobileErrorCodes.ts +2 -2
  135. package/src/types/serverExecuteTypes.ts +4 -12
  136. package/src/types/serverModelTypes.ts +19 -13
  137. package/src/types/serverQueryTypes.ts +32 -4
  138. package/src/types/serverRequestTypes.ts +20 -12
  139. package/src/utils/feed.ts +13 -0
  140. package/dist/MobileClient-M4oC4lrX.cjs.map +0 -1
  141. package/dist/canonicalize-Bv6UIAbR.d.ts.map +0 -1
  142. package/dist/canonicalize-CWh3XZzj.d.cts.map +0 -1
  143. package/dist/clientTypes-BUn5_OzK.d.ts.map +0 -1
  144. package/dist/clientTypes-DOpUcu80.d.cts.map +0 -1
  145. package/dist/eip712MethodByType-CJ6BoayT.d.cts.map +0 -1
  146. package/dist/eip712MethodByType-Dx4mvgni.d.ts.map +0 -1
  147. package/dist/feed-DErOLaoY.d.cts +0 -16
  148. package/dist/feed-DErOLaoY.d.cts.map +0 -1
  149. package/dist/feed-DErOLaoY.d.ts +0 -16
  150. package/dist/feed-DErOLaoY.d.ts.map +0 -1
  151. package/dist/payloadHash-CdkF2Ocr.d.cts.map +0 -1
  152. package/dist/payloadHash-HD29K77M.d.ts.map +0 -1
  153. package/dist/serverModelTypes-CGUZCi0y.d.cts.map +0 -1
  154. package/dist/serverModelTypes-CGUZCi0y.d.ts.map +0 -1
  155. package/dist/types-C9YE4EIt.d.cts.map +0 -1
  156. package/dist/types-Cwy1y_9x.d.ts.map +0 -1
@@ -35,7 +35,6 @@ import {
35
35
  mapMobileSocialFeedCommentsPage,
36
36
  mapMobileSocialFeedDrawingMutationResult,
37
37
  mapMobileSocialFeedDrawingResult,
38
- mapMobileSocialFeedImage,
39
38
  mapMobileSocialFeedItem,
40
39
  mapMobileSocialFeedItemResponse,
41
40
  mapMobileSocialFeedLikeResult,
@@ -46,12 +45,13 @@ import {
46
45
  mapMobileSocialFeedPositionHistory,
47
46
  mapMobileSocialFeedPositionResolutionResult,
48
47
  mapMobileSocialFeedPositionsPage,
48
+ mapMobileSocialFeedPositionThoughts,
49
49
  mapMobileSocialFeedPresence,
50
50
  mapMobileSocialFeedRankedPage,
51
51
  mapMobileSocialFeedReadParamsToServer,
52
52
  mapMobileSocialFeedTopTradersPage,
53
53
  mapMobileSocialFeedUpdates,
54
- mapMobileSocialFeedViewsResult,
54
+ mapMobileSocialFeedUploadedImage,
55
55
  mapMobileSocialFeedWatchers,
56
56
  } from './dataMappers';
57
57
  import {
@@ -82,7 +82,9 @@ import {
82
82
  GetMobileNotificationSubscriptionsParams,
83
83
  GetMobilePositionChartParams,
84
84
  GetMobilePositionFeedParams,
85
+ GetMobilePositionHistoryAllParams,
85
86
  GetMobilePositionHistoryParams,
87
+ GetMobilePositionThoughtsParams,
86
88
  GetMobilePositionWatchersParams,
87
89
  GetMobileProfileFeedParams,
88
90
  GetMobileProfilesParams,
@@ -128,7 +130,6 @@ import {
128
130
  MobileSocialFeedCommentsPage,
129
131
  MobileSocialFeedDrawingMutationResult,
130
132
  MobileSocialFeedDrawingResult,
131
- MobileSocialFeedImage,
132
133
  MobileSocialFeedItem,
133
134
  MobileSocialFeedItemResponse,
134
135
  MobileSocialFeedLikeResult,
@@ -137,11 +138,12 @@ import {
137
138
  MobileSocialFeedPositionHistory,
138
139
  MobileSocialFeedPositionResolutionResult,
139
140
  MobileSocialFeedPositionsPage,
141
+ MobileSocialFeedPositionThoughtsPage,
140
142
  MobileSocialFeedPresence,
141
143
  MobileSocialFeedRankedPage,
142
144
  MobileSocialFeedTopTradersPage,
143
145
  MobileSocialFeedUpdates,
144
- MobileSocialFeedViewsResult,
146
+ MobileSocialFeedUploadedImage,
145
147
  MobileSocialFeedWatchers,
146
148
  MobileUnregisterExpoTokenParams,
147
149
  MobileUpdateNotificationPreferencesParams,
@@ -512,9 +514,8 @@ export class MobileClient {
512
514
  /**
513
515
  * Reads one item visible to viewAs, including that account's own hidden content.
514
516
  * Creates an item session directly when sessionId is omitted.
515
- * Pass {@link GetMobileFeedItemParams.viewEventId} when the user navigates into the detail so the
516
- * subsequent {@link recordFeedViews} call can count that visit; omit it for prefetch.
517
- * @param params - Item UUID, optional detail-visit event, preview limit, and optional existing session/read identity.
517
+ * Reading does not increment views; use {@link recordFeedViews} independently when reporting views.
518
+ * @param params - Item UUID, preview limit, and optional existing session/read identity.
518
519
  * @returns The complete item and authorized reading session.
519
520
  * @throws {MobileServerFailureError} On inaccessible content or session mismatch/expiry.
520
521
  * @throws {MobileUnsupportedFeedItemError} If the service returns an unsupported item kind.
@@ -525,7 +526,6 @@ export class MobileClient {
525
526
  const body: MobileServerPublicQueryRequest<'feed_item'> = {
526
527
  type: 'feed_item',
527
528
  item_id: params.itemId,
528
- view_event_id: params.viewEventId,
529
529
  comment_preview_limit: params.commentPreviewLimit,
530
530
  session_id: params.sessionId,
531
531
  ...mapMobileSocialFeedReadParamsToServer(params),
@@ -696,7 +696,7 @@ export class MobileClient {
696
696
 
697
697
  /**
698
698
  * Prepares a protected image request for native image components without downloading or encoding bytes.
699
- * Does not count as a detail visit or recorded view.
699
+ * Does not increment view counts.
700
700
  * @param params - Image path from metadata plus the original session credentials.
701
701
  * @returns Absolute URL and headers; pass them as the image source's URI and headers.
702
702
  */
@@ -714,7 +714,7 @@ export class MobileClient {
714
714
 
715
715
  /**
716
716
  * Fetches protected feed image bytes using the reading session that fully delivered the parent item.
717
- * Does not count as a detail visit or recorded view.
717
+ * Does not increment view counts.
718
718
  * @param params - Image path from metadata plus the original session credentials.
719
719
  * @returns Raw image bytes.
720
720
  * @throws {MobileServerFailureError} On session, permission, or availability errors.
@@ -727,11 +727,14 @@ export class MobileClient {
727
727
  }
728
728
 
729
729
  /**
730
- * Reads a comment thread with an optional anchor and bidirectional pagination.
730
+ * Reads top-level comment groups with all readable descendants and bidirectional pagination.
731
+ * The limit counts groups, not descendants. Groups are newest first; their flat replies are oldest first,
732
+ * with depth then UUID breaking timestamp ties. An anchor at any depth selects its top-level group.
733
+ * Preview cursors open the first complete group page in the same snapshot; do not prepend preview items.
731
734
  * Independent reads create a public-only session; reused sessions retain their original scope.
732
- * @param params - Root item, optional anchor or cursor (mutually exclusive), page size, and read perspective.
735
+ * @param params - Root item, optional anchor or cursor (mutually exclusive), group limit, and read perspective.
733
736
  * Paging requires the original session and viewer token.
734
- * @returns Replies, total count, forward and backward cursors, the anchor, and the actual reading session.
737
+ * @returns Complete comment groups, whole-thread reply and top-level counts, cursors, anchor, and session.
735
738
  * @throws {MobileServerFailureError} On invalid parameters, session mismatch or expiry, inaccessible content,
736
739
  * or unavailable data. Restart pagination with a new session after expiry; do not reuse the old cursor.
737
740
  */
@@ -757,7 +760,8 @@ export class MobileClient {
757
760
  * the original position session and viewer token, not a feed session.
758
761
  * @returns Position metrics, ordered action/take history, summary, trading hints, cursor, and reading session.
759
762
  * @throws {MobileServerFailureError} On invalid parameters, session mismatch or expiry, inaccessible content,
760
- * or unavailable source data. Restart with a new position session after expiry.
763
+ * unavailable source data, or SOCIAL_FEED_HISTORY_TOO_LARGE when the initial directory exceeds capacity.
764
+ * Restart with a new position session after expiry.
761
765
  * @throws {MobileUnsupportedFeedItemError} If a timeline entry or take has an unsupported kind.
762
766
  */
763
767
  async getPositionHistory(
@@ -775,6 +779,53 @@ export class MobileClient {
775
779
  return mapMobileSocialFeedPositionHistory(await this.publicQuery(body));
776
780
  }
777
781
 
782
+ /**
783
+ * Reads the most recent 500 lifecycle actions, without authored text, drawings, or images.
784
+ * Creates a new position session on every call. A null nextCursor means no pagination, not complete
785
+ * history; use getPositionHistory with a fresh session for the full lifecycle. takeCount is always zero.
786
+ * @param params - Position and read perspective; an existing viewer token may be reused.
787
+ * @returns Position metrics, owner, recent actions, response-scope counts, trading hints, and a new session.
788
+ * @throws {MobileServerFailureError} On invalid parameters, inaccessible content, unavailable data,
789
+ * or SOCIAL_FEED_HISTORY_TOO_LARGE when the initial directory exceeds capacity.
790
+ * @throws {MobileUnsupportedFeedItemError} If a timeline entry or take has an unsupported kind.
791
+ */
792
+ async getPositionHistoryAll(
793
+ params: GetMobilePositionHistoryAllParams,
794
+ ): Promise<MobileSocialFeedPositionHistory> {
795
+ const body: MobileServerPublicQueryRequest<'position_history_all'> = {
796
+ type: 'position_history_all',
797
+ position_id: params.positionId,
798
+ ...mapMobileSocialFeedReadParamsToServer(params),
799
+ };
800
+ return mapMobileSocialFeedPositionHistory(await this.publicQuery(body));
801
+ }
802
+
803
+ /**
804
+ * Reads published position thoughts with both nonblank text and a saved drawing, without signing.
805
+ * Keeps descending drawing creation time / item UUID order; editing a drawing does not move the item.
806
+ * Continue until nextCursor is null, even after an empty page. There is no 500-item total cap.
807
+ * Keep positionId, limit, sessionId, and viewerToken unchanged when paging; omitted viewAs inherits
808
+ * the session. History/feed sessions cannot be substituted. Refresh to include newly eligible content.
809
+ * @param params - Position, page size, read perspective, and original thoughts-session credentials for paging.
810
+ * @returns Complete thoughts and drawings in server order, a continuation cursor, and the reading session.
811
+ * @throws {MobileServerFailureError} On invalid parameters, session mismatch/expiry, inaccessible content,
812
+ * unavailable source data, or SOCIAL_FEED_HISTORY_TOO_LARGE when the initial directory exceeds capacity.
813
+ * @throws {MobileUnsupportedFeedItemError} If an item is not a post or trade card.
814
+ */
815
+ async getPositionThoughts(
816
+ params: GetMobilePositionThoughtsParams,
817
+ ): Promise<MobileSocialFeedPositionThoughtsPage> {
818
+ const body: MobileServerPublicQueryRequest<'position_thoughts'> = {
819
+ type: 'position_thoughts',
820
+ position_id: params.positionId,
821
+ limit: params.limit,
822
+ session_id: params.sessionId,
823
+ cursor: params.cursor,
824
+ ...mapMobileSocialFeedReadParamsToServer(params),
825
+ };
826
+ return mapMobileSocialFeedPositionThoughts(await this.publicQuery(body));
827
+ }
828
+
778
829
  /**
779
830
  * Reads candles and action markers without creating a reading session.
780
831
  * Preserve the original range, interval, and read perspective when paging with nextBeforeMs.
@@ -968,28 +1019,23 @@ export class MobileClient {
968
1019
  }
969
1020
 
970
1021
  /**
971
- * Reports a detail visit without signing. Feed-list card impressions and previews do not count.
972
- * After the primary detail target is shown in the foreground, send the same viewEventId previously
973
- * registered through {@link getFeedItem}, together with that response's sessionId and viewerToken.
974
- * Reuse the event ID on retries for the same visit; generate a new one only after leaving and re-entering.
975
- * @param params - Original reading session and viewer token, the registered detail-visit event, and exactly
976
- * one fully delivered, readable detail-target item ID.
977
- * @returns Separate lists of newly accepted and already-counted item IDs for that event.
978
- * @throws {MobileServerFailureError} On invalid parameters, an unregistered or rebound event
979
- * (`SOCIAL_FEED_VIEW_EVENT_REBOUND`), session mismatch or expiry, or an ineligible item.
980
- * Acquire a new session after expiry, re-register the same event via getFeedItem, then retry.
1022
+ * Reports views for posts, trade cards, comments, and replies without signing or a reading session.
1023
+ * Duplicate IDs count once within a request; another request increments them again. Only supplied IDs
1024
+ * count, not their parents. Missing, deleted, unpublished, excluded, or unsupported targets are skipped.
1025
+ * A successful response does not identify skipped items. Read interaction.viewCount for current counts.
1026
+ * This operation is not idempotent: retrying an uncertain result may count twice. No automatic retry is made.
1027
+ * @param params - itemIds: 1–50 canonical lowercase item UUIDs, including any same-request duplicates.
1028
+ * @returns Only the success status, even when every target was skipped.
1029
+ * @throws {MobileServerFailureError} On invalid parameters, disabled writes, rate limiting, or unavailable data.
981
1030
  */
982
1031
  async recordFeedViews(
983
1032
  params: MobileRecordFeedViewsParams,
984
- ): Promise<MobileSocialFeedViewsResult> {
1033
+ ): Promise<MobileServerSuccessResponse> {
985
1034
  const body: MobileServerPublicExecuteRequest<'record_feed_views'> = {
986
1035
  type: 'record_feed_views',
987
- session_id: params.sessionId,
988
- viewer_token: params.viewerToken,
989
- view_event_id: params.viewEventId,
990
- item_ids: [params.itemId],
1036
+ item_ids: params.itemIds,
991
1037
  };
992
- return mapMobileSocialFeedViewsResult(await this.publicExecute(body));
1038
+ return this.publicExecute(body);
993
1039
  }
994
1040
 
995
1041
  /**
@@ -1292,6 +1338,7 @@ export class MobileClient {
1292
1338
  mentions: params.mentions.map(mapMobileSocialFeedMentionToServer),
1293
1339
  drawing_data_json: params.drawingDataJson,
1294
1340
  image_ids: params.imageIds,
1341
+ image_urls: params.imageUrls,
1295
1342
  });
1296
1343
  return mapMobileSocialFeedItem((await this.execute(request)).item);
1297
1344
  }
@@ -1310,7 +1357,7 @@ export class MobileClient {
1310
1357
  */
1311
1358
  async createFeedPostImageUpload(
1312
1359
  params: MobileCreateFeedImageUploadParams,
1313
- ): Promise<MobileSocialFeedImage> {
1360
+ ): Promise<MobileSocialFeedUploadedImage> {
1314
1361
  return this.createFeedImageUpload('create_feed_post_image_uploads', params);
1315
1362
  }
1316
1363
 
@@ -1327,7 +1374,7 @@ export class MobileClient {
1327
1374
  */
1328
1375
  async createFeedCommentImageUpload(
1329
1376
  params: MobileCreateFeedImageUploadParams,
1330
- ): Promise<MobileSocialFeedImage> {
1377
+ ): Promise<MobileSocialFeedUploadedImage> {
1331
1378
  return this.createFeedImageUpload(
1332
1379
  'create_feed_comment_image_uploads',
1333
1380
  params,
@@ -1406,6 +1453,7 @@ export class MobileClient {
1406
1453
  mentions: params.mentions.map(mapMobileSocialFeedMentionToServer),
1407
1454
  attached_position_id: params.attachedPositionId,
1408
1455
  image_ids: params.imageIds,
1456
+ image_urls: params.imageUrls,
1409
1457
  });
1410
1458
  return mapMobileSocialFeedCommentResult(await this.execute(request));
1411
1459
  }
@@ -1562,7 +1610,7 @@ export class MobileClient {
1562
1610
  | 'create_feed_post_image_uploads'
1563
1611
  | 'create_feed_comment_image_uploads',
1564
1612
  params: MobileCreateFeedImageUploadParams,
1565
- ): Promise<MobileSocialFeedImage> {
1613
+ ): Promise<MobileSocialFeedUploadedImage> {
1566
1614
  const nonce = params.nonce ?? getMobileNonce();
1567
1615
  // Match the signed body's field lengths so oversized requests fail before prompting the wallet.
1568
1616
  const sizePayload = {
@@ -1586,7 +1634,7 @@ export class MobileClient {
1586
1634
  },
1587
1635
  );
1588
1636
  const data = await this.execute(request, params.fileBytes);
1589
- return mapMobileSocialFeedImage(data.image);
1637
+ return mapMobileSocialFeedUploadedImage(data.image);
1590
1638
  }
1591
1639
 
1592
1640
  private checkFeedImageRequestSize(byteLength: number): void {