@amityco/ts-sdk 0.0.1-beta.5 → 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 (261) 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 +4 -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 +37 -1
  26. package/dist/comment/api/deleteComment.d.ts.map +1 -1
  27. package/dist/comment/api/getComment.d.ts.map +1 -1
  28. package/dist/comment/api/queryComments.d.ts +1 -1
  29. package/dist/comment/events/index.d.ts +4 -0
  30. package/dist/comment/events/index.d.ts.map +1 -1
  31. package/dist/comment/events/onCommentCreated.d.ts +1 -1
  32. package/dist/comment/events/onCommentCreated.d.ts.map +1 -1
  33. package/dist/comment/events/onCommentDeleted.d.ts +1 -1
  34. package/dist/comment/events/onCommentDeleted.d.ts.map +1 -1
  35. package/dist/comment/events/onCommentFlagged.d.ts +17 -0
  36. package/dist/comment/events/onCommentFlagged.d.ts.map +1 -0
  37. package/dist/comment/events/onCommentReactionAdded.d.ts +17 -0
  38. package/dist/comment/events/onCommentReactionAdded.d.ts.map +1 -0
  39. package/dist/comment/events/onCommentReactionRemoved.d.ts +17 -0
  40. package/dist/comment/events/onCommentReactionRemoved.d.ts.map +1 -0
  41. package/dist/comment/events/onCommentUnflagged.d.ts +17 -0
  42. package/dist/comment/events/onCommentUnflagged.d.ts.map +1 -0
  43. package/dist/comment/events/onCommentUpdated.d.ts +1 -1
  44. package/dist/comment/events/onCommentUpdated.d.ts.map +1 -1
  45. package/dist/comment/events/utils.d.ts +2 -0
  46. package/dist/comment/events/utils.d.ts.map +1 -0
  47. package/dist/comment/observers/observeComment.d.ts +1 -1
  48. package/dist/comment/observers/observeComment.d.ts.map +1 -1
  49. package/dist/comment/observers/observeComments.d.ts +5 -1
  50. package/dist/comment/observers/observeComments.d.ts.map +1 -1
  51. package/dist/community/events/index.d.ts +4 -0
  52. package/dist/community/events/index.d.ts.map +1 -1
  53. package/dist/community/events/onCommunityCreated.d.ts +2 -2
  54. package/dist/community/events/onCommunityCreated.d.ts.map +1 -1
  55. package/dist/community/events/onCommunityDeleted.d.ts +2 -2
  56. package/dist/community/events/onCommunityDeleted.d.ts.map +1 -1
  57. package/dist/community/events/onCommunityJoined.d.ts +3 -3
  58. package/dist/community/events/onCommunityJoined.d.ts.map +1 -1
  59. package/dist/community/events/onCommunityLeft.d.ts +3 -3
  60. package/dist/community/events/onCommunityLeft.d.ts.map +1 -1
  61. package/dist/community/events/onCommunityUpdated.d.ts +2 -2
  62. package/dist/community/events/onCommunityUpdated.d.ts.map +1 -1
  63. package/dist/community/events/onCommunityUserAdded.d.ts +17 -0
  64. package/dist/community/events/onCommunityUserAdded.d.ts.map +1 -0
  65. package/dist/community/events/onCommunityUserBanned.d.ts +17 -0
  66. package/dist/community/events/onCommunityUserBanned.d.ts.map +1 -0
  67. package/dist/community/events/onCommunityUserRemoved.d.ts +17 -0
  68. package/dist/community/events/onCommunityUserRemoved.d.ts.map +1 -0
  69. package/dist/community/events/onCommunityUserUnbanned.d.ts +17 -0
  70. package/dist/community/events/onCommunityUserUnbanned.d.ts.map +1 -0
  71. package/dist/community/events/utils.d.ts +3 -0
  72. package/dist/community/events/utils.d.ts.map +1 -0
  73. package/dist/community/observers/observeCommunity.d.ts +1 -1
  74. package/dist/community/observers/observeCommunity.d.ts.map +1 -1
  75. package/dist/core/cache/ingest.d.ts.map +1 -1
  76. package/dist/core/events.d.ts +4 -2
  77. package/dist/core/events.d.ts.map +1 -1
  78. package/dist/core/model/index.d.ts +1 -0
  79. package/dist/core/model/index.d.ts.map +1 -1
  80. package/dist/core/model/isMatch.d.ts +3 -0
  81. package/dist/core/model/isMatch.d.ts.map +1 -0
  82. package/dist/core/network.d.ts +11 -0
  83. package/dist/core/network.d.ts.map +1 -0
  84. package/dist/core/query/paging.d.ts.map +1 -1
  85. package/dist/core/subscription.d.ts +14 -0
  86. package/dist/core/subscription.d.ts.map +1 -0
  87. package/dist/core/transports/http.d.ts +11 -0
  88. package/dist/core/transports/http.d.ts.map +1 -0
  89. package/dist/core/transports/index.d.ts +4 -0
  90. package/dist/core/transports/index.d.ts.map +1 -0
  91. package/dist/core/transports/mqtt.d.ts +17 -0
  92. package/dist/core/transports/mqtt.d.ts.map +1 -0
  93. package/dist/core/transports/utils.d.ts +13 -0
  94. package/dist/core/transports/utils.d.ts.map +1 -0
  95. package/dist/core/transports/ws.d.ts +27 -0
  96. package/dist/core/transports/ws.d.ts.map +1 -0
  97. package/dist/feed/api/queryGlobalFeed.d.ts +1 -1
  98. package/dist/file/api/deleteFile.d.ts +3 -1
  99. package/dist/file/api/deleteFile.d.ts.map +1 -1
  100. package/dist/index.cjs.js +1292 -526
  101. package/dist/index.d.ts +2 -0
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.esm.js +1268 -527
  104. package/dist/index.umd.js +19 -5144
  105. package/dist/post/api/deletePost.d.ts +40 -1
  106. package/dist/post/api/deletePost.d.ts.map +1 -1
  107. package/dist/post/api/getPost.d.ts.map +1 -1
  108. package/dist/post/events/index.d.ts +6 -0
  109. package/dist/post/events/index.d.ts.map +1 -1
  110. package/dist/post/events/onPostApproved.d.ts +17 -0
  111. package/dist/post/events/onPostApproved.d.ts.map +1 -0
  112. package/dist/post/events/onPostCreated.d.ts +1 -1
  113. package/dist/post/events/onPostCreated.d.ts.map +1 -1
  114. package/dist/post/events/onPostDeclined.d.ts +17 -0
  115. package/dist/post/events/onPostDeclined.d.ts.map +1 -0
  116. package/dist/post/events/onPostDeleted.d.ts +1 -1
  117. package/dist/post/events/onPostDeleted.d.ts.map +1 -1
  118. package/dist/post/events/onPostFlagged.d.ts +17 -0
  119. package/dist/post/events/onPostFlagged.d.ts.map +1 -0
  120. package/dist/post/events/onPostReactionAdded.d.ts +17 -0
  121. package/dist/post/events/onPostReactionAdded.d.ts.map +1 -0
  122. package/dist/post/events/onPostReactionRemoved.d.ts +17 -0
  123. package/dist/post/events/onPostReactionRemoved.d.ts.map +1 -0
  124. package/dist/post/events/onPostUnflagged.d.ts +17 -0
  125. package/dist/post/events/onPostUnflagged.d.ts.map +1 -0
  126. package/dist/post/events/onPostUpdated.d.ts +1 -1
  127. package/dist/post/events/onPostUpdated.d.ts.map +1 -1
  128. package/dist/post/events/utils.d.ts +2 -0
  129. package/dist/post/events/utils.d.ts.map +1 -0
  130. package/dist/post/observers/observePost.d.ts +1 -1
  131. package/dist/post/observers/observePost.d.ts.map +1 -1
  132. package/dist/post/observers/observePosts.d.ts +1 -1
  133. package/dist/post/observers/observePosts.d.ts.map +1 -1
  134. package/dist/reaction/events/onReactionAdded.d.ts +4 -2
  135. package/dist/reaction/events/onReactionAdded.d.ts.map +1 -1
  136. package/dist/reaction/events/onReactionRemoved.d.ts +4 -2
  137. package/dist/reaction/events/onReactionRemoved.d.ts.map +1 -1
  138. package/dist/reaction/utils/index.d.ts +1 -0
  139. package/dist/reaction/utils/index.d.ts.map +1 -1
  140. package/dist/reaction/utils/preparePayloadForCache.d.ts +3 -0
  141. package/dist/reaction/utils/preparePayloadForCache.d.ts.map +1 -0
  142. package/dist/report/api/createReport.d.ts.map +1 -1
  143. package/dist/report/api/deleteReport.d.ts.map +1 -1
  144. package/dist/user/events/index.d.ts +3 -0
  145. package/dist/user/events/index.d.ts.map +1 -1
  146. package/dist/user/events/onUserFlagCleared.d.ts +17 -0
  147. package/dist/user/events/onUserFlagCleared.d.ts.map +1 -0
  148. package/dist/user/events/onUserFlagged.d.ts +17 -0
  149. package/dist/user/events/onUserFlagged.d.ts.map +1 -0
  150. package/dist/user/events/onUserUnflagged.d.ts +17 -0
  151. package/dist/user/events/onUserUnflagged.d.ts.map +1 -0
  152. package/dist/user/events/onUserUpdated.d.ts +1 -1
  153. package/dist/user/events/onUserUpdated.d.ts.map +1 -1
  154. package/dist/user/events/utils.d.ts +2 -0
  155. package/dist/user/events/utils.d.ts.map +1 -0
  156. package/dist/user/observers/observeUser.d.ts +1 -1
  157. package/dist/user/observers/observeUser.d.ts.map +1 -1
  158. package/dist/version.d.ts +2 -0
  159. package/dist/version.d.ts.map +1 -0
  160. package/package.json +7 -2
  161. package/rollup.config.js +63 -23
  162. package/src/@types/core/events.ts +64 -23
  163. package/src/@types/core/transport.ts +14 -0
  164. package/src/@types/domains/client.ts +5 -0
  165. package/src/@types/domains/comment.ts +1 -0
  166. package/src/@types/domains/community.ts +1 -0
  167. package/src/@types/domains/group.ts +2 -2
  168. package/src/@types/domains/partials.ts +4 -0
  169. package/src/@types/domains/post.ts +1 -0
  170. package/src/@types/domains/user.ts +2 -0
  171. package/src/client/api/connectClient.ts +12 -2
  172. package/src/client/api/createClient.ts +23 -15
  173. package/src/client/api/disconnectClient.ts +5 -0
  174. package/src/client/api/getToken.ts +3 -2
  175. package/src/client/events/onConnectionError.ts +1 -1
  176. package/src/comment/api/createComment.ts +2 -2
  177. package/src/comment/api/deleteComment.ts +25 -5
  178. package/src/comment/api/getComment.ts +17 -5
  179. package/src/comment/api/queryComments.ts +9 -8
  180. package/src/comment/api/updateComment.ts +1 -1
  181. package/src/comment/events/index.ts +6 -0
  182. package/src/comment/events/onCommentCreated.ts +4 -22
  183. package/src/comment/events/onCommentDeleted.ts +4 -22
  184. package/src/comment/events/onCommentFlagged.ts +21 -0
  185. package/src/comment/events/onCommentReactionAdded.ts +52 -0
  186. package/src/comment/events/onCommentReactionRemoved.ts +52 -0
  187. package/src/comment/events/onCommentUnflagged.ts +21 -0
  188. package/src/comment/events/onCommentUpdated.ts +4 -22
  189. package/src/comment/events/utils.ts +34 -0
  190. package/src/comment/observers/observeComment.ts +21 -7
  191. package/src/comment/observers/observeComments.ts +11 -3
  192. package/src/community/api/addCommunityMembers.ts +1 -1
  193. package/src/community/api/createCommunity.ts +1 -1
  194. package/src/community/api/deleteCommunity.ts +1 -1
  195. package/src/community/api/joinCommunity.ts +1 -1
  196. package/src/community/api/leaveCommunity.ts +1 -1
  197. package/src/community/api/removeCommunityMembers.ts +1 -1
  198. package/src/community/api/updateCommunity.ts +1 -1
  199. package/src/community/events/index.ts +5 -0
  200. package/src/community/events/onCommunityCreated.ts +5 -23
  201. package/src/community/events/onCommunityDeleted.ts +5 -23
  202. package/src/community/events/onCommunityJoined.ts +5 -23
  203. package/src/community/events/onCommunityLeft.ts +5 -23
  204. package/src/community/events/onCommunityUpdated.ts +5 -23
  205. package/src/community/events/onCommunityUserAdded.ts +19 -0
  206. package/src/community/events/onCommunityUserBanned.ts +19 -0
  207. package/src/community/events/onCommunityUserRemoved.ts +19 -0
  208. package/src/community/events/onCommunityUserUnbanned.ts +19 -0
  209. package/src/community/events/utils.ts +108 -0
  210. package/src/community/observers/observeCommunity.ts +23 -9
  211. package/src/core/cache/ingest.ts +19 -3
  212. package/src/core/events.ts +45 -4
  213. package/src/core/model/index.ts +1 -0
  214. package/src/core/model/isMatch.ts +12 -0
  215. package/src/core/network.ts +14 -0
  216. package/src/core/query/paging.ts +4 -0
  217. package/src/core/subscription.ts +75 -0
  218. package/src/core/transports/http.ts +63 -0
  219. package/src/core/transports/index.ts +3 -0
  220. package/src/core/transports/mqtt.ts +141 -0
  221. package/src/core/transports/utils.ts +25 -0
  222. package/src/core/transports/ws.ts +61 -0
  223. package/src/feed/api/queryGlobalFeed.ts +1 -1
  224. package/src/file/api/deleteFile.ts +5 -6
  225. package/src/index.ts +3 -0
  226. package/src/post/api/createPost.ts +2 -2
  227. package/src/post/api/deletePost.ts +29 -8
  228. package/src/post/api/getPost.ts +17 -5
  229. package/src/post/api/updatePost.ts +1 -1
  230. package/src/post/events/index.ts +9 -0
  231. package/src/post/events/onPostApproved.ts +19 -0
  232. package/src/post/events/onPostCreated.ts +4 -24
  233. package/src/post/events/onPostDeclined.ts +19 -0
  234. package/src/post/events/onPostDeleted.ts +4 -24
  235. package/src/post/events/onPostFlagged.ts +19 -0
  236. package/src/post/events/onPostReactionAdded.ts +50 -0
  237. package/src/post/events/onPostReactionRemoved.ts +50 -0
  238. package/src/post/events/onPostUnflagged.ts +19 -0
  239. package/src/post/events/onPostUpdated.ts +4 -24
  240. package/src/post/events/utils.ts +40 -0
  241. package/src/post/observers/observePost.ts +25 -7
  242. package/src/post/observers/observePosts.ts +12 -2
  243. package/src/reaction/events/onReactionAdded.ts +36 -15
  244. package/src/reaction/events/onReactionRemoved.ts +37 -14
  245. package/src/reaction/utils/dispatchReactable.ts +2 -2
  246. package/src/reaction/utils/index.ts +1 -0
  247. package/src/reaction/utils/preparePayloadForCache.ts +45 -0
  248. package/src/report/api/createReport.ts +5 -1
  249. package/src/report/api/deleteReport.ts +5 -1
  250. package/src/user/events/index.ts +4 -0
  251. package/src/user/events/onUserFlagCleared.ts +19 -0
  252. package/src/user/events/onUserFlagged.ts +19 -0
  253. package/src/user/events/onUserUnflagged.ts +19 -0
  254. package/src/user/events/onUserUpdated.ts +4 -24
  255. package/src/user/events/utils.ts +24 -0
  256. package/src/user/observers/observeUser.ts +11 -3
  257. package/src/version.ts +2 -0
  258. package/tsconfig.json +1 -0
  259. package/dist/core/transports.d.ts +0 -49
  260. package/dist/core/transports.d.ts.map +0 -1
  261. package/src/core/transports.ts +0 -151
package/rollup.config.js CHANGED
@@ -2,40 +2,80 @@ import chalk from 'chalk'
2
2
  import commonjs from '@rollup/plugin-commonjs'
3
3
  import resolve from '@rollup/plugin-node-resolve'
4
4
  import typescript from 'rollup-plugin-typescript2'
5
+ import replace from '@rollup/plugin-replace'
6
+ import { terser } from 'rollup-plugin-terser'
5
7
 
6
8
  import pkg from './package.json'
7
9
 
8
- export default {
10
+ const config = {
9
11
  input: 'src/index.ts',
10
- output: [
11
- {
12
- file: pkg.main,
13
- format: 'cjs',
14
- },
15
- {
16
- file: pkg.module,
17
- format: 'es',
18
- },
19
- {
20
- file: pkg.unpkg,
21
- format: 'iife',
22
- name: 'Amity',
23
-
24
- }
25
- ],
26
- external: Object.keys(pkg.dependencies),
27
12
  plugins: [
28
- resolve(),
13
+ resolve({
14
+ jsnext: true,
15
+ main: true,
16
+ builtins: false,
17
+ browser: true,
18
+ }),
29
19
  commonjs(),
30
20
  typescript({
31
21
  useTsconfigDeclarationDir: true,
32
22
  }),
33
23
  ],
34
24
  onwarn: warning => {
35
- // we don't allow circular dependencies
36
- if (warning.code === 'CIRCULAR_DEPENDENCY') {
25
+ // we don't allow circular dependencies other than those that we can not fix such as node_modules
26
+ if (warning.code === 'CIRCULAR_DEPENDENCY' && !warning.importer.includes('node_modules')) {
37
27
  console.log(chalk.red('error'), warning.message)
38
28
  process.exit(1)
39
29
  }
40
- }
41
- };
30
+ },
31
+ }
32
+
33
+ export default [
34
+ {
35
+ ...config,
36
+ output: [
37
+ {
38
+ format: 'es',
39
+ file: pkg.module,
40
+ },
41
+ ],
42
+ external: Object.keys(pkg.dependencies),
43
+ plugins: [
44
+ ...config.plugins,
45
+ replace({
46
+ 'process.env.VERSION': `'v${pkg.version}-esm'`,
47
+ }),
48
+ ],
49
+ },
50
+ {
51
+ ...config,
52
+ output: [
53
+ {
54
+ format: 'cjs',
55
+ file: pkg.main,
56
+ },
57
+ ],
58
+ external: Object.keys(pkg.dependencies),
59
+ plugins: [
60
+ ...config.plugins,
61
+ replace({
62
+ 'process.env.VERSION': `'v${pkg.version}-cjs'`,
63
+ }),
64
+ ],
65
+ },
66
+ {
67
+ ...config,
68
+ output: {
69
+ format: 'iife',
70
+ name: 'Amity',
71
+ file: pkg.unpkg,
72
+ },
73
+ plugins: [
74
+ ...config.plugins,
75
+ replace({
76
+ 'process.env.VERSION': `'v${pkg.version}-umd'`,
77
+ }),
78
+ terser(),
79
+ ],
80
+ },
81
+ ]
@@ -1,10 +1,12 @@
1
+ import { IConnectPacket, IDisconnectPacket, IPublishPacket } from 'mqtt'
2
+
1
3
  export {}
2
4
 
3
5
  declare global {
4
6
  namespace Amity {
5
7
  type Listener<T = any> = (params: T) => void
6
8
 
7
- type ObjectListener<T, K extends string[]> = Listener<T> | {
9
+ type ObjectListener<T, K extends string[]> = {
8
10
  onEvent?: (event: K[number], params: T) => void
9
11
  } & {
10
12
  [P in K[number]]?: Listener<T>
@@ -14,15 +16,13 @@ declare global {
14
16
 
15
17
  type Subscriber<T = any> = (fn: Amity.Listener<T>) => Unsubscriber
16
18
 
17
- type Events = {
19
+ type WsEvents = {
18
20
  disconnected: Amity.ErrorResponse | undefined
19
21
  error: Amity.ErrorResponse | undefined,
20
22
  connect_error: Amity.ErrorResponse | undefined,
21
23
  reconnect_error: Amity.ErrorResponse | undefined,
22
24
  reconnect_failed: Amity.ErrorResponse | undefined,
23
25
 
24
- 'v3.user.didUpdate': Amity.UserPayload
25
-
26
26
  'v3.channel.didCreate': Amity.ChannelPayload
27
27
  'v3.channel.didUpdate': Amity.ChannelPayload
28
28
  'v3.channel.didDelete': Amity.ChannelPayload
@@ -40,26 +40,67 @@ declare global {
40
40
  'video-streaming.didRecord': Amity.StreamPayload
41
41
  'video-streaming.didStart': Amity.StreamPayload
42
42
  'video-streaming.didStop': Amity.StreamPayload
43
+ }
44
+
45
+ type MqttEvents = {
46
+ connect: IConnectPacket,
47
+ message: [topic: string, payload: Buffer, packet: IPublishPacket]
48
+ disconnect: IDisconnectPacket,
49
+ error: Error,
50
+ close: Error,
51
+ end: undefined,
52
+ reconnect: undefined,
53
+ }
54
+
55
+ type MqttCommunityUserMessageEvents = {
56
+ 'community.joined': Amity.CommunityPayload
57
+ 'community.left': Amity.CommunityPayload
58
+ 'community.userAdded': Amity.CommunityPayload
59
+ 'community.userRemoved': Amity.CommunityPayload
60
+ 'community.userBanned': Amity.CommunityPayload
61
+ 'community.userUnbanned': Amity.CommunityPayload
62
+ }
43
63
 
44
- // these events have a different shape because they're not supported
45
- // by backend yet. since all is internal and wrapped in emitter,
46
- // it should be fairly easy and non-breaking to refactor this if
47
- // backend were to add events later on.
48
- 'v3.community.didCreate': Amity.CommunityPayload
49
- 'v3.community.didUpdate': Amity.CommunityPayload
50
- 'v3.community.didDelete': Amity.CommunityPayload
51
- 'v3.community.didJoin': Amity.CommunityPayload
52
- 'v3.community.didLeave': Amity.CommunityPayload
53
- 'v3.community.didAddUsers': Amity.CommunityPayload
54
- 'v3.community.didRemoveUsers': Amity.CommunityPayload
55
-
56
- 'v3.post.didCreate': Amity.PostPayload
57
- 'v3.post.didUpdate': Amity.PostPayload
58
- 'v3.post.didDelete': Amity.PostPayload
59
-
60
- 'v3.comment.didCreate': Amity.CommentPayload
61
- 'v3.comment.didUpdate': Amity.CommentPayload
62
- 'v3.comment.didDelete': Amity.CommentPayload
64
+ type MqttCommunityMessageEvents = {
65
+ 'community.created': Amity.CommunityPayload,
66
+ 'community.updated': Amity.CommunityPayload
67
+ 'community.deleted': Amity.CommunityPayload
68
+ } & MqttCommunityUserMessageEvents
69
+
70
+ type MqttPostMessageEvents = {
71
+ 'post.created': Amity.PostPayload
72
+ 'post.updated': Amity.PostPayload
73
+ 'post.deleted': Amity.PostPayload
74
+ 'post.approved': Amity.PostPayload
75
+ 'post.declined': Amity.PostPayload
76
+ 'post.flagged': Amity.PostPayload
77
+ 'post.unflagged': Amity.PostPayload
78
+ 'post.addReaction': Amity.PostPayload & { reactor: Amity.Reaction }
79
+ 'post.removeReaction': Amity.PostPayload & { reactor: Amity.Reaction }
80
+ }
81
+
82
+ type MqttCommentMessageEvents = {
83
+ 'comment.created': Amity.CommentPayload
84
+ 'comment.updated': Amity.CommentPayload
85
+ 'comment.deleted': Amity.CommentPayload
86
+ 'comment.flagged': Amity.CommentPayload
87
+ 'comment.unflagged': Amity.CommentPayload
88
+ 'comment.addReaction': Amity.CommentPayload & { reactor: Amity.Reaction }
89
+ 'comment.removeReaction': Amity.CommentPayload & { reactor: Amity.Reaction }
63
90
  }
91
+
92
+ type MqttUserMessageEvents = {
93
+ 'user.updated': Amity.UserPayload
94
+ 'user.flagged': Amity.UserPayload
95
+ 'user.unflagged': Amity.UserPayload
96
+ 'user.flagCleared': Amity.UserPayload
97
+ }
98
+
99
+ type MqttMessageEvents = MqttCommunityMessageEvents
100
+ & MqttPostMessageEvents
101
+ & MqttCommentMessageEvents
102
+ & MqttUserMessageEvents
103
+
104
+ type Events = WsEvents & MqttEvents & MqttMessageEvents
64
105
  }
65
106
  }
@@ -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
  }
@@ -6,8 +6,11 @@ declare global {
6
6
  type Logger = (topic: string, ...args: any[]) => void
7
7
 
8
8
  type Client = {
9
+ version: string
10
+
9
11
  log: Logger
10
12
  http: AxiosInstance
13
+ mqtt: Amity.MqttClient
11
14
  ws: SocketIOClient.Socket
12
15
  emitter: Emitter<Amity.Events>
13
16
 
@@ -15,6 +18,8 @@ declare global {
15
18
 
16
19
  apiKey?: string
17
20
  userId?: string
21
+ user?: Amity.User
22
+ accessToken?: string
18
23
 
19
24
  use: () => void
20
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
  }
@@ -1,16 +1,13 @@
1
+ import { VERSION } from '~/version'
2
+
1
3
  import { createLogger } from '~/core/debug'
2
4
 
3
- import {
4
- createHttpTransport,
5
- createWebsocketTransport,
6
- } from '~/core/transports'
5
+ import { API_ENDPOINT, getUrlFromTemplate, UrlTemplate } from '~/core/network'
6
+ import { createHttpTransport, createMqttTransport, createWebsocketTransport } from '~/core/transports'
7
7
 
8
8
  import { createEventEmitter } from '~/core/events'
9
9
 
10
- import {
11
- getActiveClient,
12
- setActiveClient,
13
- } from './activeClient'
10
+ import { getActiveClient, setActiveClient } from './activeClient'
14
11
 
15
12
  /**
16
13
  * ```js
@@ -29,8 +26,8 @@ import {
29
26
  **/
30
27
  export const createClient = (
31
28
  apiKey: string,
32
- apiEndpoint: string = 'https://api.amity.co',
33
- debugSession: string = 'amity',
29
+ apiEndpoint: typeof API_ENDPOINT[keyof typeof API_ENDPOINT]|string = API_ENDPOINT.SG,
30
+ debugSession: string = 'amity'
34
31
  ): Amity.Client => {
35
32
  const log = createLogger(debugSession)
36
33
 
@@ -39,18 +36,29 @@ export const createClient = (
39
36
  apiEndpoint,
40
37
  })
41
38
 
42
- const http = createHttpTransport(apiEndpoint)
43
- 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));
44
42
 
45
43
  const emitter = createEventEmitter()
46
44
 
47
45
  const client = {
48
- apiKey, log, http, ws, emitter,
46
+ version: `${VERSION}`,
47
+
48
+ apiKey,
49
+ log,
50
+ http,
51
+ ws,
52
+ mqtt,
53
+ emitter,
49
54
  use: () => setActiveClient(client),
50
55
  }
51
56
 
52
- try { getActiveClient() }
53
- catch { setActiveClient(client) }
57
+ try {
58
+ getActiveClient()
59
+ } catch {
60
+ setActiveClient(client)
61
+ }
54
62
 
55
63
  return client
56
64
  }
@@ -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
  }
@@ -1,6 +1,6 @@
1
1
  import { getActiveClient } from './activeClient'
2
2
 
3
- import { getDeviceId, getDeviceInfo } from '~/core/device'
3
+ import { getDeviceInfo } from '~/core/device'
4
4
 
5
5
  /**
6
6
  * Retrieves a pair of {@link Amity.Tokens} necessary for connection
@@ -25,9 +25,10 @@ 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
+ //@ts-ignore
31
32
  headers: { 'X-API-Key': client.apiKey }
32
33
  })
33
34
 
@@ -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]
@@ -1,5 +1,6 @@
1
1
  import { getActiveClient } from '~/client/api'
2
2
  import { fireEvent } from '~/core/events'
3
+ import { dropFromCache, mergeInCache } from '~/core/cache'
3
4
 
4
5
  import { getComment } from './getComment'
5
6
 
@@ -21,20 +22,39 @@ import { getPost } from '~/post/api/getPost'
21
22
  */
22
23
  export const deleteComment = async (
23
24
  commentId: Amity.Comment['commentId'],
25
+ permanent: boolean = false,
24
26
  ) => {
25
27
  const client = getActiveClient()
26
28
  client.log('comment/deleteComment', commentId)
27
29
 
30
+ const comment = await getComment(commentId)
31
+
28
32
  // API-FIX: This endpoint has not been implemented yet.
29
33
  await client.http.delete<{ success: boolean }>(
30
- `/api/v3/comments/${commentId}`,
34
+ `/api/v4/comments/${commentId}`, {
35
+ params: {
36
+ commentId,
37
+ permanent,
38
+ },
39
+ },
31
40
  )
32
41
 
33
- const deleted = await getComment(commentId)
34
- const post = await getPost(deleted.referenceId)
42
+ // to support hard deletion
43
+ const deleted = { ...comment, isDeleted: true }
44
+
45
+ const post = await getPost(comment.referenceId)
46
+
47
+ fireEvent('post.updated', { posts: [post] })
48
+ fireEvent('comment.deleted', { comments: [deleted] })
49
+
35
50
 
36
- fireEvent('v3.post.didUpdate', { posts: [post] })
37
- fireEvent('v3.comment.didDelete', { comments: [deleted] })
51
+ if (permanent) {
52
+ setTimeout(() => {
53
+ dropFromCache('comment', {commentId})
54
+ }, 0)
55
+ } else {
56
+ mergeInCache('comment', {commentId, isDeleted: true})
57
+ }
38
58
 
39
59
  return deleted
40
60
  }
@@ -1,6 +1,6 @@
1
1
  import { getActiveClient } from '~/client/api'
2
2
 
3
- import { ingestInCache, pullFromCache } from '~/core/cache'
3
+ import { ingestInCache, pullFromCache, dropFromCache } from '~/core/cache'
4
4
  import { decoratePayload } from '~/core/query'
5
5
 
6
6
  /**
@@ -23,10 +23,22 @@ export const getComment = async (
23
23
  const client = getActiveClient()
24
24
  client.log('comment/getComment', commentId)
25
25
 
26
- // API-FIX: endpoint should not be /list, parameters should be querystring.
27
- const { data } = await client.http.get<Amity.CommentPayload>(
28
- `/api/v3/comments/${commentId}`,
29
- )
26
+ let data: Amity.CommentPayload;
27
+
28
+ try {
29
+ // API-FIX: endpoint should not be /list, parameters should be querystring.
30
+ const response = await client.http.get<Amity.CommentPayload>(
31
+ `/api/v3/comments/${commentId}`,
32
+ )
33
+
34
+ data = response.data;
35
+ } catch (error) {
36
+ if ((error as Amity.ErrorResponse)?.code === Amity.ServerError.ITEM_NOT_FOUND) {
37
+ dropFromCache('comment', {commentId})
38
+ }
39
+
40
+ throw error;
41
+ }
30
42
 
31
43
  decoratePayload(data)
32
44
  ingestInCache(data)
@@ -94,8 +94,6 @@ queryComments.locally = (
94
94
  page = { before: 0, limit: 5 },
95
95
  } = query
96
96
 
97
- if (isNaN(page.after!) && isNaN(page.before!))
98
- page.before = 0;
99
97
 
100
98
  if (isNaN(page.limit))
101
99
  page.limit = 5
@@ -140,8 +138,8 @@ queryComments.locally = (
140
138
  beforeIndex !== -1 ? beforeIndex : undefined,
141
139
  )
142
140
 
143
- // nothing left after slicing
144
- if (!slice.length)
141
+ // check if slice data is correct (complete)
142
+ if (slice.length < page.limit)
145
143
  return
146
144
 
147
145
  if (!isNaN(page.after!) && !isNaN(page.before!)) {
@@ -150,6 +148,8 @@ queryComments.locally = (
150
148
  slice = slice.slice(0, page.limit)
151
149
  } else if (!isNaN(page.before!)) {
152
150
  slice = slice.slice(-page.limit)
151
+ } else {
152
+ slice = slice.slice(-page.limit)
153
153
  }
154
154
 
155
155
  for (let i = 0; i < slice.length - 1; i++)
@@ -160,10 +160,11 @@ queryComments.locally = (
160
160
  ? { before: slice[0].segmentNumber, limit: page.limit }
161
161
  : undefined
162
162
 
163
- const nextPage = {
164
- after: slice[slice.length - 1].segmentNumber,
165
- limit: page.limit,
166
- }
163
+ const nextPage = slice[slice.length - 1].segmentNumber < comments[comments.length - 1].segmentNumber
164
+ ? {
165
+ after: slice[slice.length - 1].segmentNumber,
166
+ limit: page.limit,
167
+ } : undefined
167
168
 
168
169
  return { data: toRecord(slice), nextPage, prevPage }
169
170
  }
@@ -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'