@amityco/ts-sdk 0.0.1-be4fc2f.0 → 0.0.1-beta.10

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 (527) hide show
  1. package/README.md +2 -2
  2. package/dist/@types/core/cache.d.ts +49 -9
  3. package/dist/@types/core/cache.d.ts.map +1 -1
  4. package/dist/@types/core/events.d.ts +22 -12
  5. package/dist/@types/core/events.d.ts.map +1 -1
  6. package/dist/@types/core/model.d.ts +1 -0
  7. package/dist/@types/core/model.d.ts.map +1 -1
  8. package/dist/@types/core/paging.d.ts +59 -0
  9. package/dist/@types/core/paging.d.ts.map +1 -0
  10. package/dist/@types/core/permissions.d.ts +1 -1
  11. package/dist/@types/core/permissions.d.ts.map +1 -1
  12. package/dist/@types/core/query.d.ts +13 -43
  13. package/dist/@types/core/query.d.ts.map +1 -1
  14. package/dist/@types/core/transport.d.ts +3 -2
  15. package/dist/@types/core/transport.d.ts.map +1 -1
  16. package/dist/@types/domains/category.d.ts +1 -1
  17. package/dist/@types/domains/category.d.ts.map +1 -1
  18. package/dist/@types/domains/channel.d.ts +1 -1
  19. package/dist/@types/domains/channel.d.ts.map +1 -1
  20. package/dist/@types/domains/client.d.ts +2 -0
  21. package/dist/@types/domains/client.d.ts.map +1 -1
  22. package/dist/@types/domains/comment.d.ts +1 -1
  23. package/dist/@types/domains/comment.d.ts.map +1 -1
  24. package/dist/@types/domains/community.d.ts +1 -1
  25. package/dist/@types/domains/community.d.ts.map +1 -1
  26. package/dist/@types/domains/content.d.ts +1 -2
  27. package/dist/@types/domains/content.d.ts.map +1 -1
  28. package/dist/@types/domains/file.d.ts +1 -1
  29. package/dist/@types/domains/file.d.ts.map +1 -1
  30. package/dist/@types/domains/group.d.ts +3 -3
  31. package/dist/@types/domains/group.d.ts.map +1 -1
  32. package/dist/@types/domains/message.d.ts +1 -1
  33. package/dist/@types/domains/message.d.ts.map +1 -1
  34. package/dist/@types/domains/post.d.ts +1 -1
  35. package/dist/@types/domains/post.d.ts.map +1 -1
  36. package/dist/@types/domains/stream.d.ts +1 -1
  37. package/dist/@types/domains/stream.d.ts.map +1 -1
  38. package/dist/@types/domains/user.d.ts +2 -1
  39. package/dist/@types/domains/user.d.ts.map +1 -1
  40. package/dist/@types/index.d.ts +1 -1
  41. package/dist/@types/index.d.ts.map +1 -1
  42. package/dist/cache/api/backupCache.d.ts +24 -0
  43. package/dist/cache/api/backupCache.d.ts.map +1 -0
  44. package/dist/cache/api/disableCache.d.ts +13 -0
  45. package/dist/cache/api/disableCache.d.ts.map +1 -0
  46. package/dist/cache/api/dropFromCache.d.ts +17 -0
  47. package/dist/cache/api/dropFromCache.d.ts.map +1 -0
  48. package/dist/cache/api/enableCache.d.ts +18 -0
  49. package/dist/cache/api/enableCache.d.ts.map +1 -0
  50. package/dist/cache/api/index.d.ts +12 -0
  51. package/dist/cache/api/index.d.ts.map +1 -0
  52. package/dist/cache/api/ingestInCache.d.ts +11 -0
  53. package/dist/cache/api/ingestInCache.d.ts.map +1 -0
  54. package/dist/cache/api/mergeInCache.d.ts +20 -0
  55. package/dist/cache/api/mergeInCache.d.ts.map +1 -0
  56. package/dist/cache/api/pullFromCache.d.ts +17 -0
  57. package/dist/cache/api/pullFromCache.d.ts.map +1 -0
  58. package/dist/cache/api/pushToCache.d.ts +17 -0
  59. package/dist/cache/api/pushToCache.d.ts.map +1 -0
  60. package/dist/cache/api/queryCache.d.ts +17 -0
  61. package/dist/cache/api/queryCache.d.ts.map +1 -0
  62. package/dist/cache/api/restoreCache.d.ts +22 -0
  63. package/dist/cache/api/restoreCache.d.ts.map +1 -0
  64. package/dist/cache/api/snipeIdFromCollection.d.ts +18 -0
  65. package/dist/cache/api/snipeIdFromCollection.d.ts.map +1 -0
  66. package/dist/cache/api/upsertInCache.d.ts +19 -0
  67. package/dist/cache/api/upsertInCache.d.ts.map +1 -0
  68. package/dist/cache/api/wipeCache.d.ts +21 -0
  69. package/dist/cache/api/wipeCache.d.ts.map +1 -0
  70. package/dist/cache/utils/index.d.ts +41 -0
  71. package/dist/cache/utils/index.d.ts.map +1 -0
  72. package/dist/category/api/getCategory.d.ts.map +1 -1
  73. package/dist/category/api/queryCategories.d.ts +5 -4
  74. package/dist/category/api/queryCategories.d.ts.map +1 -1
  75. package/dist/channel/api/addChannelMembers.d.ts.map +1 -1
  76. package/dist/channel/api/addChannelMembersRole.d.ts.map +1 -1
  77. package/dist/channel/api/createChannel.d.ts +1 -1
  78. package/dist/channel/api/createChannel.d.ts.map +1 -1
  79. package/dist/channel/api/deleteChannel.d.ts +1 -1
  80. package/dist/channel/api/deleteChannel.d.ts.map +1 -1
  81. package/dist/channel/api/getChannel.d.ts +2 -2
  82. package/dist/channel/api/getChannel.d.ts.map +1 -1
  83. package/dist/channel/api/getChannels.d.ts +2 -2
  84. package/dist/channel/api/getChannels.d.ts.map +1 -1
  85. package/dist/channel/api/joinChannel.d.ts.map +1 -1
  86. package/dist/channel/api/leaveChannel.d.ts.map +1 -1
  87. package/dist/channel/api/queryChannelMembers.d.ts +1 -5
  88. package/dist/channel/api/queryChannelMembers.d.ts.map +1 -1
  89. package/dist/channel/api/queryChannels.d.ts +1 -5
  90. package/dist/channel/api/queryChannels.d.ts.map +1 -1
  91. package/dist/channel/api/removeChannelMembers.d.ts.map +1 -1
  92. package/dist/channel/api/removeChannelMembersRole.d.ts.map +1 -1
  93. package/dist/channel/api/updateChannel.d.ts +1 -1
  94. package/dist/channel/api/updateChannel.d.ts.map +1 -1
  95. package/dist/channel/events/onChannelDeleted.d.ts.map +1 -1
  96. package/dist/channel/events/onChannelJoined.d.ts.map +1 -1
  97. package/dist/channel/events/onChannelLeft.d.ts.map +1 -1
  98. package/dist/channel/events/onChannelUpdated.d.ts.map +1 -1
  99. package/dist/channel/events/onMemberAdded.d.ts.map +1 -1
  100. package/dist/channel/events/onMemberRemoved.d.ts.map +1 -1
  101. package/dist/channel/observers/observeChannel.d.ts +1 -3
  102. package/dist/channel/observers/observeChannel.d.ts.map +1 -1
  103. package/dist/client/api/connectClient.d.ts.map +1 -1
  104. package/dist/client/api/disconnectClient.d.ts.map +1 -1
  105. package/dist/client/api/getToken.d.ts +3 -1
  106. package/dist/client/api/getToken.d.ts.map +1 -1
  107. package/dist/client/api/index.d.ts +0 -2
  108. package/dist/client/api/index.d.ts.map +1 -1
  109. package/dist/comment/api/createComment.d.ts +1 -1
  110. package/dist/comment/api/createComment.d.ts.map +1 -1
  111. package/dist/comment/api/deleteComment.d.ts +1 -37
  112. package/dist/comment/api/deleteComment.d.ts.map +1 -1
  113. package/dist/comment/api/getComment.d.ts +2 -2
  114. package/dist/comment/api/getComment.d.ts.map +1 -1
  115. package/dist/comment/api/getComments.d.ts +2 -2
  116. package/dist/comment/api/getComments.d.ts.map +1 -1
  117. package/dist/comment/api/queryComments.d.ts +4 -18
  118. package/dist/comment/api/queryComments.d.ts.map +1 -1
  119. package/dist/comment/api/updateComment.d.ts +1 -1
  120. package/dist/comment/api/updateComment.d.ts.map +1 -1
  121. package/dist/comment/events/onCommentCreated.d.ts +2 -2
  122. package/dist/comment/events/onCommentCreated.d.ts.map +1 -1
  123. package/dist/comment/events/onCommentDeleted.d.ts +2 -2
  124. package/dist/comment/events/onCommentDeleted.d.ts.map +1 -1
  125. package/dist/comment/events/onCommentFlagged.d.ts +2 -2
  126. package/dist/comment/events/onCommentFlagged.d.ts.map +1 -1
  127. package/dist/comment/events/onCommentReactionAdded.d.ts +2 -2
  128. package/dist/comment/events/onCommentReactionAdded.d.ts.map +1 -1
  129. package/dist/comment/events/onCommentReactionRemoved.d.ts +2 -2
  130. package/dist/comment/events/onCommentReactionRemoved.d.ts.map +1 -1
  131. package/dist/comment/events/onCommentUnflagged.d.ts +2 -2
  132. package/dist/comment/events/onCommentUnflagged.d.ts.map +1 -1
  133. package/dist/comment/events/onCommentUpdated.d.ts +2 -2
  134. package/dist/comment/events/onCommentUpdated.d.ts.map +1 -1
  135. package/dist/comment/events/utils.d.ts +1 -1
  136. package/dist/comment/events/utils.d.ts.map +1 -1
  137. package/dist/comment/observers/observeComment.d.ts +1 -3
  138. package/dist/comment/observers/observeComment.d.ts.map +1 -1
  139. package/dist/community/api/addCommunityMembers.d.ts.map +1 -1
  140. package/dist/community/api/addCommunityMembersRole.d.ts.map +1 -1
  141. package/dist/community/api/createCommunity.d.ts +1 -1
  142. package/dist/community/api/createCommunity.d.ts.map +1 -1
  143. package/dist/community/api/deleteCommunity.d.ts.map +1 -1
  144. package/dist/community/api/getCommunities.d.ts +2 -2
  145. package/dist/community/api/getCommunities.d.ts.map +1 -1
  146. package/dist/community/api/getCommunity.d.ts +2 -2
  147. package/dist/community/api/getCommunity.d.ts.map +1 -1
  148. package/dist/community/api/joinCommunity.d.ts.map +1 -1
  149. package/dist/community/api/leaveCommunity.d.ts.map +1 -1
  150. package/dist/community/api/queryCommunities.d.ts +1 -5
  151. package/dist/community/api/queryCommunities.d.ts.map +1 -1
  152. package/dist/community/api/queryCommunityMembers.d.ts +1 -5
  153. package/dist/community/api/queryCommunityMembers.d.ts.map +1 -1
  154. package/dist/community/api/removeCommunityMembers.d.ts.map +1 -1
  155. package/dist/community/api/removeCommunityMembersRole.d.ts.map +1 -1
  156. package/dist/community/api/updateCommunity.d.ts +1 -1
  157. package/dist/community/api/updateCommunity.d.ts.map +1 -1
  158. package/dist/community/events/onCommunityCreated.d.ts +1 -1
  159. package/dist/community/events/onCommunityDeleted.d.ts +1 -1
  160. package/dist/community/events/onCommunityJoined.d.ts +3 -3
  161. package/dist/community/events/onCommunityJoined.d.ts.map +1 -1
  162. package/dist/community/events/onCommunityLeft.d.ts +3 -3
  163. package/dist/community/events/onCommunityLeft.d.ts.map +1 -1
  164. package/dist/community/events/onCommunityUpdated.d.ts +1 -1
  165. package/dist/community/events/onCommunityUserAdded.d.ts +3 -3
  166. package/dist/community/events/onCommunityUserAdded.d.ts.map +1 -1
  167. package/dist/community/events/onCommunityUserBanned.d.ts +3 -3
  168. package/dist/community/events/onCommunityUserBanned.d.ts.map +1 -1
  169. package/dist/community/events/onCommunityUserRemoved.d.ts +3 -3
  170. package/dist/community/events/onCommunityUserRemoved.d.ts.map +1 -1
  171. package/dist/community/events/onCommunityUserUnbanned.d.ts +3 -3
  172. package/dist/community/events/onCommunityUserUnbanned.d.ts.map +1 -1
  173. package/dist/community/events/utils.d.ts +1 -0
  174. package/dist/community/events/utils.d.ts.map +1 -1
  175. package/dist/community/observers/observeCommunity.d.ts +1 -3
  176. package/dist/community/observers/observeCommunity.d.ts.map +1 -1
  177. package/dist/core/events.d.ts +3 -3
  178. package/dist/core/events.d.ts.map +1 -1
  179. package/dist/core/model/idResolvers.d.ts +9 -11
  180. package/dist/core/model/idResolvers.d.ts.map +1 -1
  181. package/dist/core/model/identifyModel.d.ts +1 -1
  182. package/dist/core/model/identifyModel.d.ts.map +1 -1
  183. package/dist/core/model/index.d.ts +6 -2
  184. package/dist/core/model/index.d.ts.map +1 -1
  185. package/dist/core/query/index.d.ts +0 -1
  186. package/dist/core/query/index.d.ts.map +1 -1
  187. package/dist/core/query/paging.d.ts +21 -3
  188. package/dist/core/query/paging.d.ts.map +1 -1
  189. package/dist/core/query/query.d.ts +9 -21
  190. package/dist/core/query/query.d.ts.map +1 -1
  191. package/dist/core/subscription.d.ts +13 -2
  192. package/dist/core/subscription.d.ts.map +1 -1
  193. package/dist/core/transports/mqtt.d.ts +2 -1
  194. package/dist/core/transports/mqtt.d.ts.map +1 -1
  195. package/dist/core/transports/ws.d.ts.map +1 -1
  196. package/dist/feed/api/queryGlobalFeed.d.ts +1 -5
  197. package/dist/feed/api/queryGlobalFeed.d.ts.map +1 -1
  198. package/dist/file/api/createFile.d.ts +1 -1
  199. package/dist/file/api/createFile.d.ts.map +1 -1
  200. package/dist/file/api/deleteFile.d.ts.map +1 -1
  201. package/dist/file/api/getFile.d.ts +2 -2
  202. package/dist/file/api/getFile.d.ts.map +1 -1
  203. package/dist/file/observers/observeFile.d.ts +1 -3
  204. package/dist/file/observers/observeFile.d.ts.map +1 -1
  205. package/dist/index.cjs.js +17428 -2854
  206. package/dist/index.d.ts +3 -2
  207. package/dist/index.d.ts.map +1 -1
  208. package/dist/index.esm.js +17411 -2840
  209. package/dist/index.umd.js +6 -4
  210. package/dist/message/api/createMessage.d.ts +2 -2
  211. package/dist/message/api/createMessage.d.ts.map +1 -1
  212. package/dist/message/api/deleteMessage.d.ts +2 -2
  213. package/dist/message/api/deleteMessage.d.ts.map +1 -1
  214. package/dist/message/api/getMessage.d.ts +2 -2
  215. package/dist/message/api/getMessage.d.ts.map +1 -1
  216. package/dist/message/api/getMessages.d.ts +2 -2
  217. package/dist/message/api/getMessages.d.ts.map +1 -1
  218. package/dist/message/api/queryMessages.d.ts +2 -16
  219. package/dist/message/api/queryMessages.d.ts.map +1 -1
  220. package/dist/message/api/updateMessage.d.ts +2 -2
  221. package/dist/message/api/updateMessage.d.ts.map +1 -1
  222. package/dist/message/events/onMessageCreated.d.ts.map +1 -1
  223. package/dist/message/events/onMessageDeleted.d.ts.map +1 -1
  224. package/dist/message/events/onMessageUpdated.d.ts.map +1 -1
  225. package/dist/message/observers/observeMessage.d.ts +1 -3
  226. package/dist/message/observers/observeMessage.d.ts.map +1 -1
  227. package/dist/message/observers/observeMessages.d.ts +1 -1
  228. package/dist/message/observers/observeMessages.d.ts.map +1 -1
  229. package/dist/post/api/createPost.d.ts +1 -1
  230. package/dist/post/api/createPost.d.ts.map +1 -1
  231. package/dist/post/api/deletePost.d.ts +1 -40
  232. package/dist/post/api/deletePost.d.ts.map +1 -1
  233. package/dist/post/api/getPost.d.ts +5 -5
  234. package/dist/post/api/getPost.d.ts.map +1 -1
  235. package/dist/post/api/getPosts.d.ts +4 -4
  236. package/dist/post/api/getPosts.d.ts.map +1 -1
  237. package/dist/post/api/queryPosts.d.ts +4 -8
  238. package/dist/post/api/queryPosts.d.ts.map +1 -1
  239. package/dist/post/api/updatePost.d.ts +1 -1
  240. package/dist/post/api/updatePost.d.ts.map +1 -1
  241. package/dist/post/events/onPostApproved.d.ts +1 -1
  242. package/dist/post/events/onPostCreated.d.ts +1 -1
  243. package/dist/post/events/onPostDeclined.d.ts +1 -1
  244. package/dist/post/events/onPostDeleted.d.ts +1 -1
  245. package/dist/post/events/onPostDeleted.d.ts.map +1 -1
  246. package/dist/post/events/onPostFlagged.d.ts +1 -1
  247. package/dist/post/events/onPostReactionAdded.d.ts +1 -1
  248. package/dist/post/events/onPostReactionAdded.d.ts.map +1 -1
  249. package/dist/post/events/onPostReactionRemoved.d.ts +1 -1
  250. package/dist/post/events/onPostReactionRemoved.d.ts.map +1 -1
  251. package/dist/post/events/onPostUnflagged.d.ts +1 -1
  252. package/dist/post/events/onPostUpdated.d.ts +1 -1
  253. package/dist/post/events/utils.d.ts.map +1 -1
  254. package/dist/post/observers/observePost.d.ts +1 -3
  255. package/dist/post/observers/observePost.d.ts.map +1 -1
  256. package/dist/reaction/api/addReaction.d.ts +1 -1
  257. package/dist/reaction/api/addReaction.d.ts.map +1 -1
  258. package/dist/reaction/api/removeReaction.d.ts +1 -1
  259. package/dist/reaction/api/removeReaction.d.ts.map +1 -1
  260. package/dist/reaction/events/onReactionAdded.d.ts +4 -2
  261. package/dist/reaction/events/onReactionAdded.d.ts.map +1 -1
  262. package/dist/reaction/events/onReactionRemoved.d.ts +4 -2
  263. package/dist/reaction/events/onReactionRemoved.d.ts.map +1 -1
  264. package/dist/reaction/utils/fetchReference.d.ts +1 -1
  265. package/dist/reaction/utils/fetchReference.d.ts.map +1 -1
  266. package/dist/reaction/utils/index.d.ts +1 -0
  267. package/dist/reaction/utils/index.d.ts.map +1 -1
  268. package/dist/reaction/utils/preparePayloadForCache.d.ts +3 -0
  269. package/dist/reaction/utils/preparePayloadForCache.d.ts.map +1 -0
  270. package/dist/report/api/createReport.d.ts.map +1 -1
  271. package/dist/report/api/deleteReport.d.ts.map +1 -1
  272. package/dist/role/api/getRole.d.ts +2 -2
  273. package/dist/role/api/getRole.d.ts.map +1 -1
  274. package/dist/role/api/queryRoles.d.ts +1 -5
  275. package/dist/role/api/queryRoles.d.ts.map +1 -1
  276. package/dist/stream/api/createStream.d.ts +1 -1
  277. package/dist/stream/api/createStream.d.ts.map +1 -1
  278. package/dist/stream/api/deleteStream.d.ts.map +1 -1
  279. package/dist/stream/api/disposeStream.d.ts +1 -1
  280. package/dist/stream/api/disposeStream.d.ts.map +1 -1
  281. package/dist/stream/api/getStream.d.ts +2 -2
  282. package/dist/stream/api/getStream.d.ts.map +1 -1
  283. package/dist/stream/api/queryStreams.d.ts +1 -5
  284. package/dist/stream/api/queryStreams.d.ts.map +1 -1
  285. package/dist/stream/api/updateStream.d.ts +1 -1
  286. package/dist/stream/api/updateStream.d.ts.map +1 -1
  287. package/dist/stream/events/onStreamRecorded.d.ts.map +1 -1
  288. package/dist/stream/events/onStreamStarted.d.ts.map +1 -1
  289. package/dist/stream/events/onStreamStopped.d.ts.map +1 -1
  290. package/dist/user/api/getUser.d.ts +4 -4
  291. package/dist/user/api/getUser.d.ts.map +1 -1
  292. package/dist/user/api/getUsers.d.ts +4 -4
  293. package/dist/user/api/getUsers.d.ts.map +1 -1
  294. package/dist/user/api/queryUsers.d.ts +7 -11
  295. package/dist/user/api/queryUsers.d.ts.map +1 -1
  296. package/dist/user/api/updateUser.d.ts +1 -1
  297. package/dist/user/api/updateUser.d.ts.map +1 -1
  298. package/dist/user/events/onUserFlagCleared.d.ts +1 -1
  299. package/dist/user/events/onUserFlagged.d.ts +1 -1
  300. package/dist/user/events/onUserUnflagged.d.ts +1 -1
  301. package/dist/user/events/onUserUpdated.d.ts +1 -1
  302. package/dist/user/events/utils.d.ts.map +1 -1
  303. package/dist/user/observers/observeUser.d.ts +1 -3
  304. package/dist/user/observers/observeUser.d.ts.map +1 -1
  305. package/package.json +6 -5
  306. package/src/@types/core/cache.ts +56 -9
  307. package/src/@types/core/events.ts +14 -11
  308. package/src/@types/core/model.ts +2 -0
  309. package/src/@types/core/paging.ts +75 -0
  310. package/src/@types/core/permissions.ts +0 -1
  311. package/src/@types/core/query.ts +14 -55
  312. package/src/@types/core/transport.ts +4 -2
  313. package/src/@types/domains/category.ts +0 -1
  314. package/src/@types/domains/channel.ts +0 -1
  315. package/src/@types/domains/client.ts +2 -0
  316. package/src/@types/domains/comment.ts +0 -1
  317. package/src/@types/domains/community.ts +0 -1
  318. package/src/@types/domains/content.ts +17 -15
  319. package/src/@types/domains/file.ts +0 -1
  320. package/src/@types/domains/group.ts +2 -3
  321. package/src/@types/domains/message.ts +0 -1
  322. package/src/@types/domains/post.ts +8 -8
  323. package/src/@types/domains/stream.ts +0 -1
  324. package/src/@types/domains/user.ts +1 -1
  325. package/src/@types/index.ts +1 -1
  326. package/src/@types/mqtt.d.ts +3 -0
  327. package/src/cache/api/backupCache.ts +53 -0
  328. package/src/cache/api/disableCache.ts +23 -0
  329. package/src/cache/api/dropFromCache.ts +44 -0
  330. package/src/cache/api/enableCache.ts +29 -0
  331. package/src/cache/api/index.ts +23 -0
  332. package/src/cache/api/ingestInCache.ts +33 -0
  333. package/src/cache/api/mergeInCache.ts +45 -0
  334. package/src/cache/api/pullFromCache.ts +33 -0
  335. package/src/cache/api/pushToCache.ts +40 -0
  336. package/src/cache/api/queryCache.ts +35 -0
  337. package/src/cache/api/restoreCache.ts +43 -0
  338. package/src/cache/api/snipeIdFromCollection.ts +53 -0
  339. package/src/cache/api/upsertInCache.ts +39 -0
  340. package/src/cache/api/wipeCache.ts +36 -0
  341. package/src/cache/utils/index.ts +84 -0
  342. package/src/category/api/getCategory.ts +3 -4
  343. package/src/category/api/queryCategories.ts +5 -6
  344. package/src/channel/api/addChannelMembers.ts +4 -5
  345. package/src/channel/api/addChannelMembersRole.ts +3 -5
  346. package/src/channel/api/createChannel.ts +16 -11
  347. package/src/channel/api/deleteChannel.ts +2 -2
  348. package/src/channel/api/getChannel.ts +22 -9
  349. package/src/channel/api/getChannels.ts +25 -12
  350. package/src/channel/api/joinChannel.ts +5 -6
  351. package/src/channel/api/leaveChannel.ts +5 -6
  352. package/src/channel/api/queryChannelMembers.ts +9 -11
  353. package/src/channel/api/queryChannels.ts +19 -12
  354. package/src/channel/api/removeChannelMembers.ts +4 -5
  355. package/src/channel/api/removeChannelMembersRole.ts +3 -5
  356. package/src/channel/api/updateChannel.ts +9 -7
  357. package/src/channel/events/onChannelDeleted.ts +1 -3
  358. package/src/channel/events/onChannelJoined.ts +1 -3
  359. package/src/channel/events/onChannelLeft.ts +1 -3
  360. package/src/channel/events/onChannelUpdated.ts +1 -3
  361. package/src/channel/events/onMemberAdded.ts +1 -3
  362. package/src/channel/events/onMemberRemoved.ts +1 -3
  363. package/src/channel/observers/observeChannel.ts +20 -14
  364. package/src/client/api/connectClient.ts +7 -7
  365. package/src/client/api/disconnectClient.ts +3 -0
  366. package/src/client/api/getToken.ts +3 -2
  367. package/src/client/api/index.ts +3 -2
  368. package/src/comment/api/createComment.ts +10 -7
  369. package/src/comment/api/deleteComment.ts +9 -8
  370. package/src/comment/api/getComment.ts +22 -10
  371. package/src/comment/api/getComments.ts +25 -12
  372. package/src/comment/api/queryComments.ts +35 -89
  373. package/src/comment/api/updateComment.ts +9 -6
  374. package/src/comment/events/onCommentCreated.ts +3 -3
  375. package/src/comment/events/onCommentDeleted.ts +3 -3
  376. package/src/comment/events/onCommentFlagged.ts +3 -3
  377. package/src/comment/events/onCommentReactionAdded.ts +40 -6
  378. package/src/comment/events/onCommentReactionRemoved.ts +40 -6
  379. package/src/comment/events/onCommentUnflagged.ts +3 -3
  380. package/src/comment/events/onCommentUpdated.ts +3 -3
  381. package/src/comment/events/utils.ts +30 -8
  382. package/src/comment/observers/observeComment.ts +20 -25
  383. package/src/community/api/addCommunityMembers.ts +5 -6
  384. package/src/community/api/addCommunityMembersRole.ts +3 -5
  385. package/src/community/api/createCommunity.ts +9 -6
  386. package/src/community/api/deleteCommunity.ts +3 -3
  387. package/src/community/api/getCommunities.ts +25 -12
  388. package/src/community/api/getCommunity.ts +23 -9
  389. package/src/community/api/joinCommunity.ts +7 -5
  390. package/src/community/api/leaveCommunity.ts +7 -5
  391. package/src/community/api/queryCommunities.ts +18 -12
  392. package/src/community/api/queryCommunityMembers.ts +10 -11
  393. package/src/community/api/removeCommunityMembers.ts +4 -5
  394. package/src/community/api/removeCommunityMembersRole.ts +3 -5
  395. package/src/community/api/updateCommunity.ts +10 -7
  396. package/src/community/events/onCommunityCreated.ts +1 -1
  397. package/src/community/events/onCommunityDeleted.ts +1 -1
  398. package/src/community/events/onCommunityJoined.ts +5 -5
  399. package/src/community/events/onCommunityLeft.ts +5 -5
  400. package/src/community/events/onCommunityUpdated.ts +1 -1
  401. package/src/community/events/onCommunityUserAdded.ts +5 -5
  402. package/src/community/events/onCommunityUserBanned.ts +5 -5
  403. package/src/community/events/onCommunityUserRemoved.ts +5 -5
  404. package/src/community/events/onCommunityUserUnbanned.ts +5 -5
  405. package/src/community/events/utils.ts +94 -4
  406. package/src/community/observers/observeCommunity.ts +21 -22
  407. package/src/core/model/idResolvers.ts +10 -40
  408. package/src/core/model/identifyModel.ts +37 -16
  409. package/src/core/model/index.ts +22 -2
  410. package/src/core/query/index.ts +0 -1
  411. package/src/core/query/paging.ts +43 -3
  412. package/src/core/query/query.ts +63 -115
  413. package/src/core/subscription.ts +66 -17
  414. package/src/core/transports/mqtt.ts +86 -20
  415. package/src/core/transports/ws.ts +1 -0
  416. package/src/feed/api/queryGlobalFeed.ts +7 -10
  417. package/src/file/api/createFile.ts +8 -6
  418. package/src/file/api/deleteFile.ts +5 -6
  419. package/src/file/api/getFile.ts +21 -9
  420. package/src/file/observers/observeFile.ts +5 -7
  421. package/src/index.ts +6 -6
  422. package/src/message/api/createMessage.ts +21 -17
  423. package/src/message/api/deleteMessage.ts +12 -11
  424. package/src/message/api/getMessage.ts +22 -10
  425. package/src/message/api/getMessages.ts +25 -12
  426. package/src/message/api/queryMessages.ts +34 -68
  427. package/src/message/api/updateMessage.ts +22 -12
  428. package/src/message/events/onMessageCreated.ts +1 -3
  429. package/src/message/events/onMessageDeleted.ts +1 -3
  430. package/src/message/events/onMessageUpdated.ts +1 -3
  431. package/src/message/observers/observeMessage.ts +8 -10
  432. package/src/message/observers/observeMessages.ts +6 -6
  433. package/src/post/api/createPost.ts +9 -6
  434. package/src/post/api/deletePost.ts +11 -9
  435. package/src/post/api/getPost.ts +26 -14
  436. package/src/post/api/getPosts.ts +27 -14
  437. package/src/post/api/queryPosts.ts +46 -19
  438. package/src/post/api/updatePost.ts +10 -6
  439. package/src/post/events/onPostApproved.ts +1 -1
  440. package/src/post/events/onPostCreated.ts +1 -1
  441. package/src/post/events/onPostDeclined.ts +1 -1
  442. package/src/post/events/onPostDeleted.ts +2 -2
  443. package/src/post/events/onPostFlagged.ts +1 -1
  444. package/src/post/events/onPostReactionAdded.ts +38 -4
  445. package/src/post/events/onPostReactionRemoved.ts +38 -4
  446. package/src/post/events/onPostUnflagged.ts +1 -1
  447. package/src/post/events/onPostUpdated.ts +1 -1
  448. package/src/post/events/utils.ts +39 -6
  449. package/src/post/observers/observePost.ts +22 -27
  450. package/src/reaction/api/addReaction.ts +30 -20
  451. package/src/reaction/api/removeReaction.ts +30 -20
  452. package/src/reaction/events/onReactionAdded.ts +37 -18
  453. package/src/reaction/events/onReactionRemoved.ts +38 -15
  454. package/src/reaction/utils/fetchReference.ts +1 -1
  455. package/src/reaction/utils/index.ts +1 -0
  456. package/src/reaction/utils/preparePayloadForCache.ts +45 -0
  457. package/src/report/api/createReport.ts +4 -5
  458. package/src/report/api/deleteReport.ts +4 -5
  459. package/src/role/api/getRole.ts +25 -9
  460. package/src/role/api/queryRoles.ts +10 -12
  461. package/src/stream/api/createStream.ts +9 -6
  462. package/src/stream/api/deleteStream.ts +10 -1
  463. package/src/stream/api/disposeStream.ts +10 -6
  464. package/src/stream/api/getStream.ts +23 -10
  465. package/src/stream/api/queryStreams.ts +10 -11
  466. package/src/stream/api/updateStream.ts +9 -6
  467. package/src/stream/events/onStreamRecorded.ts +1 -3
  468. package/src/stream/events/onStreamStarted.ts +1 -3
  469. package/src/stream/events/onStreamStopped.ts +1 -3
  470. package/src/user/api/getUser.ts +14 -11
  471. package/src/user/api/getUsers.ts +30 -14
  472. package/src/user/api/queryUsers.ts +40 -17
  473. package/src/user/api/updateUser.ts +10 -7
  474. package/src/user/events/onUserFlagCleared.ts +1 -1
  475. package/src/user/events/onUserFlagged.ts +1 -1
  476. package/src/user/events/onUserUnflagged.ts +1 -1
  477. package/src/user/events/onUserUpdated.ts +1 -1
  478. package/src/user/events/utils.ts +6 -4
  479. package/src/user/observers/observeUser.ts +9 -11
  480. package/dist/@types/core/store.d.ts +0 -46
  481. package/dist/@types/core/store.d.ts.map +0 -1
  482. package/dist/client/api/clearCache.d.ts +0 -15
  483. package/dist/client/api/clearCache.d.ts.map +0 -1
  484. package/dist/client/api/enableCache.d.ts +0 -15
  485. package/dist/client/api/enableCache.d.ts.map +0 -1
  486. package/dist/core/cache/drop.d.ts +0 -11
  487. package/dist/core/cache/drop.d.ts.map +0 -1
  488. package/dist/core/cache/index.d.ts +0 -19
  489. package/dist/core/cache/index.d.ts.map +0 -1
  490. package/dist/core/cache/ingest.d.ts +0 -10
  491. package/dist/core/cache/ingest.d.ts.map +0 -1
  492. package/dist/core/cache/merge.d.ts +0 -10
  493. package/dist/core/cache/merge.d.ts.map +0 -1
  494. package/dist/core/cache/mutate.d.ts +0 -10
  495. package/dist/core/cache/mutate.d.ts.map +0 -1
  496. package/dist/core/cache/pull.d.ts +0 -11
  497. package/dist/core/cache/pull.d.ts.map +0 -1
  498. package/dist/core/cache/push.d.ts +0 -10
  499. package/dist/core/cache/push.d.ts.map +0 -1
  500. package/dist/core/cache/sync.d.ts +0 -10
  501. package/dist/core/cache/sync.d.ts.map +0 -1
  502. package/dist/core/model/toRecord.d.ts +0 -10
  503. package/dist/core/model/toRecord.d.ts.map +0 -1
  504. package/dist/core/query/decorate.d.ts +0 -23
  505. package/dist/core/query/decorate.d.ts.map +0 -1
  506. package/dist/core/stores/index.d.ts +0 -3
  507. package/dist/core/stores/index.d.ts.map +0 -1
  508. package/dist/core/stores/memory.d.ts +0 -30
  509. package/dist/core/stores/memory.d.ts.map +0 -1
  510. package/dist/core/stores/persistent.d.ts +0 -13
  511. package/dist/core/stores/persistent.d.ts.map +0 -1
  512. package/src/@types/core/store.ts +0 -52
  513. package/src/client/api/clearCache.ts +0 -23
  514. package/src/client/api/enableCache.ts +0 -36
  515. package/src/core/cache/drop.ts +0 -24
  516. package/src/core/cache/index.ts +0 -24
  517. package/src/core/cache/ingest.ts +0 -24
  518. package/src/core/cache/merge.ts +0 -19
  519. package/src/core/cache/mutate.ts +0 -25
  520. package/src/core/cache/pull.ts +0 -31
  521. package/src/core/cache/push.ts +0 -41
  522. package/src/core/cache/sync.ts +0 -41
  523. package/src/core/model/toRecord.ts +0 -11
  524. package/src/core/query/decorate.ts +0 -64
  525. package/src/core/stores/index.ts +0 -2
  526. package/src/core/stores/memory.ts +0 -59
  527. package/src/core/stores/persistent.ts +0 -63
@@ -1,5 +1,3 @@
1
- import { syncInCache } from '../cache'
2
-
3
1
  import { isPaged } from './paging'
4
2
 
5
3
  /**
@@ -44,53 +42,40 @@ export const isOffline = <Args extends any[], Returned extends any>(
44
42
  ): func is Amity.OfflineFunc<Args, Returned> => isFetcher(func) || isMutator(func)
45
43
 
46
44
  /**
47
- * Type guard to check and cast that a given object has the "syncedAt" property
45
+ * Type guard to check and cast that a given object has the "cachedAt" property
48
46
  *
49
47
  * @param model any object to check on
50
- * @returns success boolean if the object has property "syncedAt"
48
+ * @returns success boolean if the object has property "cachedAt"
51
49
  *
52
50
  * @hidden
53
51
  */
54
- export const isSyncable = (model: any): model is Amity.Syncable => (
55
- model?.hasOwnProperty('syncedAt')
52
+ export const isCachable = (model: any): model is Amity.Cachable => (
53
+ model?.hasOwnProperty('cachedAt')
56
54
  )
57
55
 
58
56
  /**
59
- * Checks if a model is considered local (syncedAt === -1)
57
+ * Checks if a model is considered local (cachedAt === -1)
60
58
  *
61
- * @param model any syncable object to check
59
+ * @param model any cachable object to check
62
60
  * @returns success boolean if the object is marked as local
63
61
  *
64
62
  * @hidden
65
63
  */
66
- export const isLocal = (model?: any): model is Amity.Syncable => {
67
- return isSyncable(model) && model?.syncedAt === -1
64
+ export const isLocal = (model?: any): model is Amity.Local => {
65
+ return isCachable(model) && model?.cachedAt === -1
68
66
  }
69
67
 
70
68
  /**
71
69
  * Checks if a model is considered fresh
72
70
  *
73
- * @param model any syncable object to check
71
+ * @param model any cachable object to check
74
72
  * @param lifeSpan the supposedly duration for which the object is considered synced
75
73
  * @returns success boolean if the object is below the given lifespan
76
74
  *
77
75
  * @hidden
78
76
  */
79
- export const isFresh = (model?: Amity.Syncable, lifeSpan: number = 0) => {
80
- return Date.now() - (model?.syncedAt ?? 0) <= lifeSpan
81
- }
82
-
83
- /**
84
- * Checks if a model is considered synced
85
- *
86
- * @param model any syncable object to check
87
- * @param lifeSpan the supposedly duration for which the object is considered synced
88
- * @returns success boolean if the object is local or below the given lifespan
89
- *
90
- * @hidden
91
- */
92
- export const isSynced = (model?: any, lifeSpan: number = 0) => {
93
- return isLocal(model) || isFresh(model, lifeSpan)
77
+ export const isFresh = (model?: Amity.Cachable, lifeSpan: number = 0) => {
78
+ return Date.now() - (model?.cachedAt ?? 0) <= lifeSpan
94
79
  }
95
80
 
96
81
  /**
@@ -166,45 +151,6 @@ const isEmpty = (local: any) => {
166
151
  return false
167
152
  }
168
153
 
169
- /**
170
- * Checks if an unknown shaped payload is considered synced or not.
171
- * The object will first be identified by 3 types of shapes:
172
- *
173
- * 1. Amity.Paged<Amity.Syncable>
174
- * 2. Amity.Syncable
175
- * 3. Record<string, Amity.Syncable>
176
- *
177
- * then the "Syncable" component will be extracted and evaluated against
178
- * the query options' lifeSpan value.
179
- *
180
- * @param local the unknown object to check for freshness
181
- * @param options query options (for lifeSpan checking)
182
- * @returns true if the mixed-shape "local" content is considered fresh
183
- *
184
- * @hidden
185
- */
186
- const shouldAbort = (local: any, options: Amity.QueryOptions) => {
187
- // it's a paged query
188
- if (isPaged(local) && shouldAbort(local.data, options)) {
189
- return true
190
- }
191
-
192
- // if it's object let's try to see if it's Amity.Syncable first
193
- else if (isSynced(local, options.lifeSpan)) {
194
- return true
195
- }
196
-
197
- // otherwise consider as Record<string, Amity.Syncable>
198
- else if (
199
- Object.values(local).length > 0 &&
200
- Object.values(local).every(item => isSynced(item, options.lifeSpan))
201
- ) {
202
- return true
203
- }
204
-
205
- return false
206
- }
207
-
208
154
  /**
209
155
  * ```js
210
156
  * import { createQuery, getUser, runQuery } from '@amityco/ts-sdk'
@@ -224,77 +170,79 @@ const shouldAbort = (local: any, options: Amity.QueryOptions) => {
224
170
  */
225
171
  export const runQuery = <Args extends any[], Returned extends any>(
226
172
  { func, args }: Amity.Query<Args, Returned>,
227
- callback?: (args: Amity.QueryResult<Returned | undefined>) => void,
173
+ callback?: (args: Amity.Snapshot<Returned | undefined>) => void,
228
174
  options: Amity.QueryOptions = queryOptions('cache_then_server')
229
175
  ) => {
230
- if (!isOffline(func) || options.lifeSpan === 0) {
231
- callback?.(wrap(undefined, {
232
- origin: 'server',
233
- loading: true
234
- }))
235
-
236
- func(...args)
237
- .then(fresh => {
238
- callback?.(wrap(fresh, {
239
- origin: 'server',
176
+ let local: Returned | undefined
177
+
178
+ // offline first
179
+ if (isOffline(func) && options.lifeSpan !== 0) {
180
+ try {
181
+ local = isMutator(func)
182
+ ? func.optimistically(...args)
183
+ : func.locally(...args)
184
+ } catch (error) {
185
+ callback?.(
186
+ createSnapshot<Returned>(undefined, {
187
+ origin: 'local',
240
188
  loading: false,
241
- }))
242
- })
243
- .catch(error => {
244
- callback?.(wrap(undefined, {
245
189
  error,
246
- loading: false,
247
- }))
248
- })
190
+ })
191
+ )
192
+ }
249
193
 
250
- return
251
- }
194
+ const shouldAbort = isCachable(local) && isFresh(local, options.lifeSpan)
252
195
 
253
- const local = isMutator(func)
254
- ? func.optimistically(...args)
255
- : func.locally(...args)
196
+ callback?.(createSnapshot(local , {
197
+ origin: 'local',
198
+ loading: !(isFetcher(func) && shouldAbort)
199
+ }))
256
200
 
257
- if (!isEmpty(local)) {
258
- callback?.(wrap(local, { origin: 'local' }))
201
+ if (shouldAbort)
202
+ return
203
+ } else {
204
+ callback?.(createSnapshot(undefined, {
205
+ origin: 'local',
206
+ loading: true
207
+ }))
259
208
  }
260
209
 
261
- if (local && isFetcher(func) && shouldAbort(local, options)) return
262
-
263
- callback?.(wrap(local, {
264
- origin: 'local',
265
- loading: true,
266
- }))
267
-
268
210
  func(...args)
269
211
  .then(fresh => {
270
212
  // @ts-ignore i know.
271
- isLocal(local) && syncInCache(local, fresh)
213
+ // isLocal(local) && syncInCache(local, fresh)
272
214
 
273
- callback?.(wrap(fresh, {
274
- origin: 'server',
275
- loading: false
276
- }))
215
+ callback?.(
216
+ createSnapshot(fresh, {
217
+ origin: 'server',
218
+ loading: false,
219
+ })
220
+ )
277
221
  })
278
222
  .catch(error => {
279
- callback?.(wrap(local, {
280
- error,
281
- loading: false,
282
- }))
223
+ callback?.(
224
+ createSnapshot(undefined, {
225
+ origin: 'server',
226
+ loading: false,
227
+ error,
228
+ })
229
+ )
283
230
  })
284
231
  }
285
232
 
286
233
  /**
234
+ * This is a TS hack around types
287
235
  *
288
236
  * @param data
289
- * @param meta
290
- * @returns
237
+ * @param options
238
+ *
239
+ * @category Query API
240
+ * @hidden
291
241
  */
292
- const wrap = <T extends any>(data: T, meta: Amity.QueryMetadata = {}) => {
293
- if (isPaged(data))
294
- return {
295
- ...meta,
296
- ...data as Amity.Paged<T>,
297
- } as Amity.QueryResult<T>
242
+ function createSnapshot<T>(data: T | undefined, options?: Amity.SnapshotOptions): Amity.Snapshot<T>;
243
+ function createSnapshot(data: unknown, options?: Amity.SnapshotOptions): unknown {
244
+ if (isPaged(data) || isCachable(data))
245
+ return { ...options, ...data }
298
246
 
299
- return { ...meta, data } as Amity.QueryResult<T>
247
+ return { ...options, data }
300
248
  }
@@ -1,26 +1,75 @@
1
1
  import { getActiveClient } from '~/client/api'
2
+ import { ASCError } from '~/core/errors'
3
+ import { proxyMqttEvents } from '~/core/events'
2
4
 
3
- const markers = {
4
- all_and_children: "#",
5
- children_only: "+",
5
+ export enum SubscriptionLevels {
6
+ COMMUNITY = 'community',
7
+ POST = 'post',
8
+ COMMENT = 'comment',
9
+ POST_AND_COMMENT = 'post_and_comment',
10
+ USER = 'user',
6
11
  }
7
12
 
8
- export const getTopic = (
13
+ const getCommunityUserTopic = (
9
14
  { path }: Amity.Subscribable,
10
- option?: "all_and_children" | "children_only"
11
- ) => `${path}/${option ? markers[option] : ''}`
15
+ level?: SubscriptionLevels,
16
+ ): string => {
17
+ switch (level) {
18
+ case 'post':
19
+ return `${path}/post/+`;
20
+ case 'comment':
21
+ return `${path}/post/+/comment/+`;
22
+ case 'post_and_comment':
23
+ return `${path}/post/#`;
24
+ default:
25
+ return path;
26
+ }
27
+ };
12
28
 
13
- export function subscribe(topic: string): Amity.Unsubscriber {
14
- const client = getActiveClient()
29
+ export const getCommunityTopic = (
30
+ { path }: Amity.Subscribable,
31
+ level: Exclude<SubscriptionLevels, SubscriptionLevels.USER> = SubscriptionLevels.COMMUNITY,
32
+ ): string =>
33
+ getCommunityUserTopic({ path }, level)
15
34
 
16
- client.mqtt.subscribe(topic, (error, granted) => {
17
- if (error) {
18
- console.error(`Can not subscribe to ${topic}`, error)
19
- } else {
20
- console.log('Subscribe granted', granted)
21
- }
22
- })
35
+ export const getUserTopic = (
36
+ { path }: Amity.Subscribable,
37
+ level: Exclude<SubscriptionLevels, SubscriptionLevels.COMMUNITY> = SubscriptionLevels.USER,
38
+ ): string =>
39
+ getCommunityUserTopic({ path }, level)
23
40
 
24
- return () => client.mqtt.unsubscribe(topic)
25
- }
41
+ export const getPostTopic = (
42
+ { path }: Amity.Subscribable,
43
+ level: SubscriptionLevels.POST | SubscriptionLevels.COMMENT = SubscriptionLevels.POST
44
+ ): string => {
45
+ switch (level) {
46
+ case 'comment':
47
+ return `${path}/comment/+`;
48
+ default:
49
+ return path;
50
+ }
51
+ };
52
+
53
+ export const getCommentTopic = ({ path }: Amity.Subscribable): string => {
54
+ return path;
55
+ };
26
56
 
57
+ let mqttAccessToken: string;
58
+ let mqttUserId: string;
59
+
60
+ export function subscribeTopic(
61
+ topic: string,
62
+ callback?: Amity.Listener<ASCError | void>
63
+ ): Amity.Unsubscriber {
64
+ const { mqtt, emitter, accessToken, user } = getActiveClient()
65
+
66
+ if (mqttAccessToken !== accessToken || mqttUserId !== user!._id) {
67
+ mqttAccessToken = accessToken!
68
+ mqttUserId = user!._id
69
+
70
+ mqtt.connect({ accessToken: accessToken!, userId: user!._id })
71
+ proxyMqttEvents(mqtt, emitter)
72
+ }
73
+
74
+ return mqtt.subscribe(topic, callback)
75
+ }
@@ -1,22 +1,31 @@
1
- import mqtt, { MqttClient, IClientOptions } from 'mqtt'
1
+ import mqtt, { MqttClient, IClientOptions, ISubscriptionGrant } from 'mqtt/dist/mqtt'
2
+ import { ASCError, ASCUnknownError } from '~/core/errors'
2
3
 
3
- export function getMqttOptions(params: { username: string, password: string }): IClientOptions {
4
+ const QOS_FAILURE_CODE = 128
5
+
6
+ const RETRY_BASE_TIMEOUT = 1000;
7
+ const RETRY_COUNT_MAX = 10;
8
+
9
+ const enum MqttError {
10
+ IDENTIFIER_REJECTED = 2,
11
+ BAD_USERNAME_OR_PASSWORD = 4,
12
+ NOT_AUTHORIZED = 5,
13
+ }
14
+
15
+ export function getMqttOptions(params: { username: string, password: string, clientId?: string }): IClientOptions {
4
16
  return {
5
- keepalive: 30,
17
+ clean: false, // keep subscriptions
18
+ clientId: `mqttjs_ + ${Math.random().toString(16).substr(2, 8)}`,
6
19
  protocolId: 'MQTT',
7
20
  protocolVersion: 4,
8
- clean: true,
9
- reconnectPeriod: 1000,
10
- connectTimeout: 30 * 1000,
21
+ reconnectPeriod: 0, // disable auto reconnect
11
22
  will: {
12
23
  topic: 'WillMsg',
13
24
  payload: 'Connection Closed abnormally..!',
14
25
  qos: 0,
15
26
  retain: false
16
27
  },
17
- rejectUnauthorized: false,
18
28
 
19
- clientId: `mqttjs_ + ${Math.random().toString(16).substr(2, 8)}`,
20
29
  ...params
21
30
  }
22
31
  }
@@ -31,45 +40,102 @@ export function getMqttOptions(params: { username: string, password: string }):
31
40
  * @hidden
32
41
  */
33
42
  export const createMqttTransport = (endpoint: string): Amity.MqttClient => {
34
- let mqttClient: MqttClient
43
+ let mqttClient: MqttClient | void;
44
+ let retryCount = 0
45
+ let allowReconnection = true
35
46
 
36
47
  async function connect(params: { accessToken: string, userId: string }): Promise<void> {
48
+ if (mqttClient) {
49
+ mqttClient.removeAllListeners();
50
+ mqttClient.end(true)
51
+ }
52
+
37
53
  mqttClient = mqtt.connect(endpoint, getMqttOptions({ username: params.userId, password: params.accessToken }))
38
54
 
39
- return new Promise(resolve => mqttClient.once('connect', () => resolve()))
55
+ mqttClient.on('connect', () => {
56
+ retryCount = 0
57
+ allowReconnection = true
58
+ })
59
+
60
+ mqttClient.on('error', (error: Error & { code: number }) => {
61
+ switch (error.code) {
62
+ case MqttError.IDENTIFIER_REJECTED:
63
+ case MqttError.BAD_USERNAME_OR_PASSWORD:
64
+ case MqttError.NOT_AUTHORIZED:
65
+ allowReconnection = false
66
+ }
67
+ })
68
+
69
+ mqttClient.on('close', () => {
70
+ if (allowReconnection) {
71
+ reconnect()
72
+ }
73
+ })
74
+
75
+ return new Promise(resolve => mqttClient!.once('connect', () => resolve()))
76
+ }
77
+
78
+ const reconnect = () => {
79
+ setTimeout(() => {
80
+ retryCount = retryCount + 1
81
+ mqttClient!.reconnect()
82
+ }, RETRY_BASE_TIMEOUT * Math.pow(2, retryCount > RETRY_COUNT_MAX ? RETRY_COUNT_MAX : retryCount))
40
83
  }
41
84
 
42
85
  return {
43
86
  connect,
44
87
  async disconnect(): Promise<void> {
88
+ allowReconnection = false
89
+
45
90
  if (this.connected) {
46
- return new Promise(resolve => mqttClient.end(true, undefined, () => resolve()))
91
+ return new Promise(resolve => mqttClient?.end(true, undefined, () => resolve()))
47
92
  }
48
93
  },
49
94
  get connected() {
50
95
  return !!mqttClient?.connected
51
96
  },
52
97
  on<T extends keyof Amity.MqttEvents>(event: T, handler: (payload: Amity.MqttEvents[T]) => void) {
53
- mqttClient.on(event, handler)
98
+ mqttClient?.on(event, handler)
54
99
  },
55
100
  once<T extends keyof Amity.MqttEvents>(event: T, handler: (payload: Amity.MqttEvents[T]) => void) {
56
- mqttClient.on(event, handler)
101
+ mqttClient?.once(event, handler)
57
102
  },
58
103
  off<T extends keyof Amity.MqttEvents>(event: T, handler?: (payload: Amity.MqttEvents[T]) => void) {
59
104
  if (handler !== undefined) {
60
- mqttClient.off(event, handler)
105
+ mqttClient?.off(event, handler)
61
106
  } else {
62
- mqttClient.removeAllListeners(event)
107
+ mqttClient?.removeAllListeners(event)
63
108
  }
64
109
  },
65
110
  removeAllListeners() {
66
- mqttClient.removeAllListeners()
111
+ mqttClient?.removeAllListeners()
67
112
  },
68
- subscribe(topic: string, handler?: (error: Error, granted: Object) => void) {
69
- mqttClient.subscribe(topic, { qos: 0 }, handler)
113
+ subscribe(topic: string, callback?: Amity.Listener<ASCError | void>): Amity.Unsubscriber {
114
+ const callbackWrapper = (error: Error, granted: ISubscriptionGrant[]) => {
115
+ if (error || granted[0].qos === QOS_FAILURE_CODE) {
116
+ const ascError = error
117
+ ? new ASCError(error.message, Amity.ClientError.UNKNOWN_ERROR, Amity.ErrorLevel.ERROR)
118
+ // TODO throw the actual error, once BE can tell us the actual error code
119
+ : new ASCUnknownError(Amity.ClientError.UNKNOWN_ERROR, Amity.ErrorLevel.ERROR)
120
+
121
+ console.error(`Failed to subscribe to topic ${topic}`, ascError)
122
+ callback?.(ascError)
123
+ } else {
124
+ console.log(`Subscribed to topic ${granted[0].topic}`)
125
+ callback?.()
126
+ }
127
+ }
128
+
129
+ if (mqttClient) {
130
+ mqttClient.subscribe(topic, { qos: 0 }, callbackWrapper)
131
+ } else {
132
+ callbackWrapper(new Error('No connection to broker'), []);
133
+ }
134
+
135
+ return () => mqttClient?.unsubscribe(topic)
70
136
  },
71
- unsubscribe(topic: string, handler?: (payload: Object) => void) {
72
- mqttClient.unsubscribe(topic, handler)
137
+ unsubscribe(topic: string) {
138
+ mqttClient?.unsubscribe(topic)
73
139
  }
74
140
  }
75
141
  }
@@ -17,6 +17,7 @@ export const createWebsocketTransport = (endpoint: string) => {
17
17
  transports: ['websocket'],
18
18
  })
19
19
 
20
+ // FIXME: disconnectClient removes this listener and client can get global ban event
20
21
  socket.on('disconnect', (reason: string) => {
21
22
  if (reason === 'io server disconnect')
22
23
  socket.connect()
@@ -1,8 +1,7 @@
1
1
  import { getActiveClient } from '~/client/api/activeClient'
2
2
 
3
- import { ingestInCache } from '~/core/cache'
4
- import { toRecord } from '~/core/model'
5
- import { decoratePayload, toPage, toToken } from '~/core/query'
3
+ import { toPage, toToken } from '~/core/query'
4
+ import { ingestInCache } from '~/cache/api/ingestInCache'
6
5
 
7
6
  /**
8
7
  * ```js
@@ -21,7 +20,7 @@ import { decoratePayload, toPage, toToken } from '~/core/query'
21
20
  export const queryGlobalFeed = async (query?: {
22
21
  dataTypes?: ('video' | 'image' | 'file' | 'liveStream')[]
23
22
  page?: Amity.Page
24
- }) => {
23
+ }): Promise<Amity.Paged<Amity.Post>> => {
25
24
  const client = getActiveClient()
26
25
  client.log('feed/queryGlobalFeed', query)
27
26
 
@@ -36,15 +35,13 @@ export const queryGlobalFeed = async (query?: {
36
35
  } }
37
36
  )
38
37
 
39
- const { paging, ...response } = data
38
+ const { paging, ...payload } = data
39
+ const { posts } = payload
40
40
 
41
- decoratePayload(response as unknown as Record<string, object[]>)
42
- ingestInCache(response as unknown as Record<string, object[]>)
43
-
44
- const { posts } = response
41
+ if (client.cache) ingestInCache(payload as Amity.PostPayload)
45
42
 
46
43
  const nextPage = toPage(paging.next)
47
44
  const prevPage = toPage(paging.previous)
48
45
 
49
- return { data: toRecord(posts), nextPage, prevPage }
46
+ return { data: posts, prevPage, nextPage }
50
47
  }
@@ -1,7 +1,6 @@
1
1
  import { getActiveClient } from '~/client/api'
2
2
 
3
- import { decorateModels } from '~/core/query'
4
- import { ingestInCache } from '~/core/cache'
3
+ import { ingestInCache } from '~/cache/api/ingestInCache'
5
4
 
6
5
  /**
7
6
  * ```js
@@ -20,7 +19,7 @@ import { ingestInCache } from '~/core/cache'
20
19
  export const createFile = async <T extends Amity.FileType = any>(
21
20
  formData: FormData,
22
21
  onProgress?: (percent: number) => void,
23
- ) => {
22
+ ): Promise<Amity.Cached<Amity.File>> => {
24
23
  const client = getActiveClient()
25
24
  client.log('file/createFile', formData)
26
25
 
@@ -42,10 +41,13 @@ export const createFile = async <T extends Amity.FileType = any>(
42
41
  // API-FIX: payload should be serialized properly
43
42
  // const { files } = data
44
43
 
45
- decorateModels(data)
46
- ingestInCache({ files: data })
44
+ const cachedAt = client.cache && Date.now()
45
+ if (client.cache) ingestInCache({ files: data }, { cachedAt })
47
46
 
48
- return data[0]
47
+ return {
48
+ data: data[0],
49
+ cachedAt,
50
+ }
49
51
  }
50
52
 
51
53
  // TODO: consider doing local creation with URL.createObjectURL()
@@ -1,6 +1,6 @@
1
1
  import { getActiveClient } from '~/client/api'
2
2
 
3
- import { dropFromCache } from '~/core/cache'
3
+ import { dropFromCache } from '~/cache/api'
4
4
 
5
5
  /**
6
6
  * ```js
@@ -18,17 +18,16 @@ import { dropFromCache } from '~/core/cache'
18
18
  */
19
19
  export const deleteFile = async (
20
20
  fileId: Amity.File<any>['fileId'],
21
- ) => {
21
+ ): Promise<{success: boolean}> => {
22
22
  const client = getActiveClient()
23
23
  client.log('file/deleteFile', fileId)
24
24
 
25
- // API-FIX: payload is different than swagger docs!!
26
- const { data } = await client.http.delete<{ fileId: string }>(
25
+ // API-FIX: payload is different than swagger docs!!
26
+ await client.http.delete<{ fileId: string }>(
27
27
  `/api/v3/files/${fileId}`,
28
28
  )
29
29
 
30
- dropFromCache('file', {fileId: data.fileId})
31
-
30
+ dropFromCache(['file', 'get', fileId], true)
32
31
 
33
32
  return { success: true }
34
33
  }
@@ -1,7 +1,7 @@
1
1
  import { getActiveClient } from '~/client/api'
2
2
 
3
- import { decorateModel } from '~/core/query'
4
- import { ingestInCache, pullFromCache } from '~/core/cache'
3
+ import { pullFromCache } from '~/cache/api'
4
+ import { ingestInCache } from '~/cache/api/ingestInCache'
5
5
 
6
6
  /**
7
7
  * ```js
@@ -19,7 +19,7 @@ import { ingestInCache, pullFromCache } from '~/core/cache'
19
19
  */
20
20
  export const getFile = async <T extends Amity.FileType = any>(
21
21
  fileId: Amity.File<any>['fileId'],
22
- ) => {
22
+ ): Promise<Amity.Cached<Amity.File>> => {
23
23
  const client = getActiveClient()
24
24
  client.log('file/getFile', fileId)
25
25
 
@@ -30,10 +30,13 @@ export const getFile = async <T extends Amity.FileType = any>(
30
30
  // API-FIX: backend bad serializer issue. it should be:
31
31
  // const { files } = data
32
32
 
33
- decorateModel(data)
34
- ingestInCache({ files: [data] })
33
+ const cachedAt = client.cache && Date.now()
34
+ if (client.cache) ingestInCache({files: [data]}, { cachedAt })
35
35
 
36
- return data
36
+ return {
37
+ data,
38
+ cachedAt,
39
+ }
37
40
  }
38
41
 
39
42
  /**
@@ -51,10 +54,19 @@ export const getFile = async <T extends Amity.FileType = any>(
51
54
  */
52
55
  getFile.locally = (
53
56
  fileId: Amity.File<any>['fileId'],
54
- ) => {
57
+ ): Amity.Cached<Amity.File> | undefined => {
55
58
  const client = getActiveClient()
56
59
  client.log('file/getFile.locally', fileId)
57
60
 
58
- const [file] = pullFromCache('file', fileId) ?? []
59
- return file
61
+ if (!client.cache) return
62
+
63
+ const cached = pullFromCache<Amity.File>(['file', 'get', fileId])
64
+
65
+ if (!cached)
66
+ return
67
+
68
+ return {
69
+ data: cached.data,
70
+ cachedAt: cached.cachedAt,
71
+ }
60
72
  }