@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
@@ -4,6 +4,10 @@ import {
4
4
  onCommentCreated,
5
5
  onCommentUpdated,
6
6
  onCommentDeleted,
7
+ onCommentFlagged,
8
+ onCommentUnflagged,
9
+ onCommentReactionAdded,
10
+ onCommentReactionRemoved,
7
11
  } from '../events'
8
12
 
9
13
  /**
@@ -26,7 +30,7 @@ export const observeComments = (
26
30
  postId: Amity.Post['postId'],
27
31
  callback: Amity.ObjectListener<
28
32
  Amity.Comment,
29
- ['onCreate', 'onUpdate', 'onDelete']
33
+ ['onCreate', 'onUpdate', 'onDelete', 'onFlagged', 'onUnflagged', 'onReactionAdded', 'onReactionRemoved']
30
34
  >
31
35
  ): Amity.Unsubscriber => {
32
36
  const { log } = getActiveClient()
@@ -38,7 +42,7 @@ export const observeComments = (
38
42
 
39
43
  const router = (
40
44
  comment: Amity.Comment,
41
- action: 'onCreate' | 'onUpdate' | 'onDelete'
45
+ action: 'onCreate' | 'onUpdate' | 'onDelete' | 'onFlagged' | 'onUnflagged' | 'onReactionAdded' | 'onReactionRemoved'
42
46
  ) => {
43
47
  if (comment.referenceId !== postId) return
44
48
 
@@ -51,7 +55,11 @@ export const observeComments = (
51
55
  disposers.push(
52
56
  onCommentCreated(comment => router(comment, 'onCreate')),
53
57
  onCommentUpdated(comment => router(comment, 'onUpdate')),
54
- onCommentDeleted(comment => router(comment, 'onDelete'))
58
+ onCommentDeleted(comment => router(comment, 'onDelete')),
59
+ onCommentFlagged(comment => router(comment, 'onFlagged')),
60
+ onCommentUnflagged(comment => router(comment, 'onUnflagged')),
61
+ onCommentReactionAdded(comment => router(comment, 'onReactionAdded')),
62
+ onCommentReactionRemoved(comment => router(comment, 'onReactionRemoved')),
55
63
  )
56
64
 
57
65
  return () => {
@@ -33,7 +33,7 @@ export const addCommunityMembers = async (
33
33
 
34
34
  decoratePayload(data)
35
35
  ingestInCache(data)
36
- fireEvent('v3.community.didAddUsers', {
36
+ fireEvent('community.userAdded', {
37
37
  communities: data.communities!,
38
38
  })
39
39
 
@@ -36,7 +36,7 @@ export const createCommunity = async (
36
36
 
37
37
  decoratePayload(data)
38
38
  ingestInCache(data)
39
- fireEvent('v3.community.didCreate', data)
39
+ fireEvent('community.created', data)
40
40
 
41
41
  const { communities } = data
42
42
  return communities[0]
@@ -29,7 +29,7 @@ export const deleteCommunity = async (
29
29
  )
30
30
 
31
31
  const deleted = await getCommunity(communityId)
32
- fireEvent('v3.community.didDelete', { communities: [deleted] })
32
+ fireEvent('community.deleted', { communities: [deleted] })
33
33
 
34
34
  return deleted
35
35
  }
@@ -28,7 +28,7 @@ export const joinCommunity = async (communityId: Amity.Community['communityId'])
28
28
 
29
29
  decoratePayload(data)
30
30
  ingestInCache(data)
31
- fireEvent('v3.community.didJoin', {
31
+ fireEvent('community.joined', {
32
32
  communities: data.communities!
33
33
  })
34
34
 
@@ -28,7 +28,7 @@ export const leaveCommunity = async (communityId: Amity.Community['communityId']
28
28
 
29
29
  decoratePayload(data)
30
30
  ingestInCache(data)
31
- fireEvent('v3.community.didJoin', {
31
+ fireEvent('community.left', {
32
32
  communities: data.communities!,
33
33
  })
34
34
 
@@ -33,7 +33,7 @@ export const removeCommunityMembers = async (
33
33
 
34
34
  decoratePayload(data)
35
35
  ingestInCache(data)
36
- fireEvent('v3.community.didRemoveUsers', {
36
+ fireEvent('community.userRemoved', {
37
37
  communities: data.communities!,
38
38
  })
39
39
 
@@ -33,7 +33,7 @@ export const updateCommunity = async (
33
33
 
34
34
  decoratePayload(data)
35
35
  ingestInCache(data)
36
- fireEvent('v3.community.didUpdate', data)
36
+ fireEvent('community.updated', data)
37
37
 
38
38
  const { communities } = data
39
39
  return communities.find(community => community.communityId === communityId)!
@@ -4,3 +4,8 @@ export * from './onCommunityDeleted'
4
4
 
5
5
  export * from './onCommunityJoined'
6
6
  export * from './onCommunityLeft'
7
+
8
+ export * from './onCommunityUserAdded'
9
+ export * from './onCommunityUserRemoved'
10
+ export * from './onCommunityUserBanned'
11
+ export * from './onCommunityUserUnbanned'
@@ -1,37 +1,19 @@
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 { createCommunityEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
9
5
  * import { onCommunityCreated } from '@amityco/ts-sdk'
10
- * const dispose = onCommunityCreated(channel => {
6
+ * const dispose = onCommunityCreated(community => {
11
7
  * // ...
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when any {@link Amity.Community} have been created
11
+ * Fired when {@link Amity.Community} have been created
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 Community Events
21
17
  */
22
- export const onCommunityCreated = (callback: Amity.Listener<Amity.Community>) => {
23
- const client = getActiveClient()
24
-
25
- const filter = (payload: Amity.CommunityPayload) => {
26
- decoratePayload(payload)
27
- ingestInCache(payload)
28
- callback(payload.communities[0])
29
- }
30
-
31
- return createEventSubscriber(
32
- client,
33
- 'onCommunityCreated',
34
- 'v3.community.didCreate',
35
- filter
36
- )
37
- }
18
+ export const onCommunityCreated = (callback: Amity.Listener<Amity.Community>) =>
19
+ createCommunityEventSubscriber('community.created', callback)
@@ -1,37 +1,19 @@
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 { createCommunityEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
9
5
  * import { onCommunityDeleted } from '@amityco/ts-sdk'
10
- * const dispose = onCommunityDeleted(channel => {
6
+ * const dispose = onCommunityDeleted(community => {
11
7
  * // ...
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when any {@link Amity.Community} have been deleted
11
+ * Fired when a {@link Amity.Community} has been deleted
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 Community Events
21
17
  */
22
- export const onCommunityDeleted = (callback: Amity.Listener<Amity.Community>) => {
23
- const client = getActiveClient()
24
-
25
- const filter = (payload: Amity.CommunityPayload) => {
26
- decoratePayload(payload)
27
- ingestInCache(payload)
28
- callback(payload.communities[0])
29
- }
30
-
31
- return createEventSubscriber(
32
- client,
33
- 'onCommunityDeleted',
34
- 'v3.community.didDelete',
35
- filter
36
- )
37
- }
18
+ export const onCommunityDeleted = (callback: Amity.Listener<Amity.Community>) =>
19
+ createCommunityEventSubscriber('community.deleted', callback)
@@ -1,37 +1,19 @@
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 { createCommunityMemberEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
9
5
  * import { onCommunityJoined } from '@amityco/ts-sdk'
10
- * const dispose = onCommunityJoined(channel => {
6
+ * const dispose = onCommunityJoined((community, member) => {
11
7
  * // ...
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when any {@link Amity.Community} was joined
11
+ * Fired when a {@link Amity.Community} has been joined
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 Community Events
21
17
  */
22
- export const onCommunityJoined = (callback: Amity.Listener<Amity.Community>) => {
23
- const client = getActiveClient()
24
-
25
- const filter = (payload: Amity.CommunityPayload) => {
26
- decoratePayload(payload)
27
- ingestInCache(payload)
28
- callback(payload.communities[0])
29
- }
30
-
31
- return createEventSubscriber(
32
- client,
33
- 'onCommunityJoined',
34
- 'v3.community.didJoin',
35
- filter
36
- )
37
- }
18
+ export const onCommunityJoined = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
19
+ createCommunityMemberEventSubscriber('community.joined', callback)
@@ -1,37 +1,19 @@
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 { createCommunityMemberEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
9
5
  * import { onCommunityLeft } from '@amityco/ts-sdk'
10
- * const dispose = onCommunityLeft(channel => {
6
+ * const dispose = onCommunityLeft((community, member) => {
11
7
  * // ...
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when any {@link Amity.Community} was left
11
+ * Fired when a {@link Amity.Community} has been left
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 Community Events
21
17
  */
22
- export const onCommunityLeft = (callback: Amity.Listener<Amity.Community>) => {
23
- const client = getActiveClient()
24
-
25
- const filter = (payload: Amity.CommunityPayload) => {
26
- decoratePayload(payload)
27
- ingestInCache(payload)
28
- callback(payload.communities[0])
29
- }
30
-
31
- return createEventSubscriber(
32
- client,
33
- 'onCommunityLeft',
34
- 'v3.community.didLeave',
35
- filter
36
- )
37
- }
18
+ export const onCommunityLeft = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
19
+ createCommunityMemberEventSubscriber('community.left', callback)
@@ -1,37 +1,19 @@
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 { createCommunityEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
9
5
  * import { onCommunityUpdated } from '@amityco/ts-sdk'
10
- * const dispose = onCommunityUpdated(channel => {
6
+ * const dispose = onCommunityUpdated(community => {
11
7
  * // ...
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when any {@link Amity.Community} have been updated
11
+ * Fired when a {@link Amity.Community} 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 Community Events
21
17
  */
22
- export const onCommunityUpdated = (callback: Amity.Listener<Amity.Community>) => {
23
- const client = getActiveClient()
24
-
25
- const filter = (payload: Amity.CommunityPayload) => {
26
- decoratePayload(payload)
27
- ingestInCache(payload)
28
- callback(payload.communities[0])
29
- }
30
-
31
- return createEventSubscriber(
32
- client,
33
- 'onCommunityUpdated',
34
- 'v3.community.didUpdate',
35
- filter
36
- )
37
- }
18
+ export const onCommunityUpdated = (callback: Amity.Listener<Amity.Community>) =>
19
+ createCommunityEventSubscriber('community.updated', callback)
@@ -0,0 +1,19 @@
1
+ import { createCommunityMemberEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onCommunityUserAdded } from '@amityco/ts-sdk'
6
+ * const dispose = onCommunityUserAdded((community, member) => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a user has been added to a {@link Amity.Community}
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 Community Events
17
+ */
18
+ export const onCommunityUserAdded = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
19
+ createCommunityMemberEventSubscriber('community.userAdded', callback)
@@ -0,0 +1,19 @@
1
+ import { createCommunityMemberEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onCommunityUserBanned } from '@amityco/ts-sdk'
6
+ * const dispose = onCommunityUserBanned((community, member) => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a user has been banned in a {@link Amity.Community}
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 Community Events
17
+ */
18
+ export const onCommunityUserBanned = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
19
+ createCommunityMemberEventSubscriber('community.userBanned', callback)
@@ -0,0 +1,19 @@
1
+ import { createCommunityMemberEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onCommunityUserRemoved } from '@amityco/ts-sdk'
6
+ * const dispose = onCommunityUserRemoved((community, member) => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a user has been removed from a {@link Amity.Community}
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 Community Events
17
+ */
18
+ export const onCommunityUserRemoved = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
19
+ createCommunityMemberEventSubscriber('community.userRemoved', callback)
@@ -0,0 +1,19 @@
1
+ import { createCommunityMemberEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onCommunityUserUnbanned } from '@amityco/ts-sdk'
6
+ * const dispose = onCommunityUserUnbanned((community, member) => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a user has been unbanned in a {@link Amity.Community}
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 Community Events
17
+ */
18
+ export const onCommunityUserUnbanned = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
19
+ createCommunityMemberEventSubscriber('community.userUnbanned', callback)
@@ -0,0 +1,108 @@
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 { getResolver, isMatch } from '~/core/model'
6
+
7
+ export const createCommunityEventSubscriber = (
8
+ event: keyof Amity.MqttCommunityMessageEvents,
9
+ callback: Amity.Listener<Amity.Community>
10
+ ) => {
11
+ const client = getActiveClient()
12
+
13
+ const filter = (payload: Amity.CommunityPayload) => {
14
+ const [cached] = pullFromCache('community', payload.communities[0].communityId) ?? []
15
+
16
+ decoratePayload(payload)
17
+ ingestInCache(payload)
18
+
19
+ const [community] = pullFromCache('community', payload.communities[0].communityId) ?? []
20
+
21
+ if (cached && isMatch(cached, community)) {
22
+ return
23
+ }
24
+
25
+ callback(community)
26
+ }
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ event,
31
+ event,
32
+ filter
33
+ )
34
+ }
35
+
36
+ function hasPermission(member: Amity.Membership<'community'>, payload: Amity.CommunityPayload, permission: string) {
37
+ if (member.permissions.some(x => x === permission)) {
38
+ return true;
39
+ }
40
+
41
+ return payload.users!
42
+ .find(user => user.userId === member.userId)!
43
+ .permissions.some(x => x === permission)
44
+ }
45
+
46
+
47
+ function getEventRelatedMember(
48
+ event: keyof Amity.MqttCommunityUserMessageEvents,
49
+ payload: Amity.CommunityPayload
50
+ ) {
51
+ if (event === 'community.joined' || event === 'community.left') {
52
+ return payload.communityUsers![0];
53
+ }
54
+
55
+ // NOTE: backend returns the one who took the action and the one on whom
56
+ // the action was taken. We need the 2nd one
57
+ if (event === 'community.userRemoved') {
58
+ return payload.communityUsers!.filter(x => x.communityMembership === 'none')[0]
59
+ }
60
+
61
+ if (event === 'community.userBanned') {
62
+ return payload.communityUsers!.filter(x => x.communityMembership === 'banned')[0]
63
+ }
64
+
65
+ // NOTE: it might be that in certain edge cases permission check won't be enough
66
+ if (event === 'community.userUnbanned') {
67
+ return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'BAN_COMMUNITY_USER'))[0]
68
+ }
69
+
70
+ return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'ADD_COMMUNITY_USER'))[0]
71
+ }
72
+
73
+ export const createCommunityMemberEventSubscriber = (
74
+ event: keyof Amity.MqttCommunityUserMessageEvents,
75
+ callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
76
+ ) => {
77
+ const client = getActiveClient()
78
+
79
+ const filter = (payload: Amity.CommunityPayload) => {
80
+ const [cachedCommunity] = pullFromCache('community', payload.communities[0].communityId) ?? []
81
+ const [cachedMember] = pullFromCache(
82
+ 'communityUsers',
83
+ getResolver('communityUsers')(getEventRelatedMember(event, payload))
84
+ ) ?? []
85
+
86
+ decoratePayload(payload)
87
+ ingestInCache(payload)
88
+
89
+ const [community] = pullFromCache('community', payload.communities[0].communityId) ?? []
90
+ const [member] = pullFromCache(
91
+ 'communityUsers',
92
+ getResolver('communityUsers')(getEventRelatedMember(event, payload))
93
+ ) ?? []
94
+
95
+ if (cachedCommunity && isMatch(cachedCommunity, community) && cachedMember && isMatch(cachedMember, member)) {
96
+ return
97
+ }
98
+
99
+ callback(community, member)
100
+ }
101
+
102
+ return createEventSubscriber(
103
+ client,
104
+ event,
105
+ event,
106
+ filter
107
+ )
108
+ }
@@ -9,6 +9,10 @@ import {
9
9
  onCommunityDeleted,
10
10
  onCommunityJoined,
11
11
  onCommunityLeft,
12
+ onCommunityUserAdded,
13
+ onCommunityUserRemoved,
14
+ onCommunityUserBanned,
15
+ onCommunityUserUnbanned
12
16
  } from '../events'
13
17
 
14
18
  /**
@@ -27,7 +31,7 @@ import {
27
31
  *
28
32
  * @category Community Observer
29
33
  */
30
- export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelete', 'onJoin', 'onLeft']>(
34
+ export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelete', 'onJoin', 'onLeft', 'onUserAdded', 'onUserRemoved', 'onUserBanned', 'onUserUnbanned']>(
31
35
  communityId: string,
32
36
  callback: Amity.ObjectListener<Amity.QueryResult<Amity.Community>, Events>
33
37
  ): Amity.Unsubscriber => {
@@ -41,9 +45,6 @@ export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelet
41
45
  result: Amity.QueryResult<Amity.Community>,
42
46
  action: Events[number]
43
47
  ) => {
44
- // filter function
45
- if (result.data?.communityId !== communityId) return
46
-
47
48
  if (callback instanceof Function)
48
49
  return callback(result)
49
50
 
@@ -53,18 +54,31 @@ export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelet
53
54
  callback[action]?.(result)
54
55
  }
55
56
 
57
+ const realtimeRouter = (
58
+ result: Amity.QueryResult<Amity.Community>,
59
+ action: Events[number]
60
+ ) => {
61
+ if (result.data?.communityId !== communityId) return
62
+
63
+ router(result, action)
64
+ }
65
+
56
66
  const disposers: Amity.Unsubscriber[] = []
57
67
 
58
68
  disposers.push(
59
- onCommunityUpdated(data => router({ data }, 'onUpdate')),
60
- onCommunityDeleted(data => router({ data }, 'onDelete')),
61
- onCommunityJoined(data => router({ data }, 'onJoin')),
62
- onCommunityLeft(data => router({ data }, 'onLeft')),
69
+ onCommunityUpdated(data => realtimeRouter({ data }, 'onUpdate')),
70
+ onCommunityDeleted(data => realtimeRouter({ data }, 'onDelete')),
71
+ onCommunityJoined(data => realtimeRouter({ data }, 'onJoin')),
72
+ onCommunityLeft(data => realtimeRouter({ data }, 'onLeft')),
73
+ onCommunityUserAdded(data => realtimeRouter({ data }, 'onUserAdded')),
74
+ onCommunityUserRemoved(data => realtimeRouter({ data }, 'onUserRemoved')),
75
+ onCommunityUserBanned(data => realtimeRouter({ data }, 'onUserBanned')),
76
+ onCommunityUserUnbanned(data => realtimeRouter({ data }, 'onUserUnbanned')),
63
77
  )
64
78
 
65
79
  runQuery(
66
80
  createQuery(getCommunity, communityId),
67
- result => result.data && router(result, 'onFetch')
81
+ result => router(result, 'onFetch')
68
82
  )
69
83
 
70
84
  return () => {
@@ -1,6 +1,8 @@
1
- import { pushToCache } from './push'
1
+ import { pullFromCache } from './pull'
2
+ import { mergeInCache } from './merge'
2
3
 
3
- import { storeInterests } from '../model/idResolvers'
4
+ import { getResolver, storeInterests } from '~/core/model'
5
+ import { pushToCache } from '~/core/cache/push'
4
6
 
5
7
  /**
6
8
  * Ingest a payload (v3) into the cache
@@ -19,6 +21,20 @@ export const ingestInCache = (
19
21
  const name = storeInterests[key]
20
22
  if (!name) return
21
23
 
22
- pushToCache(name, ...payload[key])
24
+ payload[key].forEach(model => {
25
+ const [cached] = pullFromCache(name, getResolver(name)(model)) ?? []
26
+
27
+ if (cached) {
28
+ // > instead of >= - some updates like reactions do not change updatedAt
29
+ if (cached.updatedAt && cached.updatedAt > model.updatedAt) {
30
+ return
31
+ }
32
+
33
+ // personal fields like isJoined, myReactions are missed from real time event payload
34
+ mergeInCache(name, model)
35
+ } else {
36
+ pushToCache(name, model)
37
+ }
38
+ })
23
39
  })
24
40
  }