@amityco/ts-sdk 6.2.0 → 6.2.1-0cf9bee.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 (236) hide show
  1. package/README.md +0 -4
  2. package/dist/@types/core/events.d.ts +1 -0
  3. package/dist/@types/core/events.d.ts.map +1 -1
  4. package/dist/@types/core/payload.d.ts +4 -0
  5. package/dist/@types/core/payload.d.ts.map +1 -1
  6. package/dist/@types/domains/channel.d.ts +5 -1
  7. package/dist/@types/domains/channel.d.ts.map +1 -1
  8. package/dist/@types/domains/marker.d.ts +2 -1
  9. package/dist/@types/domains/marker.d.ts.map +1 -1
  10. package/dist/channelRepsitory/api/createChannel.d.ts +1 -1
  11. package/dist/channelRepsitory/api/markAsRead.d.ts +1 -1
  12. package/dist/channelRepsitory/api/muteChannel.d.ts.map +1 -1
  13. package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
  14. package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts.map +1 -1
  15. package/dist/communityRepository/communityMembership/api/index.d.ts +3 -0
  16. package/dist/communityRepository/communityMembership/api/index.d.ts.map +1 -0
  17. package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts.map +1 -1
  18. package/dist/communityRepository/communityMembership/api/tests/addMembers.test.d.ts.map +1 -0
  19. package/dist/communityRepository/communityMembership/api/tests/removeMembers.test.d.ts.map +1 -0
  20. package/dist/communityRepository/communityMembership/index.d.ts +1 -0
  21. package/dist/communityRepository/communityMembership/index.d.ts.map +1 -1
  22. package/dist/communityRepository/communityMembership/observers/getMembers.d.ts.map +1 -1
  23. package/dist/communityRepository/communityModeration/api/banMembers.d.ts +16 -0
  24. package/dist/communityRepository/communityModeration/api/banMembers.d.ts.map +1 -0
  25. package/dist/communityRepository/communityModeration/api/index.d.ts +2 -2
  26. package/dist/communityRepository/communityModeration/api/index.d.ts.map +1 -1
  27. package/dist/communityRepository/communityModeration/api/test/banMembers.test.d.ts +2 -0
  28. package/dist/communityRepository/communityModeration/api/test/banMembers.test.d.ts.map +1 -0
  29. package/dist/communityRepository/communityModeration/api/test/unbanMembers.test.d.ts +2 -0
  30. package/dist/communityRepository/communityModeration/api/test/unbanMembers.test.d.ts.map +1 -0
  31. package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts +16 -0
  32. package/dist/communityRepository/communityModeration/api/unbanMembers.d.ts.map +1 -0
  33. package/dist/core/events.d.ts +3 -3
  34. package/dist/core/events.d.ts.map +1 -1
  35. package/dist/core/query/filtering.d.ts +1 -0
  36. package/dist/core/query/filtering.d.ts.map +1 -1
  37. package/dist/core/query/sorting.d.ts.map +1 -1
  38. package/dist/core/transports/mqtt.d.ts +1 -1
  39. package/dist/core/transports/mqtt.d.ts.map +1 -1
  40. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts +36 -0
  41. package/dist/feedRepository/api/getCustomRankingGlobalFeed.d.ts.map +1 -0
  42. package/dist/feedRepository/api/index.d.ts +1 -0
  43. package/dist/feedRepository/api/index.d.ts.map +1 -1
  44. package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
  45. package/dist/feedRepository/api/test/getCustomRankingGlobalFeed.test.d.ts +2 -0
  46. package/dist/feedRepository/api/test/getCustomRankingGlobalFeed.test.d.ts.map +1 -0
  47. package/dist/fileRepository/api/index.d.ts +3 -3
  48. package/dist/fileRepository/api/test/uploadFile.test.d.ts +2 -0
  49. package/dist/fileRepository/api/test/uploadFile.test.d.ts.map +1 -0
  50. package/dist/fileRepository/api/test/uploadImage.test.d.ts +2 -0
  51. package/dist/fileRepository/api/test/uploadImage.test.d.ts.map +1 -0
  52. package/dist/fileRepository/api/test/uploadVideo.test.d.ts +2 -0
  53. package/dist/fileRepository/api/test/uploadVideo.test.d.ts.map +1 -0
  54. package/dist/fileRepository/api/{createFile.d.ts → uploadFile.d.ts} +4 -4
  55. package/dist/fileRepository/api/uploadFile.d.ts.map +1 -0
  56. package/dist/fileRepository/api/{createImage.d.ts → uploadImage.d.ts} +4 -4
  57. package/dist/fileRepository/api/uploadImage.d.ts.map +1 -0
  58. package/dist/fileRepository/api/{createVideo.d.ts → uploadVideo.d.ts} +5 -5
  59. package/dist/fileRepository/api/uploadVideo.d.ts.map +1 -0
  60. package/dist/index.cjs.js +795 -193
  61. package/dist/index.esm.js +794 -194
  62. package/dist/index.umd.js +4 -4
  63. package/dist/marker/events/index.d.ts +1 -0
  64. package/dist/marker/events/index.d.ts.map +1 -1
  65. package/dist/marker/events/onFeedlMarkerUpdated.d.ts +17 -0
  66. package/dist/marker/events/onFeedlMarkerUpdated.d.ts.map +1 -0
  67. package/dist/messageRepository/api/createMessage.d.ts +1 -1
  68. package/dist/messageRepository/api/editMessage.d.ts +38 -0
  69. package/dist/messageRepository/api/editMessage.d.ts.map +1 -0
  70. package/dist/messageRepository/api/flagMessage.d.ts +14 -0
  71. package/dist/messageRepository/api/flagMessage.d.ts.map +1 -0
  72. package/dist/messageRepository/api/index.d.ts +5 -1
  73. package/dist/messageRepository/api/index.d.ts.map +1 -1
  74. package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts +14 -0
  75. package/dist/messageRepository/api/isMessageFlaggedByMe.d.ts.map +1 -0
  76. package/dist/messageRepository/api/markAsDelivered.d.ts +2 -2
  77. package/dist/messageRepository/api/{deleteMessage.d.ts → softDeleteMessage.d.ts} +6 -6
  78. package/dist/messageRepository/api/softDeleteMessage.d.ts.map +1 -0
  79. package/dist/messageRepository/api/tests/editMessage.test.d.ts +2 -0
  80. package/dist/messageRepository/api/tests/editMessage.test.d.ts.map +1 -0
  81. package/dist/messageRepository/api/tests/flagMessage.test.d.ts +2 -0
  82. package/dist/messageRepository/api/tests/flagMessage.test.d.ts.map +1 -0
  83. package/dist/messageRepository/api/tests/unflagMessage.test.d.ts +2 -0
  84. package/dist/messageRepository/api/tests/unflagMessage.test.d.ts.map +1 -0
  85. package/dist/messageRepository/api/unflagMessage.d.ts +14 -0
  86. package/dist/messageRepository/api/unflagMessage.d.ts.map +1 -0
  87. package/dist/messageRepository/api/updateMessage.d.ts.map +1 -1
  88. package/dist/postRepository/api/deletePost.d.ts +1 -1
  89. package/dist/postRepository/api/deletePost.d.ts.map +1 -1
  90. package/dist/postRepository/api/editPost.d.ts +24 -0
  91. package/dist/postRepository/api/editPost.d.ts.map +1 -0
  92. package/dist/postRepository/api/flagPost.d.ts +14 -0
  93. package/dist/postRepository/api/flagPost.d.ts.map +1 -0
  94. package/dist/postRepository/api/hardDeletePost.d.ts +16 -0
  95. package/dist/postRepository/api/hardDeletePost.d.ts.map +1 -0
  96. package/dist/postRepository/api/index.d.ts +6 -0
  97. package/dist/postRepository/api/index.d.ts.map +1 -1
  98. package/dist/postRepository/api/isPostFlaggedByMe.d.ts +14 -0
  99. package/dist/postRepository/api/isPostFlaggedByMe.d.ts.map +1 -0
  100. package/dist/postRepository/api/softDeletePost.d.ts +16 -0
  101. package/dist/postRepository/api/softDeletePost.d.ts.map +1 -0
  102. package/dist/postRepository/api/unflagPost.d.ts +14 -0
  103. package/dist/postRepository/api/unflagPost.d.ts.map +1 -0
  104. package/dist/postRepository/api/updatePost.d.ts.map +1 -1
  105. package/dist/subChannelRepository/api/startReadingAPI.d.ts.map +1 -1
  106. package/dist/subChannelRepository/api/stopReadingAPI.d.ts.map +1 -1
  107. package/dist/userRepository/api/flagUser.d.ts +14 -0
  108. package/dist/userRepository/api/flagUser.d.ts.map +1 -0
  109. package/dist/userRepository/api/index.d.ts +3 -0
  110. package/dist/userRepository/api/index.d.ts.map +1 -1
  111. package/dist/userRepository/api/isUserFlaggedByMe.d.ts +14 -0
  112. package/dist/userRepository/api/isUserFlaggedByMe.d.ts.map +1 -0
  113. package/dist/userRepository/{relationship/block/api → api}/queryBlockedUsers.d.ts +2 -2
  114. package/dist/userRepository/api/queryBlockedUsers.d.ts.map +1 -0
  115. package/dist/userRepository/api/tests/flagUser.test.d.ts +2 -0
  116. package/dist/userRepository/api/tests/flagUser.test.d.ts.map +1 -0
  117. package/dist/userRepository/api/tests/queryBlockedUsers.test.d.ts.map +1 -0
  118. package/dist/userRepository/api/tests/unflagUser.test.d.ts +2 -0
  119. package/dist/userRepository/api/tests/unflagUser.test.d.ts.map +1 -0
  120. package/dist/userRepository/api/unflagUser.d.ts +14 -0
  121. package/dist/userRepository/api/unflagUser.d.ts.map +1 -0
  122. package/dist/userRepository/observers/getBlockedUsers.d.ts +2 -0
  123. package/dist/userRepository/observers/getBlockedUsers.d.ts.map +1 -0
  124. package/dist/userRepository/observers/index.d.ts +1 -0
  125. package/dist/userRepository/observers/index.d.ts.map +1 -1
  126. package/dist/userRepository/relationship/block/observers/getBlockedUsers.d.ts.map +1 -1
  127. package/package.json +1 -1
  128. package/src/@types/core/events.ts +1 -0
  129. package/src/@types/core/payload.ts +5 -0
  130. package/src/@types/domains/channel.ts +7 -2
  131. package/src/@types/domains/marker.ts +1 -0
  132. package/src/categoryRepository/observers/getCategories.ts +4 -4
  133. package/src/channelRepsitory/api/markAsRead.ts +1 -1
  134. package/src/channelRepsitory/api/muteChannel.ts +8 -0
  135. package/src/channelRepsitory/api/tests/muteChannel.test.ts +12 -0
  136. package/src/channelRepsitory/channelMembership/observers/getMembers.ts +6 -6
  137. package/src/channelRepsitory/observers/getChannels.ts +5 -5
  138. package/src/channelRepsitory/observers/tests/getChannels.test.ts +3 -9
  139. package/src/client/utils/markerSyncEngine.ts +2 -14
  140. package/src/commentRepository/observers/getComments.ts +5 -5
  141. package/src/communityRepository/communityMembership/api/index.ts +2 -0
  142. package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.ts +1 -1
  143. package/src/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.ts +1 -1
  144. package/src/communityRepository/communityMembership/index.ts +1 -0
  145. package/src/communityRepository/communityMembership/observers/getMembers.ts +6 -8
  146. package/src/communityRepository/communityModeration/api/banMembers.ts +50 -0
  147. package/src/communityRepository/communityModeration/api/index.ts +3 -2
  148. package/src/communityRepository/communityModeration/api/test/banMembers.test.ts +70 -0
  149. package/src/communityRepository/communityModeration/api/test/unbanMembers.test.ts +70 -0
  150. package/src/communityRepository/communityModeration/api/unbanMembers.ts +50 -0
  151. package/src/communityRepository/observers/getCommunities.ts +5 -5
  152. package/src/core/query/filtering.ts +22 -2
  153. package/src/core/query/sorting.ts +2 -4
  154. package/src/core/query/tests/filtering.test.ts +6 -0
  155. package/src/core/query/tests/runQuery.test.ts +3 -3
  156. package/src/core/transports/mqtt.ts +3 -2
  157. package/src/feedRepository/api/getCustomRankingGlobalFeed.ts +117 -0
  158. package/src/feedRepository/api/index.ts +1 -0
  159. package/src/feedRepository/api/queryGlobalFeed.ts +12 -4
  160. package/src/feedRepository/api/test/getCustomRankingGlobalFeed.test.ts +130 -0
  161. package/src/feedRepository/api/test/queryGlobalFeed.test.ts +1 -15
  162. package/src/fileRepository/api/index.ts +3 -3
  163. package/src/fileRepository/api/test/uploadFile.test.ts +69 -0
  164. package/src/fileRepository/api/test/{createImage.test.ts → uploadImage.test.ts} +7 -7
  165. package/src/fileRepository/api/test/{createVideo.test.ts → uploadVideo.test.ts} +8 -8
  166. package/src/fileRepository/api/{createFile.ts → uploadFile.ts} +4 -6
  167. package/src/fileRepository/api/{createImage.ts → uploadImage.ts} +4 -6
  168. package/src/fileRepository/api/{createVideo.ts → uploadVideo.ts} +5 -7
  169. package/src/marker/events/index.ts +1 -0
  170. package/src/marker/events/onFeedlMarkerUpdated.ts +34 -0
  171. package/src/messageRepository/api/editMessage.ts +100 -0
  172. package/src/messageRepository/api/flagMessage.ts +40 -0
  173. package/src/messageRepository/api/index.ts +7 -1
  174. package/src/messageRepository/api/isMessageFlaggedByMe.ts +30 -0
  175. package/src/messageRepository/api/markAsDelivered.ts +2 -2
  176. package/src/messageRepository/api/{deleteMessage.ts → softDeleteMessage.ts} +8 -8
  177. package/src/messageRepository/api/tests/deleteMessage.test.ts +11 -11
  178. package/src/messageRepository/api/tests/{updateMessage.test.ts → editMessage.test.ts} +10 -10
  179. package/src/messageRepository/api/tests/flagMessage.test.ts +87 -0
  180. package/src/messageRepository/api/tests/unflagMessage.test.ts +87 -0
  181. package/src/messageRepository/api/unflagMessage.ts +40 -0
  182. package/src/messageRepository/api/updateMessage.ts +4 -0
  183. package/src/messageRepository/events/onMessageDeleted.ts +1 -1
  184. package/src/messageRepository/observers/getMessages.ts +5 -5
  185. package/src/postRepository/api/deletePost.ts +1 -7
  186. package/src/postRepository/api/editPost.ts +58 -0
  187. package/src/postRepository/api/flagPost.ts +38 -0
  188. package/src/postRepository/api/hardDeletePost.ts +30 -0
  189. package/src/postRepository/api/index.ts +8 -0
  190. package/src/postRepository/api/isPostFlaggedByMe.ts +33 -0
  191. package/src/postRepository/api/softDeletePost.ts +30 -0
  192. package/src/postRepository/api/unflagPost.ts +39 -0
  193. package/src/postRepository/api/updatePost.ts +4 -0
  194. package/src/postRepository/observers/getPosts.ts +5 -5
  195. package/src/reactionRepository/observers/getReactions.ts +4 -4
  196. package/src/report/api/createReport.ts +1 -1
  197. package/src/report/api/tests/createReport.test.ts +2 -62
  198. package/src/report/api/tests/deleteReport.test.ts +2 -62
  199. package/src/subChannelRepository/api/startReadingAPI.ts +13 -0
  200. package/src/subChannelRepository/api/stopReadingAPI.ts +13 -0
  201. package/src/userRepository/api/flagUser.ts +37 -0
  202. package/src/userRepository/api/index.ts +4 -0
  203. package/src/userRepository/api/isUserFlaggedByMe.ts +33 -0
  204. package/src/userRepository/{relationship/block/api → api}/queryBlockedUsers.ts +3 -2
  205. package/src/userRepository/api/tests/flagUser.test.ts +81 -0
  206. package/src/userRepository/{relationship/block/api → api}/tests/queryBlockedUsers.test.ts +1 -1
  207. package/src/userRepository/api/tests/unflagUser.test.ts +80 -0
  208. package/src/userRepository/api/unflagUser.ts +37 -0
  209. package/src/userRepository/observers/getBlockedUsers.ts +104 -0
  210. package/src/userRepository/observers/getUsers.ts +4 -4
  211. package/src/userRepository/observers/index.ts +1 -0
  212. package/src/userRepository/observers/tests/getUsers.test.ts +3 -9
  213. package/src/userRepository/relationship/block/observers/getBlockedUsers.ts +5 -96
  214. package/src/userRepository/relationship/follow/observers/getFollowers.ts +4 -4
  215. package/src/userRepository/relationship/follow/observers/getFollowings.ts +4 -4
  216. package/dist/communityRepository/communityModeration/api/test/addMembers.test.d.ts.map +0 -1
  217. package/dist/communityRepository/communityModeration/api/test/removeMembers.test.d.ts.map +0 -1
  218. package/dist/fileRepository/api/createFile.d.ts.map +0 -1
  219. package/dist/fileRepository/api/createImage.d.ts.map +0 -1
  220. package/dist/fileRepository/api/createVideo.d.ts.map +0 -1
  221. package/dist/fileRepository/api/test/createImage.test.d.ts +0 -2
  222. package/dist/fileRepository/api/test/createImage.test.d.ts.map +0 -1
  223. package/dist/fileRepository/api/test/createVideo.test.d.ts +0 -2
  224. package/dist/fileRepository/api/test/createVideo.test.d.ts.map +0 -1
  225. package/dist/messageRepository/api/deleteMessage.d.ts.map +0 -1
  226. package/dist/messageRepository/api/tests/updateMessage.test.d.ts +0 -2
  227. package/dist/messageRepository/api/tests/updateMessage.test.d.ts.map +0 -1
  228. package/dist/userRepository/relationship/block/api/queryBlockedUsers.d.ts.map +0 -1
  229. package/dist/userRepository/relationship/block/api/tests/queryBlockedUsers.test.d.ts.map +0 -1
  230. /package/dist/communityRepository/{communityModeration → communityMembership}/api/addMembers.d.ts +0 -0
  231. /package/dist/communityRepository/{communityModeration → communityMembership}/api/removeMembers.d.ts +0 -0
  232. /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/addMembers.test.d.ts +0 -0
  233. /package/dist/communityRepository/{communityModeration/api/test → communityMembership/api/tests}/removeMembers.test.d.ts +0 -0
  234. /package/dist/userRepository/{relationship/block/api → api}/tests/queryBlockedUsers.test.d.ts +0 -0
  235. /package/src/communityRepository/{communityModeration → communityMembership}/api/addMembers.ts +0 -0
  236. /package/src/communityRepository/{communityModeration → communityMembership}/api/removeMembers.ts +0 -0
@@ -7,8 +7,8 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
7
7
  */
8
8
  /**
9
9
  * ```js
10
- * import { createImage } from '@amityco/ts-sdk'
11
- * const created = await createImage(formData)
10
+ * import { FileRepository } from '@amityco/ts-sdk'
11
+ * const created = await FileRepository.uploadImage(formData)
12
12
  * ```
13
13
  *
14
14
  * Creates an {@link Amity.File<'image'>}
@@ -20,12 +20,12 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
20
20
  * @category File API
21
21
  * @async
22
22
  */
23
- export const createImage = async (
23
+ export const uploadImage = async (
24
24
  formData: FormData,
25
25
  onProgress?: (percent: number) => void,
26
26
  ): Promise<Amity.Cached<Amity.File<'image'>[]>> => {
27
27
  const client = getActiveClient();
28
- client.log('file/createImage', formData);
28
+ client.log('file/uploadImage', formData);
29
29
 
30
30
  if (!formData.getAll('files').length)
31
31
  throw new Error('The formData object must have a `files` key.');
@@ -58,5 +58,3 @@ export const createImage = async (
58
58
  };
59
59
  };
60
60
  /* end_public_function */
61
-
62
- // TODO: consider doing local creation with URL.createObjectURL()
@@ -7,8 +7,8 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
7
7
  */
8
8
  /**
9
9
  * ```js
10
- * import { createVideo } from '@amityco/ts-sdk'
11
- * const created = await createVideo(formData)
10
+ * import { FileRepository } from '@amityco/ts-sdk'
11
+ * const created = await FileRepository.uploadVideo(formData)
12
12
  * ```
13
13
  *
14
14
  * Creates an {@link Amity.File<'video'>}
@@ -16,18 +16,18 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
16
16
  * @param formData The data necessary to create a new {@link Amity.File<'video'>}
17
17
  * @param feedType The {@link Amity.File<'video'>} feed type
18
18
  * @param onProgress The callback to track the upload progress
19
- * @returns The newly created {@link Amity.File<'video'>}
19
+ * @returns The newly uploaded {@link Amity.File<'video'>}
20
20
  *
21
21
  * @category File API
22
22
  * @async
23
23
  */
24
- export const createVideo = async (
24
+ export const uploadVideo = async (
25
25
  formData: FormData,
26
26
  feedType?: Amity.ContentFeedType,
27
27
  onProgress?: (percent: number) => void,
28
28
  ): Promise<Amity.Cached<Amity.File<'video'>[]>> => {
29
29
  const client = getActiveClient();
30
- client.log('file/createVideo', formData);
30
+ client.log('file/uploadVideo', formData);
31
31
 
32
32
  if (!formData.getAll('files').length)
33
33
  throw new Error('The formData object must have a `files` key.');
@@ -64,5 +64,3 @@ export const createVideo = async (
64
64
  };
65
65
  };
66
66
  /* end_public_function */
67
-
68
- // TODO: consider doing local creation with URL.createObjectURL()
@@ -4,6 +4,7 @@ export * from './onSubChannelMarkerFetched';
4
4
  export * from './onSubChannelMarkerUpdated';
5
5
 
6
6
  export * from './onFeedlMarkerFetched';
7
+ export * from './onFeedlMarkerUpdated';
7
8
 
8
9
  export * from './onUserMarkerFetched';
9
10
 
@@ -0,0 +1,34 @@
1
+ import { getActiveClient } from '~/client/api';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onFeedMarkerUpdated } from '@amityco/ts-sdk'
7
+ * const dispose = onFeedMarkerUpdated(feedMarker => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.FeedMarker} has been updated
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category FeedMarker Events
18
+ */
19
+ export const onFeedMarkerUpdated = (
20
+ callback: Amity.Listener<Amity.FeedMarker>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const filter = (payload: Amity.Events['marker.feed-updated']) => {
25
+ callback(payload.feedMarkers[0]);
26
+ };
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ 'feedMarker/onFeedMarkerUpdated',
31
+ 'marker.feed-updated',
32
+ filter,
33
+ );
34
+ };
@@ -0,0 +1,100 @@
1
+ import { getActiveClient } from '~/client/api';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { pullFromCache, upsertInCache } from '~/cache/api';
5
+ import { fireEvent } from '~/core/events';
6
+
7
+ import { convertParams, prepareMessagePayload } from '../utils';
8
+
9
+ /* begin_public_function
10
+ id: message.edit
11
+ */
12
+ /**
13
+ * ```js
14
+ * import { MessageRepository } from '@amityco/ts-sdk'
15
+ * const updated = await MessageRepository.editMessage(messageId, {
16
+ * data: { text: 'hello world' }
17
+ * })
18
+ * ```
19
+ *
20
+ * Updates an {@link Amity.Message}
21
+ *
22
+ * @param messageId The ID of the {@link Amity.Message} to edit
23
+ * @param patch The patch data to apply
24
+ * @returns the updated {@link Amity.Message} object
25
+ *
26
+ * @category Message API
27
+ * @async
28
+ */
29
+ export const editMessage = async (
30
+ messageId: Amity.Message['messageId'],
31
+ patch: Patch<Amity.Message, 'data' | 'tags' | 'metadata' | 'mentionees'>,
32
+ ): Promise<Amity.Cached<Amity.Message>> => {
33
+ const client = getActiveClient();
34
+ client.log('message/editMessage', patch);
35
+
36
+ const { data: payload } = await client.http.put<Amity.MessagePayload>(
37
+ `/api/v5/messages/${encodeURIComponent(messageId)}`,
38
+ convertParams(patch),
39
+ );
40
+
41
+ const data = await prepareMessagePayload(payload);
42
+
43
+ const cachedAt = client.cache && Date.now();
44
+ if (client.cache) ingestInCache(data, { cachedAt });
45
+
46
+ const { messages } = data;
47
+
48
+ fireEvent('local.message.updated', { messages });
49
+
50
+ return {
51
+ data: messages.find(message => message.messageId === messageId)!,
52
+ cachedAt,
53
+ };
54
+ };
55
+
56
+ /**
57
+ * ```js
58
+ * import { editMessage } from '@amityco/ts-sdk'
59
+ * const updated = editMessage.optimistically('foobar', {
60
+ * data: { text: 'hello world' }
61
+ * })
62
+ * ```
63
+ *
64
+ * Updates an {@link Amity.Message} in cache
65
+ *
66
+ * @param messageId The ID of the {@link Amity.Message} to edit
67
+ * @param patch The patch data to apply
68
+ * @returns the updated {@link Amity.Message} object
69
+ *
70
+ * @category Message API
71
+ */
72
+ editMessage.optimistically = (
73
+ messageId: Amity.Message['messageId'],
74
+ patch: Patch<Amity.Message, 'data' | 'tags' | 'metadata' | 'mentionees'>,
75
+ ): Amity.Cached<Amity.Message> | undefined => {
76
+ const client = getActiveClient();
77
+ client.log('message/editMessage.optimistically', patch);
78
+
79
+ if (!client.cache) return;
80
+
81
+ const message = pullFromCache<Amity.Message>(['message', 'get', messageId]);
82
+
83
+ if (!message) return;
84
+
85
+ const cachedAt = -1;
86
+ const edited: Amity.Message = {
87
+ ...message.data,
88
+ ...patch,
89
+ updatedAt: new Date().toISOString(),
90
+ };
91
+
92
+ upsertInCache(['message', 'get', messageId], edited, { cachedAt });
93
+ fireEvent('local.message.updated', { messages: [edited] });
94
+
95
+ return {
96
+ data: edited,
97
+ cachedAt,
98
+ };
99
+ };
100
+ /* end_public_function */
@@ -0,0 +1,40 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { fireEvent } from '~/core/events';
5
+
6
+ import { prepareMessagePayload } from '~/messageRepository/utils';
7
+
8
+ /* begin_public_function
9
+ id: message.flag
10
+ */
11
+ /**
12
+ * ```js
13
+ * import { MessageRepository } from '@amityco/ts-sdk'
14
+ * const flagged = await MessageRepository.flagMessage(messageId)
15
+ * ```
16
+ *
17
+ * @param messageId of the message to flag
18
+ * @returns the created report result
19
+ *
20
+ * @category Message API
21
+ * @async
22
+ * */
23
+ export const flagMessage = async (messageId: Amity.Message['messageId']): Promise<boolean> => {
24
+ const client = getActiveClient();
25
+ client.log('message/flag', messageId);
26
+
27
+ const { data: payload } = await client.http.post<Amity.MessagePayload>(
28
+ `/api/v5/messages/${encodeURIComponent(messageId)}/flags`,
29
+ );
30
+
31
+ if (client.cache) {
32
+ const messagePayload = await prepareMessagePayload(payload);
33
+ ingestInCache(messagePayload);
34
+ }
35
+
36
+ fireEvent('message.flagged', payload);
37
+
38
+ return !!payload;
39
+ };
40
+ /* end_public_function */
@@ -2,7 +2,13 @@ export { getMessages as getMessageByIds } from './getMessages';
2
2
 
3
3
  export * from './createMessage';
4
4
  export * from './updateMessage';
5
- export * from './deleteMessage';
5
+ export * from './editMessage';
6
+ export * from './softDeleteMessage';
7
+
6
8
  export * from './markAsDelivered';
7
9
  export * from './getReadUsers';
8
10
  export * from './getDeliveredUsers';
11
+
12
+ export * from './flagMessage';
13
+ export * from './unflagMessage';
14
+ export * from './isMessageFlaggedByMe';
@@ -0,0 +1,30 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+
3
+ /* begin_public_function
4
+ id: message.check_flag_by_me
5
+ */
6
+ /**
7
+ * ```js
8
+ * import { MessageRepository } from '@amityco/ts-sdk'
9
+ * const isReportedByMe = await MessageRepository.isMessageFlaggedByMe(messageId)
10
+ * ```
11
+ *
12
+ * @param messageId of the message to check a report of.
13
+ * @returns `true` if the report is created by me, `false` if doesn't.
14
+ *
15
+ * @category Report API
16
+ * @async
17
+ * */
18
+ export const isMessageFlaggedByMe = async (
19
+ messageId: Amity.Message['messageId'],
20
+ ): Promise<boolean> => {
21
+ const client = getActiveClient();
22
+ client.log('message/isMessageFlaggedByMe', messageId);
23
+
24
+ const { data } = await client.http.get<{ result: boolean }>(
25
+ `/api/v5/messages/${encodeURIComponent(messageId)}/flags`,
26
+ );
27
+
28
+ return data.result;
29
+ };
30
+ /* end_public_function */
@@ -3,8 +3,8 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
3
3
 
4
4
  /**
5
5
  * ```js
6
- * import { markAsDelivered } from '@amityco/ts-sdk'
7
- * const success = await markAsDelivered('subChannelId', 'messageId')
6
+ * import { MessageRepository } from '@amityco/ts-sdk'
7
+ * const success = await MessageRepository.markAsDelivered('subChannelId', 'messageId')
8
8
  * ```
9
9
  *
10
10
  * Update `deliveredToSegment` in {@link Amity.SubChannelMarker}
@@ -9,8 +9,8 @@ import { getMessage } from './getMessage';
9
9
  */
10
10
  /**
11
11
  * ```js
12
- * import { deleteMessage } from '@amityco/ts-sdk'
13
- * const success = await deleteMessage('foobar')
12
+ * import { softDeleteMessage } from '@amityco/ts-sdk'
13
+ * const success = await softDeleteMessage('foobar')
14
14
  * ```
15
15
  *
16
16
  * Delete a {@link Amity.Message}
@@ -21,11 +21,11 @@ import { getMessage } from './getMessage';
21
21
  * @category Message API
22
22
  * @async
23
23
  */
24
- export const deleteMessage = async (
24
+ export const softDeleteMessage = async (
25
25
  messageId: Amity.Message['messageId'],
26
26
  ): Promise<Amity.Message> => {
27
27
  const client = getActiveClient();
28
- client.log('message/deleteMessage', messageId);
28
+ client.log('message/softDeleteMessage', messageId);
29
29
 
30
30
  // API-FIX: This endpoint has not been implemented yet.
31
31
  await client.http.delete<{ success: boolean }>(
@@ -41,8 +41,8 @@ export const deleteMessage = async (
41
41
 
42
42
  /**
43
43
  * ```js
44
- * import { deleteMessage } from '@amityco/ts-sdk'
45
- * const success = deleteMessage.optimistically('foobar')
44
+ * import { softDeleteMessage } from '@amityco/ts-sdk'
45
+ * const success = softDeleteMessage.optimistically('foobar')
46
46
  * ```
47
47
  *
48
48
  * Deletes a {@link Amity.Message}
@@ -52,11 +52,11 @@ export const deleteMessage = async (
52
52
  *
53
53
  * @category Message API
54
54
  */
55
- deleteMessage.optimistically = (
55
+ softDeleteMessage.optimistically = (
56
56
  messageId: Amity.Message['messageId'],
57
57
  ): Amity.Cached<Amity.Message> | undefined => {
58
58
  const client = getActiveClient();
59
- client.log('message/deleteMessage.optimistically', messageId);
59
+ client.log('message/softDeleteMessage.optimistically', messageId);
60
60
 
61
61
  const message = pullFromCache<Amity.Message>(['message', 'get', messageId]);
62
62
 
@@ -2,7 +2,7 @@ import { ASCApiError } from '~/core/errors';
2
2
  import { disableCache, enableCache, pullFromCache, pushToCache } from '~/cache/api';
3
3
  import { client, generateRawMessage } from '~/utils/tests';
4
4
 
5
- import { deleteMessage } from '../deleteMessage';
5
+ import { softDeleteMessage } from '../softDeleteMessage';
6
6
  import { onMessageDeleted } from '../../events';
7
7
  import { convertFromRaw } from '../../utils';
8
8
 
@@ -20,13 +20,13 @@ const getResolvedMessageValue = () => ({
20
20
  },
21
21
  });
22
22
 
23
- describe('deleteMessage', () => {
23
+ describe('softDeleteMessage', () => {
24
24
  // integration_test_id: 16106137-0e4a-4d2f-b8cf-1a6c571bf0c7
25
25
  test('should return deleted message', async () => {
26
26
  client.http.delete = jest.fn();
27
27
  client.http.get = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
28
28
 
29
- await expect(deleteMessage(deleteId)).resolves.toEqual(deletedMessage);
29
+ await expect(softDeleteMessage(deleteId)).resolves.toEqual(deletedMessage);
30
30
  });
31
31
 
32
32
  // integration_test_id: 27d393d9-480e-4eec-bfdb-f04738801b04
@@ -37,7 +37,7 @@ describe('deleteMessage', () => {
37
37
  new ASCApiError('not found', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
38
38
  );
39
39
 
40
- await expect(deleteMessage(deleteId)).rejects.toThrow('400400');
40
+ await expect(softDeleteMessage(deleteId)).rejects.toThrow('400400');
41
41
  });
42
42
 
43
43
  test('should update cache after deleted messages', async () => {
@@ -46,7 +46,7 @@ describe('deleteMessage', () => {
46
46
  client.http.get = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
47
47
  pushToCache(['message', 'get', deleteId], messageToDelete);
48
48
 
49
- await deleteMessage(deleteId);
49
+ await softDeleteMessage(deleteId);
50
50
  const recieved = pullFromCache<Amity.Message>(['message', 'get', deleteId])?.data;
51
51
 
52
52
  expect(recieved).toEqual(deletedMessage);
@@ -63,20 +63,20 @@ describe('deleteMessage', () => {
63
63
  dispose = onMessageDeleted(resolve);
64
64
  }).finally(dispose);
65
65
 
66
- await deleteMessage(deleteId);
66
+ await softDeleteMessage(deleteId);
67
67
 
68
68
  await expect(callbackPromise).resolves.toEqual(deletedMessage);
69
69
  });
70
70
  });
71
71
 
72
- describe('deleteMessage.optimistically', () => {
72
+ describe('softDeleteMessage.optimistically', () => {
73
73
  beforeEach(() => enableCache());
74
74
  afterEach(() => disableCache());
75
75
 
76
76
  test('should update `isDeleted` in cache after deleted message', () => {
77
77
  pushToCache(['message', 'get', deleteId], messageToDelete);
78
78
 
79
- deleteMessage.optimistically(deleteId);
79
+ softDeleteMessage.optimistically(deleteId);
80
80
  const recieved = pullFromCache<Amity.Message>(['message', 'get', deleteId])?.data;
81
81
 
82
82
  expect(recieved).toEqual({
@@ -91,7 +91,7 @@ describe('deleteMessage.optimistically', () => {
91
91
  pushToCache(['channel', 'get', channelId], { channelId, messageCount: 2 });
92
92
  pushToCache(['message', 'get', deleteId], { ...messageToDelete, channelId });
93
93
 
94
- deleteMessage.optimistically(deleteId);
94
+ softDeleteMessage.optimistically(deleteId);
95
95
  const recieved = pullFromCache<Amity.Channel>(['channel', 'get', channelId])?.data;
96
96
 
97
97
  expect(recieved?.messageCount).toBe(1);
@@ -107,7 +107,7 @@ describe('deleteMessage.optimistically', () => {
107
107
  });
108
108
  }).finally(dispose);
109
109
 
110
- await deleteMessage.optimistically(deleteId);
110
+ softDeleteMessage.optimistically(deleteId);
111
111
 
112
112
  await expect(callbackPromise).resolves.toEqual({
113
113
  ...deletedMessage,
@@ -118,6 +118,6 @@ describe('deleteMessage.optimistically', () => {
118
118
  test('should define object as unsynced object', () => {
119
119
  pushToCache(['message', 'get', deleteId], messageToDelete);
120
120
 
121
- expect(deleteMessage.optimistically(deleteId)?.cachedAt).toBe(-1);
121
+ expect(softDeleteMessage.optimistically(deleteId)?.cachedAt).toBe(-1);
122
122
  });
123
123
  });
@@ -2,7 +2,7 @@ import { ASCApiError } from '~/core/errors';
2
2
  import { disableCache, enableCache, pullFromCache, pushToCache } from '~/cache/api';
3
3
  import { client, generateRawMessage } from '~/utils/tests';
4
4
 
5
- import { updateMessage } from '../updateMessage';
5
+ import { editMessage } from '../editMessage';
6
6
  import { onMessageUpdated } from '../../events';
7
7
  import { convertFromRaw } from '../../utils';
8
8
 
@@ -21,12 +21,12 @@ const getResolvedMessageValue = () => ({
21
21
  },
22
22
  });
23
23
 
24
- describe('updateMessage', () => {
24
+ describe('editMessage', () => {
25
25
  // integration_test_id: 3ae17ea2-dee5-4418-88af-fe809ee48a52
26
26
  test('should return updated message', async () => {
27
27
  client.http.put = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
28
28
 
29
- const recieved = updateMessage(messageId, patch);
29
+ const recieved = editMessage(messageId, patch);
30
30
 
31
31
  await expect(recieved).resolves.toEqual(expect.objectContaining({ data: updatedMessage }));
32
32
  });
@@ -39,14 +39,14 @@ describe('updateMessage', () => {
39
39
  new ASCApiError('not found', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
40
40
  );
41
41
 
42
- await expect(updateMessage(messageId, patch)).rejects.toThrow('400400');
42
+ await expect(editMessage(messageId, patch)).rejects.toThrow('400400');
43
43
  });
44
44
 
45
45
  test('should update cache after updated messages', async () => {
46
46
  enableCache();
47
47
  client.http.put = jest.fn().mockResolvedValueOnce(getResolvedMessageValue());
48
48
 
49
- await updateMessage(messageId, patch);
49
+ await editMessage(messageId, patch);
50
50
  const recieved = pullFromCache<Amity.Message>(['message', 'get', messageId])?.data;
51
51
 
52
52
  expect(recieved).toEqual(expect.objectContaining(patch));
@@ -62,20 +62,20 @@ describe('updateMessage', () => {
62
62
  dispose = onMessageUpdated(resolve);
63
63
  }).finally(dispose);
64
64
 
65
- await updateMessage(messageId, patch);
65
+ await editMessage(messageId, patch);
66
66
 
67
67
  await expect(callbackPromise).resolves.toEqual(expect.objectContaining(updatedMessage));
68
68
  });
69
69
  });
70
70
 
71
- describe('updateMessage.optimistically', () => {
71
+ describe('editMessage.optimistically', () => {
72
72
  beforeEach(() => enableCache());
73
73
  afterEach(() => disableCache());
74
74
 
75
75
  test('should update cache after updated message', () => {
76
76
  pushToCache(['message', 'get', messageId], messageToUpdate);
77
77
 
78
- updateMessage.optimistically(messageId, patch);
78
+ editMessage.optimistically(messageId, patch);
79
79
  const recieved = pullFromCache<Amity.Message>(['message', 'get', messageId])?.data;
80
80
 
81
81
  expect(recieved).toEqual(expect.objectContaining(patch));
@@ -90,7 +90,7 @@ describe('updateMessage.optimistically', () => {
90
90
  });
91
91
  }).finally(dispose);
92
92
 
93
- updateMessage.optimistically(messageId, patch);
93
+ editMessage.optimistically(messageId, patch);
94
94
 
95
95
  await expect(callbackPromise).resolves.toEqual(
96
96
  expect.objectContaining({
@@ -103,6 +103,6 @@ describe('updateMessage.optimistically', () => {
103
103
  test('should define object as unsynced object', () => {
104
104
  pushToCache(['message', 'get', messageId], messageToUpdate);
105
105
 
106
- expect(updateMessage.optimistically(messageId, patch)?.cachedAt).toBe(-1);
106
+ expect(editMessage.optimistically(messageId, patch)?.cachedAt).toBe(-1);
107
107
  });
108
108
  });
@@ -0,0 +1,87 @@
1
+ import { disableCache, enableCache, pullFromCache } from '~/cache/api';
2
+ import { client, connectClient, disconnectClient, generateRawMessage, user11 } from '~/utils/tests';
3
+ import { ASCApiError } from '~/core/errors';
4
+ import { fireEvent } from '~/core/events';
5
+
6
+ import { flagMessage } from '..';
7
+ import { convertFromRaw } from '../../utils';
8
+
9
+ jest.mock('~/core/events', () => ({
10
+ __esModule: true,
11
+ ...jest.requireActual('~/core/events'),
12
+ fireEvent: jest.fn(),
13
+ }));
14
+
15
+ const flaggedRawMessage = generateRawMessage({ flagCount: 1 });
16
+ const message = convertFromRaw(flaggedRawMessage);
17
+ const { messageId } = flaggedRawMessage;
18
+
19
+ const flaggedMessageQueryResponse = {
20
+ data: {
21
+ messages: [flaggedRawMessage],
22
+ users: [user11],
23
+ },
24
+ };
25
+
26
+ describe('flagMessage', () => {
27
+ beforeEach(disableCache);
28
+ beforeAll(connectClient);
29
+ afterAll(disconnectClient);
30
+
31
+ // integration_test_id: fd507b43-99e7-4aed-816d-d51d357d303b
32
+ test('it should flag message with messageId', async () => {
33
+ const expected = true;
34
+ client.http.post = jest.fn().mockResolvedValue(flaggedMessageQueryResponse);
35
+
36
+ const received = await flagMessage(messageId);
37
+
38
+ expect(received).toBe(expected);
39
+ });
40
+
41
+ // integration_test_id: 0c78c9fd-1d4e-4af7-ad6b-e76372addb2f
42
+ test('it should throw error with 400400 when sending invalid messageId', async () => {
43
+ client.http.post = jest
44
+ .fn()
45
+ .mockRejectedValueOnce(
46
+ new ASCApiError('unauthorized', Amity.ServerError.ITEM_NOT_FOUND, Amity.ErrorLevel.ERROR),
47
+ );
48
+
49
+ await expect(flagMessage(messageId)).rejects.toThrow('400400');
50
+ });
51
+
52
+ test('it should call fire event method', async () => {
53
+ client.http.post = jest.fn().mockResolvedValue(flaggedMessageQueryResponse);
54
+
55
+ const recieved = await flagMessage(messageId);
56
+ const [recievedMqttString] = (fireEvent as jest.Mock).mock.lastCall;
57
+
58
+ expect(recieved).toBe(true);
59
+ expect(recievedMqttString).toBe('message.flagged');
60
+ });
61
+
62
+ test('it should call the appropriate api', async () => {
63
+ const apimock = jest.fn();
64
+ const expected = `/api/v5/messages/${encodeURIComponent('messageId')}/flags`;
65
+
66
+ client.http.post = apimock.mockResolvedValue({ data: {} });
67
+
68
+ await flagMessage('messageId');
69
+
70
+ const received = apimock.mock.lastCall[0];
71
+
72
+ expect(received).toBe(expected);
73
+ });
74
+
75
+ test('it should add data to cache', async () => {
76
+ enableCache();
77
+ const expected = message;
78
+ client.http.post = jest.fn().mockResolvedValue(flaggedMessageQueryResponse);
79
+
80
+ await flagMessage(messageId);
81
+ const recieved = pullFromCache(['message', 'get', messageId]);
82
+
83
+ expect(recieved?.data).toStrictEqual(expected);
84
+
85
+ disableCache();
86
+ });
87
+ });