@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
@@ -1,3 +1,5 @@
1
+ import { ASCError } from '~/core/errors'
2
+
1
3
  export {}
2
4
 
3
5
  declare global {
@@ -28,5 +30,17 @@ declare global {
28
30
  next?: Token
29
31
  }
30
32
  }
33
+
34
+ type MqttClient = {
35
+ connect: (params: { accessToken: string, userId: string }) => Promise<void>
36
+ disconnect: () => Promise<void>
37
+ get connected(): boolean
38
+ on: <T extends keyof Amity.MqttEvents>(event: T, handler: (payload: Amity.MqttEvents[T]) => void) => void
39
+ once: <T extends keyof Amity.MqttEvents>(event: T, handler: (payload: Amity.MqttEvents[T]) => void) => void
40
+ off: <T extends keyof Amity.MqttEvents>(event: T, handler?: (payload: Amity.MqttEvents[T]) => void) => void
41
+ removeAllListeners: () => void
42
+ subscribe: (topic: string, callback?: Amity.Listener<ASCError | void>) => Amity.Unsubscriber
43
+ unsubscribe: (topic: string) => void
44
+ }
31
45
  }
32
46
  }
@@ -10,6 +10,7 @@ declare global {
10
10
 
11
11
  log: Logger
12
12
  http: AxiosInstance
13
+ mqtt: Amity.MqttClient
13
14
  ws: SocketIOClient.Socket
14
15
  emitter: Emitter<Amity.Events>
15
16
 
@@ -17,6 +18,8 @@ declare global {
17
18
 
18
19
  apiKey?: string
19
20
  userId?: string
21
+ user?: Amity.User
22
+ accessToken?: string
20
23
 
21
24
  use: () => void
22
25
  }
@@ -22,5 +22,6 @@ declare global {
22
22
  & Amity.Timestamps
23
23
  & Amity.SoftDelete
24
24
  & Amity.Syncable
25
+ & Amity.Subscribable
25
26
  }
26
27
  }
@@ -31,5 +31,6 @@ declare global {
31
31
  & Amity.Timestamps
32
32
  & Amity.SoftDelete
33
33
  & Amity.Syncable
34
+ & Amity.Subscribable
34
35
  }
35
36
  }
@@ -13,12 +13,12 @@ declare global {
13
13
  } & (
14
14
  T extends 'channel' ? {
15
15
  channelId: Amity.Channel['channelId']
16
- membership: 'member' | 'notMember' | 'banned'
16
+ membership: 'member' | 'none' | 'banned'
17
17
  readToSegment: number
18
18
  } :
19
19
  T extends 'community' ? {
20
20
  communityId: Amity.Community['communityId']
21
- communityMembership: 'member' | 'notMember' | 'banned'
21
+ communityMembership: 'member' | 'none' | 'banned'
22
22
  } :
23
23
  never
24
24
  )
@@ -48,5 +48,9 @@ declare global {
48
48
  roles: Amity.Role['displayName'][]
49
49
  permissions: Amity.Permission[]
50
50
  }
51
+
52
+ type Subscribable = {
53
+ path: string
54
+ }
51
55
  }
52
56
  }
@@ -27,5 +27,6 @@ declare global {
27
27
  Amity.Timestamps &
28
28
  Amity.SoftDelete &
29
29
  Amity.Syncable
30
+ & Amity.Subscribable
30
31
  }
31
32
  }
@@ -3,6 +3,7 @@ export {}
3
3
  declare global {
4
4
  namespace Amity {
5
5
  type User = {
6
+ _id: string
6
7
  userId: string
7
8
  displayName?: string
8
9
  avatarFileId?: Amity.File<'image'>['fileId']
@@ -14,5 +15,6 @@ declare global {
14
15
  & Amity.Accredited
15
16
  & Amity.Timestamps
16
17
  & Amity.Syncable
18
+ & Amity.Subscribable
17
19
  }
18
20
  }
@@ -1,9 +1,11 @@
1
+ import { disconnectClient } from '~/client/api/disconnectClient'
1
2
  import { getDeviceId } from '~/core/device'
2
- import { proxyWebsocketEvents } from '~/core/events'
3
+ import { proxyMqttEvents, proxyWebsocketEvents } from '~/core/events'
3
4
 
4
5
  import { getActiveClient } from './activeClient'
5
6
 
6
7
  import { getToken } from './getToken'
8
+ import { onClientBanned } from '../events'
7
9
 
8
10
  /**
9
11
  * ```js
@@ -39,7 +41,7 @@ export const connectClient = async (params: {
39
41
 
40
42
  // @ts-ignore: in that particular case, typing can be
41
43
  // ignored since we enforce default values just before.
42
- const { accessToken } = await getToken(params)
44
+ const { accessToken, users } = await getToken(params)
43
45
 
44
46
  // manually setup the token for http transport
45
47
  client.http.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`
@@ -47,6 +49,7 @@ export const connectClient = async (params: {
47
49
  // manually setup the token for ws transport
48
50
  client.ws.io.opts.query = {token: accessToken}
49
51
 
52
+ // FIXME: events are duplicated if connectClient is called few times without disconnectClient
50
53
  // wire websocket events to our event emitter
51
54
  proxyWebsocketEvents(client.ws, client.emitter)
52
55
 
@@ -57,7 +60,14 @@ export const connectClient = async (params: {
57
60
  client.ws.open()
58
61
  })
59
62
 
63
+ const unsubscribe = onClientBanned(() => {
64
+ disconnectClient()
65
+ unsubscribe()
66
+ })
67
+
60
68
  client.userId = params.userId
69
+ client.user = users[0]
70
+ client.accessToken = accessToken
61
71
 
62
72
  return client.ws.connected
63
73
  }
@@ -2,10 +2,8 @@ import { VERSION } from '~/version'
2
2
 
3
3
  import { createLogger } from '~/core/debug'
4
4
 
5
- import {
6
- createHttpTransport,
7
- createWebsocketTransport,
8
- } from '~/core/transports'
5
+ import { API_ENDPOINT, getUrlFromTemplate, UrlTemplate } from '~/core/network'
6
+ import { createHttpTransport, createMqttTransport, createWebsocketTransport } from '~/core/transports'
9
7
 
10
8
  import { createEventEmitter } from '~/core/events'
11
9
 
@@ -28,7 +26,7 @@ import { getActiveClient, setActiveClient } from './activeClient'
28
26
  **/
29
27
  export const createClient = (
30
28
  apiKey: string,
31
- apiEndpoint: string = 'https://api.amity.co',
29
+ apiEndpoint: typeof API_ENDPOINT[keyof typeof API_ENDPOINT]|string = API_ENDPOINT.SG,
32
30
  debugSession: string = 'amity'
33
31
  ): Amity.Client => {
34
32
  const log = createLogger(debugSession)
@@ -38,8 +36,9 @@ export const createClient = (
38
36
  apiEndpoint,
39
37
  })
40
38
 
41
- const http = createHttpTransport(apiEndpoint)
42
- const ws = createWebsocketTransport(apiEndpoint)
39
+ const http = createHttpTransport(getUrlFromTemplate(UrlTemplate.HTTP, apiEndpoint))
40
+ const ws = createWebsocketTransport(getUrlFromTemplate(UrlTemplate.HTTP, apiEndpoint))
41
+ const mqtt = createMqttTransport(getUrlFromTemplate(UrlTemplate.MQTT, apiEndpoint));
43
42
 
44
43
  const emitter = createEventEmitter()
45
44
 
@@ -50,6 +49,7 @@ export const createClient = (
50
49
  log,
51
50
  http,
52
51
  ws,
52
+ mqtt,
53
53
  emitter,
54
54
  use: () => setActiveClient(client),
55
55
  }
@@ -21,11 +21,16 @@ export const disconnectClient = async (): Promise<boolean> => {
21
21
  await new Promise(resolve => {
22
22
  client.ws.once('disconnect', resolve)
23
23
  client.ws.disconnect()
24
+ client.mqtt.disconnect()
24
25
  })
25
26
 
26
27
  client.emitter.all.clear()
28
+ // FIXME: it removes listener in ws.ts, it breaks global ban event
27
29
  client.ws.removeAllListeners()
30
+ client.mqtt.removeAllListeners()
28
31
  client.userId = undefined
32
+ client.user = undefined
33
+ client.accessToken = undefined
29
34
 
30
35
  return !client.ws.connected
31
36
  }
@@ -25,7 +25,7 @@ export const getToken = async (params: {
25
25
 
26
26
  const deviceInfo = await getDeviceInfo()
27
27
 
28
- const { data } = await client.http.post<Amity.Tokens>('/v1/device', {
28
+ const { data } = await client.http.post<Amity.Tokens & { users: Amity.User[] }>('/v1/device', {
29
29
  ...params, deviceInfo,
30
30
  } , {
31
31
  //@ts-ignore
@@ -1,4 +1,4 @@
1
- import { getActiveClient } from '~/client/api'
1
+ import { getActiveClient } from '~/client/api/activeClient'
2
2
 
3
3
  import { createEventSubscriber } from '~/core/events'
4
4
 
@@ -35,8 +35,8 @@ export const createComment = async <T extends Amity.CommentContentType>(
35
35
 
36
36
  const post = await getPost(bundle.referenceId)
37
37
 
38
- fireEvent('v3.post.didUpdate', { posts: [post] })
39
- fireEvent('v3.comment.didCreate', data)
38
+ fireEvent('post.updated', { posts: [post] })
39
+ fireEvent('comment.created', data)
40
40
 
41
41
  const { comments } = data
42
42
  return comments[0]
@@ -44,8 +44,8 @@ export const deleteComment = async (
44
44
 
45
45
  const post = await getPost(comment.referenceId)
46
46
 
47
- fireEvent('v3.post.didUpdate', { posts: [post] })
48
- fireEvent('v3.comment.didDelete', { comments: [deleted] })
47
+ fireEvent('post.updated', { posts: [post] })
48
+ fireEvent('comment.deleted', { comments: [deleted] })
49
49
 
50
50
 
51
51
  if (permanent) {
@@ -34,7 +34,7 @@ export const updateComment = async (
34
34
 
35
35
  decoratePayload(data)
36
36
  ingestInCache(data)
37
- fireEvent('v3.comment.didUpdate', data)
37
+ fireEvent('comment.updated', data)
38
38
 
39
39
  const { comments } = data
40
40
  return comments.find(comment => comment.commentId === commentId)!
@@ -1,3 +1,9 @@
1
1
  export * from './onCommentCreated'
2
2
  export * from './onCommentUpdated'
3
3
  export * from './onCommentDeleted'
4
+
5
+ export * from './onCommentFlagged'
6
+ export * from './onCommentUnflagged'
7
+
8
+ export * from './onCommentReactionAdded'
9
+ export * from './onCommentReactionRemoved'
@@ -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 { createCommentEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
@@ -12,7 +8,7 @@ import { ingestInCache } from '~/core/cache'
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when an {@link Amity.Comment} has been created
11
+ * Fired when {@link Amity.Comment} has 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
@@ -21,19 +17,5 @@ import { ingestInCache } from '~/core/cache'
21
17
  */
22
18
  export const onCommentCreated = <T extends Amity.CommentContentType>(
23
19
  callback: Amity.Listener<Amity.Comment<T>>
24
- ): Amity.Unsubscriber => {
25
- const client = getActiveClient()
26
-
27
- const filter = (payload: Amity.CommentPayload<T>) => {
28
- decoratePayload(payload)
29
- ingestInCache(payload)
30
- callback(payload.comments[0])
31
- }
32
-
33
- return createEventSubscriber(
34
- client,
35
- 'message/onCommentCreated',
36
- 'v3.comment.didCreate',
37
- filter
38
- )
39
- }
20
+ ): Amity.Unsubscriber =>
21
+ createCommentEventSubscriber('comment.created', 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 { createCommentEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
@@ -12,7 +8,7 @@ import { ingestInCache } from '~/core/cache'
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when an {@link Amity.Comment} has been deleted
11
+ * Fired when a {@link Amity.Comment} 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
@@ -21,19 +17,5 @@ import { ingestInCache } from '~/core/cache'
21
17
  */
22
18
  export const onCommentDeleted = <T extends Amity.CommentContentType>(
23
19
  callback: Amity.Listener<Amity.Comment<T>>
24
- ): Amity.Unsubscriber => {
25
- const client = getActiveClient()
26
-
27
- const filter = (payload: Amity.CommentPayload<T>) => {
28
- decoratePayload(payload)
29
- ingestInCache(payload)
30
- callback(payload.comments[0])
31
- }
32
-
33
- return createEventSubscriber(
34
- client,
35
- 'message/onCommentDeleted',
36
- 'v3.comment.didDelete',
37
- filter
38
- )
39
- }
20
+ ): Amity.Unsubscriber =>
21
+ createCommentEventSubscriber('comment.deleted', callback)
@@ -0,0 +1,21 @@
1
+ import { createCommentEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onCommentFlagged } from '@amityco/ts-sdk'
6
+ * const dispose = onCommentFlagged(comment => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a {@link Amity.Comment} 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 Comment Events
17
+ */
18
+ export const onCommentFlagged = <T extends Amity.CommentContentType>(
19
+ callback: Amity.Listener<Amity.Comment<T>>
20
+ ): Amity.Unsubscriber =>
21
+ createCommentEventSubscriber('comment.flagged', callback)
@@ -0,0 +1,52 @@
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 { onCommentReactionAdded } from '@amityco/ts-sdk'
11
+ * const dispose = onCommentReactionAdded(comment => {
12
+ * // ...
13
+ * })
14
+ * ```
15
+ *
16
+ * Fired when a {@link Amity.Comment} 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 Comment Events
22
+ */
23
+ export const onCommentReactionAdded = <T extends Amity.CommentContentType>(
24
+ callback: Amity.Listener<Amity.Comment<T>>
25
+ ): Amity.Unsubscriber => {
26
+ const client = getActiveClient()
27
+
28
+ const filter = (payload: Amity.CommentPayload<T> & { reactor: Amity.Reaction }) => {
29
+ const [cached] = pullFromCache('comment', payload.comments[0].commentId) ?? []
30
+
31
+ const { reactor, ...commentPayload } = payload;
32
+
33
+ decoratePayload(commentPayload as Amity.CommentPayload<T>)
34
+ preparePayloadForCache('comment.addReaction', payload)
35
+ ingestInCache(commentPayload as Amity.CommentPayload<T>)
36
+
37
+ const [comment] = pullFromCache('comment', payload.comments[0].commentId) ?? []
38
+
39
+ if (cached && isMatch(cached, comment)) {
40
+ return
41
+ }
42
+
43
+ callback(comment)
44
+ }
45
+
46
+ return createEventSubscriber(
47
+ client,
48
+ 'comment.addReaction',
49
+ 'comment.addReaction',
50
+ filter
51
+ )
52
+ }
@@ -0,0 +1,52 @@
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 { onCommentReactionRemoved } from '@amityco/ts-sdk'
11
+ * const dispose = onCommentReactionRemoved(comment => {
12
+ * // ...
13
+ * })
14
+ * ```
15
+ *
16
+ * Fired when a reaction has been removed from a {@link Amity.Comment}
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 Comment Events
22
+ */
23
+ export const onCommentReactionRemoved = <T extends Amity.CommentContentType>(
24
+ callback: Amity.Listener<Amity.Comment<T>>
25
+ ): Amity.Unsubscriber => {
26
+ const client = getActiveClient()
27
+
28
+ const filter = (payload: Amity.CommentPayload<T> & { reactor: Amity.Reaction }) => {
29
+ const [cached] = pullFromCache('comment', payload.comments[0].commentId) ?? []
30
+
31
+ const { reactor, ...commentPayload } = payload;
32
+
33
+ decoratePayload(commentPayload as Amity.CommentPayload<T>)
34
+ preparePayloadForCache('comment.removeReaction', payload)
35
+ ingestInCache(commentPayload as Amity.CommentPayload<T>)
36
+
37
+ const [comment] = pullFromCache('comment', payload.comments[0].commentId) ?? []
38
+
39
+ if (cached && isMatch(cached, comment)) {
40
+ return
41
+ }
42
+
43
+ callback(comment)
44
+ }
45
+
46
+ return createEventSubscriber(
47
+ client,
48
+ 'comment.removeReaction',
49
+ 'comment.removeReaction',
50
+ filter
51
+ )
52
+ }
@@ -0,0 +1,21 @@
1
+ import { createCommentEventSubscriber } from './utils'
2
+
3
+ /**
4
+ * ```js
5
+ * import { onCommentUnflagged } from '@amityco/ts-sdk'
6
+ * const dispose = onCommentUnflagged(comment => {
7
+ * // ...
8
+ * })
9
+ * ```
10
+ *
11
+ * Fired when a flag has been removed from a {@link Amity.Comment}
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 Comment Events
17
+ */
18
+ export const onCommentUnflagged = <T extends Amity.CommentContentType>(
19
+ callback: Amity.Listener<Amity.Comment<T>>
20
+ ): Amity.Unsubscriber =>
21
+ createCommentEventSubscriber('comment.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 { createCommentEventSubscriber } from './utils'
6
2
 
7
3
  /**
8
4
  * ```js
@@ -12,7 +8,7 @@ import { ingestInCache } from '~/core/cache'
12
8
  * })
13
9
  * ```
14
10
  *
15
- * Fired when an {@link Amity.Comment} has been updated
11
+ * Fired when a {@link Amity.Comment} 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
@@ -21,19 +17,5 @@ import { ingestInCache } from '~/core/cache'
21
17
  */
22
18
  export const onCommentUpdated = <T extends Amity.CommentContentType>(
23
19
  callback: Amity.Listener<Amity.Comment<T>>
24
- ): Amity.Unsubscriber => {
25
- const client = getActiveClient()
26
-
27
- const filter = (payload: Amity.CommentPayload<T>) => {
28
- decoratePayload(payload)
29
- ingestInCache(payload)
30
- callback(payload.comments[0])
31
- }
32
-
33
- return createEventSubscriber(
34
- client,
35
- 'message/onCommentUpdated',
36
- 'v3.comment.didUpdate',
37
- filter
38
- )
39
- }
20
+ ): Amity.Unsubscriber =>
21
+ createCommentEventSubscriber('comment.updated', callback)
@@ -0,0 +1,34 @@
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 { isMatch } from '~/core/model'
6
+
7
+ export const createCommentEventSubscriber = <T extends Amity.CommentContentType>(
8
+ event: keyof Amity.MqttCommentMessageEvents,
9
+ callback: Amity.Listener<Amity.Comment<T>>
10
+ ) => {
11
+ const client = getActiveClient()
12
+
13
+ const filter = (payload: Amity.CommentPayload<T>) => {
14
+ const [cached] = pullFromCache('comment', payload.comments[0].commentId) ?? []
15
+
16
+ decoratePayload(payload)
17
+ ingestInCache(payload)
18
+
19
+ const [comment] = pullFromCache('comment', payload.comments[0].commentId) ?? []
20
+
21
+ if (cached && isMatch(cached, comment)) {
22
+ return
23
+ }
24
+
25
+ callback(comment)
26
+ }
27
+
28
+ return createEventSubscriber(
29
+ client,
30
+ event,
31
+ event,
32
+ filter
33
+ )
34
+ }
@@ -7,6 +7,10 @@ import { getComment } from '../api'
7
7
  import {
8
8
  onCommentUpdated,
9
9
  onCommentDeleted,
10
+ onCommentFlagged,
11
+ onCommentUnflagged,
12
+ onCommentReactionAdded,
13
+ onCommentReactionRemoved,
10
14
  } from '../events'
11
15
 
12
16
 
@@ -26,7 +30,7 @@ import {
26
30
  *
27
31
  * @category Comment Observer
28
32
  */
29
- export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete']>(
33
+ export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete', 'onFlagged', 'onUnflagged', 'onReactionAdded', 'onReactionRemoved']>(
30
34
  commentId: string,
31
35
  callback: Amity.ObjectListener<Amity.QueryResult<Amity.Comment>, Events>,
32
36
  policy: Amity.QueryPolicy = 'cache_then_server',
@@ -41,9 +45,6 @@ export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete'
41
45
  result: Amity.QueryResult<Amity.Comment>,
42
46
  action: Events[number]
43
47
  ) => {
44
- // filter function
45
- if (result.data?.commentId !== commentId) return
46
-
47
48
  if (callback instanceof Function)
48
49
  return callback(result)
49
50
 
@@ -53,16 +54,29 @@ export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete'
53
54
  callback[action]?.(result)
54
55
  }
55
56
 
57
+ const realtimeRouter = (
58
+ result: Amity.QueryResult<Amity.Comment>,
59
+ action: Events[number]
60
+ ) => {
61
+ if (result.data?.commentId !== commentId) return
62
+
63
+ router(result, action)
64
+ }
65
+
56
66
  const disposers: Amity.Unsubscriber[] = []
57
67
 
58
68
  disposers.push(
59
- onCommentUpdated(data => router({ data }, 'onUpdate')),
60
- onCommentDeleted(data => router({ data }, 'onDelete')),
69
+ onCommentUpdated(data => realtimeRouter({ data }, 'onUpdate')),
70
+ onCommentDeleted(data => realtimeRouter({ data }, 'onDelete')),
71
+ onCommentFlagged(data => realtimeRouter({ data }, 'onFlagged')),
72
+ onCommentUnflagged(data => realtimeRouter({ data }, 'onUnflagged')),
73
+ onCommentReactionAdded(data => realtimeRouter({ data }, 'onReactionAdded')),
74
+ onCommentReactionRemoved(data => realtimeRouter({ data }, 'onReactionRemoved')),
61
75
  )
62
76
 
63
77
  runQuery(
64
78
  createQuery(getComment, commentId),
65
- result => result.data && router(result, 'onFetch'),
79
+ result => router(result, 'onFetch'),
66
80
  queryOptions(policy)
67
81
  )
68
82