polfan-server-js-client 0.1.2 → 0.1.7

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 (450) hide show
  1. package/.gitmodules +3 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  3. package/.idea/polfan-server-js-client.iml +3 -1
  4. package/.idea/vcs.xml +2 -1
  5. package/README.md +17 -17
  6. package/build/index.js +1985 -462
  7. package/build/index.js.map +1 -1
  8. package/build/types/AbstractChatClient.d.ts +26 -9
  9. package/build/types/IndexedObjectCollection.d.ts +3 -3
  10. package/build/types/Permissions.d.ts +65 -0
  11. package/build/types/WebSocketChatClient.d.ts +1 -1
  12. package/build/types/index.d.ts +4 -1
  13. package/build/types/state-tracker/AsyncUtils.d.ts +14 -0
  14. package/build/types/state-tracker/ChatStateTracker.d.ts +26 -0
  15. package/build/types/state-tracker/MessagesManager.d.ts +39 -0
  16. package/build/types/state-tracker/PermissionsManager.d.ts +41 -0
  17. package/build/types/state-tracker/RoomsManager.d.ts +49 -0
  18. package/build/types/state-tracker/SpacesManager.d.ts +52 -0
  19. package/build/types/state-tracker/functions.d.ts +2 -0
  20. package/build/types/types/dist/index.d.ts +1 -0
  21. package/build/types/types/dist/schemes/AckReport.d.ts +1 -0
  22. package/build/types/types/dist/schemes/ChatLocation.d.ts +1 -0
  23. package/build/types/types/dist/schemes/Envelope.d.ts +1 -0
  24. package/build/types/types/dist/schemes/Message.d.ts +1 -0
  25. package/build/types/types/dist/schemes/PermissionOverwritesValue.d.ts +1 -0
  26. package/build/types/types/dist/schemes/Role.d.ts +1 -0
  27. package/build/types/types/dist/schemes/Room.d.ts +1 -0
  28. package/build/types/types/dist/schemes/RoomMember.d.ts +1 -0
  29. package/build/types/types/dist/schemes/RoomSummary.d.ts +1 -0
  30. package/build/types/types/dist/schemes/Space.d.ts +1 -0
  31. package/build/types/types/dist/schemes/SpaceMember.d.ts +1 -0
  32. package/build/types/types/dist/schemes/Topic.d.ts +1 -0
  33. package/build/types/types/dist/schemes/User.d.ts +1 -0
  34. package/build/types/types/dist/schemes/UserState.d.ts +1 -0
  35. package/build/types/types/dist/schemes/commands/Ack.d.ts +1 -0
  36. package/build/types/types/dist/schemes/commands/AssignRole.d.ts +1 -0
  37. package/build/types/types/dist/schemes/commands/CreateMessage.d.ts +1 -0
  38. package/build/types/types/dist/schemes/commands/CreateOwner.d.ts +1 -0
  39. package/build/types/types/dist/schemes/commands/CreateRole.d.ts +1 -0
  40. package/build/types/types/dist/schemes/commands/CreateRoom.d.ts +1 -0
  41. package/build/types/types/dist/schemes/commands/CreateSpace.d.ts +1 -0
  42. package/build/types/types/dist/schemes/commands/CreateTopic.d.ts +1 -0
  43. package/build/types/types/dist/schemes/commands/DeassignRole.d.ts +1 -0
  44. package/build/types/types/dist/schemes/commands/DeleteOwner.d.ts +1 -0
  45. package/build/types/types/dist/schemes/commands/DeleteRole.d.ts +1 -0
  46. package/build/types/types/dist/schemes/commands/DeleteRoom.d.ts +1 -0
  47. package/build/types/types/dist/schemes/commands/DeleteSpace.d.ts +1 -0
  48. package/build/types/types/dist/schemes/commands/DeleteTopic.d.ts +1 -0
  49. package/build/types/types/dist/schemes/commands/GetAckReports.d.ts +1 -0
  50. package/build/types/types/dist/schemes/commands/GetComputedPermissions.d.ts +1 -0
  51. package/build/types/types/dist/schemes/commands/GetOwners.d.ts +1 -0
  52. package/build/types/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +1 -0
  53. package/build/types/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +1 -0
  54. package/build/types/types/dist/schemes/commands/GetRoomMembers.d.ts +1 -0
  55. package/build/types/types/dist/schemes/commands/GetSession.d.ts +1 -0
  56. package/build/types/types/dist/schemes/commands/GetSpaceMembers.d.ts +1 -0
  57. package/build/types/types/dist/schemes/commands/GetSpaceRooms.d.ts +1 -0
  58. package/build/types/types/dist/schemes/commands/JoinRoom.d.ts +1 -0
  59. package/build/types/types/dist/schemes/commands/JoinSpace.d.ts +1 -0
  60. package/build/types/types/dist/schemes/commands/LeaveRoom.d.ts +1 -0
  61. package/build/types/types/dist/schemes/commands/LeaveSpace.d.ts +1 -0
  62. package/build/types/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +1 -0
  63. package/build/types/types/dist/schemes/commands/UpdateRole.d.ts +1 -0
  64. package/build/types/types/dist/schemes/commands/UpdateRoom.d.ts +1 -0
  65. package/build/types/types/dist/schemes/commands/UpdateSpace.d.ts +1 -0
  66. package/build/types/types/dist/schemes/events/AckReports.d.ts +1 -0
  67. package/build/types/types/dist/schemes/events/Bye.d.ts +1 -0
  68. package/build/types/types/dist/schemes/events/ComputedPermissions.d.ts +1 -0
  69. package/build/types/types/dist/schemes/events/Error.d.ts +1 -0
  70. package/build/types/types/dist/schemes/events/NewMessage.d.ts +1 -0
  71. package/build/types/types/dist/schemes/events/NewRole.d.ts +1 -0
  72. package/build/types/types/dist/schemes/events/NewRoom.d.ts +1 -0
  73. package/build/types/types/dist/schemes/events/NewTopic.d.ts +1 -0
  74. package/build/types/types/dist/schemes/events/Ok.d.ts +1 -0
  75. package/build/types/types/dist/schemes/events/Owners.d.ts +1 -0
  76. package/build/types/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +1 -0
  77. package/build/types/types/dist/schemes/events/PermissionOverwrites.d.ts +1 -0
  78. package/build/types/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +1 -0
  79. package/build/types/types/dist/schemes/events/RoleDeleted.d.ts +1 -0
  80. package/build/types/types/dist/schemes/events/RoleUpdated.d.ts +1 -0
  81. package/build/types/types/dist/schemes/events/RoomDeleted.d.ts +1 -0
  82. package/build/types/types/dist/schemes/events/RoomJoined.d.ts +1 -0
  83. package/build/types/types/dist/schemes/events/RoomLeft.d.ts +1 -0
  84. package/build/types/types/dist/schemes/events/RoomMemberJoined.d.ts +1 -0
  85. package/build/types/types/dist/schemes/events/RoomMemberLeft.d.ts +1 -0
  86. package/build/types/types/dist/schemes/events/RoomMemberUpdated.d.ts +1 -0
  87. package/build/types/types/dist/schemes/events/RoomMembers.d.ts +1 -0
  88. package/build/types/types/dist/schemes/events/RoomUpdated.d.ts +1 -0
  89. package/build/types/types/dist/schemes/events/Session.d.ts +1 -0
  90. package/build/types/types/dist/schemes/events/SpaceDeleted.d.ts +1 -0
  91. package/build/types/types/dist/schemes/events/SpaceJoined.d.ts +1 -0
  92. package/build/types/types/dist/schemes/events/SpaceLeft.d.ts +1 -0
  93. package/build/types/types/dist/schemes/events/SpaceMemberJoined.d.ts +1 -0
  94. package/build/types/types/dist/schemes/events/SpaceMemberLeft.d.ts +1 -0
  95. package/build/types/types/dist/schemes/events/SpaceMemberUpdated.d.ts +1 -0
  96. package/build/types/types/dist/schemes/events/SpaceMembers.d.ts +1 -0
  97. package/build/types/types/dist/schemes/events/SpaceRooms.d.ts +1 -0
  98. package/build/types/types/dist/schemes/events/SpaceUpdated.d.ts +1 -0
  99. package/build/types/types/dist/schemes/events/TopicDeleted.d.ts +1 -0
  100. package/build/types/types/dist/schemes/events/UserUpdated.d.ts +1 -0
  101. package/build/types/types/src/index.d.ts +82 -0
  102. package/build/types/types/src/schemes/AckReport.d.ts +7 -0
  103. package/build/types/types/src/schemes/ChatLocation.d.ts +5 -0
  104. package/build/types/types/src/schemes/Envelope.d.ts +5 -0
  105. package/build/types/types/src/schemes/Message.d.ts +7 -0
  106. package/build/types/types/src/schemes/PermissionOverwritesValue.d.ts +4 -0
  107. package/build/types/types/src/schemes/Role.d.ts +6 -0
  108. package/build/types/types/src/schemes/Room.d.ts +10 -0
  109. package/build/types/types/src/schemes/RoomMember.d.ts +7 -0
  110. package/build/types/types/src/schemes/RoomSummary.d.ts +5 -0
  111. package/build/types/types/src/schemes/Space.d.ts +6 -0
  112. package/build/types/types/src/schemes/SpaceMember.d.ts +5 -0
  113. package/build/types/types/src/schemes/Topic.d.ts +9 -0
  114. package/build/types/types/src/schemes/User.d.ts +8 -0
  115. package/build/types/types/src/schemes/UserState.d.ts +6 -0
  116. package/build/types/types/src/schemes/commands/Ack.d.ts +5 -0
  117. package/build/types/types/src/schemes/commands/AssignRole.d.ts +6 -0
  118. package/build/types/types/src/schemes/commands/CreateMessage.d.ts +5 -0
  119. package/build/types/types/src/schemes/commands/CreateOwner.d.ts +5 -0
  120. package/build/types/types/src/schemes/commands/CreateRole.d.ts +5 -0
  121. package/build/types/types/src/schemes/commands/CreateRoom.d.ts +7 -0
  122. package/build/types/types/src/schemes/commands/CreateSpace.d.ts +3 -0
  123. package/build/types/types/src/schemes/commands/CreateTopic.d.ts +12 -0
  124. package/build/types/types/src/schemes/commands/DeassignRole.d.ts +6 -0
  125. package/build/types/types/src/schemes/commands/DeleteOwner.d.ts +5 -0
  126. package/build/types/types/src/schemes/commands/DeleteRole.d.ts +4 -0
  127. package/build/types/types/src/schemes/commands/DeleteRoom.d.ts +3 -0
  128. package/build/types/types/src/schemes/commands/DeleteSpace.d.ts +3 -0
  129. package/build/types/types/src/schemes/commands/DeleteTopic.d.ts +4 -0
  130. package/build/types/types/src/schemes/commands/GetAckReports.d.ts +4 -0
  131. package/build/types/types/src/schemes/commands/GetComputedPermissions.d.ts +4 -0
  132. package/build/types/types/src/schemes/commands/GetOwners.d.ts +4 -0
  133. package/build/types/types/src/schemes/commands/GetPermissionOverwriteTargets.d.ts +4 -0
  134. package/build/types/types/src/schemes/commands/GetPermissionOverwrites.d.ts +6 -0
  135. package/build/types/types/src/schemes/commands/GetRoomMembers.d.ts +3 -0
  136. package/build/types/types/src/schemes/commands/GetSession.d.ts +2 -0
  137. package/build/types/types/src/schemes/commands/GetSpaceMembers.d.ts +3 -0
  138. package/build/types/types/src/schemes/commands/GetSpaceRooms.d.ts +3 -0
  139. package/build/types/types/src/schemes/commands/JoinRoom.d.ts +3 -0
  140. package/build/types/types/src/schemes/commands/JoinSpace.d.ts +3 -0
  141. package/build/types/types/src/schemes/commands/LeaveRoom.d.ts +3 -0
  142. package/build/types/types/src/schemes/commands/LeaveSpace.d.ts +3 -0
  143. package/build/types/types/src/schemes/commands/SetPermissionOverwrites.d.ts +8 -0
  144. package/build/types/types/src/schemes/commands/UpdateRole.d.ts +7 -0
  145. package/build/types/types/src/schemes/commands/UpdateRoom.d.ts +5 -0
  146. package/build/types/types/src/schemes/commands/UpdateSpace.d.ts +4 -0
  147. package/build/types/types/src/schemes/events/AckReports.d.ts +4 -0
  148. package/build/types/types/src/schemes/events/Bye.d.ts +3 -0
  149. package/build/types/types/src/schemes/events/ComputedPermissions.d.ts +5 -0
  150. package/build/types/types/src/schemes/events/Error.d.ts +4 -0
  151. package/build/types/types/src/schemes/events/NewMessage.d.ts +6 -0
  152. package/build/types/types/src/schemes/events/NewRole.d.ts +5 -0
  153. package/build/types/types/src/schemes/events/NewRoom.d.ts +5 -0
  154. package/build/types/types/src/schemes/events/NewTopic.d.ts +5 -0
  155. package/build/types/types/src/schemes/events/Ok.d.ts +2 -0
  156. package/build/types/types/src/schemes/events/Owners.d.ts +8 -0
  157. package/build/types/types/src/schemes/events/PermissionOverwriteTargets.d.ts +10 -0
  158. package/build/types/types/src/schemes/events/PermissionOverwrites.d.ts +8 -0
  159. package/build/types/types/src/schemes/events/PermissionOverwritesUpdated.d.ts +8 -0
  160. package/build/types/types/src/schemes/events/RoleDeleted.d.ts +4 -0
  161. package/build/types/types/src/schemes/events/RoleUpdated.d.ts +5 -0
  162. package/build/types/types/src/schemes/events/RoomDeleted.d.ts +3 -0
  163. package/build/types/types/src/schemes/events/RoomJoined.d.ts +4 -0
  164. package/build/types/types/src/schemes/events/RoomLeft.d.ts +3 -0
  165. package/build/types/types/src/schemes/events/RoomMemberJoined.d.ts +5 -0
  166. package/build/types/types/src/schemes/events/RoomMemberLeft.d.ts +4 -0
  167. package/build/types/types/src/schemes/events/RoomMemberUpdated.d.ts +6 -0
  168. package/build/types/types/src/schemes/events/RoomMembers.d.ts +5 -0
  169. package/build/types/types/src/schemes/events/RoomUpdated.d.ts +4 -0
  170. package/build/types/types/src/schemes/events/Session.d.ts +7 -0
  171. package/build/types/types/src/schemes/events/SpaceDeleted.d.ts +3 -0
  172. package/build/types/types/src/schemes/events/SpaceJoined.d.ts +4 -0
  173. package/build/types/types/src/schemes/events/SpaceLeft.d.ts +3 -0
  174. package/build/types/types/src/schemes/events/SpaceMemberJoined.d.ts +5 -0
  175. package/build/types/types/src/schemes/events/SpaceMemberLeft.d.ts +4 -0
  176. package/build/types/types/src/schemes/events/SpaceMemberUpdated.d.ts +6 -0
  177. package/build/types/types/src/schemes/events/SpaceMembers.d.ts +5 -0
  178. package/build/types/types/src/schemes/events/SpaceRooms.d.ts +5 -0
  179. package/build/types/types/src/schemes/events/SpaceUpdated.d.ts +4 -0
  180. package/build/types/types/src/schemes/events/TopicDeleted.d.ts +4 -0
  181. package/build/types/types/src/schemes/events/UserUpdated.d.ts +4 -0
  182. package/jest.config.ts +199 -0
  183. package/package.json +4 -22
  184. package/src/AbstractChatClient.ts +50 -16
  185. package/src/AbstractRestClient.ts +65 -65
  186. package/src/IndexedObjectCollection.ts +3 -3
  187. package/src/Permissions.ts +46 -0
  188. package/src/WebApiChatClient.ts +1 -1
  189. package/src/WebSocketChatClient.ts +2 -2
  190. package/src/index.ts +7 -2
  191. package/src/state-tracker/AsyncUtils.ts +38 -0
  192. package/src/state-tracker/ChatStateTracker.ts +42 -0
  193. package/src/state-tracker/MessagesManager.ts +168 -0
  194. package/src/state-tracker/PermissionsManager.ts +306 -0
  195. package/src/state-tracker/RoomsManager.ts +272 -0
  196. package/src/state-tracker/SpacesManager.ts +267 -0
  197. package/src/state-tracker/functions.ts +25 -0
  198. package/src/types/README.md +2 -0
  199. package/src/types/dist/index.d.ts +82 -0
  200. package/src/types/dist/index.js +2 -0
  201. package/src/types/dist/schemes/AckReport.d.ts +7 -0
  202. package/src/types/dist/schemes/AckReport.js +2 -0
  203. package/src/types/dist/schemes/ChatLocation.d.ts +5 -0
  204. package/src/types/dist/schemes/ChatLocation.js +2 -0
  205. package/src/types/dist/schemes/Envelope.d.ts +5 -0
  206. package/src/types/dist/schemes/Envelope.js +2 -0
  207. package/src/types/dist/schemes/Message.d.ts +7 -0
  208. package/src/types/dist/schemes/Message.js +2 -0
  209. package/src/types/dist/schemes/PermissionOverwritesValue.d.ts +4 -0
  210. package/src/types/dist/schemes/PermissionOverwritesValue.js +2 -0
  211. package/src/types/dist/schemes/Role.d.ts +6 -0
  212. package/src/types/dist/schemes/Role.js +2 -0
  213. package/src/types/dist/schemes/Room.d.ts +10 -0
  214. package/src/types/dist/schemes/Room.js +2 -0
  215. package/src/types/dist/schemes/RoomMember.d.ts +7 -0
  216. package/src/types/dist/schemes/RoomMember.js +2 -0
  217. package/src/types/dist/schemes/RoomSummary.d.ts +5 -0
  218. package/src/types/dist/schemes/RoomSummary.js +2 -0
  219. package/src/types/dist/schemes/Space.d.ts +6 -0
  220. package/src/types/dist/schemes/Space.js +2 -0
  221. package/src/types/dist/schemes/SpaceMember.d.ts +5 -0
  222. package/src/types/dist/schemes/SpaceMember.js +2 -0
  223. package/src/types/dist/schemes/Topic.d.ts +9 -0
  224. package/src/types/dist/schemes/Topic.js +2 -0
  225. package/src/types/dist/schemes/User.d.ts +8 -0
  226. package/src/types/dist/schemes/User.js +2 -0
  227. package/src/types/dist/schemes/UserState.d.ts +6 -0
  228. package/src/types/dist/schemes/UserState.js +2 -0
  229. package/src/types/dist/schemes/commands/Ack.d.ts +5 -0
  230. package/src/types/dist/schemes/commands/Ack.js +2 -0
  231. package/src/types/dist/schemes/commands/AssignRole.d.ts +6 -0
  232. package/src/types/dist/schemes/commands/AssignRole.js +2 -0
  233. package/src/types/dist/schemes/commands/CreateMessage.d.ts +5 -0
  234. package/src/types/dist/schemes/commands/CreateMessage.js +2 -0
  235. package/src/types/dist/schemes/commands/CreateOwner.d.ts +5 -0
  236. package/src/types/dist/schemes/commands/CreateOwner.js +2 -0
  237. package/src/types/dist/schemes/commands/CreateRole.d.ts +5 -0
  238. package/src/types/dist/schemes/commands/CreateRole.js +2 -0
  239. package/src/types/dist/schemes/commands/CreateRoom.d.ts +7 -0
  240. package/src/types/dist/schemes/commands/CreateRoom.js +2 -0
  241. package/src/types/dist/schemes/commands/CreateSpace.d.ts +3 -0
  242. package/src/types/dist/schemes/commands/CreateSpace.js +2 -0
  243. package/src/types/dist/schemes/commands/CreateTopic.d.ts +12 -0
  244. package/src/types/dist/schemes/commands/CreateTopic.js +2 -0
  245. package/src/types/dist/schemes/commands/DeassignRole.d.ts +6 -0
  246. package/src/types/dist/schemes/commands/DeassignRole.js +2 -0
  247. package/src/types/dist/schemes/commands/DeleteOwner.d.ts +5 -0
  248. package/src/types/dist/schemes/commands/DeleteOwner.js +2 -0
  249. package/src/types/dist/schemes/commands/DeleteRole.d.ts +4 -0
  250. package/src/types/dist/schemes/commands/DeleteRole.js +2 -0
  251. package/src/types/dist/schemes/commands/DeleteRoom.d.ts +3 -0
  252. package/src/types/dist/schemes/commands/DeleteRoom.js +2 -0
  253. package/src/types/dist/schemes/commands/DeleteSpace.d.ts +3 -0
  254. package/src/types/dist/schemes/commands/DeleteSpace.js +2 -0
  255. package/src/types/dist/schemes/commands/DeleteTopic.d.ts +4 -0
  256. package/src/types/dist/schemes/commands/DeleteTopic.js +2 -0
  257. package/src/types/dist/schemes/commands/GetAckReports.d.ts +4 -0
  258. package/src/types/dist/schemes/commands/GetAckReports.js +2 -0
  259. package/src/types/dist/schemes/commands/GetComputedPermissions.d.ts +4 -0
  260. package/src/types/dist/schemes/commands/GetComputedPermissions.js +2 -0
  261. package/src/types/dist/schemes/commands/GetOwners.d.ts +4 -0
  262. package/src/types/dist/schemes/commands/GetOwners.js +2 -0
  263. package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.d.ts +4 -0
  264. package/src/types/dist/schemes/commands/GetPermissionOverwriteTargets.js +2 -0
  265. package/src/types/dist/schemes/commands/GetPermissionOverwrites.d.ts +6 -0
  266. package/src/types/dist/schemes/commands/GetPermissionOverwrites.js +2 -0
  267. package/src/types/dist/schemes/commands/GetRoomMembers.d.ts +3 -0
  268. package/src/types/dist/schemes/commands/GetRoomMembers.js +2 -0
  269. package/src/types/dist/schemes/commands/GetSession.d.ts +2 -0
  270. package/src/types/dist/schemes/commands/GetSession.js +2 -0
  271. package/src/types/dist/schemes/commands/GetSpaceMembers.d.ts +3 -0
  272. package/src/types/dist/schemes/commands/GetSpaceMembers.js +2 -0
  273. package/src/types/dist/schemes/commands/GetSpaceRooms.d.ts +3 -0
  274. package/src/types/dist/schemes/commands/GetSpaceRooms.js +2 -0
  275. package/src/types/dist/schemes/commands/JoinRoom.d.ts +3 -0
  276. package/src/types/dist/schemes/commands/JoinRoom.js +2 -0
  277. package/src/types/dist/schemes/commands/JoinSpace.d.ts +3 -0
  278. package/src/types/dist/schemes/commands/JoinSpace.js +2 -0
  279. package/src/types/dist/schemes/commands/LeaveRoom.d.ts +3 -0
  280. package/src/types/dist/schemes/commands/LeaveRoom.js +2 -0
  281. package/src/types/dist/schemes/commands/LeaveSpace.d.ts +3 -0
  282. package/src/types/dist/schemes/commands/LeaveSpace.js +2 -0
  283. package/src/types/dist/schemes/commands/SetPermissionOverwrites.d.ts +8 -0
  284. package/src/types/dist/schemes/commands/SetPermissionOverwrites.js +2 -0
  285. package/src/types/dist/schemes/commands/UpdateRole.d.ts +7 -0
  286. package/src/types/dist/schemes/commands/UpdateRole.js +2 -0
  287. package/src/types/dist/schemes/commands/UpdateRoom.d.ts +5 -0
  288. package/src/types/dist/schemes/commands/UpdateRoom.js +2 -0
  289. package/src/types/dist/schemes/commands/UpdateSpace.d.ts +4 -0
  290. package/src/types/dist/schemes/commands/UpdateSpace.js +2 -0
  291. package/src/types/dist/schemes/events/AckReports.d.ts +4 -0
  292. package/src/types/dist/schemes/events/AckReports.js +2 -0
  293. package/src/types/dist/schemes/events/Bye.d.ts +3 -0
  294. package/src/types/dist/schemes/events/Bye.js +2 -0
  295. package/src/types/dist/schemes/events/ComputedPermissions.d.ts +5 -0
  296. package/src/types/dist/schemes/events/ComputedPermissions.js +2 -0
  297. package/src/types/dist/schemes/events/Error.d.ts +4 -0
  298. package/src/types/dist/schemes/events/Error.js +2 -0
  299. package/src/types/dist/schemes/events/NewMessage.d.ts +6 -0
  300. package/src/types/dist/schemes/events/NewMessage.js +2 -0
  301. package/src/types/dist/schemes/events/NewRole.d.ts +5 -0
  302. package/src/types/dist/schemes/events/NewRole.js +2 -0
  303. package/src/types/dist/schemes/events/NewRoom.d.ts +5 -0
  304. package/src/types/dist/schemes/events/NewRoom.js +2 -0
  305. package/src/types/dist/schemes/events/NewTopic.d.ts +5 -0
  306. package/src/types/dist/schemes/events/NewTopic.js +2 -0
  307. package/src/types/dist/schemes/events/Ok.d.ts +2 -0
  308. package/src/types/dist/schemes/events/Ok.js +2 -0
  309. package/src/types/dist/schemes/events/Owners.d.ts +8 -0
  310. package/src/types/dist/schemes/events/Owners.js +2 -0
  311. package/src/types/dist/schemes/events/PermissionOverwriteTargets.d.ts +10 -0
  312. package/src/types/dist/schemes/events/PermissionOverwriteTargets.js +2 -0
  313. package/src/types/dist/schemes/events/PermissionOverwrites.d.ts +8 -0
  314. package/src/types/dist/schemes/events/PermissionOverwrites.js +2 -0
  315. package/src/types/dist/schemes/events/PermissionOverwritesUpdated.d.ts +8 -0
  316. package/src/types/dist/schemes/events/PermissionOverwritesUpdated.js +2 -0
  317. package/src/types/dist/schemes/events/RoleDeleted.d.ts +4 -0
  318. package/src/types/dist/schemes/events/RoleDeleted.js +2 -0
  319. package/src/types/dist/schemes/events/RoleUpdated.d.ts +5 -0
  320. package/src/types/dist/schemes/events/RoleUpdated.js +2 -0
  321. package/src/types/dist/schemes/events/RoomDeleted.d.ts +3 -0
  322. package/src/types/dist/schemes/events/RoomDeleted.js +2 -0
  323. package/src/types/dist/schemes/events/RoomJoined.d.ts +4 -0
  324. package/src/types/dist/schemes/events/RoomJoined.js +2 -0
  325. package/src/types/dist/schemes/events/RoomLeft.d.ts +3 -0
  326. package/src/types/dist/schemes/events/RoomLeft.js +2 -0
  327. package/src/types/dist/schemes/events/RoomMemberJoined.d.ts +5 -0
  328. package/src/types/dist/schemes/events/RoomMemberJoined.js +2 -0
  329. package/src/types/dist/schemes/events/RoomMemberLeft.d.ts +4 -0
  330. package/src/types/dist/schemes/events/RoomMemberLeft.js +2 -0
  331. package/src/types/dist/schemes/events/RoomMemberUpdated.d.ts +6 -0
  332. package/src/types/dist/schemes/events/RoomMemberUpdated.js +2 -0
  333. package/src/types/dist/schemes/events/RoomMembers.d.ts +5 -0
  334. package/src/types/dist/schemes/events/RoomMembers.js +2 -0
  335. package/src/types/dist/schemes/events/RoomUpdated.d.ts +4 -0
  336. package/src/types/dist/schemes/events/RoomUpdated.js +2 -0
  337. package/src/types/dist/schemes/events/Session.d.ts +7 -0
  338. package/src/types/dist/schemes/events/Session.js +2 -0
  339. package/src/types/dist/schemes/events/SpaceDeleted.d.ts +3 -0
  340. package/src/types/dist/schemes/events/SpaceDeleted.js +2 -0
  341. package/src/types/dist/schemes/events/SpaceJoined.d.ts +4 -0
  342. package/src/types/dist/schemes/events/SpaceJoined.js +2 -0
  343. package/src/types/dist/schemes/events/SpaceLeft.d.ts +3 -0
  344. package/src/types/dist/schemes/events/SpaceLeft.js +2 -0
  345. package/src/types/dist/schemes/events/SpaceMemberJoined.d.ts +5 -0
  346. package/src/types/dist/schemes/events/SpaceMemberJoined.js +2 -0
  347. package/src/types/dist/schemes/events/SpaceMemberLeft.d.ts +4 -0
  348. package/src/types/dist/schemes/events/SpaceMemberLeft.js +2 -0
  349. package/src/types/dist/schemes/events/SpaceMemberUpdated.d.ts +6 -0
  350. package/src/types/dist/schemes/events/SpaceMemberUpdated.js +2 -0
  351. package/src/types/dist/schemes/events/SpaceMembers.d.ts +5 -0
  352. package/src/types/dist/schemes/events/SpaceMembers.js +2 -0
  353. package/src/types/dist/schemes/events/SpaceRooms.d.ts +5 -0
  354. package/src/types/dist/schemes/events/SpaceRooms.js +2 -0
  355. package/src/types/dist/schemes/events/SpaceUpdated.d.ts +4 -0
  356. package/src/types/dist/schemes/events/SpaceUpdated.js +2 -0
  357. package/src/types/dist/schemes/events/TopicDeleted.d.ts +4 -0
  358. package/src/types/dist/schemes/events/TopicDeleted.js +2 -0
  359. package/src/types/dist/schemes/events/UserUpdated.d.ts +4 -0
  360. package/src/types/dist/schemes/events/UserUpdated.js +2 -0
  361. package/src/types/package-lock.json +31 -0
  362. package/src/types/package.json +16 -0
  363. package/src/types/src/index.ts +168 -0
  364. package/src/types/src/schemes/AckReport.ts +7 -0
  365. package/src/types/src/schemes/ChatLocation.ts +5 -0
  366. package/src/types/src/schemes/Envelope.ts +5 -0
  367. package/src/types/src/schemes/Message.ts +8 -0
  368. package/src/types/src/schemes/PermissionOverwritesValue.ts +4 -0
  369. package/src/types/src/schemes/Role.ts +6 -0
  370. package/src/types/src/schemes/Room.ts +12 -0
  371. package/src/types/src/schemes/RoomMember.ts +8 -0
  372. package/src/types/src/schemes/RoomSummary.ts +5 -0
  373. package/src/types/src/schemes/Space.ts +7 -0
  374. package/src/types/src/schemes/SpaceMember.ts +6 -0
  375. package/src/types/src/schemes/Topic.ts +10 -0
  376. package/src/types/src/schemes/User.ts +9 -0
  377. package/src/types/src/schemes/UserState.ts +7 -0
  378. package/src/types/src/schemes/commands/Ack.ts +6 -0
  379. package/src/types/src/schemes/commands/AssignRole.ts +7 -0
  380. package/src/types/src/schemes/commands/CreateMessage.ts +6 -0
  381. package/src/types/src/schemes/commands/CreateOwner.ts +6 -0
  382. package/src/types/src/schemes/commands/CreateRole.ts +5 -0
  383. package/src/types/src/schemes/commands/CreateRoom.ts +8 -0
  384. package/src/types/src/schemes/commands/CreateSpace.ts +3 -0
  385. package/src/types/src/schemes/commands/CreateTopic.ts +14 -0
  386. package/src/types/src/schemes/commands/DeassignRole.ts +7 -0
  387. package/src/types/src/schemes/commands/DeleteOwner.ts +6 -0
  388. package/src/types/src/schemes/commands/DeleteRole.ts +4 -0
  389. package/src/types/src/schemes/commands/DeleteRoom.ts +3 -0
  390. package/src/types/src/schemes/commands/DeleteSpace.ts +3 -0
  391. package/src/types/src/schemes/commands/DeleteTopic.ts +5 -0
  392. package/src/types/src/schemes/commands/GetAckReports.ts +5 -0
  393. package/src/types/src/schemes/commands/GetComputedPermissions.ts +5 -0
  394. package/src/types/src/schemes/commands/GetOwners.ts +5 -0
  395. package/src/types/src/schemes/commands/GetPermissionOverwriteTargets.ts +5 -0
  396. package/src/types/src/schemes/commands/GetPermissionOverwrites.ts +7 -0
  397. package/src/types/src/schemes/commands/GetRoomMembers.ts +3 -0
  398. package/src/types/src/schemes/commands/GetSession.ts +2 -0
  399. package/src/types/src/schemes/commands/GetSpaceMembers.ts +3 -0
  400. package/src/types/src/schemes/commands/GetSpaceRooms.ts +3 -0
  401. package/src/types/src/schemes/commands/JoinRoom.ts +3 -0
  402. package/src/types/src/schemes/commands/JoinSpace.ts +3 -0
  403. package/src/types/src/schemes/commands/LeaveRoom.ts +3 -0
  404. package/src/types/src/schemes/commands/LeaveSpace.ts +3 -0
  405. package/src/types/src/schemes/commands/SetPermissionOverwrites.ts +9 -0
  406. package/src/types/src/schemes/commands/UpdateRole.ts +7 -0
  407. package/src/types/src/schemes/commands/UpdateRoom.ts +5 -0
  408. package/src/types/src/schemes/commands/UpdateSpace.ts +4 -0
  409. package/src/types/src/schemes/events/AckReports.ts +5 -0
  410. package/src/types/src/schemes/events/Bye.ts +3 -0
  411. package/src/types/src/schemes/events/ComputedPermissions.ts +6 -0
  412. package/src/types/src/schemes/events/Error.ts +4 -0
  413. package/src/types/src/schemes/events/NewMessage.ts +7 -0
  414. package/src/types/src/schemes/events/NewRole.ts +6 -0
  415. package/src/types/src/schemes/events/NewRoom.ts +6 -0
  416. package/src/types/src/schemes/events/NewTopic.ts +6 -0
  417. package/src/types/src/schemes/events/Ok.ts +3 -0
  418. package/src/types/src/schemes/events/Owners.ts +9 -0
  419. package/src/types/src/schemes/events/PermissionOverwriteTargets.ts +11 -0
  420. package/src/types/src/schemes/events/PermissionOverwrites.ts +9 -0
  421. package/src/types/src/schemes/events/PermissionOverwritesUpdated.ts +9 -0
  422. package/src/types/src/schemes/events/RoleDeleted.ts +4 -0
  423. package/src/types/src/schemes/events/RoleUpdated.ts +6 -0
  424. package/src/types/src/schemes/events/RoomDeleted.ts +3 -0
  425. package/src/types/src/schemes/events/RoomJoined.ts +5 -0
  426. package/src/types/src/schemes/events/RoomLeft.ts +3 -0
  427. package/src/types/src/schemes/events/RoomMemberJoined.ts +6 -0
  428. package/src/types/src/schemes/events/RoomMemberLeft.ts +4 -0
  429. package/src/types/src/schemes/events/RoomMemberUpdated.ts +7 -0
  430. package/src/types/src/schemes/events/RoomMembers.ts +6 -0
  431. package/src/types/src/schemes/events/RoomUpdated.ts +5 -0
  432. package/src/types/src/schemes/events/Session.ts +8 -0
  433. package/src/types/src/schemes/events/SpaceDeleted.ts +3 -0
  434. package/src/types/src/schemes/events/SpaceJoined.ts +5 -0
  435. package/src/types/src/schemes/events/SpaceLeft.ts +3 -0
  436. package/src/types/src/schemes/events/SpaceMemberJoined.ts +6 -0
  437. package/src/types/src/schemes/events/SpaceMemberLeft.ts +4 -0
  438. package/src/types/src/schemes/events/SpaceMemberUpdated.ts +7 -0
  439. package/src/types/src/schemes/events/SpaceMembers.ts +6 -0
  440. package/src/types/src/schemes/events/SpaceRooms.ts +6 -0
  441. package/src/types/src/schemes/events/SpaceUpdated.ts +5 -0
  442. package/src/types/src/schemes/events/TopicDeleted.ts +5 -0
  443. package/src/types/src/schemes/events/UserUpdated.ts +5 -0
  444. package/src/types/tsconfig.json +75 -0
  445. package/tests/async-utils.test.ts +30 -0
  446. package/tests/permissions.test.ts +14 -0
  447. package/tests/space-roles.test.ts +43 -0
  448. package/build/types/ChatStateTracker.d.ts +0 -54
  449. package/index.html +0 -8
  450. package/src/ChatStateTracker.ts +0 -336
package/build/index.js CHANGED
@@ -52,8 +52,11 @@ __webpack_require__.d(__webpack_exports__, {
52
52
  "AuthClient": () => (/* reexport */ AuthClient),
53
53
  "IndexedCollection": () => (/* reexport */ IndexedCollection),
54
54
  "IndexedObjectCollection": () => (/* reexport */ IndexedObjectCollection),
55
+ "Layer": () => (/* reexport */ Layer),
55
56
  "ObservableIndexedCollection": () => (/* reexport */ ObservableIndexedCollection),
56
57
  "ObservableIndexedObjectCollection": () => (/* reexport */ ObservableIndexedObjectCollection),
58
+ "PermissionDefinition": () => (/* reexport */ PermissionDefinition),
59
+ "Permissions": () => (/* reexport */ Permissions),
57
60
  "WebApiChatClient": () => (/* reexport */ WebApiChatClient),
58
61
  "WebSocketChatClient": () => (/* reexport */ WebSocketChatClient)
59
62
  });
@@ -561,130 +564,574 @@ var ObservableIndexedObjectCollection = /*#__PURE__*/function (_IndexedObjectCol
561
564
  }]);
562
565
  return ObservableIndexedObjectCollection;
563
566
  }(IndexedObjectCollection);
564
- ;// CONCATENATED MODULE: ./src/ChatStateTracker.ts
565
- function ChatStateTracker_typeof(obj) { "@babel/helpers - typeof"; return ChatStateTracker_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, ChatStateTracker_typeof(obj); }
566
- function ChatStateTracker_toConsumableArray(arr) { return ChatStateTracker_arrayWithoutHoles(arr) || ChatStateTracker_iterableToArray(arr) || ChatStateTracker_unsupportedIterableToArray(arr) || ChatStateTracker_nonIterableSpread(); }
567
- function ChatStateTracker_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
568
- function ChatStateTracker_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ChatStateTracker_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ChatStateTracker_arrayLikeToArray(o, minLen); }
569
- function ChatStateTracker_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
570
- function ChatStateTracker_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return ChatStateTracker_arrayLikeToArray(arr); }
571
- function ChatStateTracker_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
572
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == ChatStateTracker_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
567
+ ;// CONCATENATED MODULE: ./src/state-tracker/AsyncUtils.ts
568
+ function AsyncUtils_typeof(obj) { "@babel/helpers - typeof"; return AsyncUtils_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, AsyncUtils_typeof(obj); }
569
+ function AsyncUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, AsyncUtils_toPropertyKey(descriptor.key), descriptor); } }
570
+ function AsyncUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AsyncUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AsyncUtils_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
571
+ function AsyncUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
572
+ function AsyncUtils_defineProperty(obj, key, value) { key = AsyncUtils_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
573
+ function AsyncUtils_toPropertyKey(arg) { var key = AsyncUtils_toPrimitive(arg, "string"); return AsyncUtils_typeof(key) === "symbol" ? key : String(key); }
574
+ function AsyncUtils_toPrimitive(input, hint) { if (AsyncUtils_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (AsyncUtils_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
575
+
576
+ var DeferredTask = /*#__PURE__*/AsyncUtils_createClass(function DeferredTask() {
577
+ var _this = this;
578
+ AsyncUtils_classCallCheck(this, DeferredTask);
579
+ AsyncUtils_defineProperty(this, "promise", void 0);
580
+ AsyncUtils_defineProperty(this, "resolve", void 0);
581
+ this.promise = new Promise(function (resolve) {
582
+ return _this.resolve = resolve;
583
+ });
584
+ });
585
+ var PromiseRegistry = /*#__PURE__*/function () {
586
+ function PromiseRegistry() {
587
+ AsyncUtils_classCallCheck(this, PromiseRegistry);
588
+ AsyncUtils_defineProperty(this, "promises", new IndexedCollection());
589
+ }
590
+ AsyncUtils_createClass(PromiseRegistry, [{
591
+ key: "register",
592
+ value: function register(promise, key) {
593
+ this.promises.set([key, promise]);
594
+ }
595
+ }, {
596
+ key: "registerByFunction",
597
+ value: function registerByFunction(fn, key) {
598
+ this.register(fn(), key);
599
+ }
600
+ }, {
601
+ key: "get",
602
+ value: function get(key) {
603
+ return this.promises.get(key);
604
+ }
605
+ }, {
606
+ key: "has",
607
+ value: function has(key) {
608
+ return this.promises.has(key);
609
+ }
610
+ }, {
611
+ key: "notExist",
612
+ value: function notExist(key) {
613
+ return !this.has(key);
614
+ }
615
+ }, {
616
+ key: "forget",
617
+ value: function forget() {
618
+ var _this$promises;
619
+ (_this$promises = this.promises)["delete"].apply(_this$promises, arguments);
620
+ }
621
+ }]);
622
+ return PromiseRegistry;
623
+ }();
624
+ ;// CONCATENATED MODULE: ./src/state-tracker/MessagesManager.ts
625
+ function MessagesManager_typeof(obj) { "@babel/helpers - typeof"; return MessagesManager_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, MessagesManager_typeof(obj); }
626
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
627
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { MessagesManager_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
628
+ function MessagesManager_toConsumableArray(arr) { return MessagesManager_arrayWithoutHoles(arr) || MessagesManager_iterableToArray(arr) || MessagesManager_unsupportedIterableToArray(arr) || MessagesManager_nonIterableSpread(); }
629
+ function MessagesManager_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
630
+ function MessagesManager_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MessagesManager_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MessagesManager_arrayLikeToArray(o, minLen); }
631
+ function MessagesManager_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
632
+ function MessagesManager_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MessagesManager_arrayLikeToArray(arr); }
633
+ function MessagesManager_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
634
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == MessagesManager_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
573
635
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
574
636
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
575
- function ChatStateTracker_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
576
- function ChatStateTracker_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, ChatStateTracker_toPropertyKey(descriptor.key), descriptor); } }
577
- function ChatStateTracker_createClass(Constructor, protoProps, staticProps) { if (protoProps) ChatStateTracker_defineProperties(Constructor.prototype, protoProps); if (staticProps) ChatStateTracker_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
578
- function ChatStateTracker_defineProperty(obj, key, value) { key = ChatStateTracker_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
579
- function ChatStateTracker_toPropertyKey(arg) { var key = ChatStateTracker_toPrimitive(arg, "string"); return ChatStateTracker_typeof(key) === "symbol" ? key : String(key); }
580
- function ChatStateTracker_toPrimitive(input, hint) { if (ChatStateTracker_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (ChatStateTracker_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
637
+ function MessagesManager_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
638
+ function MessagesManager_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, MessagesManager_toPropertyKey(descriptor.key), descriptor); } }
639
+ function MessagesManager_createClass(Constructor, protoProps, staticProps) { if (protoProps) MessagesManager_defineProperties(Constructor.prototype, protoProps); if (staticProps) MessagesManager_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
640
+ function MessagesManager_defineProperty(obj, key, value) { key = MessagesManager_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
641
+ function MessagesManager_toPropertyKey(arg) { var key = MessagesManager_toPrimitive(arg, "string"); return MessagesManager_typeof(key) === "symbol" ? key : String(key); }
642
+ function MessagesManager_toPrimitive(input, hint) { if (MessagesManager_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (MessagesManager_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
581
643
 
582
- var ChatStateTracker = /*#__PURE__*/function () {
644
+ var getCombinedId = function getCombinedId(location) {
645
+ var _location$roomId, _location$topicId;
646
+ return ((_location$roomId = location.roomId) !== null && _location$roomId !== void 0 ? _location$roomId : '') + ((_location$topicId = location.topicId) !== null && _location$topicId !== void 0 ? _location$topicId : '');
647
+ };
648
+ var MessagesManager = /*#__PURE__*/function () {
583
649
  // Temporary not lazy loaded; server must implement GetTopicMessages command.
584
650
 
585
- // lazy loaded collections
586
-
587
- function ChatStateTracker(client) {
588
- ChatStateTracker_classCallCheck(this, ChatStateTracker);
589
- this.client = client;
590
- ChatStateTracker_defineProperty(this, "joinedSpaces", new ObservableIndexedObjectCollection('id'));
591
- ChatStateTracker_defineProperty(this, "joinedRooms", new ObservableIndexedObjectCollection('id'));
592
- ChatStateTracker_defineProperty(this, "spacesRoles", new IndexedCollection());
593
- ChatStateTracker_defineProperty(this, "roomsTopics", new IndexedCollection());
594
- ChatStateTracker_defineProperty(this, "topicsMessages", new IndexedCollection());
595
- ChatStateTracker_defineProperty(this, "spacesRooms", new IndexedCollection());
596
- ChatStateTracker_defineProperty(this, "spacesMembers", new IndexedCollection());
597
- ChatStateTracker_defineProperty(this, "roomsMembers", new IndexedCollection());
598
- ChatStateTracker_defineProperty(this, "deferredGetters", new IndexedCollection());
599
- ChatStateTracker_defineProperty(this, "reconnecting", false);
600
- ChatStateTracker_defineProperty(this, "me", null);
601
- this.createDeferredGetter('session');
602
- this.bind();
651
+ function MessagesManager(tracker) {
652
+ var _this = this;
653
+ MessagesManager_classCallCheck(this, MessagesManager);
654
+ this.tracker = tracker;
655
+ MessagesManager_defineProperty(this, "list", new IndexedCollection());
656
+ MessagesManager_defineProperty(this, "acks", new IndexedCollection());
657
+ this.tracker.client.on('NewMessage', function (ev) {
658
+ return _this.handleNewMessage(ev);
659
+ });
660
+ this.tracker.client.on('AckReports', function (ev) {
661
+ return _this.handleAckReports(ev);
662
+ });
603
663
  }
604
- ChatStateTracker_createClass(ChatStateTracker, [{
605
- key: "getMe",
664
+
665
+ /**
666
+ * Get collection of the messages written in topic.
667
+ */
668
+ MessagesManager_createClass(MessagesManager, [{
669
+ key: "get",
606
670
  value: function () {
607
- var _getMe = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
671
+ var _get = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(location) {
608
672
  return _regeneratorRuntime().wrap(function _callee$(_context) {
609
673
  while (1) {
610
674
  switch (_context.prev = _context.next) {
611
675
  case 0:
612
- _context.next = 2;
613
- return this.deferredGetterReadiness('session');
614
- case 2:
615
- return _context.abrupt("return", this.me);
616
- case 3:
676
+ return _context.abrupt("return", this.list.get(getCombinedId(location)));
677
+ case 1:
617
678
  case "end":
618
679
  return _context.stop();
619
680
  }
620
681
  }
621
682
  }, _callee, this);
622
683
  }));
623
- function getMe() {
624
- return _getMe.apply(this, arguments);
684
+ function get(_x) {
685
+ return _get.apply(this, arguments);
625
686
  }
626
- return getMe;
687
+ return get;
627
688
  }()
689
+ /**
690
+ * Cache ack reports for all joined rooms in a space and fetch them in bulk if necessary.
691
+ * Then you can get the reports using getRoomAckReports().
692
+ * @see getRoomAckReports
693
+ */
628
694
  }, {
629
- key: "getJoinedSpaces",
695
+ key: "cacheSpaceAckReports",
630
696
  value: function () {
631
- var _getJoinedSpaces = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
697
+ var _cacheSpaceAckReports = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(spaceId) {
698
+ var _this2 = this;
699
+ var roomIds, missingRoomIds, result;
632
700
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
633
701
  while (1) {
634
702
  switch (_context2.prev = _context2.next) {
635
703
  case 0:
636
704
  _context2.next = 2;
637
- return this.deferredGetterReadiness('session');
705
+ return this.tracker.spaces.get();
638
706
  case 2:
639
- return _context2.abrupt("return", this.joinedSpaces);
640
- case 3:
707
+ if (_context2.sent.has(spaceId)) {
708
+ _context2.next = 4;
709
+ break;
710
+ }
711
+ throw new Error("You are not in space ".concat(spaceId));
712
+ case 4:
713
+ _context2.next = 6;
714
+ return this.tracker.rooms.get();
715
+ case 6:
716
+ roomIds = _context2.sent.findBy('spaceId', spaceId).map(function (room) {
717
+ return room.id;
718
+ });
719
+ missingRoomIds = roomIds.filter(function (roomId) {
720
+ return !_this2.acks.has(roomId);
721
+ });
722
+ if (!missingRoomIds.length) {
723
+ _context2.next = 15;
724
+ break;
725
+ }
726
+ _context2.next = 11;
727
+ return this.tracker.client.send('GetAckReports', {
728
+ location: {
729
+ spaceId: spaceId
730
+ }
731
+ });
732
+ case 11:
733
+ result = _context2.sent;
734
+ if (!result.error) {
735
+ _context2.next = 14;
736
+ break;
737
+ }
738
+ throw result.error;
739
+ case 14:
740
+ missingRoomIds.forEach(function (roomId) {
741
+ var reports = result.data.reports.filter(function (report) {
742
+ return report.roomId === roomId;
743
+ });
744
+ _this2.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', reports)]);
745
+ });
746
+ case 15:
641
747
  case "end":
642
748
  return _context2.stop();
643
749
  }
644
750
  }
645
751
  }, _callee2, this);
646
752
  }));
647
- function getJoinedSpaces() {
648
- return _getJoinedSpaces.apply(this, arguments);
753
+ function cacheSpaceAckReports(_x2) {
754
+ return _cacheSpaceAckReports.apply(this, arguments);
649
755
  }
650
- return getJoinedSpaces;
756
+ return cacheSpaceAckReports;
651
757
  }()
758
+ /**
759
+ * Get ack reports for the given room. Undefined if you are not in the room.
760
+ * @param roomId
761
+ */
652
762
  }, {
653
- key: "getJoinedRooms",
763
+ key: "getRoomAckReports",
654
764
  value: function () {
655
- var _getJoinedRooms = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
765
+ var _getRoomAckReports = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(roomId) {
766
+ var room, result;
656
767
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
657
768
  while (1) {
658
769
  switch (_context3.prev = _context3.next) {
659
770
  case 0:
660
771
  _context3.next = 2;
661
- return this.deferredGetterReadiness('session');
772
+ return this.tracker.rooms.get();
662
773
  case 2:
663
- return _context3.abrupt("return", this.joinedRooms);
774
+ room = _context3.sent.get(roomId);
775
+ if (room) {
776
+ _context3.next = 5;
777
+ break;
778
+ }
779
+ return _context3.abrupt("return", undefined);
780
+ case 5:
781
+ if (this.acks.has(roomId)) {
782
+ _context3.next = 12;
783
+ break;
784
+ }
785
+ _context3.next = 8;
786
+ return this.tracker.client.send('GetAckReports', {
787
+ location: {
788
+ roomId: roomId
789
+ }
790
+ });
791
+ case 8:
792
+ result = _context3.sent;
793
+ if (!result.error) {
794
+ _context3.next = 11;
795
+ break;
796
+ }
797
+ throw result.error;
798
+ case 11:
799
+ this.acks.set([roomId, new ObservableIndexedObjectCollection('topicId', result.data.reports)]);
800
+ case 12:
801
+ return _context3.abrupt("return", this.acks.get(roomId));
802
+ case 13:
803
+ case "end":
804
+ return _context3.stop();
805
+ }
806
+ }
807
+ }, _callee3, this);
808
+ }));
809
+ function getRoomAckReports(_x3) {
810
+ return _getRoomAckReports.apply(this, arguments);
811
+ }
812
+ return getRoomAckReports;
813
+ }()
814
+ /**
815
+ * For internal use. If you want to delete the message, execute a proper command on client object.
816
+ * @internal
817
+ */
818
+ }, {
819
+ key: "_deleteByTopicIds",
820
+ value: function _deleteByTopicIds(roomId) {
821
+ var _this$list, _this$acks$get;
822
+ for (var _len = arguments.length, topicIds = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
823
+ topicIds[_key - 1] = arguments[_key];
824
+ }
825
+ (_this$list = this.list)["delete"].apply(_this$list, MessagesManager_toConsumableArray(topicIds.map(function (topicId) {
826
+ return getCombinedId({
827
+ roomId: roomId,
828
+ topicId: topicId
829
+ });
830
+ })));
831
+ (_this$acks$get = this.acks.get(roomId)) === null || _this$acks$get === void 0 ? void 0 : _this$acks$get["delete"].apply(_this$acks$get, topicIds);
832
+ }
833
+
834
+ /**
835
+ * For internal use. If you want to add new topic, execute a proper command on client object.
836
+ * @internal
837
+ */
838
+ }, {
839
+ key: "_handleNewTopics",
840
+ value: function _handleNewTopics(roomId) {
841
+ for (var _len2 = arguments.length, newTopics = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
842
+ newTopics[_key2 - 1] = arguments[_key2];
843
+ }
844
+ for (var _i = 0, _newTopics = newTopics; _i < _newTopics.length; _i++) {
845
+ var newTopic = _newTopics[_i];
846
+ var newTopicCombinedId = getCombinedId({
847
+ roomId: roomId,
848
+ topicId: newTopic.id
849
+ });
850
+ this.list.set([newTopicCombinedId, new ObservableIndexedObjectCollection('id')]);
851
+
852
+ // If new topic refers to some message from this room, update other structures
853
+ if (newTopic.messageRef) {
854
+ var refTopicCombinedId = getCombinedId({
855
+ roomId: roomId,
856
+ topicId: newTopic.messageRef.topicId
857
+ });
858
+ var refTopicMessages = this.list.get(refTopicCombinedId);
859
+ var refMessage = refTopicMessages === null || refTopicMessages === void 0 ? void 0 : refTopicMessages.get(newTopic.messageRef.messageId);
860
+ if (refMessage) {
861
+ // Update referenced topic ID in message
862
+ refTopicMessages.set(_objectSpread(_objectSpread({}, refMessage), {}, {
863
+ topicRef: newTopic.id
864
+ }));
865
+ }
866
+ }
867
+ }
868
+ this.createAckReportsForNewTopics(roomId, newTopics);
869
+ }
870
+ }, {
871
+ key: "handleNewMessage",
872
+ value: function handleNewMessage(ev) {
873
+ this.list.get(getCombinedId(ev.location)).set(ev.message);
874
+ this.updateLocallyAckReportOnNewMessage(ev);
875
+ }
876
+ }, {
877
+ key: "handleAckReports",
878
+ value: function handleAckReports(ev) {
879
+ var _this3 = this;
880
+ ev.reports.forEach(function (report) {
881
+ var ackReports = _this3.acks.get(report.roomId);
882
+ if (ackReports) {
883
+ ackReports.set(report);
884
+ }
885
+ });
886
+ }
887
+ }, {
888
+ key: "createAckReportsForNewTopics",
889
+ value: function createAckReportsForNewTopics(roomId, topics) {
890
+ var ackReports = this.acks.get(roomId);
891
+ if (!ackReports) {
892
+ // If we don't follow ack reports for this room, skip
893
+ return;
894
+ }
895
+ var newReports = topics.map(function (topic) {
896
+ return {
897
+ roomId: roomId,
898
+ topicId: topic.id,
899
+ lastAckMessageId: null,
900
+ missed: 0,
901
+ missedMoreThan: null
902
+ };
903
+ });
904
+ ackReports.set.apply(ackReports, MessagesManager_toConsumableArray(newReports));
905
+ }
906
+ }, {
907
+ key: "updateLocallyAckReportOnNewMessage",
908
+ value: function updateLocallyAckReportOnNewMessage(ev) {
909
+ var _this$tracker$me;
910
+ var ackReports = this.acks.get(ev.location.roomId);
911
+ if (!ackReports) {
912
+ // If we don't follow ack reports for this room, skip
913
+ return;
914
+ }
915
+ var isMe = ev.message.author.id === ((_this$tracker$me = this.tracker.me) === null || _this$tracker$me === void 0 ? void 0 : _this$tracker$me.id);
916
+ var currentAckReport = ackReports.get(ev.location.topicId);
917
+ var update;
918
+ if (isMe) {
919
+ // Reset missed messages count if new message is authored by me
920
+ update = {
921
+ missed: 0,
922
+ missedMoreThan: null,
923
+ lastAckMessageId: ev.message.id
924
+ };
925
+ } else {
926
+ // ...add 1 otherwise
927
+ update = {
928
+ missed: currentAckReport.missed === null ? null : currentAckReport.missed + 1,
929
+ missedMoreThan: currentAckReport.missedMoreThan === null ? null : currentAckReport.missedMoreThan
930
+ };
931
+ }
932
+ ackReports.set(_objectSpread(_objectSpread({}, currentAckReport), update));
933
+ }
934
+ }]);
935
+ return MessagesManager;
936
+ }();
937
+ ;// CONCATENATED MODULE: ./src/state-tracker/RoomsManager.ts
938
+ function RoomsManager_typeof(obj) { "@babel/helpers - typeof"; return RoomsManager_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, RoomsManager_typeof(obj); }
939
+ function RoomsManager_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
940
+ function RoomsManager_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? RoomsManager_ownKeys(Object(source), !0).forEach(function (key) { RoomsManager_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : RoomsManager_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
941
+ function RoomsManager_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = RoomsManager_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
942
+ function RoomsManager_toConsumableArray(arr) { return RoomsManager_arrayWithoutHoles(arr) || RoomsManager_iterableToArray(arr) || RoomsManager_unsupportedIterableToArray(arr) || RoomsManager_nonIterableSpread(); }
943
+ function RoomsManager_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
944
+ function RoomsManager_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return RoomsManager_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return RoomsManager_arrayLikeToArray(o, minLen); }
945
+ function RoomsManager_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
946
+ function RoomsManager_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return RoomsManager_arrayLikeToArray(arr); }
947
+ function RoomsManager_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
948
+ function RoomsManager_regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ RoomsManager_regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == RoomsManager_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
949
+ function RoomsManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
950
+ function RoomsManager_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { RoomsManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { RoomsManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
951
+ function RoomsManager_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
952
+ function RoomsManager_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, RoomsManager_toPropertyKey(descriptor.key), descriptor); } }
953
+ function RoomsManager_createClass(Constructor, protoProps, staticProps) { if (protoProps) RoomsManager_defineProperties(Constructor.prototype, protoProps); if (staticProps) RoomsManager_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
954
+ function RoomsManager_defineProperty(obj, key, value) { key = RoomsManager_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
955
+ function RoomsManager_toPropertyKey(arg) { var key = RoomsManager_toPrimitive(arg, "string"); return RoomsManager_typeof(key) === "symbol" ? key : String(key); }
956
+ function RoomsManager_toPrimitive(input, hint) { if (RoomsManager_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (RoomsManager_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
957
+
958
+
959
+
960
+ var RoomsManager = /*#__PURE__*/function () {
961
+ function RoomsManager(tracker) {
962
+ var _this = this;
963
+ RoomsManager_classCallCheck(this, RoomsManager);
964
+ this.tracker = tracker;
965
+ RoomsManager_defineProperty(this, "messages", void 0);
966
+ RoomsManager_defineProperty(this, "list", new ObservableIndexedObjectCollection('id'));
967
+ RoomsManager_defineProperty(this, "topics", new IndexedCollection());
968
+ RoomsManager_defineProperty(this, "members", new IndexedCollection());
969
+ RoomsManager_defineProperty(this, "deferredSession", new DeferredTask());
970
+ RoomsManager_defineProperty(this, "membersPromises", new PromiseRegistry());
971
+ this.messages = new MessagesManager(tracker);
972
+ this.tracker.client.on('NewTopic', function (ev) {
973
+ return _this.handleNewTopic(ev);
974
+ });
975
+ this.tracker.client.on('TopicDeleted', function (ev) {
976
+ return _this.handleTopicDeleted(ev);
977
+ });
978
+ this.tracker.client.on('RoomJoined', function (ev) {
979
+ return _this.handleRoomJoined(ev);
980
+ });
981
+ this.tracker.client.on('RoomLeft', function (ev) {
982
+ return _this.handleRoomLeft(ev);
983
+ });
984
+ this.tracker.client.on('RoomUpdated', function (ev) {
985
+ return _this.handleRoomUpdated(ev);
986
+ });
987
+ this.tracker.client.on('RoomDeleted', function (ev) {
988
+ return _this.handleRoomDeleted(ev);
989
+ });
990
+ this.tracker.client.on('RoomMemberJoined', function (ev) {
991
+ return _this.handleRoomMemberJoined(ev);
992
+ });
993
+ this.tracker.client.on('RoomMemberLeft', function (ev) {
994
+ return _this.handleRoomMemberLeft(ev);
995
+ });
996
+ this.tracker.client.on('RoomMembers', function (ev) {
997
+ return _this.handleRoomMembers(ev);
998
+ });
999
+ this.tracker.client.on('RoomMemberUpdated', function (ev) {
1000
+ return _this.handleRoomMemberUpdated(ev);
1001
+ });
1002
+ this.tracker.client.on('SpaceMemberLeft', function (ev) {
1003
+ return _this.handleSpaceMemberLeft(ev);
1004
+ });
1005
+ this.tracker.client.on('SpaceMemberUpdated', function (ev) {
1006
+ return _this.handleSpaceMemberUpdated(ev);
1007
+ });
1008
+ this.tracker.client.on('SpaceDeleted', function (ev) {
1009
+ return _this.handleSpaceDeleted(ev);
1010
+ });
1011
+ this.tracker.client.on('SpaceLeft', function (ev) {
1012
+ return _this.handleSpaceDeleted(ev);
1013
+ });
1014
+ this.tracker.client.on('UserUpdated', function (ev) {
1015
+ return _this.handleUserUpdated(ev);
1016
+ });
1017
+ this.tracker.client.on('Session', function (ev) {
1018
+ return _this.handleSession(ev);
1019
+ });
1020
+ }
1021
+
1022
+ /**
1023
+ * Get collection of room members.
1024
+ */
1025
+ RoomsManager_createClass(RoomsManager, [{
1026
+ key: "getMembers",
1027
+ value: function () {
1028
+ var _getMembers = RoomsManager_asyncToGenerator( /*#__PURE__*/RoomsManager_regeneratorRuntime().mark(function _callee2(roomId) {
1029
+ var _this2 = this;
1030
+ return RoomsManager_regeneratorRuntime().wrap(function _callee2$(_context2) {
1031
+ while (1) {
1032
+ switch (_context2.prev = _context2.next) {
1033
+ case 0:
1034
+ if (this.membersPromises.notExist(roomId)) {
1035
+ this.membersPromises.registerByFunction( /*#__PURE__*/RoomsManager_asyncToGenerator( /*#__PURE__*/RoomsManager_regeneratorRuntime().mark(function _callee() {
1036
+ var result;
1037
+ return RoomsManager_regeneratorRuntime().wrap(function _callee$(_context) {
1038
+ while (1) {
1039
+ switch (_context.prev = _context.next) {
1040
+ case 0:
1041
+ _context.next = 2;
1042
+ return _this2.tracker.client.send('GetRoomMembers', {
1043
+ id: roomId
1044
+ });
1045
+ case 2:
1046
+ result = _context.sent;
1047
+ if (!result.error) {
1048
+ _context.next = 5;
1049
+ break;
1050
+ }
1051
+ throw result.error;
1052
+ case 5:
1053
+ _this2.handleRoomMembers(result.data);
1054
+ case 6:
1055
+ case "end":
1056
+ return _context.stop();
1057
+ }
1058
+ }
1059
+ }, _callee);
1060
+ })), roomId);
1061
+ }
1062
+ _context2.next = 3;
1063
+ return this.membersPromises.get(roomId);
664
1064
  case 3:
1065
+ return _context2.abrupt("return", this.members.get(roomId));
1066
+ case 4:
1067
+ case "end":
1068
+ return _context2.stop();
1069
+ }
1070
+ }
1071
+ }, _callee2, this);
1072
+ }));
1073
+ function getMembers(_x) {
1074
+ return _getMembers.apply(this, arguments);
1075
+ }
1076
+ return getMembers;
1077
+ }()
1078
+ /**
1079
+ * Get a room member representing the current user.
1080
+ */
1081
+ }, {
1082
+ key: "getMe",
1083
+ value: function () {
1084
+ var _getMe = RoomsManager_asyncToGenerator( /*#__PURE__*/RoomsManager_regeneratorRuntime().mark(function _callee3(roomId) {
1085
+ var userId, members;
1086
+ return RoomsManager_regeneratorRuntime().wrap(function _callee3$(_context3) {
1087
+ while (1) {
1088
+ switch (_context3.prev = _context3.next) {
1089
+ case 0:
1090
+ _context3.next = 2;
1091
+ return this.tracker.getMe();
1092
+ case 2:
1093
+ userId = _context3.sent.id;
1094
+ if (this.list.has(roomId)) {
1095
+ _context3.next = 5;
1096
+ break;
1097
+ }
1098
+ return _context3.abrupt("return", undefined);
1099
+ case 5:
1100
+ _context3.next = 7;
1101
+ return this.getMembers(roomId);
1102
+ case 7:
1103
+ members = _context3.sent;
1104
+ return _context3.abrupt("return", members.items.find(function (member) {
1105
+ var _member$user$id, _member$user;
1106
+ return ((_member$user$id = (_member$user = member.user) === null || _member$user === void 0 ? void 0 : _member$user.id) !== null && _member$user$id !== void 0 ? _member$user$id : member.spaceMember.user.id) === userId;
1107
+ }));
1108
+ case 9:
665
1109
  case "end":
666
1110
  return _context3.stop();
667
1111
  }
668
1112
  }
669
1113
  }, _callee3, this);
670
1114
  }));
671
- function getJoinedRooms() {
672
- return _getJoinedRooms.apply(this, arguments);
1115
+ function getMe(_x2) {
1116
+ return _getMe.apply(this, arguments);
673
1117
  }
674
- return getJoinedRooms;
1118
+ return getMe;
675
1119
  }()
1120
+ /**
1121
+ * Get collection of all the rooms you are in.
1122
+ */
676
1123
  }, {
677
- key: "getSpaceRoles",
1124
+ key: "get",
678
1125
  value: function () {
679
- var _getSpaceRoles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(spaceId) {
680
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
1126
+ var _get = RoomsManager_asyncToGenerator( /*#__PURE__*/RoomsManager_regeneratorRuntime().mark(function _callee4() {
1127
+ return RoomsManager_regeneratorRuntime().wrap(function _callee4$(_context4) {
681
1128
  while (1) {
682
1129
  switch (_context4.prev = _context4.next) {
683
1130
  case 0:
684
1131
  _context4.next = 2;
685
- return this.deferredGetterReadiness('session');
1132
+ return this.deferredSession.promise;
686
1133
  case 2:
687
- return _context4.abrupt("return", this.spacesRoles.get(spaceId));
1134
+ return _context4.abrupt("return", this.list);
688
1135
  case 3:
689
1136
  case "end":
690
1137
  return _context4.stop();
@@ -692,23 +1139,26 @@ var ChatStateTracker = /*#__PURE__*/function () {
692
1139
  }
693
1140
  }, _callee4, this);
694
1141
  }));
695
- function getSpaceRoles(_x) {
696
- return _getSpaceRoles.apply(this, arguments);
1142
+ function get() {
1143
+ return _get.apply(this, arguments);
697
1144
  }
698
- return getSpaceRoles;
1145
+ return get;
699
1146
  }()
1147
+ /**
1148
+ * Get collection of room topics.
1149
+ */
700
1150
  }, {
701
- key: "getRoomTopics",
1151
+ key: "getTopics",
702
1152
  value: function () {
703
- var _getRoomTopics = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(roomId) {
704
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
1153
+ var _getTopics = RoomsManager_asyncToGenerator( /*#__PURE__*/RoomsManager_regeneratorRuntime().mark(function _callee5(roomId) {
1154
+ return RoomsManager_regeneratorRuntime().wrap(function _callee5$(_context5) {
705
1155
  while (1) {
706
1156
  switch (_context5.prev = _context5.next) {
707
1157
  case 0:
708
1158
  _context5.next = 2;
709
- return this.deferredGetterReadiness('session');
1159
+ return this.deferredSession.promise;
710
1160
  case 2:
711
- return _context5.abrupt("return", this.roomsTopics.get(roomId));
1161
+ return _context5.abrupt("return", this.topics.get(roomId));
712
1162
  case 3:
713
1163
  case "end":
714
1164
  return _context5.stop();
@@ -716,449 +1166,1507 @@ var ChatStateTracker = /*#__PURE__*/function () {
716
1166
  }
717
1167
  }, _callee5, this);
718
1168
  }));
719
- function getRoomTopics(_x2) {
720
- return _getRoomTopics.apply(this, arguments);
1169
+ function getTopics(_x3) {
1170
+ return _getTopics.apply(this, arguments);
1171
+ }
1172
+ return getTopics;
1173
+ }()
1174
+ }, {
1175
+ key: "deleteRoom",
1176
+ value: function deleteRoom() {
1177
+ var _this$list, _this$members, _this$membersPromises, _this$topics;
1178
+ for (var _len = arguments.length, roomIds = new Array(_len), _key = 0; _key < _len; _key++) {
1179
+ roomIds[_key] = arguments[_key];
1180
+ }
1181
+ (_this$list = this.list)["delete"].apply(_this$list, roomIds);
1182
+ (_this$members = this.members)["delete"].apply(_this$members, roomIds);
1183
+ (_this$membersPromises = this.membersPromises).forget.apply(_this$membersPromises, roomIds);
1184
+ for (var _i = 0, _roomIds = roomIds; _i < _roomIds.length; _i++) {
1185
+ var _this$topics$get$map, _this$topics$get, _this$messages;
1186
+ var roomId = _roomIds[_i];
1187
+ var topicIds = (_this$topics$get$map = (_this$topics$get = this.topics.get(roomId)) === null || _this$topics$get === void 0 ? void 0 : _this$topics$get.map(function (topic) {
1188
+ return topic.id;
1189
+ })) !== null && _this$topics$get$map !== void 0 ? _this$topics$get$map : [];
1190
+ (_this$messages = this.messages)._deleteByTopicIds.apply(_this$messages, [roomId].concat(RoomsManager_toConsumableArray(topicIds)));
1191
+ }
1192
+ (_this$topics = this.topics)["delete"].apply(_this$topics, roomIds);
1193
+ }
1194
+ }, {
1195
+ key: "deleteRoomsBySpaceId",
1196
+ value: function deleteRoomsBySpaceId(spaceId) {
1197
+ this.deleteRoom.apply(this, RoomsManager_toConsumableArray(this.list.findBy('spaceId', spaceId).map(function (room) {
1198
+ return room.id;
1199
+ })));
1200
+ }
1201
+ }, {
1202
+ key: "handleSpaceMemberUpdated",
1203
+ value: function handleSpaceMemberUpdated(ev) {
1204
+ // Update members of rooms related to this space
1205
+ var _iterator = RoomsManager_createForOfIteratorHelper(this.list.findBy('spaceId', ev.spaceId).items),
1206
+ _step;
1207
+ try {
1208
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1209
+ var room = _step.value;
1210
+ var roomMembers = this.members.get(room.id);
1211
+ if (!roomMembers || !roomMembers.has(ev.userId)) {
1212
+ // Skip update if member list for this room is not loaded
1213
+ // or user is not in room
1214
+ continue;
1215
+ }
1216
+ var roomMember = roomMembers.get(ev.userId);
1217
+ var user = roomMember.spaceMember.user;
1218
+
1219
+ // Update space member but first fill user object (it's null in event object)
1220
+ roomMember.spaceMember = RoomsManager_objectSpread(RoomsManager_objectSpread({}, ev.member), {}, {
1221
+ user: user
1222
+ });
1223
+ roomMembers.set(roomMember);
1224
+ }
1225
+ } catch (err) {
1226
+ _iterator.e(err);
1227
+ } finally {
1228
+ _iterator.f();
1229
+ }
1230
+ }
1231
+ }, {
1232
+ key: "handleSpaceMemberLeft",
1233
+ value: function handleSpaceMemberLeft(ev) {
1234
+ var _this3 = this;
1235
+ this.list.findBy('spaceId', ev.spaceId).items.forEach(function (room) {
1236
+ var _this3$members$get;
1237
+ return (_this3$members$get = _this3.members.get(room.id)) === null || _this3$members$get === void 0 ? void 0 : _this3$members$get["delete"](ev.userId);
1238
+ });
1239
+ }
1240
+ }, {
1241
+ key: "handleRoomMemberUpdated",
1242
+ value: function handleRoomMemberUpdated(ev) {
1243
+ var _member$spaceMember$u, _member$spaceMember;
1244
+ if (!this.members.has(ev.roomId)) {
1245
+ // We do not track member list for this room.
1246
+ return;
1247
+ }
1248
+ var members = this.members.get(ev.roomId);
1249
+ var member = members.get(ev.userId);
1250
+ var newMember = ev.member;
1251
+ var user = (_member$spaceMember$u = (_member$spaceMember = member.spaceMember) === null || _member$spaceMember === void 0 ? void 0 : _member$spaceMember.user) !== null && _member$spaceMember$u !== void 0 ? _member$spaceMember$u : member.user;
1252
+ if (newMember.spaceMember) {
1253
+ newMember.spaceMember.user = user;
1254
+ } else {
1255
+ newMember.user = user;
1256
+ }
1257
+ members.set(newMember);
1258
+ }
1259
+ }, {
1260
+ key: "handleSpaceDeleted",
1261
+ value: function handleSpaceDeleted(ev) {
1262
+ this.deleteRoomsBySpaceId(ev.id);
1263
+ }
1264
+ }, {
1265
+ key: "handleTopicDeleted",
1266
+ value: function handleTopicDeleted(ev) {
1267
+ var _room$defaultTopic;
1268
+ var collection = this.topics.get(ev.location.roomId);
1269
+ collection["delete"](ev.location.topicId);
1270
+ var room = this.list.get(ev.location.roomId);
1271
+ if (((_room$defaultTopic = room.defaultTopic) === null || _room$defaultTopic === void 0 ? void 0 : _room$defaultTopic.id) === ev.location.topicId) {
1272
+ this.list.set(RoomsManager_objectSpread(RoomsManager_objectSpread({}, room), {}, {
1273
+ defaultTopic: null
1274
+ }));
1275
+ }
1276
+ }
1277
+ }, {
1278
+ key: "handleNewTopic",
1279
+ value: function handleNewTopic(ev) {
1280
+ this.addJoinedRoomTopics(ev.roomId, ev.topic);
1281
+ }
1282
+ }, {
1283
+ key: "addJoinedRoomTopics",
1284
+ value: function addJoinedRoomTopics(roomId) {
1285
+ var _this$messages2;
1286
+ for (var _len2 = arguments.length, topics = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
1287
+ topics[_key2 - 1] = arguments[_key2];
1288
+ }
1289
+ if (this.topics.has(roomId)) {
1290
+ var _this$topics$get2;
1291
+ (_this$topics$get2 = this.topics.get(roomId)).set.apply(_this$topics$get2, topics);
1292
+ } else {
1293
+ this.topics.set([roomId, new ObservableIndexedObjectCollection('id', topics)]);
1294
+ }
1295
+ (_this$messages2 = this.messages)._handleNewTopics.apply(_this$messages2, [roomId].concat(topics));
1296
+ }
1297
+ }, {
1298
+ key: "handleRoomJoined",
1299
+ value: function handleRoomJoined(ev) {
1300
+ this.addJoinedRooms(ev.room);
1301
+ }
1302
+ }, {
1303
+ key: "handleRoomUpdated",
1304
+ value: function handleRoomUpdated(ev) {
1305
+ this.list.set(RoomsManager_objectSpread(RoomsManager_objectSpread({}, this.list.get(ev.room.id)), {}, {
1306
+ name: ev.room.name,
1307
+ description: ev.room.description
1308
+ }));
1309
+ }
1310
+ }, {
1311
+ key: "handleRoomDeleted",
1312
+ value: function handleRoomDeleted(ev) {
1313
+ this.deleteRoom(ev.id);
1314
+ }
1315
+ }, {
1316
+ key: "addJoinedRooms",
1317
+ value: function addJoinedRooms() {
1318
+ var _this$list2;
1319
+ for (var _len3 = arguments.length, rooms = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
1320
+ rooms[_key3] = arguments[_key3];
1321
+ }
1322
+ for (var _i2 = 0, _rooms = rooms; _i2 < _rooms.length; _i2++) {
1323
+ var room = _rooms[_i2];
1324
+ if (room.defaultTopic) {
1325
+ this.addJoinedRoomTopics(room.id, room.defaultTopic);
1326
+ }
1327
+ }
1328
+ (_this$list2 = this.list).set.apply(_this$list2, rooms);
1329
+ }
1330
+ }, {
1331
+ key: "handleRoomLeft",
1332
+ value: function handleRoomLeft(ev) {
1333
+ this.deleteRoom(ev.id);
1334
+ }
1335
+ }, {
1336
+ key: "handleRoomMemberJoined",
1337
+ value: function handleRoomMemberJoined(ev) {
1338
+ if (this.members.has(ev.roomId)) {
1339
+ this.members.get(ev.roomId).set(ev.member);
1340
+ }
1341
+ }
1342
+ }, {
1343
+ key: "handleRoomMemberLeft",
1344
+ value: function handleRoomMemberLeft(ev) {
1345
+ if (this.members.has(ev.roomId)) {
1346
+ this.members.get(ev.roomId)["delete"](ev.userId);
1347
+ }
1348
+ }
1349
+ }, {
1350
+ key: "handleRoomMembers",
1351
+ value: function handleRoomMembers(ev) {
1352
+ if (!this.members.has(ev.id)) {
1353
+ this.members.set([ev.id, new ObservableIndexedObjectCollection(function (member) {
1354
+ var _member$user$id2, _member$user2;
1355
+ return (_member$user$id2 = (_member$user2 = member.user) === null || _member$user2 === void 0 ? void 0 : _member$user2.id) !== null && _member$user$id2 !== void 0 ? _member$user$id2 : member.spaceMember.user.id;
1356
+ }, ev.members)]);
1357
+ }
1358
+ }
1359
+ }, {
1360
+ key: "handleSession",
1361
+ value: function handleSession(ev) {
1362
+ this.list.deleteAll();
1363
+ this.topics.deleteAll();
1364
+ this.members.deleteAll();
1365
+ this.addJoinedRooms.apply(this, RoomsManager_toConsumableArray(ev.state.rooms));
1366
+ this.deferredSession.resolve();
1367
+ }
1368
+ }, {
1369
+ key: "handleUserUpdated",
1370
+ value: function handleUserUpdated(ev) {
1371
+ this.members.items.forEach(function (members) {
1372
+ var member = members.get(ev.user.id);
1373
+ if (!member) {
1374
+ // Skip room; updated user is not here
1375
+ return;
1376
+ }
1377
+ var newMember = RoomsManager_objectSpread({}, member);
1378
+ if (member.user) {
1379
+ newMember.user = ev.user;
1380
+ } else {
1381
+ newMember.spaceMember.user = ev.user;
1382
+ }
1383
+ members.set(newMember);
1384
+ });
1385
+ }
1386
+ }]);
1387
+ return RoomsManager;
1388
+ }();
1389
+ ;// CONCATENATED MODULE: ./src/state-tracker/functions.ts
1390
+ function reorderRolesOnPriorityUpdate(allRoles, oldRole, updatedRole) {
1391
+ // If the priority has changed, adjust the rest of roles
1392
+ var increased = updatedRole.priority - oldRole.priority > 0;
1393
+ var decreased = !increased;
1394
+ var changedRoles = [];
1395
+ allRoles.forEach(function (role) {
1396
+ if (role.id === updatedRole.id) {
1397
+ // Skip the updated role
1398
+ return;
1399
+ }
1400
+ if (increased && oldRole.priority <= role.priority) {
1401
+ role.priority--;
1402
+ changedRoles.push(role);
1403
+ }
1404
+ if (decreased && updatedRole.priority <= role.priority) {
1405
+ role.priority++;
1406
+ changedRoles.push(role);
1407
+ }
1408
+ });
1409
+ return changedRoles;
1410
+ }
1411
+ ;// CONCATENATED MODULE: ./src/state-tracker/SpacesManager.ts
1412
+ function SpacesManager_typeof(obj) { "@babel/helpers - typeof"; return SpacesManager_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, SpacesManager_typeof(obj); }
1413
+ function SpacesManager_toConsumableArray(arr) { return SpacesManager_arrayWithoutHoles(arr) || SpacesManager_iterableToArray(arr) || SpacesManager_unsupportedIterableToArray(arr) || SpacesManager_nonIterableSpread(); }
1414
+ function SpacesManager_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1415
+ function SpacesManager_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return SpacesManager_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return SpacesManager_arrayLikeToArray(o, minLen); }
1416
+ function SpacesManager_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1417
+ function SpacesManager_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return SpacesManager_arrayLikeToArray(arr); }
1418
+ function SpacesManager_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1419
+ function SpacesManager_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1420
+ function SpacesManager_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? SpacesManager_ownKeys(Object(source), !0).forEach(function (key) { SpacesManager_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : SpacesManager_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1421
+ function SpacesManager_regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ SpacesManager_regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == SpacesManager_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
1422
+ function SpacesManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
1423
+ function SpacesManager_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { SpacesManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { SpacesManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
1424
+ function SpacesManager_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1425
+ function SpacesManager_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, SpacesManager_toPropertyKey(descriptor.key), descriptor); } }
1426
+ function SpacesManager_createClass(Constructor, protoProps, staticProps) { if (protoProps) SpacesManager_defineProperties(Constructor.prototype, protoProps); if (staticProps) SpacesManager_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
1427
+ function SpacesManager_defineProperty(obj, key, value) { key = SpacesManager_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1428
+ function SpacesManager_toPropertyKey(arg) { var key = SpacesManager_toPrimitive(arg, "string"); return SpacesManager_typeof(key) === "symbol" ? key : String(key); }
1429
+ function SpacesManager_toPrimitive(input, hint) { if (SpacesManager_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (SpacesManager_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
1430
+
1431
+
1432
+
1433
+ var SpacesManager = /*#__PURE__*/function () {
1434
+ function SpacesManager(tracker) {
1435
+ var _this = this;
1436
+ SpacesManager_classCallCheck(this, SpacesManager);
1437
+ this.tracker = tracker;
1438
+ SpacesManager_defineProperty(this, "list", new ObservableIndexedObjectCollection('id'));
1439
+ SpacesManager_defineProperty(this, "roles", new IndexedCollection());
1440
+ SpacesManager_defineProperty(this, "rooms", new IndexedCollection());
1441
+ SpacesManager_defineProperty(this, "roomIdToSpaceId", new IndexedCollection());
1442
+ SpacesManager_defineProperty(this, "members", new IndexedCollection());
1443
+ SpacesManager_defineProperty(this, "deferredSession", new DeferredTask());
1444
+ SpacesManager_defineProperty(this, "roomsPromises", new PromiseRegistry());
1445
+ SpacesManager_defineProperty(this, "membersPromises", new PromiseRegistry());
1446
+ this.tracker.client.on('NewRoom', function (ev) {
1447
+ return _this.handleNewRoom(ev);
1448
+ });
1449
+ this.tracker.client.on('RoomDeleted', function (ev) {
1450
+ return _this.handleRoomDeleted(ev);
1451
+ });
1452
+ this.tracker.client.on('RoomUpdated', function (ev) {
1453
+ return _this.handleRoomUpdated(ev);
1454
+ });
1455
+ this.tracker.client.on('SpaceDeleted', function (ev) {
1456
+ return _this.handleSpaceDeleted(ev);
1457
+ });
1458
+ this.tracker.client.on('SpaceUpdated', function (ev) {
1459
+ return _this.handleSpaceUpdated(ev);
1460
+ });
1461
+ this.tracker.client.on('SpaceJoined', function (ev) {
1462
+ return _this.handleSpaceJoined(ev);
1463
+ });
1464
+ this.tracker.client.on('SpaceLeft', function (ev) {
1465
+ return _this.handleSpaceDeleted(ev);
1466
+ });
1467
+ this.tracker.client.on('SpaceMemberJoined', function (ev) {
1468
+ return _this.handleSpaceMemberJoined(ev);
1469
+ });
1470
+ this.tracker.client.on('SpaceMemberLeft', function (ev) {
1471
+ return _this.handleSpaceMemberLeft(ev);
1472
+ });
1473
+ this.tracker.client.on('SpaceMembers', function (ev) {
1474
+ return _this.handleSpaceMembers(ev);
1475
+ });
1476
+ this.tracker.client.on('SpaceRooms', function (ev) {
1477
+ return _this.handleSpaceRooms(ev);
1478
+ });
1479
+ this.tracker.client.on('SpaceMemberUpdated', function (ev) {
1480
+ return _this.handleSpaceMemberUpdated(ev);
1481
+ });
1482
+ this.tracker.client.on('UserUpdated', function (ev) {
1483
+ return _this.handleUserUpdated(ev);
1484
+ });
1485
+ this.tracker.client.on('NewRole', function (ev) {
1486
+ return _this.handleNewRole(ev);
1487
+ });
1488
+ this.tracker.client.on('RoleDeleted', function (ev) {
1489
+ return _this.handleRoleDeleted(ev);
1490
+ });
1491
+ this.tracker.client.on('RoleUpdated', function (ev) {
1492
+ return _this.handleRoleUpdated(ev);
1493
+ });
1494
+ this.tracker.client.on('Session', function (ev) {
1495
+ return _this.handleSession(ev);
1496
+ });
1497
+ }
1498
+
1499
+ /**
1500
+ * Get collection of all the spaces you are in.
1501
+ */
1502
+ SpacesManager_createClass(SpacesManager, [{
1503
+ key: "get",
1504
+ value: function () {
1505
+ var _get = SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee() {
1506
+ return SpacesManager_regeneratorRuntime().wrap(function _callee$(_context) {
1507
+ while (1) {
1508
+ switch (_context.prev = _context.next) {
1509
+ case 0:
1510
+ _context.next = 2;
1511
+ return this.deferredSession.promise;
1512
+ case 2:
1513
+ return _context.abrupt("return", this.list);
1514
+ case 3:
1515
+ case "end":
1516
+ return _context.stop();
1517
+ }
1518
+ }
1519
+ }, _callee, this);
1520
+ }));
1521
+ function get() {
1522
+ return _get.apply(this, arguments);
1523
+ }
1524
+ return get;
1525
+ }()
1526
+ /**
1527
+ * Get collection of space roles.
1528
+ */
1529
+ }, {
1530
+ key: "getRoles",
1531
+ value: function () {
1532
+ var _getRoles = SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee2(spaceId) {
1533
+ return SpacesManager_regeneratorRuntime().wrap(function _callee2$(_context2) {
1534
+ while (1) {
1535
+ switch (_context2.prev = _context2.next) {
1536
+ case 0:
1537
+ _context2.next = 2;
1538
+ return this.deferredSession.promise;
1539
+ case 2:
1540
+ return _context2.abrupt("return", this.roles.get(spaceId));
1541
+ case 3:
1542
+ case "end":
1543
+ return _context2.stop();
1544
+ }
1545
+ }
1546
+ }, _callee2, this);
1547
+ }));
1548
+ function getRoles(_x) {
1549
+ return _getRoles.apply(this, arguments);
1550
+ }
1551
+ return getRoles;
1552
+ }()
1553
+ /**
1554
+ * Get collection of the all available rooms inside given space.
1555
+ */
1556
+ }, {
1557
+ key: "getRooms",
1558
+ value: function () {
1559
+ var _getRooms = SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee4(spaceId) {
1560
+ var _this2 = this;
1561
+ return SpacesManager_regeneratorRuntime().wrap(function _callee4$(_context4) {
1562
+ while (1) {
1563
+ switch (_context4.prev = _context4.next) {
1564
+ case 0:
1565
+ if (this.roomsPromises.notExist(spaceId)) {
1566
+ this.roomsPromises.registerByFunction( /*#__PURE__*/SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee3() {
1567
+ var result;
1568
+ return SpacesManager_regeneratorRuntime().wrap(function _callee3$(_context3) {
1569
+ while (1) {
1570
+ switch (_context3.prev = _context3.next) {
1571
+ case 0:
1572
+ _context3.next = 2;
1573
+ return _this2.tracker.client.send('GetSpaceRooms', {
1574
+ id: spaceId
1575
+ });
1576
+ case 2:
1577
+ result = _context3.sent;
1578
+ if (!result.error) {
1579
+ _context3.next = 5;
1580
+ break;
1581
+ }
1582
+ throw result.error;
1583
+ case 5:
1584
+ _this2.handleSpaceRooms(result.data);
1585
+ case 6:
1586
+ case "end":
1587
+ return _context3.stop();
1588
+ }
1589
+ }
1590
+ }, _callee3);
1591
+ })), spaceId);
1592
+ }
1593
+ _context4.next = 3;
1594
+ return this.roomsPromises.get(spaceId);
1595
+ case 3:
1596
+ return _context4.abrupt("return", this.rooms.get(spaceId));
1597
+ case 4:
1598
+ case "end":
1599
+ return _context4.stop();
1600
+ }
1601
+ }
1602
+ }, _callee4, this);
1603
+ }));
1604
+ function getRooms(_x2) {
1605
+ return _getRooms.apply(this, arguments);
1606
+ }
1607
+ return getRooms;
1608
+ }()
1609
+ /**
1610
+ * Get collection of space members.
1611
+ */
1612
+ }, {
1613
+ key: "getMembers",
1614
+ value: function () {
1615
+ var _getMembers = SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee6(spaceId) {
1616
+ var _this3 = this;
1617
+ return SpacesManager_regeneratorRuntime().wrap(function _callee6$(_context6) {
1618
+ while (1) {
1619
+ switch (_context6.prev = _context6.next) {
1620
+ case 0:
1621
+ if (this.membersPromises.notExist(spaceId)) {
1622
+ this.membersPromises.registerByFunction( /*#__PURE__*/SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee5() {
1623
+ var result;
1624
+ return SpacesManager_regeneratorRuntime().wrap(function _callee5$(_context5) {
1625
+ while (1) {
1626
+ switch (_context5.prev = _context5.next) {
1627
+ case 0:
1628
+ _context5.next = 2;
1629
+ return _this3.tracker.client.send('GetSpaceMembers', {
1630
+ id: spaceId
1631
+ });
1632
+ case 2:
1633
+ result = _context5.sent;
1634
+ if (!result.error) {
1635
+ _context5.next = 5;
1636
+ break;
1637
+ }
1638
+ throw result.error;
1639
+ case 5:
1640
+ _this3.handleSpaceMembers(result.data);
1641
+ case 6:
1642
+ case "end":
1643
+ return _context5.stop();
1644
+ }
1645
+ }
1646
+ }, _callee5);
1647
+ })), spaceId);
1648
+ }
1649
+ _context6.next = 3;
1650
+ return this.membersPromises.get(spaceId);
1651
+ case 3:
1652
+ return _context6.abrupt("return", this.members.get(spaceId));
1653
+ case 4:
1654
+ case "end":
1655
+ return _context6.stop();
1656
+ }
1657
+ }
1658
+ }, _callee6, this);
1659
+ }));
1660
+ function getMembers(_x3) {
1661
+ return _getMembers.apply(this, arguments);
1662
+ }
1663
+ return getMembers;
1664
+ }()
1665
+ /**
1666
+ * Get a space member representing the current user.
1667
+ */
1668
+ }, {
1669
+ key: "getMe",
1670
+ value: function () {
1671
+ var _getMe = SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee7(spaceId) {
1672
+ var userId, members;
1673
+ return SpacesManager_regeneratorRuntime().wrap(function _callee7$(_context7) {
1674
+ while (1) {
1675
+ switch (_context7.prev = _context7.next) {
1676
+ case 0:
1677
+ _context7.next = 2;
1678
+ return this.tracker.getMe();
1679
+ case 2:
1680
+ userId = _context7.sent.id;
1681
+ if (this.list.has(spaceId)) {
1682
+ _context7.next = 5;
1683
+ break;
1684
+ }
1685
+ return _context7.abrupt("return", undefined);
1686
+ case 5:
1687
+ _context7.next = 7;
1688
+ return this.getMembers(spaceId);
1689
+ case 7:
1690
+ members = _context7.sent;
1691
+ return _context7.abrupt("return", members.items.find(function (member) {
1692
+ return member.user.id === userId;
1693
+ }));
1694
+ case 9:
1695
+ case "end":
1696
+ return _context7.stop();
1697
+ }
1698
+ }
1699
+ }, _callee7, this);
1700
+ }));
1701
+ function getMe(_x4) {
1702
+ return _getMe.apply(this, arguments);
1703
+ }
1704
+ return getMe;
1705
+ }()
1706
+ }, {
1707
+ key: "handleNewRole",
1708
+ value: function handleNewRole(ev) {
1709
+ var collection = this.roles.get(ev.spaceId);
1710
+ collection.set(ev.role);
1711
+ this.list.get(ev.spaceId).roles = collection.items;
1712
+ }
1713
+ }, {
1714
+ key: "handleNewRoom",
1715
+ value: function handleNewRoom(ev) {
1716
+ var _this$rooms$get;
1717
+ (_this$rooms$get = this.rooms.get(ev.spaceId)) === null || _this$rooms$get === void 0 ? void 0 : _this$rooms$get.set(ev.summary);
1718
+ this.roomIdToSpaceId.set([ev.summary.id, ev.spaceId]);
1719
+ }
1720
+ }, {
1721
+ key: "handleRoomUpdated",
1722
+ value: function handleRoomUpdated(ev) {
1723
+ if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {
1724
+ var rooms = this.rooms.get(ev.room.spaceId);
1725
+ rooms.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, rooms.get(ev.room.id)), {}, {
1726
+ name: ev.room.name,
1727
+ description: ev.room.description
1728
+ }));
1729
+ }
1730
+ }
1731
+ }, {
1732
+ key: "handleRoomDeleted",
1733
+ value: function () {
1734
+ var _handleRoomDeleted = SpacesManager_asyncToGenerator( /*#__PURE__*/SpacesManager_regeneratorRuntime().mark(function _callee8(ev) {
1735
+ var spaceId;
1736
+ return SpacesManager_regeneratorRuntime().wrap(function _callee8$(_context8) {
1737
+ while (1) {
1738
+ switch (_context8.prev = _context8.next) {
1739
+ case 0:
1740
+ spaceId = this.roomIdToSpaceId.get(ev.id);
1741
+ if (spaceId && this.rooms.has(spaceId)) {
1742
+ this.rooms.get(spaceId)["delete"](ev.id);
1743
+ }
1744
+ case 2:
1745
+ case "end":
1746
+ return _context8.stop();
1747
+ }
1748
+ }
1749
+ }, _callee8, this);
1750
+ }));
1751
+ function handleRoomDeleted(_x5) {
1752
+ return _handleRoomDeleted.apply(this, arguments);
1753
+ }
1754
+ return handleRoomDeleted;
1755
+ }()
1756
+ }, {
1757
+ key: "handleRoleDeleted",
1758
+ value: function handleRoleDeleted(ev) {
1759
+ var collection = this.roles.get(ev.spaceId);
1760
+ collection["delete"](ev.id);
1761
+ this.list.get(ev.spaceId).roles = collection.items;
1762
+ }
1763
+ }, {
1764
+ key: "handleSpaceUpdated",
1765
+ value: function handleSpaceUpdated(ev) {
1766
+ this.list.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, this.list.get(ev.space.id)), {}, {
1767
+ name: ev.space.name
1768
+ }));
1769
+ }
1770
+ }, {
1771
+ key: "handleSpaceDeleted",
1772
+ value: function handleSpaceDeleted(ev) {
1773
+ var _this$rooms$get$map, _this$rooms$get2, _this$roomIdToSpaceId;
1774
+ var roomIds = (_this$rooms$get$map = (_this$rooms$get2 = this.rooms.get(ev.id)) === null || _this$rooms$get2 === void 0 ? void 0 : _this$rooms$get2.map(function (item) {
1775
+ return item.id;
1776
+ })) !== null && _this$rooms$get$map !== void 0 ? _this$rooms$get$map : [];
1777
+ (_this$roomIdToSpaceId = this.roomIdToSpaceId)["delete"].apply(_this$roomIdToSpaceId, SpacesManager_toConsumableArray(roomIds));
1778
+ this.roles["delete"](ev.id);
1779
+ this.members["delete"](ev.id);
1780
+ this.membersPromises.forget(ev.id);
1781
+ this.rooms["delete"](ev.id);
1782
+ this.roomsPromises.forget(ev.id);
1783
+ this.list["delete"](ev.id);
1784
+ }
1785
+ }, {
1786
+ key: "handleSpaceJoined",
1787
+ value: function handleSpaceJoined(ev) {
1788
+ this.addJoinedSpaces(ev.space);
1789
+ }
1790
+ }, {
1791
+ key: "addJoinedSpaces",
1792
+ value: function addJoinedSpaces() {
1793
+ var _this$roles, _this$list;
1794
+ for (var _len = arguments.length, spaces = new Array(_len), _key = 0; _key < _len; _key++) {
1795
+ spaces[_key] = arguments[_key];
1796
+ }
1797
+ (_this$roles = this.roles).set.apply(_this$roles, SpacesManager_toConsumableArray(spaces.map(function (space) {
1798
+ return [space.id, new ObservableIndexedObjectCollection('id', space.roles)];
1799
+ })));
1800
+ (_this$list = this.list).set.apply(_this$list, spaces);
1801
+ }
1802
+ }, {
1803
+ key: "handleSpaceMemberJoined",
1804
+ value: function handleSpaceMemberJoined(ev) {
1805
+ if (this.members.has(ev.spaceId)) {
1806
+ this.members.get(ev.spaceId).set(ev.member);
1807
+ }
1808
+ }
1809
+ }, {
1810
+ key: "handleSpaceMemberLeft",
1811
+ value: function handleSpaceMemberLeft(ev) {
1812
+ if (this.members.has(ev.spaceId)) {
1813
+ this.members.get(ev.spaceId)["delete"](ev.userId);
1814
+ }
1815
+ }
1816
+ }, {
1817
+ key: "handleSpaceMembers",
1818
+ value: function handleSpaceMembers(ev) {
1819
+ if (!this.members.has(ev.id)) {
1820
+ this.members.set([ev.id, new ObservableIndexedObjectCollection(function (member) {
1821
+ return member === null || member === void 0 ? void 0 : member.user.id;
1822
+ }, ev.members)]);
1823
+ }
1824
+ }
1825
+ }, {
1826
+ key: "handleSpaceRooms",
1827
+ value: function handleSpaceRooms(ev) {
1828
+ if (!this.rooms.has(ev.id)) {
1829
+ this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);
1830
+ }
1831
+ }
1832
+ }, {
1833
+ key: "handleSpaceMemberUpdated",
1834
+ value: function handleSpaceMemberUpdated(ev) {
1835
+ if (this.members.has(ev.spaceId)) {
1836
+ var members = this.members.get(ev.spaceId);
1837
+ var member = members.get(ev.userId);
1838
+ members.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, ev.member), {}, {
1839
+ user: member.user
1840
+ }));
1841
+ }
1842
+ }
1843
+ }, {
1844
+ key: "handleRoleUpdated",
1845
+ value: function handleRoleUpdated(ev) {
1846
+ var _this$roles$get;
1847
+ var roles = this.roles.get(ev.spaceId);
1848
+ var oldRole = roles.get(ev.role.id);
1849
+ var newRole = ev.role;
1850
+ var rolesToUpdate = [newRole];
1851
+ if (oldRole.priority !== newRole.priority) {
1852
+ rolesToUpdate.push.apply(rolesToUpdate, SpacesManager_toConsumableArray(reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)));
1853
+ }
1854
+ (_this$roles$get = this.roles.get(ev.spaceId)).set.apply(_this$roles$get, rolesToUpdate);
1855
+ }
1856
+ }, {
1857
+ key: "handleSession",
1858
+ value: function handleSession(ev) {
1859
+ this.list.deleteAll();
1860
+ this.roles.deleteAll();
1861
+ this.rooms.deleteAll();
1862
+ this.members.deleteAll();
1863
+ this.roomIdToSpaceId.deleteAll();
1864
+ this.addJoinedSpaces.apply(this, SpacesManager_toConsumableArray(ev.state.spaces));
1865
+ this.deferredSession.resolve();
1866
+ }
1867
+ }, {
1868
+ key: "handleUserUpdated",
1869
+ value: function handleUserUpdated(ev) {
1870
+ this.members.items.forEach(function (members) {
1871
+ var member = members.get(ev.user.id);
1872
+ if (!member) {
1873
+ // Skip space; updated user is not here
1874
+ return;
1875
+ }
1876
+ members.set(SpacesManager_objectSpread(SpacesManager_objectSpread({}, member), {}, {
1877
+ user: ev.user
1878
+ }));
1879
+ });
1880
+ }
1881
+ }]);
1882
+ return SpacesManager;
1883
+ }();
1884
+ ;// CONCATENATED MODULE: ./src/Permissions.ts
1885
+ function Permissions_typeof(obj) { "@babel/helpers - typeof"; return Permissions_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, Permissions_typeof(obj); }
1886
+ function Permissions_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, Permissions_toPropertyKey(descriptor.key), descriptor); } }
1887
+ function Permissions_createClass(Constructor, protoProps, staticProps) { if (protoProps) Permissions_defineProperties(Constructor.prototype, protoProps); if (staticProps) Permissions_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
1888
+ function Permissions_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1889
+ function Permissions_defineProperty(obj, key, value) { key = Permissions_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1890
+ function Permissions_toPropertyKey(arg) { var key = Permissions_toPrimitive(arg, "string"); return Permissions_typeof(key) === "symbol" ? key : String(key); }
1891
+ function Permissions_toPrimitive(input, hint) { if (Permissions_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (Permissions_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
1892
+ var Layer;
1893
+ (function (Layer) {
1894
+ Layer[Layer["Global"] = 0] = "Global";
1895
+ Layer[Layer["Space"] = 1] = "Space";
1896
+ Layer[Layer["Room"] = 2] = "Room";
1897
+ Layer[Layer["Topic"] = 3] = "Topic";
1898
+ })(Layer || (Layer = {}));
1899
+ var PermissionDefinition = /*#__PURE__*/Permissions_createClass(function PermissionDefinition() {
1900
+ Permissions_classCallCheck(this, PermissionDefinition);
1901
+ Permissions_defineProperty(this, "value", void 0);
1902
+ Permissions_defineProperty(this, "maxLayer", void 0);
1903
+ });
1904
+ var Permissions = /*#__PURE__*/function () {
1905
+ function Permissions() {
1906
+ Permissions_classCallCheck(this, Permissions);
1907
+ }
1908
+ Permissions_createClass(Permissions, null, [{
1909
+ key: "getNames",
1910
+ value: function getNames() {
1911
+ return Object.keys(this.list);
1912
+ }
1913
+ }, {
1914
+ key: "getByName",
1915
+ value: function getByName(name) {
1916
+ return this.list[name];
1917
+ }
1918
+ }, {
1919
+ key: "canBeDefinedOnLayer",
1920
+ value: function canBeDefinedOnLayer(permissionName, layer) {
1921
+ var def = this.getByName(permissionName);
1922
+ if (!def) {
1923
+ throw new Error("Invalid permission name: ".concat(permissionName));
1924
+ }
1925
+ return layer <= this.getByName(permissionName).maxLayer;
1926
+ }
1927
+ }]);
1928
+ return Permissions;
1929
+ }();
1930
+ Permissions_defineProperty(Permissions, "list", {
1931
+ Root: {
1932
+ value: 1 << 0,
1933
+ maxLayer: Layer.Room
1934
+ },
1935
+ CreateSpaces: {
1936
+ value: 1 << 1,
1937
+ maxLayer: Layer.Global
1938
+ },
1939
+ ManageSpace: {
1940
+ value: 1 << 2,
1941
+ maxLayer: Layer.Space
1942
+ },
1943
+ ManageSpaceRoles: {
1944
+ value: 1 << 3,
1945
+ maxLayer: Layer.Space
1946
+ },
1947
+ ManageRoom: {
1948
+ value: 1 << 4,
1949
+ maxLayer: Layer.Room
1950
+ },
1951
+ ManageTopic: {
1952
+ value: 1 << 5,
1953
+ maxLayer: Layer.Topic
1954
+ },
1955
+ ManageSpaceMembers: {
1956
+ value: 1 << 6,
1957
+ maxLayer: Layer.Space
1958
+ },
1959
+ ManageRoomMembers: {
1960
+ value: 1 << 7,
1961
+ maxLayer: Layer.Room
1962
+ },
1963
+ CreateMessages: {
1964
+ value: 1 << 8,
1965
+ maxLayer: Layer.Topic
1966
+ },
1967
+ ManagePermissions: {
1968
+ value: 1 << 9,
1969
+ maxLayer: Layer.Topic
1970
+ },
1971
+ CreateSpaceRooms: {
1972
+ value: 1 << 10,
1973
+ maxLayer: Layer.Space
1974
+ },
1975
+ ManageSpaceRooms: {
1976
+ value: 1 << 11,
1977
+ maxLayer: Layer.Space
1978
+ }
1979
+ });
1980
+ ;// CONCATENATED MODULE: ./src/state-tracker/PermissionsManager.ts
1981
+ function PermissionsManager_typeof(obj) { "@babel/helpers - typeof"; return PermissionsManager_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, PermissionsManager_typeof(obj); }
1982
+ function PermissionsManager_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = PermissionsManager_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
1983
+ function PermissionsManager_toConsumableArray(arr) { return PermissionsManager_arrayWithoutHoles(arr) || PermissionsManager_iterableToArray(arr) || PermissionsManager_unsupportedIterableToArray(arr) || PermissionsManager_nonIterableSpread(); }
1984
+ function PermissionsManager_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1985
+ function PermissionsManager_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1986
+ function PermissionsManager_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PermissionsManager_arrayLikeToArray(arr); }
1987
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || PermissionsManager_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
1988
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1989
+ function PermissionsManager_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PermissionsManager_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PermissionsManager_arrayLikeToArray(o, minLen); }
1990
+ function PermissionsManager_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1991
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
1992
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1993
+ function PermissionsManager_regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ PermissionsManager_regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == PermissionsManager_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
1994
+ function PermissionsManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
1995
+ function PermissionsManager_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { PermissionsManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { PermissionsManager_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
1996
+ function PermissionsManager_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1997
+ function PermissionsManager_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, PermissionsManager_toPropertyKey(descriptor.key), descriptor); } }
1998
+ function PermissionsManager_createClass(Constructor, protoProps, staticProps) { if (protoProps) PermissionsManager_defineProperties(Constructor.prototype, protoProps); if (staticProps) PermissionsManager_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
1999
+ function PermissionsManager_get() { if (typeof Reflect !== "undefined" && Reflect.get) { PermissionsManager_get = Reflect.get.bind(); } else { PermissionsManager_get = function _get(target, property, receiver) { var base = PermissionsManager_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return PermissionsManager_get.apply(this, arguments); }
2000
+ function PermissionsManager_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PermissionsManager_getPrototypeOf(object); if (object === null) break; } return object; }
2001
+ function PermissionsManager_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) PermissionsManager_setPrototypeOf(subClass, superClass); }
2002
+ function PermissionsManager_setPrototypeOf(o, p) { PermissionsManager_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PermissionsManager_setPrototypeOf(o, p); }
2003
+ function PermissionsManager_createSuper(Derived) { var hasNativeReflectConstruct = PermissionsManager_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PermissionsManager_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PermissionsManager_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PermissionsManager_possibleConstructorReturn(this, result); }; }
2004
+ function PermissionsManager_possibleConstructorReturn(self, call) { if (call && (PermissionsManager_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return PermissionsManager_assertThisInitialized(self); }
2005
+ function PermissionsManager_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
2006
+ function PermissionsManager_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
2007
+ function PermissionsManager_getPrototypeOf(o) { PermissionsManager_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PermissionsManager_getPrototypeOf(o); }
2008
+ function PermissionsManager_defineProperty(obj, key, value) { key = PermissionsManager_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2009
+ function PermissionsManager_toPropertyKey(arg) { var key = PermissionsManager_toPrimitive(arg, "string"); return PermissionsManager_typeof(key) === "symbol" ? key : String(key); }
2010
+ function PermissionsManager_toPrimitive(input, hint) { if (PermissionsManager_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (PermissionsManager_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2011
+
2012
+
2013
+
2014
+
2015
+ var getOvId = function getOvId(location, target, targetId) {
2016
+ var _location$spaceId, _location$roomId, _location$topicId;
2017
+ return ((_location$spaceId = location.spaceId) !== null && _location$spaceId !== void 0 ? _location$spaceId : '') + ((_location$roomId = location.roomId) !== null && _location$roomId !== void 0 ? _location$roomId : '') + ((_location$topicId = location.topicId) !== null && _location$topicId !== void 0 ? _location$topicId : '') + (target !== null && target !== void 0 ? target : '') + (targetId !== null && targetId !== void 0 ? targetId : '');
2018
+ };
2019
+ var getOvIdByObject = function getOvIdByObject(overwrites) {
2020
+ return getOvId(overwrites.location, overwrites.target, overwrites.targetId);
2021
+ };
2022
+ var PermissionsManager = /*#__PURE__*/function (_EventTarget) {
2023
+ PermissionsManager_inherits(PermissionsManager, _EventTarget);
2024
+ var _super = PermissionsManager_createSuper(PermissionsManager);
2025
+ function PermissionsManager(tracker) {
2026
+ var _this;
2027
+ PermissionsManager_classCallCheck(this, PermissionsManager);
2028
+ _this = _super.call(this);
2029
+ _this.tracker = tracker;
2030
+ PermissionsManager_defineProperty(PermissionsManager_assertThisInitialized(_this), "overwrites", new IndexedCollection());
2031
+ PermissionsManager_defineProperty(PermissionsManager_assertThisInitialized(_this), "overwritesPromises", new PromiseRegistry());
2032
+ _this.tracker.client.on('PermissionOverwrites', function (ev) {
2033
+ return _this.handlePermissionOverwrites(ev);
2034
+ });
2035
+ _this.tracker.client.on('PermissionOverwritesUpdated', function (ev) {
2036
+ return _this.handlePermissionOverwrites(ev);
2037
+ });
2038
+ _this.tracker.client.on('SpaceDeleted', function (ev) {
2039
+ return _this.handleSpaceDeleted(ev);
2040
+ });
2041
+ _this.tracker.client.on('SpaceLeft', function (ev) {
2042
+ return _this.handleSpaceDeleted(ev);
2043
+ });
2044
+ _this.tracker.client.on('RoomDeleted', function (ev) {
2045
+ return _this.handleRoomDeleted(ev);
2046
+ });
2047
+ _this.tracker.client.on('RoomLeft', function (ev) {
2048
+ return _this.handleRoomDeleted(ev);
2049
+ });
2050
+ _this.tracker.client.on('TopicDeleted', function (ev) {
2051
+ return _this.handleTopicDeleted(ev);
2052
+ });
2053
+ _this.tracker.client.on('RoleDeleted', function (ev) {
2054
+ return _this.handleRoleDeleted(ev);
2055
+ });
2056
+ _this.tracker.client.on('SpaceMemberUpdated', function (ev) {
2057
+ return _this.handleSpaceMemberUpdated(ev);
2058
+ });
2059
+ _this.tracker.client.on('RoomMemberUpdated', function (ev) {
2060
+ return _this.handleRoomMemberUpdated(ev);
2061
+ });
2062
+ return _this;
2063
+ }
2064
+ PermissionsManager_createClass(PermissionsManager, [{
2065
+ key: "getOverwrites",
2066
+ value: function () {
2067
+ var _getOverwrites = PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee2(location, target, targetId) {
2068
+ var _this2 = this;
2069
+ var id;
2070
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee2$(_context2) {
2071
+ while (1) {
2072
+ switch (_context2.prev = _context2.next) {
2073
+ case 0:
2074
+ this.validateLocation(location);
2075
+ id = getOvId(location, target, targetId);
2076
+ if (this.overwritesPromises.notExist(id)) {
2077
+ this.overwritesPromises.registerByFunction( /*#__PURE__*/PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee() {
2078
+ var result;
2079
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee$(_context) {
2080
+ while (1) {
2081
+ switch (_context.prev = _context.next) {
2082
+ case 0:
2083
+ _context.next = 2;
2084
+ return _this2.tracker.client.send('GetPermissionOverwrites', {
2085
+ location: location,
2086
+ target: target,
2087
+ targetId: targetId
2088
+ });
2089
+ case 2:
2090
+ result = _context.sent;
2091
+ if (!result.error) {
2092
+ _context.next = 5;
2093
+ break;
2094
+ }
2095
+ throw result.error;
2096
+ case 5:
2097
+ _this2.handlePermissionOverwrites(result.data);
2098
+ case 6:
2099
+ case "end":
2100
+ return _context.stop();
2101
+ }
2102
+ }
2103
+ }, _callee);
2104
+ })), id);
2105
+ }
2106
+ _context2.next = 5;
2107
+ return this.overwritesPromises.get(id);
2108
+ case 5:
2109
+ return _context2.abrupt("return", this.overwrites.get(id));
2110
+ case 6:
2111
+ case "end":
2112
+ return _context2.stop();
2113
+ }
2114
+ }
2115
+ }, _callee2, this);
2116
+ }));
2117
+ function getOverwrites(_x, _x2, _x3) {
2118
+ return _getOverwrites.apply(this, arguments);
2119
+ }
2120
+ return getOverwrites;
2121
+ }()
2122
+ }, {
2123
+ key: "on",
2124
+ value: function on(eventName, handler) {
2125
+ return PermissionsManager_get(PermissionsManager_getPrototypeOf(PermissionsManager.prototype), "on", this).call(this, eventName, handler);
2126
+ }
2127
+ }, {
2128
+ key: "check",
2129
+ value: function () {
2130
+ var _check = PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee3(permissionNames, location) {
2131
+ var ownedPermissions, missing;
2132
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee3$(_context3) {
2133
+ while (1) {
2134
+ switch (_context3.prev = _context3.next) {
2135
+ case 0:
2136
+ if (permissionNames.length) {
2137
+ _context3.next = 2;
2138
+ break;
2139
+ }
2140
+ throw new Error('Permission names array cannot be empty');
2141
+ case 2:
2142
+ _context3.next = 4;
2143
+ return this.calculatePermissions(location);
2144
+ case 4:
2145
+ ownedPermissions = _context3.sent;
2146
+ missing = [];
2147
+ permissionNames.forEach(function (name) {
2148
+ if (~ownedPermissions & Permissions.getByName(name).value) {
2149
+ missing.push(name);
2150
+ }
2151
+ });
2152
+ return _context3.abrupt("return", {
2153
+ ok: missing.length === 0,
2154
+ hasAll: missing.length === 0,
2155
+ hasAny: missing.length < permissionNames.length,
2156
+ missing: missing
2157
+ });
2158
+ case 8:
2159
+ case "end":
2160
+ return _context3.stop();
2161
+ }
2162
+ }
2163
+ }, _callee3, this);
2164
+ }));
2165
+ function check(_x4, _x5) {
2166
+ return _check.apply(this, arguments);
2167
+ }
2168
+ return check;
2169
+ }()
2170
+ }, {
2171
+ key: "calculatePermissions",
2172
+ value: function () {
2173
+ var _calculatePermissions = PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee4(location) {
2174
+ var _spaceMember$roles, _roomMember$roles, _yield$this$tracker$s, _yield$this$tracker$r, _yield$this$tracker$r2;
2175
+ var userId, _yield$this$fetchMemb, _yield$this$fetchMemb2, spaceMember, roomMember, userRoles, promises, filterLocation, _filterLocation;
2176
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee4$(_context4) {
2177
+ while (1) {
2178
+ switch (_context4.prev = _context4.next) {
2179
+ case 0:
2180
+ this.validateLocation(location);
2181
+ _context4.next = 3;
2182
+ return this.tracker.getMe();
2183
+ case 3:
2184
+ userId = _context4.sent.id;
2185
+ _context4.next = 6;
2186
+ return this.fetchMembersOrFail(location);
2187
+ case 6:
2188
+ _yield$this$fetchMemb = _context4.sent;
2189
+ _yield$this$fetchMemb2 = _slicedToArray(_yield$this$fetchMemb, 2);
2190
+ spaceMember = _yield$this$fetchMemb2[0];
2191
+ roomMember = _yield$this$fetchMemb2[1];
2192
+ userRoles = [].concat(PermissionsManager_toConsumableArray((_spaceMember$roles = spaceMember === null || spaceMember === void 0 ? void 0 : spaceMember.roles) !== null && _spaceMember$roles !== void 0 ? _spaceMember$roles : []), PermissionsManager_toConsumableArray((_roomMember$roles = roomMember === null || roomMember === void 0 ? void 0 : roomMember.roles) !== null && _roomMember$roles !== void 0 ? _roomMember$roles : []));
2193
+ promises = [
2194
+ // Global user overwrites
2195
+ this.getOverwrites({}, 'User', userId).then(function (v) {
2196
+ return v.overwrites;
2197
+ })];
2198
+ _context4.t0 = location.spaceId;
2199
+ if (!_context4.t0) {
2200
+ _context4.next = 24;
2201
+ break;
2202
+ }
2203
+ _context4.next = 16;
2204
+ return this.tracker.spaces.get();
2205
+ case 16:
2206
+ _context4.t3 = _yield$this$tracker$s = _context4.sent;
2207
+ _context4.t2 = _context4.t3 !== null;
2208
+ if (!_context4.t2) {
2209
+ _context4.next = 20;
2210
+ break;
2211
+ }
2212
+ _context4.t2 = _yield$this$tracker$s !== void 0;
2213
+ case 20:
2214
+ _context4.t1 = _context4.t2;
2215
+ if (!_context4.t1) {
2216
+ _context4.next = 23;
2217
+ break;
2218
+ }
2219
+ _context4.t1 = _yield$this$tracker$s.has(location.spaceId);
2220
+ case 23:
2221
+ _context4.t0 = _context4.t1;
2222
+ case 24:
2223
+ if (!_context4.t0) {
2224
+ _context4.next = 28;
2225
+ break;
2226
+ }
2227
+ filterLocation = {
2228
+ spaceId: location.spaceId
2229
+ };
2230
+ promises.push(this.collectRoleOverwrites(filterLocation, userRoles));
2231
+ promises.push(this.getOverwrites(filterLocation, 'User', userId).then(function (v) {
2232
+ return v.overwrites;
2233
+ }));
2234
+ case 28:
2235
+ _context4.t4 = location.roomId;
2236
+ if (!_context4.t4) {
2237
+ _context4.next = 40;
2238
+ break;
2239
+ }
2240
+ _context4.next = 32;
2241
+ return this.tracker.rooms.get();
2242
+ case 32:
2243
+ _context4.t7 = _yield$this$tracker$r = _context4.sent;
2244
+ _context4.t6 = _context4.t7 !== null;
2245
+ if (!_context4.t6) {
2246
+ _context4.next = 36;
2247
+ break;
2248
+ }
2249
+ _context4.t6 = _yield$this$tracker$r !== void 0;
2250
+ case 36:
2251
+ _context4.t5 = _context4.t6;
2252
+ if (!_context4.t5) {
2253
+ _context4.next = 39;
2254
+ break;
2255
+ }
2256
+ _context4.t5 = _yield$this$tracker$r.has(location.roomId);
2257
+ case 39:
2258
+ _context4.t4 = _context4.t5;
2259
+ case 40:
2260
+ if (!_context4.t4) {
2261
+ _context4.next = 44;
2262
+ break;
2263
+ }
2264
+ _filterLocation = {
2265
+ spaceId: location.spaceId,
2266
+ roomId: location.roomId
2267
+ };
2268
+ if (userRoles.length) {
2269
+ promises.push(this.collectRoleOverwrites(_filterLocation, userRoles));
2270
+ }
2271
+ promises.push(this.getOverwrites(_filterLocation, 'User', userId).then(function (v) {
2272
+ return v.overwrites;
2273
+ }));
2274
+ case 44:
2275
+ _context4.t8 = location.topicId;
2276
+ if (!_context4.t8) {
2277
+ _context4.next = 56;
2278
+ break;
2279
+ }
2280
+ _context4.next = 48;
2281
+ return this.tracker.rooms.getTopics(location.roomId);
2282
+ case 48:
2283
+ _context4.t11 = _yield$this$tracker$r2 = _context4.sent;
2284
+ _context4.t10 = _context4.t11 !== null;
2285
+ if (!_context4.t10) {
2286
+ _context4.next = 52;
2287
+ break;
2288
+ }
2289
+ _context4.t10 = _yield$this$tracker$r2 !== void 0;
2290
+ case 52:
2291
+ _context4.t9 = _context4.t10;
2292
+ if (!_context4.t9) {
2293
+ _context4.next = 55;
2294
+ break;
2295
+ }
2296
+ _context4.t9 = _yield$this$tracker$r2.has(location.topicId);
2297
+ case 55:
2298
+ _context4.t8 = _context4.t9;
2299
+ case 56:
2300
+ if (!_context4.t8) {
2301
+ _context4.next = 59;
2302
+ break;
2303
+ }
2304
+ if (userRoles.length) {
2305
+ promises.push(this.collectRoleOverwrites(location, userRoles));
2306
+ }
2307
+ promises.push(this.getOverwrites(location, 'User', userId).then(function (v) {
2308
+ return v.overwrites;
2309
+ }));
2310
+ case 59:
2311
+ _context4.t12 = this;
2312
+ _context4.next = 62;
2313
+ return Promise.all(promises);
2314
+ case 62:
2315
+ _context4.t13 = _context4.sent;
2316
+ return _context4.abrupt("return", _context4.t12.resolveOverwritesHierarchy.call(_context4.t12, _context4.t13));
2317
+ case 64:
2318
+ case "end":
2319
+ return _context4.stop();
2320
+ }
2321
+ }
2322
+ }, _callee4, this);
2323
+ }));
2324
+ function calculatePermissions(_x6) {
2325
+ return _calculatePermissions.apply(this, arguments);
2326
+ }
2327
+ return calculatePermissions;
2328
+ }()
2329
+ }, {
2330
+ key: "handlePermissionOverwrites",
2331
+ value: function handlePermissionOverwrites(ev) {
2332
+ this.overwrites.set([getOvIdByObject(ev), ev]);
2333
+ this.emit('change');
2334
+ }
2335
+ }, {
2336
+ key: "handleSpaceDeleted",
2337
+ value: function handleSpaceDeleted(ev) {
2338
+ var _this$overwritesPromi;
2339
+ var ids = this.deleteOverwritesByIdPrefix(getOvId({
2340
+ spaceId: ev.id
2341
+ }));
2342
+ (_this$overwritesPromi = this.overwritesPromises).forget.apply(_this$overwritesPromi, PermissionsManager_toConsumableArray(ids));
2343
+ }
2344
+ }, {
2345
+ key: "handleRoomDeleted",
2346
+ value: function () {
2347
+ var _handleRoomDeleted = PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee5(ev) {
2348
+ var room, _this$overwritesPromi2, ids;
2349
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee5$(_context5) {
2350
+ while (1) {
2351
+ switch (_context5.prev = _context5.next) {
2352
+ case 0:
2353
+ _context5.next = 2;
2354
+ return this.tracker.rooms.get();
2355
+ case 2:
2356
+ room = _context5.sent.get(ev.id);
2357
+ if (room) {
2358
+ ids = this.deleteOverwritesByIdPrefix(getOvId({
2359
+ spaceId: room.spaceId,
2360
+ roomId: room.id
2361
+ }));
2362
+ (_this$overwritesPromi2 = this.overwritesPromises).forget.apply(_this$overwritesPromi2, PermissionsManager_toConsumableArray(ids));
2363
+ }
2364
+ case 4:
2365
+ case "end":
2366
+ return _context5.stop();
2367
+ }
2368
+ }
2369
+ }, _callee5, this);
2370
+ }));
2371
+ function handleRoomDeleted(_x7) {
2372
+ return _handleRoomDeleted.apply(this, arguments);
721
2373
  }
722
- return getRoomTopics;
2374
+ return handleRoomDeleted;
723
2375
  }()
724
2376
  }, {
725
- key: "getTopicMessages",
2377
+ key: "handleTopicDeleted",
2378
+ value: function handleTopicDeleted(ev) {
2379
+ var _this$overwritesPromi3;
2380
+ var ids = this.deleteOverwritesByIdPrefix(getOvId(ev.location));
2381
+ (_this$overwritesPromi3 = this.overwritesPromises).forget.apply(_this$overwritesPromi3, PermissionsManager_toConsumableArray(ids));
2382
+ }
2383
+ }, {
2384
+ key: "handleRoleDeleted",
2385
+ value: function handleRoleDeleted(ev) {
2386
+ var _this$overwritesPromi4;
2387
+ var ids = this.deleteOverwritesByIdPrefix(getOvId({
2388
+ spaceId: ev.spaceId
2389
+ }, 'Role', ev.id));
2390
+ (_this$overwritesPromi4 = this.overwritesPromises).forget.apply(_this$overwritesPromi4, PermissionsManager_toConsumableArray(ids));
2391
+ }
2392
+ }, {
2393
+ key: "handleSpaceMemberUpdated",
2394
+ value: function handleSpaceMemberUpdated(ev) {
2395
+ var _this$tracker$me;
2396
+ if (ev.userId === ((_this$tracker$me = this.tracker.me) === null || _this$tracker$me === void 0 ? void 0 : _this$tracker$me.id)) {
2397
+ // User roles in space could potentially have changed
2398
+ this.emit('change');
2399
+ }
2400
+ }
2401
+ }, {
2402
+ key: "handleRoomMemberUpdated",
2403
+ value: function handleRoomMemberUpdated(ev) {
2404
+ var _this$tracker$me2;
2405
+ if (ev.userId === ((_this$tracker$me2 = this.tracker.me) === null || _this$tracker$me2 === void 0 ? void 0 : _this$tracker$me2.id)) {
2406
+ // User roles in room could potentially have changed
2407
+ this.emit('change');
2408
+ }
2409
+ }
2410
+
2411
+ /**
2412
+ * @return Matched and deleted ids
2413
+ */
2414
+ }, {
2415
+ key: "deleteOverwritesByIdPrefix",
2416
+ value: function deleteOverwritesByIdPrefix(prefix) {
2417
+ var _this3 = this;
2418
+ var ids = [];
2419
+ this.overwrites.items.forEach(function (overwrites) {
2420
+ var id = getOvIdByObject(overwrites);
2421
+ if (id.startsWith(prefix)) {
2422
+ ids.push(id);
2423
+ _this3.overwrites["delete"](id);
2424
+ }
2425
+ });
2426
+ return ids;
2427
+ }
2428
+ }, {
2429
+ key: "collectRoleOverwrites",
726
2430
  value: function () {
727
- var _getTopicMessages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(topicId) {
728
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
2431
+ var _collectRoleOverwrites = PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee6(location, userRoles) {
2432
+ var _this4 = this;
2433
+ var roleOverwrites;
2434
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee6$(_context6) {
729
2435
  while (1) {
730
2436
  switch (_context6.prev = _context6.next) {
731
2437
  case 0:
732
- return _context6.abrupt("return", this.topicsMessages.get(topicId));
733
- case 1:
2438
+ _context6.next = 2;
2439
+ return Promise.all(userRoles.map(function (roleId) {
2440
+ return _this4.getOverwrites(location, 'Role', roleId);
2441
+ }));
2442
+ case 2:
2443
+ roleOverwrites = _context6.sent;
2444
+ return _context6.abrupt("return", this.resolveOverwritesFromRolesByOrder(location.spaceId, roleOverwrites));
2445
+ case 4:
734
2446
  case "end":
735
2447
  return _context6.stop();
736
2448
  }
737
2449
  }
738
2450
  }, _callee6, this);
739
2451
  }));
740
- function getTopicMessages(_x3) {
741
- return _getTopicMessages.apply(this, arguments);
2452
+ function collectRoleOverwrites(_x8, _x9) {
2453
+ return _collectRoleOverwrites.apply(this, arguments);
742
2454
  }
743
- return getTopicMessages;
2455
+ return collectRoleOverwrites;
744
2456
  }()
745
2457
  }, {
746
- key: "getSpaceRooms",
2458
+ key: "resolveOverwritesFromRolesByOrder",
747
2459
  value: function () {
748
- var _getSpaceRooms = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(spaceId) {
749
- var deferredGetterName;
750
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
2460
+ var _resolveOverwritesFromRolesByOrder = PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee7(spaceId, overwrites) {
2461
+ var allows, denies, roles, sortedOverwrites, permissionsLength;
2462
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee7$(_context7) {
751
2463
  while (1) {
752
2464
  switch (_context7.prev = _context7.next) {
753
2465
  case 0:
754
- deferredGetterName = "spaces-rooms-".concat(spaceId);
755
- if (!this.spacesRooms.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {
756
- this.createDeferredGetter(deferredGetterName);
757
- this.client.send('GetSpaceRooms', {
758
- id: spaceId
759
- });
760
- }
761
- _context7.next = 4;
762
- return this.deferredGetterReadiness(deferredGetterName);
763
- case 4:
764
- return _context7.abrupt("return", this.spacesRooms.get(spaceId));
765
- case 5:
2466
+ allows = 0, denies = 0;
2467
+ _context7.next = 3;
2468
+ return this.tracker.spaces.getRoles(spaceId);
2469
+ case 3:
2470
+ roles = _context7.sent;
2471
+ sortedOverwrites = overwrites.sort(function (a, b) {
2472
+ return roles.get(a.targetId).priority - roles.get(b.targetId).priority;
2473
+ }); // Max length of bit word
2474
+ permissionsLength = overwrites.reduce(function (previousValue, currentValue) {
2475
+ var _currentValue$overwri, _currentValue$overwri2, _currentValue$overwri3, _currentValue$overwri4;
2476
+ return Math.max(previousValue, (_currentValue$overwri = (_currentValue$overwri2 = currentValue.overwrites.allow) === null || _currentValue$overwri2 === void 0 ? void 0 : _currentValue$overwri2.toString(2).length) !== null && _currentValue$overwri !== void 0 ? _currentValue$overwri : 0, (_currentValue$overwri3 = (_currentValue$overwri4 = currentValue.overwrites.deny) === null || _currentValue$overwri4 === void 0 ? void 0 : _currentValue$overwri4.toString(2).length) !== null && _currentValue$overwri3 !== void 0 ? _currentValue$overwri3 : 0);
2477
+ }, 0);
2478
+ sortedOverwrites.forEach(function (overwriteEvent) {
2479
+ var _overwrites$deny$toSt, _overwrites$deny, _overwrites$allow$toS, _overwrites$allow;
2480
+ var overwrites = overwriteEvent.overwrites;
2481
+ var revDecDenies = (_overwrites$deny$toSt = (_overwrites$deny = overwrites.deny) === null || _overwrites$deny === void 0 ? void 0 : _overwrites$deny.toString(2).split('').reverse().join('')) !== null && _overwrites$deny$toSt !== void 0 ? _overwrites$deny$toSt : '';
2482
+ var revDecAllows = (_overwrites$allow$toS = (_overwrites$allow = overwrites.allow) === null || _overwrites$allow === void 0 ? void 0 : _overwrites$allow.toString(2).split('').reverse().join('')) !== null && _overwrites$allow$toS !== void 0 ? _overwrites$allow$toS : '';
2483
+ for (var i = 0; i < permissionsLength; i++) {
2484
+ var _revDecDenies$i, _revDecAllows$i;
2485
+ var deny = parseInt((_revDecDenies$i = revDecDenies[i]) !== null && _revDecDenies$i !== void 0 ? _revDecDenies$i : '0');
2486
+ var allow = parseInt((_revDecAllows$i = revDecAllows[i]) !== null && _revDecAllows$i !== void 0 ? _revDecAllows$i : '0');
2487
+ if (deny) {
2488
+ denies |= 1 << i;
2489
+ }
2490
+ if (allow) {
2491
+ allows |= 1 << i;
2492
+ }
2493
+ }
2494
+ });
2495
+ return _context7.abrupt("return", {
2496
+ allow: allows,
2497
+ deny: denies
2498
+ });
2499
+ case 8:
766
2500
  case "end":
767
2501
  return _context7.stop();
768
2502
  }
769
2503
  }
770
2504
  }, _callee7, this);
771
2505
  }));
772
- function getSpaceRooms(_x4) {
773
- return _getSpaceRooms.apply(this, arguments);
2506
+ function resolveOverwritesFromRolesByOrder(_x10, _x11) {
2507
+ return _resolveOverwritesFromRolesByOrder.apply(this, arguments);
774
2508
  }
775
- return getSpaceRooms;
2509
+ return resolveOverwritesFromRolesByOrder;
776
2510
  }()
777
2511
  }, {
778
- key: "getSpaceMembers",
2512
+ key: "resolveOverwritesHierarchy",
2513
+ value: function resolveOverwritesHierarchy(permissionOverwritesValues) {
2514
+ var result = 0;
2515
+ var _iterator = PermissionsManager_createForOfIteratorHelper(permissionOverwritesValues),
2516
+ _step;
2517
+ try {
2518
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
2519
+ var value = _step.value;
2520
+ if (value.allow & Permissions.getByName('Root').value) {
2521
+ return this.getRootAccessValue();
2522
+ }
2523
+ result = result & ~value.deny | value.allow;
2524
+ }
2525
+ } catch (err) {
2526
+ _iterator.e(err);
2527
+ } finally {
2528
+ _iterator.f();
2529
+ }
2530
+ return result;
2531
+ }
2532
+ }, {
2533
+ key: "getRootAccessValue",
2534
+ value: function getRootAccessValue() {
2535
+ var result = 0;
2536
+ var _iterator2 = PermissionsManager_createForOfIteratorHelper(Permissions.getNames()),
2537
+ _step2;
2538
+ try {
2539
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
2540
+ var name = _step2.value;
2541
+ result |= Permissions.getByName(name).value;
2542
+ }
2543
+ } catch (err) {
2544
+ _iterator2.e(err);
2545
+ } finally {
2546
+ _iterator2.f();
2547
+ }
2548
+ return result;
2549
+ }
2550
+ }, {
2551
+ key: "fetchMembersOrFail",
779
2552
  value: function () {
780
- var _getSpaceMembers = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(spaceId) {
781
- var deferredGetterName;
782
- return _regeneratorRuntime().wrap(function _callee8$(_context8) {
2553
+ var _fetchMembersOrFail = PermissionsManager_asyncToGenerator( /*#__PURE__*/PermissionsManager_regeneratorRuntime().mark(function _callee8(location) {
2554
+ var results, spaceFail, roomFail, layer;
2555
+ return PermissionsManager_regeneratorRuntime().wrap(function _callee8$(_context8) {
783
2556
  while (1) {
784
2557
  switch (_context8.prev = _context8.next) {
785
2558
  case 0:
786
- deferredGetterName = "spaces-members-".concat(spaceId);
787
- if (!this.spacesMembers.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {
788
- this.createDeferredGetter(deferredGetterName);
789
- this.client.send('GetSpaceMembers', {
790
- id: spaceId
791
- });
2559
+ _context8.next = 2;
2560
+ return Promise.all([location.spaceId ? this.tracker.spaces.getMe(location.spaceId) : null, location.roomId ? this.tracker.rooms.getMe(location.roomId) : null]);
2561
+ case 2:
2562
+ results = _context8.sent;
2563
+ spaceFail = location.spaceId && !results[0];
2564
+ roomFail = location.roomId && !results[1];
2565
+ if (!(spaceFail || roomFail)) {
2566
+ _context8.next = 8;
2567
+ break;
792
2568
  }
793
- _context8.next = 4;
794
- return this.deferredGetterReadiness(deferredGetterName);
795
- case 4:
796
- return _context8.abrupt("return", this.spacesMembers.get(spaceId));
797
- case 5:
2569
+ layer = spaceFail ? "space (".concat(location.spaceId, ")") : "room (".concat(location.roomId, ")");
2570
+ throw new Error("Attempting to calculate permissions for a ".concat(layer, " that the user does not belong to"));
2571
+ case 8:
2572
+ return _context8.abrupt("return", results);
2573
+ case 9:
798
2574
  case "end":
799
2575
  return _context8.stop();
800
2576
  }
801
2577
  }
802
2578
  }, _callee8, this);
803
2579
  }));
804
- function getSpaceMembers(_x5) {
805
- return _getSpaceMembers.apply(this, arguments);
2580
+ function fetchMembersOrFail(_x12) {
2581
+ return _fetchMembersOrFail.apply(this, arguments);
806
2582
  }
807
- return getSpaceMembers;
2583
+ return fetchMembersOrFail;
808
2584
  }()
809
2585
  }, {
810
- key: "getRoomMembers",
811
- value: function () {
812
- var _getRoomMembers = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(roomId) {
813
- var deferredGetterName;
814
- return _regeneratorRuntime().wrap(function _callee9$(_context9) {
815
- while (1) {
816
- switch (_context9.prev = _context9.next) {
817
- case 0:
818
- deferredGetterName = "rooms-members-".concat(roomId);
819
- if (!this.roomsMembers.has(roomId) && !this.deferredGetters.has(deferredGetterName)) {
820
- this.createDeferredGetter(deferredGetterName);
821
- this.client.send('GetRoomMembers', {
822
- id: roomId
823
- });
824
- }
825
- _context9.next = 4;
826
- return this.deferredGetterReadiness(deferredGetterName);
827
- case 4:
828
- return _context9.abrupt("return", this.roomsMembers.get(roomId));
829
- case 5:
830
- case "end":
831
- return _context9.stop();
832
- }
833
- }
834
- }, _callee9, this);
835
- }));
836
- function getRoomMembers(_x6) {
837
- return _getRoomMembers.apply(this, arguments);
2586
+ key: "validateLocation",
2587
+ value: function validateLocation(location) {
2588
+ if (location.topicId && !location.roomId) {
2589
+ throw new Error('Corrupted arguments hierarchy');
838
2590
  }
839
- return getRoomMembers;
840
- }()
2591
+ }
2592
+ }]);
2593
+ return PermissionsManager;
2594
+ }(EventTarget);
2595
+ ;// CONCATENATED MODULE: ./src/state-tracker/ChatStateTracker.ts
2596
+ function ChatStateTracker_typeof(obj) { "@babel/helpers - typeof"; return ChatStateTracker_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, ChatStateTracker_typeof(obj); }
2597
+ function ChatStateTracker_regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ ChatStateTracker_regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == ChatStateTracker_typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
2598
+ function ChatStateTracker_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2599
+ function ChatStateTracker_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { ChatStateTracker_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { ChatStateTracker_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
2600
+ function ChatStateTracker_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2601
+ function ChatStateTracker_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, ChatStateTracker_toPropertyKey(descriptor.key), descriptor); } }
2602
+ function ChatStateTracker_createClass(Constructor, protoProps, staticProps) { if (protoProps) ChatStateTracker_defineProperties(Constructor.prototype, protoProps); if (staticProps) ChatStateTracker_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2603
+ function ChatStateTracker_defineProperty(obj, key, value) { key = ChatStateTracker_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2604
+ function ChatStateTracker_toPropertyKey(arg) { var key = ChatStateTracker_toPrimitive(arg, "string"); return ChatStateTracker_typeof(key) === "symbol" ? key : String(key); }
2605
+ function ChatStateTracker_toPrimitive(input, hint) { if (ChatStateTracker_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (ChatStateTracker_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2606
+
2607
+
2608
+
2609
+
2610
+ var ChatStateTracker = /*#__PURE__*/function () {
2611
+ /**
2612
+ * State of your permissions.
2613
+ */
2614
+
2615
+ /**
2616
+ * State of the rooms you are in.
2617
+ */
2618
+
2619
+ /**
2620
+ * State of the spaces you are in.
2621
+ */
2622
+
2623
+ function ChatStateTracker(client) {
2624
+ var _this = this;
2625
+ ChatStateTracker_classCallCheck(this, ChatStateTracker);
2626
+ this.client = client;
2627
+ ChatStateTracker_defineProperty(this, "permissions", new PermissionsManager(this));
2628
+ ChatStateTracker_defineProperty(this, "rooms", new RoomsManager(this));
2629
+ ChatStateTracker_defineProperty(this, "spaces", new SpacesManager(this));
2630
+ ChatStateTracker_defineProperty(this, "_me", null);
2631
+ ChatStateTracker_defineProperty(this, "deferredSession", new DeferredTask());
2632
+ this.client.on('Session', function (ev) {
2633
+ return _this.handleSession(ev);
2634
+ });
2635
+ }
2636
+ ChatStateTracker_createClass(ChatStateTracker, [{
2637
+ key: "me",
2638
+ get: function get() {
2639
+ return this._me;
2640
+ }
841
2641
  }, {
842
- key: "deferredGetterReadiness",
2642
+ key: "getMe",
843
2643
  value: function () {
844
- var _deferredGetterReadiness = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(name) {
845
- var _this$deferredGetters;
846
- return _regeneratorRuntime().wrap(function _callee10$(_context10) {
2644
+ var _getMe = ChatStateTracker_asyncToGenerator( /*#__PURE__*/ChatStateTracker_regeneratorRuntime().mark(function _callee() {
2645
+ return ChatStateTracker_regeneratorRuntime().wrap(function _callee$(_context) {
847
2646
  while (1) {
848
- switch (_context10.prev = _context10.next) {
2647
+ switch (_context.prev = _context.next) {
849
2648
  case 0:
850
- if (!this.deferredGetters.has(name)) {
851
- _context10.next = 3;
852
- break;
853
- }
854
- _context10.next = 3;
855
- return (_this$deferredGetters = this.deferredGetters.get(name)) === null || _this$deferredGetters === void 0 ? void 0 : _this$deferredGetters.promise;
2649
+ _context.next = 2;
2650
+ return this.deferredSession.promise;
2651
+ case 2:
2652
+ return _context.abrupt("return", this._me);
856
2653
  case 3:
857
2654
  case "end":
858
- return _context10.stop();
2655
+ return _context.stop();
859
2656
  }
860
2657
  }
861
- }, _callee10, this);
2658
+ }, _callee, this);
862
2659
  }));
863
- function deferredGetterReadiness(_x7) {
864
- return _deferredGetterReadiness.apply(this, arguments);
2660
+ function getMe() {
2661
+ return _getMe.apply(this, arguments);
865
2662
  }
866
- return deferredGetterReadiness;
2663
+ return getMe;
867
2664
  }()
868
- }, {
869
- key: "bind",
870
- value: function bind() {
871
- var _this = this;
872
- this.client.on(this.client.Event.disconnect, function (ev) {
873
- return _this.handleDisconnect(ev);
874
- });
875
- this.client.on('NewMessage', function (ev) {
876
- return _this.handleNewMessage(ev);
877
- });
878
- this.client.on('NewRole', function (ev) {
879
- return _this.handleNewRole(ev);
880
- });
881
- this.client.on('NewRoom', function (ev) {
882
- return _this.handleNewRoom(ev);
883
- });
884
- this.client.on('NewTopic', function (ev) {
885
- return _this.handleNewTopic(ev);
886
- });
887
- this.client.on('RoleDeleted', function (ev) {
888
- return _this.handleRoleDeleted(ev);
889
- });
890
- this.client.on('RoomDeleted', function (ev) {
891
- return _this.handleRoomDeleted(ev);
892
- });
893
- this.client.on('RoomJoined', function (ev) {
894
- return _this.handleRoomJoined(ev);
895
- });
896
- this.client.on('RoomLeft', function (ev) {
897
- return _this.handleRoomLeft(ev);
898
- });
899
- this.client.on('RoomMemberJoined', function (ev) {
900
- return _this.handleRoomMemberJoined(ev);
901
- });
902
- this.client.on('RoomMemberLeft', function (ev) {
903
- return _this.handleRoomMemberLeft(ev);
904
- });
905
- this.client.on('RoomMembers', function (ev) {
906
- return _this.handleRoomMembers(ev);
907
- });
908
- this.client.on('Session', function (ev) {
909
- return _this.handleSession(ev);
910
- });
911
- this.client.on('SpaceDeleted', function (ev) {
912
- return _this.handleSpaceDeleted(ev);
913
- });
914
- this.client.on('SpaceJoined', function (ev) {
915
- return _this.handleSpaceJoined(ev);
916
- });
917
- this.client.on('SpaceLeft', function (ev) {
918
- return _this.handleSpaceLeft(ev);
919
- });
920
- this.client.on('SpaceMemberJoined', function (ev) {
921
- return _this.handleSpaceMemberJoined(ev);
922
- });
923
- this.client.on('SpaceMemberLeft', function (ev) {
924
- return _this.handleSpaceMemberLeft(ev);
925
- });
926
- this.client.on('SpaceMembers', function (ev) {
927
- return _this.handleSpaceMembers(ev);
928
- });
929
- this.client.on('SpaceRooms', function (ev) {
930
- return _this.handleSpaceRooms(ev);
931
- });
932
- this.client.on('SpaceMemberUpdate', function (ev) {
933
- return _this.handleSpaceMemberUpdate(ev);
934
- });
935
- this.client.on('TopicDeleted', function (ev) {
936
- return _this.handleTopicDeleted(ev);
937
- });
938
- }
939
- }, {
940
- key: "createDeferredGetter",
941
- value: function createDeferredGetter(name) {
942
- if (this.deferredGetters.has(name)) {
943
- return;
944
- }
945
- var deferred = {
946
- promise: undefined,
947
- resolver: undefined
948
- };
949
- deferred.promise = new Promise(function (resolve) {
950
- return deferred.resolver = resolve;
951
- });
952
- this.deferredGetters.set([name, deferred]);
953
- }
954
- }, {
955
- key: "handleDisconnect",
956
- value: function handleDisconnect(reconnect) {
957
- if (reconnect) {
958
- this.reconnecting = true;
959
- return;
960
- }
961
- }
962
- }, {
963
- key: "handleNewMessage",
964
- value: function handleNewMessage(ev) {
965
- this.topicsMessages.get(ev.topicId).set(ev.message);
966
- }
967
- }, {
968
- key: "handleNewRole",
969
- value: function handleNewRole(ev) {
970
- var collection = this.spacesRoles.get(ev.spaceId);
971
- collection.set(ev.role);
972
- this.joinedSpaces.get(ev.spaceId).roles = collection.items;
973
- }
974
- }, {
975
- key: "handleNewRoom",
976
- value: function handleNewRoom(ev) {
977
- var _this$spacesRooms$get;
978
- (_this$spacesRooms$get = this.spacesRooms.get(ev.spaceId)) === null || _this$spacesRooms$get === void 0 ? void 0 : _this$spacesRooms$get.set(ev.summary);
979
- }
980
- }, {
981
- key: "handleNewTopic",
982
- value: function handleNewTopic(ev) {
983
- var collection = this.roomsTopics.get(ev.roomId);
984
- collection.set(ev.topic);
985
- this.joinedRooms.get(ev.roomId).topics = collection.items;
986
- }
987
- }, {
988
- key: "handleRoleDeleted",
989
- value: function handleRoleDeleted(ev) {
990
- var collection = this.spacesRoles.get(ev.spaceId);
991
- collection["delete"](ev.id);
992
- this.joinedSpaces.get(ev.spaceId).roles = collection.items;
993
- }
994
- }, {
995
- key: "handleRoomDeleted",
996
- value: function handleRoomDeleted(ev) {
997
- if (ev.spaceId) {
998
- this.spacesRooms.get(ev.spaceId)["delete"](ev.id);
999
- }
1000
- this.joinedRooms["delete"](ev.id);
1001
- this.roomsMembers["delete"](ev.id);
1002
- this.roomsTopics["delete"](ev.id);
1003
- }
1004
- }, {
1005
- key: "handleRoomJoined",
1006
- value: function handleRoomJoined(ev) {
1007
- this.addJoinedRooms(ev.room);
1008
- }
1009
- }, {
1010
- key: "addJoinedRooms",
1011
- value: function addJoinedRooms() {
1012
- var _this$roomsTopics, _this$topicsMessages, _this$joinedRooms;
1013
- for (var _len = arguments.length, rooms = new Array(_len), _key = 0; _key < _len; _key++) {
1014
- rooms[_key] = arguments[_key];
1015
- }
1016
- (_this$roomsTopics = this.roomsTopics).set.apply(_this$roomsTopics, ChatStateTracker_toConsumableArray(rooms.map(function (room) {
1017
- return [room.id, new ObservableIndexedObjectCollection('id', room.topics)];
1018
- })));
1019
- var topicsMessages = [];
1020
- for (var _i = 0, _rooms = rooms; _i < _rooms.length; _i++) {
1021
- var room = _rooms[_i];
1022
- topicsMessages.push.apply(topicsMessages, ChatStateTracker_toConsumableArray(room.topics.map(function (topic) {
1023
- return [topic.id, new ObservableIndexedObjectCollection('id')];
1024
- })));
1025
- }
1026
- (_this$topicsMessages = this.topicsMessages).set.apply(_this$topicsMessages, topicsMessages);
1027
- (_this$joinedRooms = this.joinedRooms).set.apply(_this$joinedRooms, rooms);
1028
- }
1029
- }, {
1030
- key: "handleRoomLeft",
1031
- value: function handleRoomLeft(ev) {
1032
- this.joinedRooms["delete"](ev.id);
1033
- this.roomsMembers["delete"](ev.id);
1034
- this.roomsTopics["delete"](ev.id);
1035
- }
1036
- }, {
1037
- key: "handleRoomMemberJoined",
1038
- value: function handleRoomMemberJoined(ev) {
1039
- if (this.roomsMembers.has(ev.roomId)) {
1040
- this.roomsMembers.get(ev.roomId).set(ev.member);
1041
- }
1042
- }
1043
- }, {
1044
- key: "handleRoomMemberLeft",
1045
- value: function handleRoomMemberLeft(ev) {
1046
- if (this.roomsMembers.has(ev.roomId)) {
1047
- this.roomsMembers.get(ev.roomId)["delete"](ev.userId);
1048
- }
1049
- }
1050
- }, {
1051
- key: "handleRoomMembers",
1052
- value: function handleRoomMembers(ev) {
1053
- if (!this.roomsMembers.has(ev.id)) {
1054
- var _this$deferredGetters2;
1055
- this.roomsMembers.set([ev.id, new ObservableIndexedObjectCollection(function (member) {
1056
- var _member$user$id;
1057
- return (_member$user$id = member === null || member === void 0 ? void 0 : member.user.id) !== null && _member$user$id !== void 0 ? _member$user$id : member.spaceMember.user.id;
1058
- }, ev.members)]);
1059
- (_this$deferredGetters2 = this.deferredGetters.get("rooms-members-".concat(ev.id))) === null || _this$deferredGetters2 === void 0 ? void 0 : _this$deferredGetters2.resolver();
1060
- }
1061
- }
1062
2665
  }, {
1063
2666
  key: "handleSession",
1064
2667
  value: function handleSession(ev) {
1065
- var _this$deferredGetters3;
1066
- if (this.me && !this.reconnecting) {
1067
- return;
1068
- }
1069
- this.me = ev.user;
1070
- this.reconnecting = false;
1071
- this.joinedRooms.deleteAll();
1072
- this.roomsTopics.deleteAll();
1073
- this.roomsMembers.deleteAll();
1074
- this.joinedSpaces.deleteAll();
1075
- this.spacesRoles.deleteAll();
1076
- this.spacesRooms.deleteAll();
1077
- this.spacesMembers.deleteAll();
1078
- this.addJoinedRooms.apply(this, ChatStateTracker_toConsumableArray(ev.state.rooms));
1079
- this.addJoinedSpaces.apply(this, ChatStateTracker_toConsumableArray(ev.state.spaces));
1080
- (_this$deferredGetters3 = this.deferredGetters.get('session')) === null || _this$deferredGetters3 === void 0 ? void 0 : _this$deferredGetters3.resolver();
1081
- }
1082
- }, {
1083
- key: "handleSpaceDeleted",
1084
- value: function handleSpaceDeleted(ev) {
1085
- this.spacesRoles["delete"](ev.id);
1086
- this.spacesMembers["delete"](ev.id);
1087
- this.spacesRooms["delete"](ev.id);
1088
- this.joinedSpaces["delete"](ev.id);
1089
- }
1090
- }, {
1091
- key: "handleSpaceJoined",
1092
- value: function handleSpaceJoined(ev) {
1093
- this.addJoinedSpaces(ev.space);
1094
- }
1095
- }, {
1096
- key: "addJoinedSpaces",
1097
- value: function addJoinedSpaces() {
1098
- var _this$spacesRoles, _this$joinedSpaces;
1099
- for (var _len2 = arguments.length, spaces = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1100
- spaces[_key2] = arguments[_key2];
1101
- }
1102
- (_this$spacesRoles = this.spacesRoles).set.apply(_this$spacesRoles, ChatStateTracker_toConsumableArray(spaces.map(function (space) {
1103
- return [space.id, new ObservableIndexedObjectCollection('id', space.roles)];
1104
- })));
1105
- (_this$joinedSpaces = this.joinedSpaces).set.apply(_this$joinedSpaces, spaces);
1106
- }
1107
- }, {
1108
- key: "handleSpaceLeft",
1109
- value: function handleSpaceLeft(ev) {
1110
- this.spacesRoles["delete"](ev.id);
1111
- this.spacesMembers["delete"](ev.id);
1112
- this.spacesRooms["delete"](ev.id);
1113
- this.joinedSpaces["delete"](ev.id);
1114
- }
1115
- }, {
1116
- key: "handleSpaceMemberJoined",
1117
- value: function handleSpaceMemberJoined(ev) {
1118
- if (this.spacesMembers.has(ev.spaceId)) {
1119
- this.spacesMembers.get(ev.spaceId).set(ev.member);
1120
- }
1121
- }
1122
- }, {
1123
- key: "handleSpaceMemberLeft",
1124
- value: function handleSpaceMemberLeft(ev) {
1125
- if (this.spacesMembers.has(ev.spaceId)) {
1126
- this.spacesMembers.get(ev.spaceId)["delete"](ev.userId);
1127
- }
1128
- }
1129
- }, {
1130
- key: "handleSpaceMembers",
1131
- value: function handleSpaceMembers(ev) {
1132
- if (!this.spacesMembers.has(ev.id)) {
1133
- var _this$deferredGetters4;
1134
- this.spacesMembers.set([ev.id, new ObservableIndexedObjectCollection(function (member) {
1135
- return member === null || member === void 0 ? void 0 : member.user.id;
1136
- }, ev.members)]);
1137
- (_this$deferredGetters4 = this.deferredGetters.get("spaces-members-".concat(ev.id))) === null || _this$deferredGetters4 === void 0 ? void 0 : _this$deferredGetters4.resolver();
1138
- }
1139
- }
1140
- }, {
1141
- key: "handleSpaceRooms",
1142
- value: function handleSpaceRooms(ev) {
1143
- if (!this.spacesRooms.has(ev.id)) {
1144
- var _this$deferredGetters5;
1145
- this.spacesRooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);
1146
- (_this$deferredGetters5 = this.deferredGetters.get("spaces-rooms-".concat(ev.id))) === null || _this$deferredGetters5 === void 0 ? void 0 : _this$deferredGetters5.resolver();
1147
- }
1148
- }
1149
- }, {
1150
- key: "handleSpaceMemberUpdate",
1151
- value: function handleSpaceMemberUpdate(ev) {
1152
- if (this.spacesMembers.has(ev.spaceId)) {
1153
- this.spacesMembers.get(ev.spaceId).set(ev.member);
1154
- }
1155
- }
1156
- }, {
1157
- key: "handleTopicDeleted",
1158
- value: function handleTopicDeleted(ev) {
1159
- var collection = this.roomsTopics.get(ev.roomId);
1160
- collection["delete"](ev.id);
1161
- this.joinedRooms.get(ev.roomId).topics = collection.items;
2668
+ this._me = ev.user;
2669
+ this.deferredSession.resolve();
1162
2670
  }
1163
2671
  }]);
1164
2672
  return ChatStateTracker;
@@ -1548,6 +3056,7 @@ var AbstractRestClient = /*#__PURE__*/function () {
1548
3056
  key: "send",
1549
3057
  value: function () {
1550
3058
  var _send = AbstractRestClient_asyncToGenerator( /*#__PURE__*/AbstractRestClient_regeneratorRuntime().mark(function _callee(method, uri) {
3059
+ var _result$headers$get;
1551
3060
  var data,
1552
3061
  headers,
1553
3062
  url,
@@ -1585,16 +3094,29 @@ var AbstractRestClient = /*#__PURE__*/function () {
1585
3094
  result = _context.sent;
1586
3095
  _context.t0 = result.ok;
1587
3096
  _context.t1 = result.status;
1588
- _context.next = 13;
3097
+ if (!((_result$headers$get = result.headers.get('content-type')) !== null && _result$headers$get !== void 0 && _result$headers$get.includes('json'))) {
3098
+ _context.next = 17;
3099
+ break;
3100
+ }
3101
+ _context.next = 14;
1589
3102
  return result.json();
1590
- case 13:
3103
+ case 14:
3104
+ _context.t2 = _context.sent;
3105
+ _context.next = 20;
3106
+ break;
3107
+ case 17:
3108
+ _context.next = 19;
3109
+ return result.text();
3110
+ case 19:
1591
3111
  _context.t2 = _context.sent;
3112
+ case 20:
3113
+ _context.t3 = _context.t2;
1592
3114
  return _context.abrupt("return", {
1593
3115
  ok: _context.t0,
1594
3116
  status: _context.t1,
1595
- data: _context.t2
3117
+ data: _context.t3
1596
3118
  });
1597
- case 15:
3119
+ case 22:
1598
3120
  case "end":
1599
3121
  return _context.stop();
1600
3122
  }
@@ -1770,6 +3292,7 @@ var AuthClient = /*#__PURE__*/function (_AbstractRestClient) {
1770
3292
 
1771
3293
 
1772
3294
 
3295
+
1773
3296
  /******/ return __webpack_exports__;
1774
3297
  /******/ })()
1775
3298
  ;