@amityco/ts-sdk 0.0.1-beta.8 → 0.0.1-beta.9

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 (244) hide show
  1. package/dist/@types/core/events.d.ts +63 -17
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/transport.d.ts +15 -0
  4. package/dist/@types/core/transport.d.ts.map +1 -1
  5. package/dist/@types/domains/client.d.ts +3 -0
  6. package/dist/@types/domains/client.d.ts.map +1 -1
  7. package/dist/@types/domains/comment.d.ts +1 -1
  8. package/dist/@types/domains/comment.d.ts.map +1 -1
  9. package/dist/@types/domains/community.d.ts +1 -1
  10. package/dist/@types/domains/community.d.ts.map +1 -1
  11. package/dist/@types/domains/group.d.ts +2 -2
  12. package/dist/@types/domains/group.d.ts.map +1 -1
  13. package/dist/@types/domains/partials.d.ts +3 -0
  14. package/dist/@types/domains/partials.d.ts.map +1 -1
  15. package/dist/@types/domains/post.d.ts +1 -1
  16. package/dist/@types/domains/post.d.ts.map +1 -1
  17. package/dist/@types/domains/user.d.ts +2 -1
  18. package/dist/@types/domains/user.d.ts.map +1 -1
  19. package/dist/client/api/connectClient.d.ts.map +1 -1
  20. package/dist/client/api/createClient.d.ts +2 -1
  21. package/dist/client/api/createClient.d.ts.map +1 -1
  22. package/dist/client/api/disconnectClient.d.ts.map +1 -1
  23. package/dist/client/api/getToken.d.ts +3 -1
  24. package/dist/client/api/getToken.d.ts.map +1 -1
  25. package/dist/comment/api/deleteComment.d.ts +1 -0
  26. package/dist/comment/api/deleteComment.d.ts.map +1 -1
  27. package/dist/comment/events/index.d.ts +4 -0
  28. package/dist/comment/events/index.d.ts.map +1 -1
  29. package/dist/comment/events/onCommentCreated.d.ts +1 -1
  30. package/dist/comment/events/onCommentCreated.d.ts.map +1 -1
  31. package/dist/comment/events/onCommentDeleted.d.ts +1 -1
  32. package/dist/comment/events/onCommentDeleted.d.ts.map +1 -1
  33. package/dist/comment/events/onCommentFlagged.d.ts +17 -0
  34. package/dist/comment/events/onCommentFlagged.d.ts.map +1 -0
  35. package/dist/comment/events/onCommentReactionAdded.d.ts +17 -0
  36. package/dist/comment/events/onCommentReactionAdded.d.ts.map +1 -0
  37. package/dist/comment/events/onCommentReactionRemoved.d.ts +17 -0
  38. package/dist/comment/events/onCommentReactionRemoved.d.ts.map +1 -0
  39. package/dist/comment/events/onCommentUnflagged.d.ts +17 -0
  40. package/dist/comment/events/onCommentUnflagged.d.ts.map +1 -0
  41. package/dist/comment/events/onCommentUpdated.d.ts +1 -1
  42. package/dist/comment/events/onCommentUpdated.d.ts.map +1 -1
  43. package/dist/comment/events/utils.d.ts +2 -0
  44. package/dist/comment/events/utils.d.ts.map +1 -0
  45. package/dist/comment/observers/observeComment.d.ts +1 -1
  46. package/dist/comment/observers/observeComment.d.ts.map +1 -1
  47. package/dist/comment/observers/observeComments.d.ts +5 -1
  48. package/dist/comment/observers/observeComments.d.ts.map +1 -1
  49. package/dist/community/events/index.d.ts +4 -0
  50. package/dist/community/events/index.d.ts.map +1 -1
  51. package/dist/community/events/onCommunityCreated.d.ts +2 -2
  52. package/dist/community/events/onCommunityCreated.d.ts.map +1 -1
  53. package/dist/community/events/onCommunityDeleted.d.ts +2 -2
  54. package/dist/community/events/onCommunityDeleted.d.ts.map +1 -1
  55. package/dist/community/events/onCommunityJoined.d.ts +3 -3
  56. package/dist/community/events/onCommunityJoined.d.ts.map +1 -1
  57. package/dist/community/events/onCommunityLeft.d.ts +3 -3
  58. package/dist/community/events/onCommunityLeft.d.ts.map +1 -1
  59. package/dist/community/events/onCommunityUpdated.d.ts +2 -2
  60. package/dist/community/events/onCommunityUpdated.d.ts.map +1 -1
  61. package/dist/community/events/onCommunityUserAdded.d.ts +17 -0
  62. package/dist/community/events/onCommunityUserAdded.d.ts.map +1 -0
  63. package/dist/community/events/onCommunityUserBanned.d.ts +17 -0
  64. package/dist/community/events/onCommunityUserBanned.d.ts.map +1 -0
  65. package/dist/community/events/onCommunityUserRemoved.d.ts +17 -0
  66. package/dist/community/events/onCommunityUserRemoved.d.ts.map +1 -0
  67. package/dist/community/events/onCommunityUserUnbanned.d.ts +17 -0
  68. package/dist/community/events/onCommunityUserUnbanned.d.ts.map +1 -0
  69. package/dist/community/events/utils.d.ts +3 -0
  70. package/dist/community/events/utils.d.ts.map +1 -0
  71. package/dist/community/observers/observeCommunity.d.ts +1 -1
  72. package/dist/community/observers/observeCommunity.d.ts.map +1 -1
  73. package/dist/core/cache/ingest.d.ts.map +1 -1
  74. package/dist/core/events.d.ts +4 -2
  75. package/dist/core/events.d.ts.map +1 -1
  76. package/dist/core/model/index.d.ts +1 -0
  77. package/dist/core/model/index.d.ts.map +1 -1
  78. package/dist/core/model/isMatch.d.ts +3 -0
  79. package/dist/core/model/isMatch.d.ts.map +1 -0
  80. package/dist/core/network.d.ts +11 -0
  81. package/dist/core/network.d.ts.map +1 -0
  82. package/dist/core/subscription.d.ts +14 -0
  83. package/dist/core/subscription.d.ts.map +1 -0
  84. package/dist/core/transports/http.d.ts +11 -0
  85. package/dist/core/transports/http.d.ts.map +1 -0
  86. package/dist/core/transports/index.d.ts +4 -0
  87. package/dist/core/transports/index.d.ts.map +1 -0
  88. package/dist/core/transports/mqtt.d.ts +17 -0
  89. package/dist/core/transports/mqtt.d.ts.map +1 -0
  90. package/dist/core/transports/utils.d.ts +13 -0
  91. package/dist/core/transports/utils.d.ts.map +1 -0
  92. package/dist/core/transports/ws.d.ts +27 -0
  93. package/dist/core/transports/ws.d.ts.map +1 -0
  94. package/dist/index.cjs.js +1208 -514
  95. package/dist/index.d.ts +1 -0
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.esm.js +1185 -515
  98. package/dist/index.umd.js +5 -3
  99. package/dist/post/api/deletePost.d.ts +1 -0
  100. package/dist/post/api/deletePost.d.ts.map +1 -1
  101. package/dist/post/events/index.d.ts +6 -0
  102. package/dist/post/events/index.d.ts.map +1 -1
  103. package/dist/post/events/onPostApproved.d.ts +17 -0
  104. package/dist/post/events/onPostApproved.d.ts.map +1 -0
  105. package/dist/post/events/onPostCreated.d.ts +1 -1
  106. package/dist/post/events/onPostCreated.d.ts.map +1 -1
  107. package/dist/post/events/onPostDeclined.d.ts +17 -0
  108. package/dist/post/events/onPostDeclined.d.ts.map +1 -0
  109. package/dist/post/events/onPostDeleted.d.ts +1 -1
  110. package/dist/post/events/onPostDeleted.d.ts.map +1 -1
  111. package/dist/post/events/onPostFlagged.d.ts +17 -0
  112. package/dist/post/events/onPostFlagged.d.ts.map +1 -0
  113. package/dist/post/events/onPostReactionAdded.d.ts +17 -0
  114. package/dist/post/events/onPostReactionAdded.d.ts.map +1 -0
  115. package/dist/post/events/onPostReactionRemoved.d.ts +17 -0
  116. package/dist/post/events/onPostReactionRemoved.d.ts.map +1 -0
  117. package/dist/post/events/onPostUnflagged.d.ts +17 -0
  118. package/dist/post/events/onPostUnflagged.d.ts.map +1 -0
  119. package/dist/post/events/onPostUpdated.d.ts +1 -1
  120. package/dist/post/events/onPostUpdated.d.ts.map +1 -1
  121. package/dist/post/events/utils.d.ts +2 -0
  122. package/dist/post/events/utils.d.ts.map +1 -0
  123. package/dist/post/observers/observePost.d.ts +1 -1
  124. package/dist/post/observers/observePost.d.ts.map +1 -1
  125. package/dist/post/observers/observePosts.d.ts +1 -1
  126. package/dist/post/observers/observePosts.d.ts.map +1 -1
  127. package/dist/reaction/events/onReactionAdded.d.ts +4 -2
  128. package/dist/reaction/events/onReactionAdded.d.ts.map +1 -1
  129. package/dist/reaction/events/onReactionRemoved.d.ts +4 -2
  130. package/dist/reaction/events/onReactionRemoved.d.ts.map +1 -1
  131. package/dist/reaction/utils/index.d.ts +1 -0
  132. package/dist/reaction/utils/index.d.ts.map +1 -1
  133. package/dist/reaction/utils/preparePayloadForCache.d.ts +3 -0
  134. package/dist/reaction/utils/preparePayloadForCache.d.ts.map +1 -0
  135. package/dist/report/api/createReport.d.ts.map +1 -1
  136. package/dist/report/api/deleteReport.d.ts.map +1 -1
  137. package/dist/user/events/index.d.ts +3 -0
  138. package/dist/user/events/index.d.ts.map +1 -1
  139. package/dist/user/events/onUserFlagCleared.d.ts +17 -0
  140. package/dist/user/events/onUserFlagCleared.d.ts.map +1 -0
  141. package/dist/user/events/onUserFlagged.d.ts +17 -0
  142. package/dist/user/events/onUserFlagged.d.ts.map +1 -0
  143. package/dist/user/events/onUserUnflagged.d.ts +17 -0
  144. package/dist/user/events/onUserUnflagged.d.ts.map +1 -0
  145. package/dist/user/events/onUserUpdated.d.ts +1 -1
  146. package/dist/user/events/onUserUpdated.d.ts.map +1 -1
  147. package/dist/user/events/utils.d.ts +2 -0
  148. package/dist/user/events/utils.d.ts.map +1 -0
  149. package/dist/user/observers/observeUser.d.ts +1 -1
  150. package/dist/user/observers/observeUser.d.ts.map +1 -1
  151. package/package.json +4 -1
  152. package/rollup.config.js +2 -2
  153. package/src/@types/core/events.ts +64 -23
  154. package/src/@types/core/transport.ts +14 -0
  155. package/src/@types/domains/client.ts +3 -0
  156. package/src/@types/domains/comment.ts +1 -0
  157. package/src/@types/domains/community.ts +1 -0
  158. package/src/@types/domains/group.ts +2 -2
  159. package/src/@types/domains/partials.ts +4 -0
  160. package/src/@types/domains/post.ts +1 -0
  161. package/src/@types/domains/user.ts +2 -0
  162. package/src/client/api/connectClient.ts +12 -2
  163. package/src/client/api/createClient.ts +7 -7
  164. package/src/client/api/disconnectClient.ts +5 -0
  165. package/src/client/api/getToken.ts +1 -1
  166. package/src/client/events/onConnectionError.ts +1 -1
  167. package/src/comment/api/createComment.ts +2 -2
  168. package/src/comment/api/deleteComment.ts +2 -2
  169. package/src/comment/api/updateComment.ts +1 -1
  170. package/src/comment/events/index.ts +6 -0
  171. package/src/comment/events/onCommentCreated.ts +4 -22
  172. package/src/comment/events/onCommentDeleted.ts +4 -22
  173. package/src/comment/events/onCommentFlagged.ts +21 -0
  174. package/src/comment/events/onCommentReactionAdded.ts +52 -0
  175. package/src/comment/events/onCommentReactionRemoved.ts +52 -0
  176. package/src/comment/events/onCommentUnflagged.ts +21 -0
  177. package/src/comment/events/onCommentUpdated.ts +4 -22
  178. package/src/comment/events/utils.ts +34 -0
  179. package/src/comment/observers/observeComment.ts +21 -7
  180. package/src/comment/observers/observeComments.ts +11 -3
  181. package/src/community/api/addCommunityMembers.ts +1 -1
  182. package/src/community/api/createCommunity.ts +1 -1
  183. package/src/community/api/deleteCommunity.ts +1 -1
  184. package/src/community/api/joinCommunity.ts +1 -1
  185. package/src/community/api/leaveCommunity.ts +1 -1
  186. package/src/community/api/removeCommunityMembers.ts +1 -1
  187. package/src/community/api/updateCommunity.ts +1 -1
  188. package/src/community/events/index.ts +5 -0
  189. package/src/community/events/onCommunityCreated.ts +5 -23
  190. package/src/community/events/onCommunityDeleted.ts +5 -23
  191. package/src/community/events/onCommunityJoined.ts +5 -23
  192. package/src/community/events/onCommunityLeft.ts +5 -23
  193. package/src/community/events/onCommunityUpdated.ts +5 -23
  194. package/src/community/events/onCommunityUserAdded.ts +19 -0
  195. package/src/community/events/onCommunityUserBanned.ts +19 -0
  196. package/src/community/events/onCommunityUserRemoved.ts +19 -0
  197. package/src/community/events/onCommunityUserUnbanned.ts +19 -0
  198. package/src/community/events/utils.ts +108 -0
  199. package/src/community/observers/observeCommunity.ts +23 -9
  200. package/src/core/cache/ingest.ts +19 -3
  201. package/src/core/events.ts +45 -4
  202. package/src/core/model/index.ts +1 -0
  203. package/src/core/model/isMatch.ts +12 -0
  204. package/src/core/network.ts +14 -0
  205. package/src/core/subscription.ts +75 -0
  206. package/src/core/transports/http.ts +63 -0
  207. package/src/core/transports/index.ts +3 -0
  208. package/src/core/transports/mqtt.ts +141 -0
  209. package/src/core/transports/utils.ts +25 -0
  210. package/src/core/transports/ws.ts +61 -0
  211. package/src/index.ts +1 -0
  212. package/src/post/api/createPost.ts +2 -2
  213. package/src/post/api/deletePost.ts +2 -2
  214. package/src/post/api/updatePost.ts +1 -1
  215. package/src/post/events/index.ts +9 -0
  216. package/src/post/events/onPostApproved.ts +19 -0
  217. package/src/post/events/onPostCreated.ts +4 -24
  218. package/src/post/events/onPostDeclined.ts +19 -0
  219. package/src/post/events/onPostDeleted.ts +4 -24
  220. package/src/post/events/onPostFlagged.ts +19 -0
  221. package/src/post/events/onPostReactionAdded.ts +50 -0
  222. package/src/post/events/onPostReactionRemoved.ts +50 -0
  223. package/src/post/events/onPostUnflagged.ts +19 -0
  224. package/src/post/events/onPostUpdated.ts +4 -24
  225. package/src/post/events/utils.ts +40 -0
  226. package/src/post/observers/observePost.ts +25 -7
  227. package/src/post/observers/observePosts.ts +12 -2
  228. package/src/reaction/events/onReactionAdded.ts +36 -15
  229. package/src/reaction/events/onReactionRemoved.ts +37 -14
  230. package/src/reaction/utils/dispatchReactable.ts +2 -2
  231. package/src/reaction/utils/index.ts +1 -0
  232. package/src/reaction/utils/preparePayloadForCache.ts +45 -0
  233. package/src/report/api/createReport.ts +5 -1
  234. package/src/report/api/deleteReport.ts +5 -1
  235. package/src/user/events/index.ts +4 -0
  236. package/src/user/events/onUserFlagCleared.ts +19 -0
  237. package/src/user/events/onUserFlagged.ts +19 -0
  238. package/src/user/events/onUserUnflagged.ts +19 -0
  239. package/src/user/events/onUserUpdated.ts +4 -24
  240. package/src/user/events/utils.ts +24 -0
  241. package/src/user/observers/observeUser.ts +11 -3
  242. package/dist/core/transports.d.ts +0 -49
  243. package/dist/core/transports.d.ts.map +0 -1
  244. package/src/core/transports.ts +0 -151
@@ -0,0 +1,19 @@
1
+ import { createPostEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onPostFlagged } from '@amityco/ts-sdk'
6
+ * const dispose = onPostFlagged(post => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a {@link Amity.Post} has been flagged
12
+ *
13
+ * @param callback The function to call when the event was fired
14
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
15
+ *
16
+ * @category Post Events
17
+ */
18
+ export const onPostFlagged = (callback: Amity.Listener<Amity.Post>): Amity.Unsubscriber =>
19
+ createPostEventSubscriber('post.flagged', callback)
@@ -0,0 +1,50 @@
1
+ import { getActiveClient } from '~/client/api'
2
+ import { decoratePayload } from '~/core/query'
3
+ import { ingestInCache, pullFromCache } from '~/core/cache'
4
+ import { createEventSubscriber } from '~/core/events'
5
+ import { preparePayloadForCache } from '~/reaction/utils'
6
+ import { isMatch } from '~/core/model'
7
+
8
+ /**
9
+ * ```js
10
+ * import { onPostReactionAdded } from '@amityco/ts-sdk'
11
+ * const dispose = onPostReactionAdded(post => {
12
+ * // ...
13
+ * })
14
+ * ```
15
+ *
16
+ * Fired when a {@link Amity.Post} has been reacted
17
+ *
18
+ * @param callback The function to call when the event was fired
19
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
20
+ *
21
+ * @category Post Events
22
+ */
23
+ export const onPostReactionAdded = (callback: Amity.Listener<Amity.Post>): Amity.Unsubscriber => {
24
+ const client = getActiveClient()
25
+
26
+ const filter = (payload: Amity.Events['post.addReaction']) => {
27
+ const [cached] = pullFromCache('post', payload.posts[0].postId) ?? []
28
+
29
+ const { reactor, ...postPayload } = payload;
30
+
31
+ decoratePayload(postPayload as Amity.PostPayload)
32
+ preparePayloadForCache('post.addReaction', payload)
33
+ ingestInCache(postPayload as Amity.PostPayload)
34
+
35
+ const [post] = pullFromCache('post', payload.posts[0].postId) ?? []
36
+
37
+ if (cached && isMatch(cached, post)) {
38
+ return
39
+ }
40
+
41
+ callback(post)
42
+ }
43
+
44
+ return createEventSubscriber(
45
+ client,
46
+ 'post.addReaction',
47
+ 'post.addReaction',
48
+ filter
49
+ )
50
+ }
@@ -0,0 +1,50 @@
1
+ import { getActiveClient } from '~/client/api'
2
+ import { decoratePayload } from '~/core/query'
3
+ import { ingestInCache, pullFromCache } from '~/core/cache'
4
+ import { createEventSubscriber } from '~/core/events'
5
+ import { preparePayloadForCache } from '~/reaction/utils/preparePayloadForCache'
6
+ import { isMatch } from '~/core/model'
7
+
8
+ /**
9
+ * ```js
10
+ * import { onPostReactionRemoved } from '@amityco/ts-sdk'
11
+ * const dispose = onPostReactionRemoved(post => {
12
+ * // ...
13
+ * })
14
+ * ```
15
+ *
16
+ * Fired when a reaction has been removed from a {@link Amity.Post}
17
+ *
18
+ * @param callback The function to call when the event was fired
19
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
20
+ *
21
+ * @category Post Events
22
+ */
23
+ export const onPostReactionRemoved = (callback: Amity.Listener<Amity.Post>): Amity.Unsubscriber => {
24
+ const client = getActiveClient()
25
+
26
+ const filter = (payload: Amity.Events['post.removeReaction']) => {
27
+ const [cached] = pullFromCache('post', payload.posts[0].postId) ?? []
28
+
29
+ const { reactor, ...postPayload } = payload;
30
+
31
+ decoratePayload(postPayload as Amity.PostPayload)
32
+ preparePayloadForCache('post.removeReaction', payload)
33
+ ingestInCache(postPayload as Amity.PostPayload)
34
+
35
+ const [post] = pullFromCache('post', payload.posts[0].postId) ?? []
36
+
37
+ if (cached && isMatch(cached, post)) {
38
+ return
39
+ }
40
+
41
+ callback(post)
42
+ }
43
+
44
+ return createEventSubscriber(
45
+ client,
46
+ 'post.removeReaction',
47
+ 'post.removeReaction',
48
+ filter
49
+ )
50
+ }
@@ -0,0 +1,19 @@
1
+ import { createPostEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onPostUnflagged } from '@amityco/ts-sdk'
6
+ * const dispose = onPostUnflagged(post => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a flag has been removed from a {@link Amity.Post}
12
+ *
13
+ * @param callback The function to call when the event was fired
14
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
15
+ *
16
+ * @category Post Events
17
+ */
18
+ export const onPostUnflagged = (callback: Amity.Listener<Amity.Post>): Amity.Unsubscriber =>
19
+ createPostEventSubscriber('post.unflagged', callback)
@@ -1,8 +1,4 @@
1
- import { getActiveClient } from '~/client/api'
2
- import { createEventSubscriber } from '~/core/events'
3
-
4
- import { decoratePayload } from '~/core/query'
5
- import { ingestInCache } from '~/core/cache'
1
+ import { createPostEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
@@ -12,28 +8,12 @@ import { ingestInCache } from '~/core/cache'
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when an {@link Amity.Post} has been updated
11
+ * Fired when a {@link Amity.Post} has been updated
16
12
  *
17
13
  * @param callback The function to call when the event was fired
18
14
  * @returns an {@link Amity.Unsubscriber} function to stop listening
19
15
  *
20
16
  * @category Post Events
21
17
  */
22
- export const onPostUpdated = (
23
- callback: Amity.Listener<Amity.Post>
24
- ): Amity.Unsubscriber => {
25
- const client = getActiveClient()
26
-
27
- const filter = (payload: Amity.PostPayload) => {
28
- decoratePayload(payload)
29
- ingestInCache(payload)
30
- callback(payload.posts[0])
31
- }
32
-
33
- return createEventSubscriber(
34
- client,
35
- 'message/onPostUpdated',
36
- 'v3.post.didUpdate',
37
- filter
38
- )
39
- }
18
+ export const onPostUpdated = (callback: Amity.Listener<Amity.Post>): Amity.Unsubscriber =>
19
+ createPostEventSubscriber('post.updated', callback)
@@ -0,0 +1,40 @@
1
+ import { getActiveClient } from '~/client/api'
2
+ import { decoratePayload } from '~/core/query'
3
+ import { ingestInCache, pullFromCache } from '~/core/cache'
4
+ import { createEventSubscriber, fireEvent } from '~/core/events'
5
+ import { isMatch } from '~/core/model'
6
+
7
+ export const createPostEventSubscriber = (
8
+ event: keyof Amity.MqttPostMessageEvents,
9
+ callback: Amity.Listener<Amity.Post>
10
+ ) => {
11
+ const client = getActiveClient()
12
+
13
+ const filter = (payload: Amity.PostPayload) => {
14
+ const [cached] = pullFromCache('post', payload.posts[0].postId) ?? []
15
+
16
+ const { communities, ...others } = payload
17
+
18
+ decoratePayload(others as Amity.PostPayload)
19
+ ingestInCache(others as Amity.PostPayload)
20
+
21
+ if (communities?.[0]) {
22
+ fireEvent('community.updated', { communities })
23
+ }
24
+
25
+ const [post] = pullFromCache('post', others.posts[0].postId) ?? []
26
+
27
+ if (cached && isMatch(cached, post)) {
28
+ return
29
+ }
30
+
31
+ callback(post)
32
+ }
33
+
34
+ return createEventSubscriber(
35
+ client,
36
+ event,
37
+ event,
38
+ filter
39
+ )
40
+ }
@@ -7,6 +7,12 @@ import { getPost } from '../api'
7
7
  import {
8
8
  onPostUpdated,
9
9
  onPostDeleted,
10
+ onPostApproved,
11
+ onPostDeclined,
12
+ onPostFlagged,
13
+ onPostUnflagged,
14
+ onPostReactionAdded,
15
+ onPostReactionRemoved,
10
16
  } from '../events'
11
17
 
12
18
  /**
@@ -25,7 +31,7 @@ import {
25
31
  *
26
32
  * @category Post Observer
27
33
  */
28
- export const observePost = <Events extends ['onFetch', 'onUpdate', 'onDelete']>(
34
+ export const observePost = <Events extends ['onFetch', 'onUpdate', 'onDelete', 'onApproved', 'onDeclined', 'onFlagged', 'onUnflagged', 'onReactionAdded', 'onReactionRemoved']>(
29
35
  postId: string,
30
36
  callback: Amity.ObjectListener<Amity.QueryResult<Amity.Post>, Events>,
31
37
  policy: Amity.QueryPolicy = 'cache_then_server',
@@ -40,9 +46,6 @@ export const observePost = <Events extends ['onFetch', 'onUpdate', 'onDelete']>(
40
46
  result: Amity.QueryResult<Amity.Post>,
41
47
  action: Events[number]
42
48
  ) => {
43
- // filter function
44
- if (result.data?.postId !== postId) return
45
-
46
49
  if (callback instanceof Function)
47
50
  return callback(result)
48
51
 
@@ -52,16 +55,31 @@ export const observePost = <Events extends ['onFetch', 'onUpdate', 'onDelete']>(
52
55
  callback[action]?.(result)
53
56
  }
54
57
 
58
+ const realtimeRouter = (
59
+ result: Amity.QueryResult<Amity.Post>,
60
+ action: Events[number]
61
+ ) => {
62
+ if (result.data?.postId !== postId) return
63
+
64
+ router(result, action)
65
+ }
66
+
55
67
  const disposers: Amity.Unsubscriber[] = []
56
68
 
57
69
  disposers.push(
58
- onPostUpdated(data => router({ data }, 'onUpdate')),
59
- onPostDeleted(data => router({ data }, 'onDelete')),
70
+ onPostUpdated(data => realtimeRouter({ data }, 'onUpdate')),
71
+ onPostDeleted(data => realtimeRouter({ data }, 'onDelete')),
72
+ onPostApproved(data => realtimeRouter({ data }, 'onApproved')),
73
+ onPostDeclined(data => realtimeRouter({ data }, 'onDeclined')),
74
+ onPostFlagged(data => realtimeRouter({ data }, 'onFlagged')),
75
+ onPostUnflagged(data => realtimeRouter({ data }, 'onUnflagged')),
76
+ onPostReactionAdded(data => realtimeRouter({ data }, 'onReactionAdded')),
77
+ onPostReactionRemoved(data => realtimeRouter({ data }, 'onReactionRemoved')),
60
78
  )
61
79
 
62
80
  runQuery(
63
81
  createQuery(getPost, postId),
64
- (result) => result.data && router(result, 'onFetch'),
82
+ (result) => router(result, 'onFetch'),
65
83
  queryOptions(policy),
66
84
  )
67
85
 
@@ -4,6 +4,10 @@ import {
4
4
  onPostCreated,
5
5
  onPostUpdated,
6
6
  onPostDeleted,
7
+ onPostApproved,
8
+ onPostDeclined,
9
+ onPostFlagged,
10
+ onPostUnflagged, onPostReactionAdded, onPostReactionRemoved
7
11
  } from '../events'
8
12
 
9
13
  /**
@@ -30,7 +34,7 @@ export const observePosts = (params: {
30
34
  targetType: Amity.PostTargetType,
31
35
  targetId: Amity.Post['targetId'],
32
36
  },
33
- callback: Amity.ObjectListener<Amity.Post, ['onCreate', 'onUpdate', 'onDelete']>
37
+ callback: Amity.ObjectListener<Amity.Post, ['onCreate', 'onUpdate', 'onDelete', 'onApproved', 'onDeclined', 'onFlagged', 'onUnflagged', 'onReactionAdded', 'onReactionRemoved']>
34
38
  ): Amity.Unsubscriber => {
35
39
  const { log } = getActiveClient()
36
40
 
@@ -41,7 +45,7 @@ export const observePosts = (params: {
41
45
 
42
46
  const router = (
43
47
  post: Amity.Post,
44
- action: 'onCreate' | 'onUpdate' | 'onDelete'
48
+ action: 'onCreate' | 'onUpdate' | 'onDelete' | 'onApproved' | 'onDeclined' | 'onFlagged' | 'onUnflagged' | 'onReactionAdded' | 'onReactionRemoved'
45
49
  ) => {
46
50
  if (params.targetId !== post.targetId
47
51
  || params.targetType !== post.targetType)
@@ -57,6 +61,12 @@ export const observePosts = (params: {
57
61
  onPostCreated(post => router(post, 'onCreate')),
58
62
  onPostUpdated(post => router(post, 'onUpdate')),
59
63
  onPostDeleted(post => router(post, 'onDelete')),
64
+ onPostApproved(post => router(post, 'onApproved')),
65
+ onPostDeclined(post => router(post, 'onDeclined')),
66
+ onPostFlagged(post => router(post, 'onFlagged')),
67
+ onPostUnflagged(post => router(post, 'onUnflagged')),
68
+ onPostReactionAdded(post => router(post, 'onReactionAdded')),
69
+ onPostReactionRemoved(post => router(post, 'onReactionRemoved')),
60
70
  )
61
71
 
62
72
  return () => {
@@ -1,43 +1,64 @@
1
1
  import { getActiveClient } from '~/client/api'
2
- import { ingestInCache } from '~/core/cache'
2
+ import { ingestInCache, pullFromCache } from '~/core/cache'
3
3
  import { createEventSubscriber } from '~/core/events'
4
+ import { getResolver } from '~/core/model'
4
5
  import { decoratePayload } from '~/core/query'
6
+ import { onPostReactionAdded } from '~/post/events'
7
+ import { onCommentReactionAdded } from '~/comment/events'
5
8
 
6
9
  /**
7
10
  * ```js
8
11
  * import { onReactionAdded } from '@amityco/ts-sdk'
9
- * const dispose = onReactionAdded(message => {
12
+ * const dispose = onReactionAdded('post', postId, post => {
10
13
  * // ...
11
14
  * })
12
15
  * ```
13
16
  *
14
17
  * Fired when an {@link Amity.Reaction} has been added
15
18
  *
19
+ * @param {@link Amity.ReactableType} referenceType
20
+ * @param {string} referenceId
16
21
  * @param callback The function to call when the event was fired
17
22
  * @returns an {@link Amity.Unsubscriber} function to stop listening
18
23
  *
19
24
  * @category Message Events
20
25
  **/
21
26
  export const onReactionAdded = (
22
- referenceType: Amity.Reaction['referenceType'],
27
+ referenceType: Amity.ReactableType,
23
28
  referenceId: Amity.Reaction['referenceId'],
24
29
  callback: Amity.Listener<Amity.Model[typeof referenceType]>
25
30
  ): Amity.Unsubscriber => {
26
- const client = getActiveClient()
31
+ const callbackWrapper = (model: Amity.Model[typeof referenceType]) => {
32
+ if (getResolver(referenceType)(model) === referenceId) {
33
+ callback(model)
34
+ }
35
+ }
36
+
37
+ if (referenceType === 'message') {
38
+ const client = getActiveClient()
27
39
 
28
- const event = `v3.${referenceType}.didUpdate` as const
40
+ const filter = (payload: Amity.MessagePayload) => {
41
+ const reactionsCountInCache = (pullFromCache('message', payload.messages[0].messageId) ?? [])[0]?.reactionsCount
42
+ const isReactionEvent = reactionsCountInCache !== payload.messages[0].reactionsCount
29
43
 
30
- const filter = (payload: Amity.Events[typeof event]) => {
31
- // TODO: lol
44
+ decoratePayload(payload)
45
+ ingestInCache(payload)
46
+ if (isReactionEvent) {
47
+ callbackWrapper(payload.messages[0])
48
+ }
49
+ }
50
+
51
+ return createEventSubscriber(
52
+ client,
53
+ 'reaction/onReactionAdded',
54
+ 'v3.message.didUpdate',
55
+ filter
56
+ )
57
+ }
32
58
 
33
- decoratePayload(payload)
34
- ingestInCache(payload)
59
+ if (referenceType === 'post') {
60
+ return onPostReactionAdded(callbackWrapper)
35
61
  }
36
62
 
37
- return createEventSubscriber(
38
- client,
39
- 'reaction/onReactionAdded',
40
- event,
41
- filter
42
- )
63
+ return onCommentReactionAdded(callbackWrapper)
43
64
  }
@@ -1,41 +1,64 @@
1
1
  import { getActiveClient } from '~/client/api'
2
- import { ingestInCache } from '~/core/cache'
2
+ import { ingestInCache, pullFromCache } from '~/core/cache'
3
3
  import { createEventSubscriber } from '~/core/events'
4
+ import { getResolver } from '~/core/model'
4
5
  import { decoratePayload } from '~/core/query'
6
+ import { onPostReactionRemoved } from '~/post/events'
7
+ import { onCommentReactionRemoved } from '~/comment/events'
5
8
 
6
9
  /**
7
10
  * ```js
8
11
  * import { onReactionRemoved } from '@amityco/ts-sdk'
9
- * const dispose = onReactionRemoved(message => {
12
+ * const dispose = onReactionRemoved('post', postId, post => {
10
13
  * // ...
11
14
  * })
12
15
  * ```
13
16
  *
14
17
  * Fired when an {@link Amity.Reaction} has been removed
15
18
  *
19
+ * @param {@link Amity.ReactableType} referenceType
20
+ * @param {string} referenceId
16
21
  * @param callback The function to call when the event was fired
17
22
  * @returns an {@link Amity.Unsubscriber} function to stop listening
18
23
  *
19
24
  * @category Message Events
20
25
  **/
21
26
  export const onReactionRemoved = (
22
- referenceType: Amity.Reaction['referenceType'],
27
+ referenceType: Amity.ReactableType,
23
28
  referenceId: Amity.Reaction['referenceId'],
24
29
  callback: Amity.Listener<Amity.Model[typeof referenceType]>
25
30
  ): Amity.Unsubscriber => {
26
- const client = getActiveClient()
31
+ const callbackWrapper = (model: Amity.Model[typeof referenceType]) => {
32
+ if (getResolver(referenceType)(model) === referenceId) {
33
+ callback(model)
34
+ }
35
+ }
36
+
37
+ if (referenceType === 'message') {
38
+ const client = getActiveClient()
39
+
40
+ const filter = (payload: Amity.MessagePayload) => {
41
+ const reactionsCountInCache = (pullFromCache('message', payload.messages[0].messageId) ?? [])[0]?.reactionsCount
42
+ const isReactionEvent = reactionsCountInCache !== payload.messages[0].reactionsCount
27
43
 
28
- const filter = (payload: Amity.MessagePayload) => {
29
- // TODO: lol
44
+ decoratePayload(payload)
45
+ ingestInCache(payload)
46
+ if (isReactionEvent) {
47
+ callbackWrapper(payload.messages[0])
48
+ }
49
+ }
50
+
51
+ return createEventSubscriber(
52
+ client,
53
+ 'reaction/onReactionRemoved',
54
+ 'v3.message.didUpdate',
55
+ filter
56
+ )
57
+ }
30
58
 
31
- decoratePayload(payload)
32
- ingestInCache(payload)
59
+ if (referenceType === 'post') {
60
+ return onPostReactionRemoved(callbackWrapper)
33
61
  }
34
62
 
35
- return createEventSubscriber(
36
- client,
37
- 'reaction/onReactionRemoved',
38
- 'v3.message.didUpdate',
39
- filter
40
- )
63
+ return onCommentReactionRemoved(callbackWrapper)
41
64
  }
@@ -12,8 +12,8 @@ export const dispatchReactable = <T extends Amity.ReactableType>(
12
12
  fireEvent('v3.message.didUpdate', { messages: [model] })
13
13
  else if (referenceType === 'post')
14
14
  // @ts-ignore: refactor later
15
- fireEvent('v3.post.didUpdate', { posts: [model] })
15
+ fireEvent('post.updated', { posts: [model] })
16
16
  else if (referenceType === 'comment')
17
17
  // @ts-ignore: refactor later
18
- fireEvent('v3.comment.didUpdate', { comments: [model] })
18
+ fireEvent('comment.updated', { comments: [model] })
19
19
  }
@@ -1,2 +1,3 @@
1
1
  export * from './dispatchReactable'
2
2
  export * from './fetchReference'
3
+ export * from './preparePayloadForCache'
@@ -0,0 +1,45 @@
1
+ import { pullFromCache } from '~/core/cache'
2
+ import { getActiveClient } from '~/client/api'
3
+
4
+ /** @hidden */
5
+ export const preparePayloadForCache = <T extends 'post.addReaction' | 'post.removeReaction' | 'comment.addReaction' | 'comment.removeReaction'>(
6
+ event: T,
7
+ payload: Amity.Events[T],
8
+ ) => {
9
+ const client = getActiveClient()
10
+
11
+ if (client.userId !== payload.reactor.userId) {
12
+ return
13
+ }
14
+
15
+ let model: Amity.Reactable
16
+ let cached: Amity.Reactable
17
+
18
+ if (event === 'post.addReaction' || event === 'post.removeReaction') {
19
+ const post = (payload as Amity.Events['post.addReaction']).posts[0]
20
+ cached = (pullFromCache('post', post.postId) ?? [])[0]
21
+ model = post
22
+ } else {
23
+ const comment = (payload as Amity.Events['comment.addReaction']).comments[0]
24
+ cached = (pullFromCache('comment', comment.commentId) ?? [])[0]
25
+ model = comment
26
+ }
27
+
28
+ if (!cached || !cached.myReactions) {
29
+ return
30
+ }
31
+
32
+ if (event === 'post.addReaction' || event === 'comment.addReaction') {
33
+ if (cached.myReactions.includes(payload.reactor.reactionName)) {
34
+ return
35
+ }
36
+
37
+ Object.assign(model, { myReactions: [...cached.myReactions, payload.reactor.reactionName] })
38
+ } else {
39
+ if (!cached.myReactions.includes(payload.reactor.reactionName)) {
40
+ return
41
+ }
42
+
43
+ Object.assign(model, { myReactions: cached.myReactions.filter(x => x !== payload.reactor.reactionName) })
44
+ }
45
+ }
@@ -32,9 +32,13 @@ export const createReport = async (
32
32
  `/api/v3/${domainName}/${referenceId}/flag`
33
33
  )
34
34
 
35
+ const event = referenceType === 'message'
36
+ ? 'v3.message.didUpdate' as const
37
+ : `${referenceType}.updated` as const
38
+
35
39
  decoratePayload(data)
36
40
  ingestInCache(data)
37
- fireEvent(`v3.${referenceType}.didUpdate`, data)
41
+ fireEvent(event, data)
38
42
 
39
43
  return !!data
40
44
  }
@@ -32,9 +32,13 @@ export const deleteReport = async (
32
32
  `/api/v3/${domainName}/${referenceId}/unflag`
33
33
  )
34
34
 
35
+ const event = referenceType === 'message'
36
+ ? 'v3.message.didUpdate' as const
37
+ : `${referenceType}.updated` as const
38
+
35
39
  decoratePayload(data)
36
40
  ingestInCache(data)
37
- fireEvent(`v3.${referenceType}.didUpdate`, data)
41
+ fireEvent(event, data)
38
42
 
39
43
  return !!data
40
44
  }
@@ -1 +1,5 @@
1
1
  export * from './onUserUpdated'
2
+
3
+ export * from './onUserFlagged'
4
+ export * from './onUserUnflagged'
5
+ export * from './onUserFlagCleared'
@@ -0,0 +1,19 @@
1
+ import { createUserEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onUserFlagCleared } from '@amityco/ts-sdk'
6
+ * const dispose = onUserFlagCleared(user => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when flags have been cleared for a {@link Amity.User}
12
+ *
13
+ * @param callback The function to call when the event was fired
14
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
15
+ *
16
+ * @category User Events
17
+ */
18
+ export const onUserFlagCleared = (callback: Amity.Listener<Amity.User>) =>
19
+ createUserEventSubscriber('user.flagCleared', callback)
@@ -0,0 +1,19 @@
1
+ import { createUserEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onUserFlagged } from '@amityco/ts-sdk'
6
+ * const dispose = onUserFlagged(user => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a {@link Amity.User} has been flagged
12
+ *
13
+ * @param callback The function to call when the event was fired
14
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
15
+ *
16
+ * @category User Events
17
+ */
18
+ export const onUserFlagged = (callback: Amity.Listener<Amity.User>) =>
19
+ createUserEventSubscriber('user.flagged', callback)
@@ -0,0 +1,19 @@
1
+ import { createUserEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onUserUnflagged } from '@amityco/ts-sdk'
6
+ * const dispose = onUserUnflagged(user => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a flag has been removed from a {@link Amity.User}
12
+ *
13
+ * @param callback The function to call when the event was fired
14
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
15
+ *
16
+ * @category User Events
17
+ */
18
+ export const onUserUnflagged = (callback: Amity.Listener<Amity.User>) =>
19
+ createUserEventSubscriber('user.unflagged', callback)