polfan-server-js-client 0.1.992 → 0.1.994

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 (284) hide show
  1. package/build/index.js +825 -124
  2. package/build/index.js.map +1 -1
  3. package/build/types/AbstractChatClient.d.ts +5 -1
  4. package/build/types/state-tracker/MessagesManager.d.ts +8 -10
  5. package/build/types/state-tracker/RoomMessagesHistory.d.ts +17 -0
  6. package/build/types/state-tracker/RoomsManager.d.ts +4 -2
  7. package/build/types/state-tracker/TopicHistoryWindow.d.ts +58 -0
  8. package/build/types/types/src/index.d.ts +6 -2
  9. package/build/types/types/src/schemes/FollowedTopic.d.ts +0 -1
  10. package/build/types/types/src/schemes/Message.d.ts +8 -2
  11. package/{src/types/dist/schemes/commands/Ack.d.ts → build/types/types/src/schemes/commands/GetMessages.d.ts} +3 -2
  12. package/build/types/types/src/schemes/commands/GetTopics.d.ts +4 -0
  13. package/{src/types/dist/schemes/events/NewMessage.d.ts → build/types/types/src/schemes/events/Messages.d.ts} +3 -3
  14. package/build/types/types/src/schemes/events/Topics.d.ts +6 -0
  15. package/package.json +1 -1
  16. package/src/AbstractChatClient.ts +8 -0
  17. package/src/state-tracker/MessagesManager.ts +28 -60
  18. package/src/state-tracker/RoomMessagesHistory.ts +78 -0
  19. package/src/state-tracker/RoomsManager.ts +24 -2
  20. package/src/state-tracker/TopicHistoryWindow.ts +257 -0
  21. package/src/types/src/index.ts +10 -1
  22. package/src/types/src/schemes/FollowedTopic.ts +0 -1
  23. package/src/types/src/schemes/Message.ts +9 -2
  24. package/src/types/src/schemes/commands/GetMessages.ts +7 -0
  25. package/src/types/src/schemes/commands/GetTopics.ts +4 -0
  26. package/src/types/src/schemes/events/Messages.ts +7 -0
  27. package/src/types/src/schemes/events/Topics.ts +7 -0
  28. package/tests/history-window.test.ts +129 -0
  29. package/build/types/types/dist/index.d.ts +0 -1
  30. package/build/types/types/dist/schemes/ChatLocation.d.ts +0 -1
  31. package/build/types/types/dist/schemes/Envelope.d.ts +0 -1
  32. package/build/types/types/dist/schemes/FollowedTopic.d.ts +0 -1
  33. package/build/types/types/dist/schemes/Message.d.ts +0 -1
  34. package/build/types/types/dist/schemes/PermissionOverwritesValue.d.ts +0 -1
  35. package/build/types/types/dist/schemes/Role.d.ts +0 -1
  36. package/build/types/types/dist/schemes/Room.d.ts +0 -1
  37. package/build/types/types/dist/schemes/RoomMember.d.ts +0 -1
  38. package/build/types/types/dist/schemes/RoomSummary.d.ts +0 -1
  39. package/build/types/types/dist/schemes/Space.d.ts +0 -1
  40. package/build/types/types/dist/schemes/SpaceMember.d.ts +0 -1
  41. package/build/types/types/dist/schemes/Topic.d.ts +0 -1
  42. package/build/types/types/dist/schemes/User.d.ts +0 -1
  43. package/build/types/types/dist/schemes/UserState.d.ts +0 -1
  44. package/build/types/types/dist/schemes/commands/Ack.d.ts +0 -1
  45. package/build/types/types/dist/schemes/commands/AssignRole.d.ts +0 -1
  46. package/build/types/types/dist/schemes/commands/CreateMessage.d.ts +0 -1
  47. package/build/types/types/dist/schemes/commands/CreateOwner.d.ts +0 -1
  48. package/build/types/types/dist/schemes/commands/CreateRole.d.ts +0 -1
  49. package/build/types/types/dist/schemes/commands/CreateRoom.d.ts +0 -1
  50. package/build/types/types/dist/schemes/commands/CreateSpace.d.ts +0 -1
  51. package/build/types/types/dist/schemes/commands/CreateTopic.d.ts +0 -1
  52. package/build/types/types/dist/schemes/commands/DeassignRole.d.ts +0 -1
  53. package/build/types/types/dist/schemes/commands/DeleteOwner.d.ts +0 -1
  54. package/build/types/types/dist/schemes/commands/DeleteRole.d.ts +0 -1
  55. package/build/types/types/dist/schemes/commands/DeleteRoom.d.ts +0 -1
  56. package/build/types/types/dist/schemes/commands/DeleteSpace.d.ts +0 -1
  57. package/build/types/types/dist/schemes/commands/DeleteTopic.d.ts +0 -1
  58. package/build/types/types/dist/schemes/commands/FollowTopic.d.ts +0 -1
  59. package/build/types/types/dist/schemes/commands/GetComputedPermissions.d.ts +0 -1
  60. package/build/types/types/dist/schemes/commands/GetFollowedTopics.d.ts +0 -1
  61. package/build/types/types/dist/schemes/commands/GetOwners.d.ts +0 -1
  62. package/build/types/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +0 -1
  63. package/build/types/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +0 -1
  64. package/build/types/types/dist/schemes/commands/GetRoomMembers.d.ts +0 -1
  65. package/build/types/types/dist/schemes/commands/GetSession.d.ts +0 -1
  66. package/build/types/types/dist/schemes/commands/GetSpaceMembers.d.ts +0 -1
  67. package/build/types/types/dist/schemes/commands/GetSpaceRooms.d.ts +0 -1
  68. package/build/types/types/dist/schemes/commands/JoinRoom.d.ts +0 -1
  69. package/build/types/types/dist/schemes/commands/JoinSpace.d.ts +0 -1
  70. package/build/types/types/dist/schemes/commands/LeaveRoom.d.ts +0 -1
  71. package/build/types/types/dist/schemes/commands/LeaveSpace.d.ts +0 -1
  72. package/build/types/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +0 -1
  73. package/build/types/types/dist/schemes/commands/UnfollowTopic.d.ts +0 -1
  74. package/build/types/types/dist/schemes/commands/UpdateRole.d.ts +0 -1
  75. package/build/types/types/dist/schemes/commands/UpdateRoom.d.ts +0 -1
  76. package/build/types/types/dist/schemes/commands/UpdateSpace.d.ts +0 -1
  77. package/build/types/types/dist/schemes/events/Bye.d.ts +0 -1
  78. package/build/types/types/dist/schemes/events/ComputedPermissions.d.ts +0 -1
  79. package/build/types/types/dist/schemes/events/Error.d.ts +0 -1
  80. package/build/types/types/dist/schemes/events/FollowedTopicUpdated.d.ts +0 -1
  81. package/build/types/types/dist/schemes/events/FollowedTopics.d.ts +0 -1
  82. package/build/types/types/dist/schemes/events/NewMessage.d.ts +0 -1
  83. package/build/types/types/dist/schemes/events/NewRole.d.ts +0 -1
  84. package/build/types/types/dist/schemes/events/NewRoom.d.ts +0 -1
  85. package/build/types/types/dist/schemes/events/NewTopic.d.ts +0 -1
  86. package/build/types/types/dist/schemes/events/Ok.d.ts +0 -1
  87. package/build/types/types/dist/schemes/events/Owners.d.ts +0 -1
  88. package/build/types/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +0 -1
  89. package/build/types/types/dist/schemes/events/PermissionOverwrites.d.ts +0 -1
  90. package/build/types/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +0 -1
  91. package/build/types/types/dist/schemes/events/RoleDeleted.d.ts +0 -1
  92. package/build/types/types/dist/schemes/events/RoleUpdated.d.ts +0 -1
  93. package/build/types/types/dist/schemes/events/RoomDeleted.d.ts +0 -1
  94. package/build/types/types/dist/schemes/events/RoomJoined.d.ts +0 -1
  95. package/build/types/types/dist/schemes/events/RoomLeft.d.ts +0 -1
  96. package/build/types/types/dist/schemes/events/RoomMemberJoined.d.ts +0 -1
  97. package/build/types/types/dist/schemes/events/RoomMemberLeft.d.ts +0 -1
  98. package/build/types/types/dist/schemes/events/RoomMemberUpdated.d.ts +0 -1
  99. package/build/types/types/dist/schemes/events/RoomMembers.d.ts +0 -1
  100. package/build/types/types/dist/schemes/events/RoomUpdated.d.ts +0 -1
  101. package/build/types/types/dist/schemes/events/Session.d.ts +0 -1
  102. package/build/types/types/dist/schemes/events/SpaceDeleted.d.ts +0 -1
  103. package/build/types/types/dist/schemes/events/SpaceJoined.d.ts +0 -1
  104. package/build/types/types/dist/schemes/events/SpaceLeft.d.ts +0 -1
  105. package/build/types/types/dist/schemes/events/SpaceMemberJoined.d.ts +0 -1
  106. package/build/types/types/dist/schemes/events/SpaceMemberLeft.d.ts +0 -1
  107. package/build/types/types/dist/schemes/events/SpaceMemberUpdated.d.ts +0 -1
  108. package/build/types/types/dist/schemes/events/SpaceMembers.d.ts +0 -1
  109. package/build/types/types/dist/schemes/events/SpaceRooms.d.ts +0 -1
  110. package/build/types/types/dist/schemes/events/SpaceUpdated.d.ts +0 -1
  111. package/build/types/types/dist/schemes/events/TopicDeleted.d.ts +0 -1
  112. package/build/types/types/dist/schemes/events/TopicFollowed.d.ts +0 -1
  113. package/build/types/types/dist/schemes/events/TopicUnfollowed.d.ts +0 -1
  114. package/build/types/types/dist/schemes/events/UserUpdated.d.ts +0 -1
  115. package/src/types/dist/index.d.ts +0 -88
  116. package/src/types/dist/index.js +0 -2
  117. package/src/types/dist/schemes/ChatLocation.d.ts +0 -5
  118. package/src/types/dist/schemes/ChatLocation.js +0 -2
  119. package/src/types/dist/schemes/Envelope.d.ts +0 -5
  120. package/src/types/dist/schemes/Envelope.js +0 -2
  121. package/src/types/dist/schemes/FollowedTopic.d.ts +0 -7
  122. package/src/types/dist/schemes/FollowedTopic.js +0 -2
  123. package/src/types/dist/schemes/Message.d.ts +0 -8
  124. package/src/types/dist/schemes/Message.js +0 -2
  125. package/src/types/dist/schemes/PermissionOverwritesValue.d.ts +0 -4
  126. package/src/types/dist/schemes/PermissionOverwritesValue.js +0 -2
  127. package/src/types/dist/schemes/Role.d.ts +0 -6
  128. package/src/types/dist/schemes/Role.js +0 -2
  129. package/src/types/dist/schemes/Room.d.ts +0 -10
  130. package/src/types/dist/schemes/Room.js +0 -2
  131. package/src/types/dist/schemes/RoomMember.d.ts +0 -7
  132. package/src/types/dist/schemes/RoomMember.js +0 -2
  133. package/src/types/dist/schemes/RoomSummary.d.ts +0 -5
  134. package/src/types/dist/schemes/RoomSummary.js +0 -2
  135. package/src/types/dist/schemes/Space.d.ts +0 -6
  136. package/src/types/dist/schemes/Space.js +0 -2
  137. package/src/types/dist/schemes/SpaceMember.d.ts +0 -5
  138. package/src/types/dist/schemes/SpaceMember.js +0 -2
  139. package/src/types/dist/schemes/Topic.d.ts +0 -9
  140. package/src/types/dist/schemes/Topic.js +0 -2
  141. package/src/types/dist/schemes/User.d.ts +0 -8
  142. package/src/types/dist/schemes/User.js +0 -2
  143. package/src/types/dist/schemes/UserState.d.ts +0 -6
  144. package/src/types/dist/schemes/UserState.js +0 -2
  145. package/src/types/dist/schemes/commands/Ack.js +0 -2
  146. package/src/types/dist/schemes/commands/AssignRole.d.ts +0 -6
  147. package/src/types/dist/schemes/commands/AssignRole.js +0 -2
  148. package/src/types/dist/schemes/commands/CreateMessage.d.ts +0 -5
  149. package/src/types/dist/schemes/commands/CreateMessage.js +0 -2
  150. package/src/types/dist/schemes/commands/CreateOwner.d.ts +0 -5
  151. package/src/types/dist/schemes/commands/CreateOwner.js +0 -2
  152. package/src/types/dist/schemes/commands/CreateRole.d.ts +0 -5
  153. package/src/types/dist/schemes/commands/CreateRole.js +0 -2
  154. package/src/types/dist/schemes/commands/CreateRoom.d.ts +0 -7
  155. package/src/types/dist/schemes/commands/CreateRoom.js +0 -2
  156. package/src/types/dist/schemes/commands/CreateSpace.d.ts +0 -3
  157. package/src/types/dist/schemes/commands/CreateSpace.js +0 -2
  158. package/src/types/dist/schemes/commands/CreateTopic.d.ts +0 -12
  159. package/src/types/dist/schemes/commands/CreateTopic.js +0 -2
  160. package/src/types/dist/schemes/commands/DeassignRole.d.ts +0 -6
  161. package/src/types/dist/schemes/commands/DeassignRole.js +0 -2
  162. package/src/types/dist/schemes/commands/DeleteOwner.d.ts +0 -5
  163. package/src/types/dist/schemes/commands/DeleteOwner.js +0 -2
  164. package/src/types/dist/schemes/commands/DeleteRole.d.ts +0 -4
  165. package/src/types/dist/schemes/commands/DeleteRole.js +0 -2
  166. package/src/types/dist/schemes/commands/DeleteRoom.d.ts +0 -3
  167. package/src/types/dist/schemes/commands/DeleteRoom.js +0 -2
  168. package/src/types/dist/schemes/commands/DeleteSpace.d.ts +0 -3
  169. package/src/types/dist/schemes/commands/DeleteSpace.js +0 -2
  170. package/src/types/dist/schemes/commands/DeleteTopic.d.ts +0 -4
  171. package/src/types/dist/schemes/commands/DeleteTopic.js +0 -2
  172. package/src/types/dist/schemes/commands/FollowTopic.d.ts +0 -4
  173. package/src/types/dist/schemes/commands/FollowTopic.js +0 -2
  174. package/src/types/dist/schemes/commands/GetComputedPermissions.d.ts +0 -4
  175. package/src/types/dist/schemes/commands/GetComputedPermissions.js +0 -2
  176. package/src/types/dist/schemes/commands/GetFollowedTopics.d.ts +0 -4
  177. package/src/types/dist/schemes/commands/GetFollowedTopics.js +0 -2
  178. package/src/types/dist/schemes/commands/GetOwners.d.ts +0 -4
  179. package/src/types/dist/schemes/commands/GetOwners.js +0 -2
  180. package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +0 -4
  181. package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.js +0 -2
  182. package/src/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +0 -6
  183. package/src/types/dist/schemes/commands/GetPermissionOverwrites.js +0 -2
  184. package/src/types/dist/schemes/commands/GetRoomMembers.d.ts +0 -3
  185. package/src/types/dist/schemes/commands/GetRoomMembers.js +0 -2
  186. package/src/types/dist/schemes/commands/GetSession.d.ts +0 -2
  187. package/src/types/dist/schemes/commands/GetSession.js +0 -2
  188. package/src/types/dist/schemes/commands/GetSpaceMembers.d.ts +0 -3
  189. package/src/types/dist/schemes/commands/GetSpaceMembers.js +0 -2
  190. package/src/types/dist/schemes/commands/GetSpaceRooms.d.ts +0 -3
  191. package/src/types/dist/schemes/commands/GetSpaceRooms.js +0 -2
  192. package/src/types/dist/schemes/commands/JoinRoom.d.ts +0 -3
  193. package/src/types/dist/schemes/commands/JoinRoom.js +0 -2
  194. package/src/types/dist/schemes/commands/JoinSpace.d.ts +0 -3
  195. package/src/types/dist/schemes/commands/JoinSpace.js +0 -2
  196. package/src/types/dist/schemes/commands/LeaveRoom.d.ts +0 -3
  197. package/src/types/dist/schemes/commands/LeaveRoom.js +0 -2
  198. package/src/types/dist/schemes/commands/LeaveSpace.d.ts +0 -3
  199. package/src/types/dist/schemes/commands/LeaveSpace.js +0 -2
  200. package/src/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +0 -8
  201. package/src/types/dist/schemes/commands/SetPermissionOverwrites.js +0 -2
  202. package/src/types/dist/schemes/commands/UnfollowTopic.d.ts +0 -4
  203. package/src/types/dist/schemes/commands/UnfollowTopic.js +0 -2
  204. package/src/types/dist/schemes/commands/UpdateRole.d.ts +0 -7
  205. package/src/types/dist/schemes/commands/UpdateRole.js +0 -2
  206. package/src/types/dist/schemes/commands/UpdateRoom.d.ts +0 -5
  207. package/src/types/dist/schemes/commands/UpdateRoom.js +0 -2
  208. package/src/types/dist/schemes/commands/UpdateSpace.d.ts +0 -4
  209. package/src/types/dist/schemes/commands/UpdateSpace.js +0 -2
  210. package/src/types/dist/schemes/events/Bye.d.ts +0 -3
  211. package/src/types/dist/schemes/events/Bye.js +0 -2
  212. package/src/types/dist/schemes/events/ComputedPermissions.d.ts +0 -5
  213. package/src/types/dist/schemes/events/ComputedPermissions.js +0 -2
  214. package/src/types/dist/schemes/events/Error.d.ts +0 -4
  215. package/src/types/dist/schemes/events/Error.js +0 -2
  216. package/src/types/dist/schemes/events/FollowedTopicUpdated.d.ts +0 -4
  217. package/src/types/dist/schemes/events/FollowedTopicUpdated.js +0 -2
  218. package/src/types/dist/schemes/events/FollowedTopics.d.ts +0 -6
  219. package/src/types/dist/schemes/events/FollowedTopics.js +0 -2
  220. package/src/types/dist/schemes/events/NewMessage.js +0 -2
  221. package/src/types/dist/schemes/events/NewRole.d.ts +0 -5
  222. package/src/types/dist/schemes/events/NewRole.js +0 -2
  223. package/src/types/dist/schemes/events/NewRoom.d.ts +0 -5
  224. package/src/types/dist/schemes/events/NewRoom.js +0 -2
  225. package/src/types/dist/schemes/events/NewTopic.d.ts +0 -5
  226. package/src/types/dist/schemes/events/NewTopic.js +0 -2
  227. package/src/types/dist/schemes/events/Ok.d.ts +0 -2
  228. package/src/types/dist/schemes/events/Ok.js +0 -2
  229. package/src/types/dist/schemes/events/Owners.d.ts +0 -8
  230. package/src/types/dist/schemes/events/Owners.js +0 -2
  231. package/src/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +0 -10
  232. package/src/types/dist/schemes/events/PermissionOverwriteTargets.js +0 -2
  233. package/src/types/dist/schemes/events/PermissionOverwrites.d.ts +0 -8
  234. package/src/types/dist/schemes/events/PermissionOverwrites.js +0 -2
  235. package/src/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +0 -8
  236. package/src/types/dist/schemes/events/PermissionOverwritesUpdated.js +0 -2
  237. package/src/types/dist/schemes/events/RoleDeleted.d.ts +0 -4
  238. package/src/types/dist/schemes/events/RoleDeleted.js +0 -2
  239. package/src/types/dist/schemes/events/RoleUpdated.d.ts +0 -5
  240. package/src/types/dist/schemes/events/RoleUpdated.js +0 -2
  241. package/src/types/dist/schemes/events/RoomDeleted.d.ts +0 -3
  242. package/src/types/dist/schemes/events/RoomDeleted.js +0 -2
  243. package/src/types/dist/schemes/events/RoomJoined.d.ts +0 -4
  244. package/src/types/dist/schemes/events/RoomJoined.js +0 -2
  245. package/src/types/dist/schemes/events/RoomLeft.d.ts +0 -3
  246. package/src/types/dist/schemes/events/RoomLeft.js +0 -2
  247. package/src/types/dist/schemes/events/RoomMemberJoined.d.ts +0 -5
  248. package/src/types/dist/schemes/events/RoomMemberJoined.js +0 -2
  249. package/src/types/dist/schemes/events/RoomMemberLeft.d.ts +0 -4
  250. package/src/types/dist/schemes/events/RoomMemberLeft.js +0 -2
  251. package/src/types/dist/schemes/events/RoomMemberUpdated.d.ts +0 -6
  252. package/src/types/dist/schemes/events/RoomMemberUpdated.js +0 -2
  253. package/src/types/dist/schemes/events/RoomMembers.d.ts +0 -5
  254. package/src/types/dist/schemes/events/RoomMembers.js +0 -2
  255. package/src/types/dist/schemes/events/RoomUpdated.d.ts +0 -4
  256. package/src/types/dist/schemes/events/RoomUpdated.js +0 -2
  257. package/src/types/dist/schemes/events/Session.d.ts +0 -7
  258. package/src/types/dist/schemes/events/Session.js +0 -2
  259. package/src/types/dist/schemes/events/SpaceDeleted.d.ts +0 -3
  260. package/src/types/dist/schemes/events/SpaceDeleted.js +0 -2
  261. package/src/types/dist/schemes/events/SpaceJoined.d.ts +0 -4
  262. package/src/types/dist/schemes/events/SpaceJoined.js +0 -2
  263. package/src/types/dist/schemes/events/SpaceLeft.d.ts +0 -3
  264. package/src/types/dist/schemes/events/SpaceLeft.js +0 -2
  265. package/src/types/dist/schemes/events/SpaceMemberJoined.d.ts +0 -5
  266. package/src/types/dist/schemes/events/SpaceMemberJoined.js +0 -2
  267. package/src/types/dist/schemes/events/SpaceMemberLeft.d.ts +0 -4
  268. package/src/types/dist/schemes/events/SpaceMemberLeft.js +0 -2
  269. package/src/types/dist/schemes/events/SpaceMemberUpdated.d.ts +0 -6
  270. package/src/types/dist/schemes/events/SpaceMemberUpdated.js +0 -2
  271. package/src/types/dist/schemes/events/SpaceMembers.d.ts +0 -5
  272. package/src/types/dist/schemes/events/SpaceMembers.js +0 -2
  273. package/src/types/dist/schemes/events/SpaceRooms.d.ts +0 -5
  274. package/src/types/dist/schemes/events/SpaceRooms.js +0 -2
  275. package/src/types/dist/schemes/events/SpaceUpdated.d.ts +0 -4
  276. package/src/types/dist/schemes/events/SpaceUpdated.js +0 -2
  277. package/src/types/dist/schemes/events/TopicDeleted.d.ts +0 -4
  278. package/src/types/dist/schemes/events/TopicDeleted.js +0 -2
  279. package/src/types/dist/schemes/events/TopicFollowed.d.ts +0 -4
  280. package/src/types/dist/schemes/events/TopicFollowed.js +0 -2
  281. package/src/types/dist/schemes/events/TopicUnfollowed.d.ts +0 -4
  282. package/src/types/dist/schemes/events/TopicUnfollowed.js +0 -2
  283. package/src/types/dist/schemes/events/UserUpdated.d.ts +0 -4
  284. package/src/types/dist/schemes/events/UserUpdated.js +0 -2
@@ -1,4 +1,4 @@
1
- import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics } from "./types/src/index";
1
+ import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics } from "./types/src/index";
2
2
  import { EventTarget } from "./EventTarget";
3
3
  type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
4
4
  export declare abstract class AbstractChatClient extends EventTarget {
@@ -58,6 +58,8 @@ export type EventsMap = {
58
58
  TopicUnfollowed: TopicUnfollowed;
59
59
  FollowedTopics: FollowedTopics;
60
60
  FollowedTopicUpdated: FollowedTopicUpdated;
61
+ Messages: Messages;
62
+ Topics: Topics;
61
63
  };
62
64
  /**
63
65
  * Map of commands and their corresponding events.
@@ -96,5 +98,7 @@ export type CommandsMap = {
96
98
  FollowTopic: [FollowTopic, EventsMap['TopicFollowed']];
97
99
  UnfollowTopic: [UnfollowTopic, EventsMap['TopicUnfollowed']];
98
100
  GetFollowedTopics: [GetFollowedTopics, EventsMap['FollowedTopics']];
101
+ GetMessages: [GetMessages, EventsMap['Messages']];
102
+ GetTopics: [GetTopics, EventsMap['Topics']];
99
103
  };
100
104
  export {};
@@ -1,17 +1,18 @@
1
1
  import { ChatStateTracker } from "./ChatStateTracker";
2
- import { ChatLocation, Message, FollowedTopic } from "../types/src";
2
+ import { FollowedTopic } from "../types/src";
3
3
  import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
4
- export declare const getCombinedId: (location: ChatLocation) => string;
4
+ import { RoomMessagesHistory } from "./RoomMessagesHistory";
5
5
  export declare class MessagesManager {
6
6
  private tracker;
7
- private readonly list;
7
+ private readonly roomHistories;
8
8
  private readonly followedTopics;
9
9
  private readonly followedTopicsPromises;
10
+ private readonly deferredSession;
10
11
  constructor(tracker: ChatStateTracker);
11
12
  /**
12
- * Get collection of the messages written in topic.
13
+ * Get history manager for given room ID.
13
14
  */
14
- get(location: ChatLocation): Promise<ObservableIndexedObjectCollection<Message> | undefined>;
15
+ getRoomHistory(roomId: string): Promise<RoomMessagesHistory | undefined>;
15
16
  /**
16
17
  * Cache followed topics for all joined rooms in a space and fetch them in bulk if necessary.
17
18
  * Then you can get them using getRoomFollowedTopics().
@@ -31,16 +32,13 @@ export declare class MessagesManager {
31
32
  * Calculate missed messages from any topic in given room.
32
33
  * @return Undefined if you are not in room, stats object otherwise.
33
34
  */
34
- calculateRoomMissedMessages(roomId: string): Promise<{
35
- missed: number;
36
- missedMore: boolean;
37
- } | undefined>;
35
+ calculateRoomMissedMessages(roomId: string): Promise<number | undefined>;
38
36
  /**
39
37
  * For internal use. If you want to delete the message, execute a proper command on client object.
40
38
  * @internal
41
39
  */
42
40
  _deleteByTopicIds(roomId: string, ...topicIds: string[]): void;
43
- private createHistoryForNewTopic;
41
+ private createHistoryForNewRoom;
44
42
  private handleNewMessage;
45
43
  private handleFollowedTopicUpdated;
46
44
  private handleTopicFollowed;
@@ -0,0 +1,17 @@
1
+ import { ChatStateTracker } from "./ChatStateTracker";
2
+ import { Room } from "../types/src";
3
+ import { TopicHistoryWindow } from "./TopicHistoryWindow";
4
+ export declare class RoomMessagesHistory {
5
+ private room;
6
+ private tracker;
7
+ private historyWindows;
8
+ constructor(room: Room, tracker: ChatStateTracker);
9
+ /**
10
+ * Returns a history window object for the given topic ID, allowing you to view message history.
11
+ */
12
+ getMessagesWindow(topicId: string): Promise<TopicHistoryWindow | undefined>;
13
+ private handleRoomUpdated;
14
+ private handleNewTopic;
15
+ private handleTopicDeleted;
16
+ private createHistoryWindowForTopic;
17
+ }
@@ -10,6 +10,7 @@ export declare class RoomsManager {
10
10
  private readonly members;
11
11
  private readonly deferredSession;
12
12
  private readonly membersPromises;
13
+ private readonly topicsPromises;
13
14
  constructor(tracker: ChatStateTracker);
14
15
  /**
15
16
  * Get collection of room members.
@@ -24,9 +25,10 @@ export declare class RoomsManager {
24
25
  */
25
26
  get(): Promise<ObservableIndexedObjectCollection<Room>>;
26
27
  /**
27
- * Get collection of room topics.
28
+ * Get a collection of locally cached Topic objects for given room.
29
+ * You can pass topic ids as second argument, to try to fetch them from the server.
28
30
  */
29
- getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined>;
31
+ getTopics(roomId: string, tryToFetchTopicIds?: string[]): Promise<ObservableIndexedObjectCollection<Topic> | undefined>;
30
32
  private deleteRoom;
31
33
  private deleteRoomsBySpaceId;
32
34
  private handleSpaceMemberUpdated;
@@ -0,0 +1,58 @@
1
+ import { Message, MessageReference } from "../types/src";
2
+ import { ChatStateTracker } from "./ChatStateTracker";
3
+ import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
4
+ export declare enum WindowState {
5
+ UNINITIALIZED = 0,
6
+ LATEST = 1,
7
+ PAST = 2
8
+ }
9
+ export declare abstract class TraversableRemoteCollection<T> extends ObservableIndexedObjectCollection<T> {
10
+ /**
11
+ * Current mode od collection window. To change mode, call one of available fetch methods.
12
+ */
13
+ get state(): WindowState;
14
+ /**
15
+ * Maximum numer of items stored in window.
16
+ * Null for unlimited.
17
+ */
18
+ limit: number | null;
19
+ private currentState;
20
+ private fetchingState;
21
+ resetToLatest(): Promise<void>;
22
+ fetchPrevious(): Promise<void>;
23
+ fetchNext(): Promise<void>;
24
+ protected abstract fetchLatestItems(): Promise<T[]>;
25
+ protected abstract fetchItemsBefore(): Promise<T[] | null>;
26
+ protected abstract fetchItemsAfter(): Promise<T[] | null>;
27
+ protected abstract isLatestItemLoaded(): Promise<boolean>;
28
+ protected refreshMode(): Promise<void>;
29
+ private throwIfFetchingInProgress;
30
+ private addItems;
31
+ /**
32
+ * Return array with messages of count that matching limit.
33
+ */
34
+ private trimItemsArrayToLimit;
35
+ }
36
+ export declare class TopicHistoryWindow extends TraversableRemoteCollection<Message> {
37
+ private roomId;
38
+ private topicId;
39
+ private tracker;
40
+ /**
41
+ * Reexported available window modes enum.
42
+ */
43
+ readonly WindowState: typeof WindowState;
44
+ constructor(roomId: string, topicId: string, tracker: ChatStateTracker);
45
+ /**
46
+ * For internal use.
47
+ * @internal
48
+ */
49
+ _setTopicReference(ref: MessageReference): void;
50
+ private handleNewMessage;
51
+ private handleSession;
52
+ protected fetchItemsAfter(): Promise<Message[] | null>;
53
+ protected fetchItemsBefore(): Promise<Message[] | null>;
54
+ protected fetchLatestItems(): Promise<Message[]>;
55
+ private getTopic;
56
+ private getLatestMessageId;
57
+ protected isLatestItemLoaded(): Promise<boolean>;
58
+ }
@@ -1,5 +1,5 @@
1
1
  import { Envelope } from "./schemes/Envelope";
2
- import { Message } from "./schemes/Message";
2
+ import { Message, MessageType } from "./schemes/Message";
3
3
  import { PermissionOverwritesValue } from "./schemes/PermissionOverwritesValue";
4
4
  import { Role } from "./schemes/Role";
5
5
  import { Room } from "./schemes/Room";
@@ -85,4 +85,8 @@ import { TopicUnfollowed } from "./schemes/events/TopicUnfollowed";
85
85
  import { TopicFollowed } from "./schemes/events/TopicFollowed";
86
86
  import { GetFollowedTopics } from "./schemes/commands/GetFollowedTopics";
87
87
  import { FollowedTopicUpdated } from "./schemes/events/FollowedTopicUpdated";
88
- export { Envelope, Message, Role, Room, RoomType, RoomMember, RoomSummary, Space, SpaceMember, Topic, FollowedTopic, User, UserState, PermissionOverwritesValue, ChatLocation, MessageReference, Bye, Error, NewMessage, NewRole, NewRoom, NewTopic, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowedTopicUpdated, ComputedPermissions, PermissionOverwrites, PermissionOverwritesUpdated, RoleDeleted, RoleUpdated, RoomDeleted, RoomUpdated, RoomJoined, RoomLeft, RoomMemberJoined, RoomMemberLeft, RoomMembers, RoomMemberUpdated, UserUpdated, Session, SpaceDeleted, SpaceUpdated, SpaceJoined, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, TopicDeleted, PermissionOverwriteTargets, Owners, Ok, AssignRole, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, GetFollowedTopics, DeassignRole, DeleteRole, DeleteRoom, DeleteSpace, DeleteTopic, SetPermissionOverwrites, GetPermissionOverwrites, GetComputedPermissions, GetRoomMembers, GetSession, GetSpaceMembers, GetSpaceRooms, JoinRoom, JoinSpace, LeaveRoom, LeaveSpace, UpdateRole, UpdateSpace, UpdateRoom, GetPermissionOverwriteTargets, CreateOwner, DeleteOwner, GetOwners, };
88
+ import { GetMessages } from "./schemes/commands/GetMessages";
89
+ import { Messages } from "./schemes/events/Messages";
90
+ import { Topics } from "./schemes/events/Topics";
91
+ import { GetTopics } from "./schemes/commands/GetTopics";
92
+ export { Envelope, Message, MessageType, Role, Room, RoomType, RoomMember, RoomSummary, Space, SpaceMember, Topic, FollowedTopic, User, UserState, PermissionOverwritesValue, ChatLocation, MessageReference, Bye, Error, Messages, NewMessage, NewRole, NewRoom, NewTopic, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowedTopicUpdated, ComputedPermissions, PermissionOverwrites, PermissionOverwritesUpdated, RoleDeleted, RoleUpdated, RoomDeleted, RoomUpdated, RoomJoined, RoomLeft, RoomMemberJoined, RoomMemberLeft, RoomMembers, RoomMemberUpdated, UserUpdated, Session, SpaceDeleted, SpaceUpdated, SpaceJoined, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, TopicDeleted, PermissionOverwriteTargets, Owners, Ok, AssignRole, GetMessages, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, GetFollowedTopics, DeassignRole, DeleteRole, DeleteRoom, DeleteSpace, DeleteTopic, SetPermissionOverwrites, GetPermissionOverwrites, GetComputedPermissions, GetRoomMembers, GetSession, GetSpaceMembers, GetSpaceRooms, JoinRoom, JoinSpace, LeaveRoom, LeaveSpace, UpdateRole, UpdateSpace, UpdateRoom, GetPermissionOverwriteTargets, CreateOwner, DeleteOwner, GetOwners, Topics, GetTopics, };
@@ -3,5 +3,4 @@ export interface FollowedTopic {
3
3
  location: ChatLocation;
4
4
  lastAckMessageId: string | null;
5
5
  missed: number | null;
6
- missedMoreThan: number | null;
7
6
  }
@@ -1,8 +1,14 @@
1
1
  import { User } from "./User";
2
+ export declare enum MessageType {
3
+ Text = "Text",
4
+ Join = "Join",
5
+ Leave = "Leave"
6
+ }
2
7
  export interface Message {
3
8
  id: string;
4
9
  createdAt: string;
5
- author: User;
6
- content: string;
10
+ type: MessageType;
11
+ user: User;
12
+ content?: string;
7
13
  topicRef: string | null;
8
14
  }
@@ -1,5 +1,6 @@
1
1
  import { ChatLocation } from "../ChatLocation";
2
- export interface Ack {
2
+ export interface GetMessages {
3
3
  location: ChatLocation;
4
- messageId?: string;
4
+ before?: string;
5
+ after?: string;
5
6
  }
@@ -0,0 +1,4 @@
1
+ export interface GetTopics {
2
+ roomId: string;
3
+ topicIds: string[];
4
+ }
@@ -1,6 +1,6 @@
1
- import { Message } from "../Message";
2
1
  import { ChatLocation } from "../ChatLocation";
3
- export interface NewMessage {
2
+ import { Message } from "../Message";
3
+ export interface Messages {
4
4
  location: ChatLocation;
5
- message: Message;
5
+ messages: Message[];
6
6
  }
@@ -0,0 +1,6 @@
1
+ import { ChatLocation } from "../ChatLocation";
2
+ import { Topic } from "../Topic";
3
+ export interface Topics {
4
+ location: ChatLocation;
5
+ topics: Topic[];
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.1.992",
3
+ "version": "0.1.994",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -69,6 +69,10 @@ import {
69
69
  FollowTopic,
70
70
  UnfollowTopic,
71
71
  GetFollowedTopics,
72
+ Messages,
73
+ GetMessages,
74
+ Topics,
75
+ GetTopics,
72
76
  } from "./types/src/index";
73
77
  import {EventTarget} from "./EventTarget";
74
78
 
@@ -173,6 +177,8 @@ export type EventsMap = {
173
177
  TopicUnfollowed: TopicUnfollowed,
174
178
  FollowedTopics: FollowedTopics,
175
179
  FollowedTopicUpdated: FollowedTopicUpdated,
180
+ Messages: Messages,
181
+ Topics: Topics,
176
182
  };
177
183
 
178
184
  /**
@@ -216,4 +222,6 @@ export type CommandsMap = {
216
222
  FollowTopic: [FollowTopic, EventsMap['TopicFollowed']],
217
223
  UnfollowTopic: [UnfollowTopic, EventsMap['TopicUnfollowed']],
218
224
  GetFollowedTopics: [GetFollowedTopics, EventsMap['FollowedTopics']],
225
+ GetMessages: [GetMessages, EventsMap['Messages']],
226
+ GetTopics: [GetTopics, EventsMap['Topics']],
219
227
  }
@@ -1,30 +1,27 @@
1
1
  import {ChatStateTracker} from "./ChatStateTracker";
2
2
  import {
3
3
  ChatLocation,
4
- Message,
5
4
  NewMessage,
6
- Topic,
7
5
  FollowedTopic,
8
6
  TopicFollowed,
9
7
  TopicUnfollowed,
10
8
  RoomDeleted,
11
9
  RoomLeft,
12
10
  TopicDeleted,
13
- FollowedTopicUpdated, RoomJoined, NewTopic, Session,
11
+ FollowedTopicUpdated, RoomJoined, NewTopic, Session, Room,
14
12
  } from "../types/src";
15
13
  import {
16
14
  IndexedCollection,
17
15
  ObservableIndexedObjectCollection
18
16
  } from "../IndexedObjectCollection";
19
- import {PromiseRegistry} from "./AsyncUtils";
20
-
21
- export const getCombinedId = (location: ChatLocation) => (location.roomId ?? '') + (location.topicId ?? '');
17
+ import {DeferredTask, PromiseRegistry} from "./AsyncUtils";
18
+ import {RoomMessagesHistory} from "./RoomMessagesHistory";
22
19
 
23
20
  export class MessagesManager {
24
- // Temporary not lazy loaded; server must implement GetTopicMessages command.
25
- private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();
21
+ private readonly roomHistories = new IndexedCollection<string, RoomMessagesHistory>();
26
22
  private readonly followedTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<FollowedTopic>>();
27
23
  private readonly followedTopicsPromises = new PromiseRegistry();
24
+ private readonly deferredSession = new DeferredTask();
28
25
 
29
26
  public constructor(private tracker: ChatStateTracker) {
30
27
  this.tracker.client.on('Session', ev => this.handleSession(ev));
@@ -40,10 +37,11 @@ export class MessagesManager {
40
37
  }
41
38
 
42
39
  /**
43
- * Get collection of the messages written in topic.
40
+ * Get history manager for given room ID.
44
41
  */
45
- public async get(location: ChatLocation): Promise<ObservableIndexedObjectCollection<Message> | undefined> {
46
- return this.list.get(getCombinedId(location));
42
+ public async getRoomHistory(roomId: string): Promise<RoomMessagesHistory | undefined> {
43
+ await this.deferredSession.promise;
44
+ return this.roomHistories.get(roomId);
47
45
  }
48
46
 
49
47
  /**
@@ -122,23 +120,17 @@ export class MessagesManager {
122
120
  * Calculate missed messages from any topic in given room.
123
121
  * @return Undefined if you are not in room, stats object otherwise.
124
122
  */
125
- public async calculateRoomMissedMessages(roomId: string): Promise<{missed: number, missedMore: boolean} | undefined> {
123
+ public async calculateRoomMissedMessages(roomId: string): Promise<number | undefined> {
126
124
  const collection = await this.getRoomFollowedTopics(roomId);
127
125
 
128
- if (! collection) {
129
- return undefined;
130
- }
131
-
132
- let missed: number = 0, missedMore: boolean = false;
133
-
134
- for (const followedTopic of collection.items) {
135
- missed += followedTopic.missed ?? followedTopic.missedMoreThan ?? 0;
136
- if (followedTopic.missedMoreThan) {
137
- missedMore = true;
138
- }
126
+ if (collection) {
127
+ return collection.items.reduce(
128
+ (previousValue, currentValue) => previousValue + (currentValue.missed ?? 0),
129
+ 0,
130
+ );
139
131
  }
140
132
 
141
- return {missed, missedMore};
133
+ return undefined;
142
134
  }
143
135
 
144
136
  /**
@@ -146,32 +138,14 @@ export class MessagesManager {
146
138
  * @internal
147
139
  */
148
140
  public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {
149
- this.list.delete(...topicIds.map(topicId => getCombinedId({roomId, topicId})));
150
141
  this.followedTopics.get(roomId)?.delete(...topicIds);
151
142
  }
152
143
 
153
- private createHistoryForNewTopic(roomId: string, ...newTopics: Topic[]): void {
154
- for (const newTopic of newTopics) {
155
- const newTopicCombinedId = getCombinedId({roomId, topicId: newTopic.id});
156
-
157
- this.list.set([newTopicCombinedId, new ObservableIndexedObjectCollection<Message>('id')]);
158
-
159
- // If new topic refers to some message from this room, update other structures
160
- if (newTopic.messageRef) {
161
- const refTopicCombinedId = getCombinedId({roomId, topicId: newTopic.messageRef.topicId});
162
- const refTopicMessages = this.list.get(refTopicCombinedId);
163
- const refMessage = refTopicMessages?.get(newTopic.messageRef.messageId);
164
-
165
- if (refMessage) {
166
- // Update referenced topic ID in message
167
- refTopicMessages.set({...refMessage, topicRef: newTopic.id});
168
- }
169
- }
170
- }
144
+ private createHistoryForNewRoom(room: Room): void {
145
+ this.roomHistories.set([room.id, new RoomMessagesHistory(room, this.tracker)]);
171
146
  }
172
147
 
173
148
  private handleNewMessage(ev: NewMessage): void {
174
- this.list.get(getCombinedId(ev.location))?.set(ev.message);
175
149
  this.updateLocallyFollowedTopicOnNewMessage(ev);
176
150
  }
177
151
 
@@ -188,23 +162,21 @@ export class MessagesManager {
188
162
  }
189
163
 
190
164
  private handleRoomDeleted(ev: RoomDeleted): void {
165
+ this.roomHistories.delete(ev.id);
191
166
  this.clearRoomFollowedTopicsStructures(ev.id);
192
167
  }
193
168
 
194
169
  private handleRoomJoin(ev: RoomJoined): void {
195
- if (ev.room.defaultTopic) {
196
- this.createHistoryForNewTopic(ev.room.id, ev.room.defaultTopic)
197
- }
170
+ this.createHistoryForNewRoom(ev.room)
198
171
  this.clearRoomFollowedTopicsStructures(ev.room.id);
199
172
  }
200
173
 
201
174
  private handleRoomLeft(ev: RoomLeft): void {
175
+ this.roomHistories.delete(ev.id);
202
176
  this.clearRoomFollowedTopicsStructures(ev.id);
203
177
  }
204
178
 
205
179
  private async handleNewTopic(ev: NewTopic): Promise<void> {
206
- this.createHistoryForNewTopic(ev.roomId, ev.topic);
207
-
208
180
  if (this.followedTopics.has(ev.roomId)) {
209
181
  // Check if the new topic is followed by user
210
182
  // only if client asked for followed topics list before for this room
@@ -224,11 +196,10 @@ export class MessagesManager {
224
196
  }
225
197
 
226
198
  private handleSession(ev: Session): void {
227
- ev.state.rooms.forEach(room => {
228
- if (room.defaultTopic) {
229
- this.createHistoryForNewTopic(room.id, room.defaultTopic);
230
- }
231
- });
199
+ this.followedTopics.deleteAll();
200
+ this.roomHistories.deleteAll();
201
+ ev.state.rooms.forEach(room => this.createHistoryForNewRoom(room));
202
+ this.deferredSession.resolve();
232
203
  }
233
204
 
234
205
  private updateLocallyFollowedTopicOnNewMessage(ev: NewMessage): void {
@@ -240,19 +211,16 @@ export class MessagesManager {
240
211
  return;
241
212
  }
242
213
 
243
- const isMe = ev.message.author.id === this.tracker.me?.id;
214
+ const isMe = ev.message.user.id === this.tracker.me?.id;
244
215
 
245
216
  let update: Partial<FollowedTopic>;
246
217
 
247
218
  if (isMe) {
248
219
  // Reset missed messages count if new message is authored by me
249
- update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};
220
+ update = {missed: 0, lastAckMessageId: ev.message.id};
250
221
  } else {
251
222
  // ...add 1 otherwise
252
- update = {
253
- missed: followedTopic.missed === null ? null : followedTopic.missed + 1,
254
- missedMoreThan: followedTopic.missedMoreThan === null ? null : followedTopic.missedMoreThan,
255
- };
223
+ update = {missed: followedTopic.missed === null ? null : followedTopic.missed + 1};
256
224
  }
257
225
 
258
226
  roomFollowedTopics.set({...followedTopic, ...update});
@@ -0,0 +1,78 @@
1
+ import {ChatStateTracker} from "./ChatStateTracker";
2
+ import {NewTopic, Room, RoomUpdated, Topic, TopicDeleted} from "../types/src";
3
+ import {IndexedCollection,} from "../IndexedObjectCollection";
4
+ import {TopicHistoryWindow} from "./TopicHistoryWindow";
5
+
6
+ export class RoomMessagesHistory {
7
+ private historyWindows = new IndexedCollection<string, TopicHistoryWindow>();
8
+
9
+ public constructor(
10
+ private room: Room,
11
+ private tracker: ChatStateTracker,
12
+ ) {
13
+ this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));
14
+ this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));
15
+ this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));
16
+
17
+ if (this.room.defaultTopic) {
18
+ this.createHistoryWindowForTopic(this.room.defaultTopic);
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Returns a history window object for the given topic ID, allowing you to view message history.
24
+ */
25
+ public async getMessagesWindow(topicId: string): Promise<TopicHistoryWindow | undefined> {
26
+ let historyWindow = this.historyWindows.get(topicId);
27
+
28
+ if (! historyWindow) {
29
+ const topic = (await this.tracker.rooms.getTopics(this.room.id, [topicId])).get(topicId);
30
+
31
+ if (topic) {
32
+ this.createHistoryWindowForTopic(topic);
33
+ }
34
+ }
35
+
36
+ return this.historyWindows.get(topicId);
37
+ }
38
+
39
+ private handleRoomUpdated(ev: RoomUpdated): void {
40
+ if (this.room.id === ev.room.id) {
41
+ this.room = ev.room;
42
+
43
+ if (ev.room.defaultTopic) {
44
+ this.createHistoryWindowForTopic(ev.room.defaultTopic);
45
+ }
46
+ }
47
+ }
48
+
49
+ private handleNewTopic(ev: NewTopic): void {
50
+ if (this.room.id === ev.roomId) {
51
+ this.createHistoryWindowForTopic(ev.topic);
52
+ }
53
+ }
54
+
55
+ private handleTopicDeleted(ev: TopicDeleted): void {
56
+ if (this.room.id === ev.location.roomId) {
57
+ this.historyWindows.delete(ev.location.topicId);
58
+ }
59
+ }
60
+
61
+ private createHistoryWindowForTopic(topic: Topic): void {
62
+ if (this.historyWindows.has(topic.id)) {
63
+ return;
64
+ }
65
+
66
+ this.historyWindows.set([topic.id, new TopicHistoryWindow(this.room.id, topic.id, this.tracker)]);
67
+
68
+ // If new topic refers to some message from this room, update other structures
69
+ if (topic.messageRef) {
70
+ const refHistoryWindow = this.historyWindows.get(topic.messageRef.topicId);
71
+
72
+ refHistoryWindow._setTopicReference({
73
+ topicId: topic.id, // Reverse the reference
74
+ messageId: topic.messageRef.messageId,
75
+ });
76
+ }
77
+ }
78
+ }
@@ -23,6 +23,7 @@ export class RoomsManager {
23
23
  private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();
24
24
  private readonly deferredSession = new DeferredTask();
25
25
  private readonly membersPromises = new PromiseRegistry();
26
+ private readonly topicsPromises = new PromiseRegistry();
26
27
 
27
28
  public constructor(private tracker: ChatStateTracker) {
28
29
  this.messages = new MessagesManager(tracker);
@@ -88,10 +89,31 @@ export class RoomsManager {
88
89
  }
89
90
 
90
91
  /**
91
- * Get collection of room topics.
92
+ * Get a collection of locally cached Topic objects for given room.
93
+ * You can pass topic ids as second argument, to try to fetch them from the server.
92
94
  */
93
- public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {
95
+ public async getTopics(roomId: string, tryToFetchTopicIds?: string[]): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {
94
96
  await this.deferredSession.promise;
97
+
98
+ if (tryToFetchTopicIds?.length) {
99
+ // Topic can be fetched if it isn't already cached and fetch is not already in progress
100
+ const canFetch = (topicId: string) => ! this.topics.get(roomId)?.has(topicId) && ! this.topicsPromises.has(roomId + topicId);
101
+ const idsToFetch = tryToFetchTopicIds.filter(canFetch);
102
+
103
+ if (idsToFetch.length) {
104
+ const promise = this.tracker
105
+ .client
106
+ .send('GetTopics', {roomId, topicIds: idsToFetch})
107
+ .then(result => this.topics.get(result.data.location.roomId)?.set(...result.data.topics));
108
+
109
+ idsToFetch.forEach(topicId => this.topicsPromises.register(promise, roomId + topicId));
110
+ }
111
+
112
+ for (const topicId of tryToFetchTopicIds) {
113
+ await this.topicsPromises.get(roomId + topicId);
114
+ }
115
+ }
116
+
95
117
  return this.topics.get(roomId);
96
118
  }
97
119