polfan-server-js-client 0.0.96 → 0.1.0

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 (154) hide show
  1. package/build/index.js +1 -1
  2. package/build/index.js.map +1 -1
  3. package/build/types/AbstractClient.d.ts +78 -0
  4. package/build/types/EventTarget.d.ts +16 -0
  5. package/build/types/IndexedObjectCollection.d.ts +53 -0
  6. package/build/types/WebApiClient.d.ts +30 -0
  7. package/build/types/WebSocketClient.d.ts +36 -0
  8. package/build/types/WebSocketStateTracker.d.ts +54 -0
  9. package/build/types/index.d.ts +4 -68
  10. package/package.json +65 -64
  11. package/src/AbstractClient.ts +174 -0
  12. package/src/EventTarget.ts +39 -0
  13. package/src/IndexedObjectCollection.ts +209 -0
  14. package/src/{connections/WebApiConnection.ts → WebApiClient.ts} +94 -81
  15. package/src/WebSocketClient.ts +125 -0
  16. package/src/WebSocketStateTracker.ts +326 -0
  17. package/src/index.ts +13 -123
  18. package/build/types/Client.d.ts +0 -107
  19. package/build/types/ObservableInterface.d.ts +0 -16
  20. package/build/types/connections/ConnectionAssets.d.ts +0 -17
  21. package/build/types/connections/RestApiConnection.d.ts +0 -14
  22. package/build/types/connections/WebApiConnection.d.ts +0 -21
  23. package/build/types/connections/WebSocketConnection.d.ts +0 -22
  24. package/build/types/dtos/Dto.d.ts +0 -16
  25. package/build/types/dtos/Message.d.ts +0 -9
  26. package/build/types/dtos/Permission.d.ts +0 -7
  27. package/build/types/dtos/Role.d.ts +0 -7
  28. package/build/types/dtos/Room.d.ts +0 -10
  29. package/build/types/dtos/RoomMember.d.ts +0 -6
  30. package/build/types/dtos/RoomSummary.d.ts +0 -7
  31. package/build/types/dtos/Space.d.ts +0 -8
  32. package/build/types/dtos/SpaceMember.d.ts +0 -7
  33. package/build/types/dtos/Topic.d.ts +0 -7
  34. package/build/types/dtos/User.d.ts +0 -9
  35. package/build/types/dtos/UserState.d.ts +0 -8
  36. package/build/types/dtos/protocol/Envelope.d.ts +0 -7
  37. package/build/types/dtos/protocol/commands/AssignRole.d.ts +0 -7
  38. package/build/types/dtos/protocol/commands/CreateMessage.d.ts +0 -7
  39. package/build/types/dtos/protocol/commands/CreateRole.d.ts +0 -7
  40. package/build/types/dtos/protocol/commands/CreateRoom.d.ts +0 -7
  41. package/build/types/dtos/protocol/commands/CreateSpace.d.ts +0 -5
  42. package/build/types/dtos/protocol/commands/CreateTopic.d.ts +0 -7
  43. package/build/types/dtos/protocol/commands/DeassignRole.d.ts +0 -7
  44. package/build/types/dtos/protocol/commands/DeleteRole.d.ts +0 -6
  45. package/build/types/dtos/protocol/commands/DeleteRoom.d.ts +0 -5
  46. package/build/types/dtos/protocol/commands/DeleteSpace.d.ts +0 -5
  47. package/build/types/dtos/protocol/commands/DeleteTopic.d.ts +0 -5
  48. package/build/types/dtos/protocol/commands/GetComputedPermissions.d.ts +0 -8
  49. package/build/types/dtos/protocol/commands/GetRolePermissions.d.ts +0 -8
  50. package/build/types/dtos/protocol/commands/GetRoomMembers.d.ts +0 -5
  51. package/build/types/dtos/protocol/commands/GetSession.d.ts +0 -4
  52. package/build/types/dtos/protocol/commands/GetSpaceMembers.d.ts +0 -5
  53. package/build/types/dtos/protocol/commands/GetSpaceRooms.d.ts +0 -5
  54. package/build/types/dtos/protocol/commands/GetUserPermissions.d.ts +0 -8
  55. package/build/types/dtos/protocol/commands/JoinRoom.d.ts +0 -5
  56. package/build/types/dtos/protocol/commands/JoinSpace.d.ts +0 -5
  57. package/build/types/dtos/protocol/commands/LeaveRoom.d.ts +0 -5
  58. package/build/types/dtos/protocol/commands/LeaveSpace.d.ts +0 -5
  59. package/build/types/dtos/protocol/commands/SetRolePermissions.d.ts +0 -9
  60. package/build/types/dtos/protocol/commands/SetUserPermissions.d.ts +0 -9
  61. package/build/types/dtos/protocol/events/Bye.d.ts +0 -5
  62. package/build/types/dtos/protocol/events/Error.d.ts +0 -6
  63. package/build/types/dtos/protocol/events/NewMessage.d.ts +0 -6
  64. package/build/types/dtos/protocol/events/NewRole.d.ts +0 -7
  65. package/build/types/dtos/protocol/events/NewRoom.d.ts +0 -7
  66. package/build/types/dtos/protocol/events/NewTopic.d.ts +0 -7
  67. package/build/types/dtos/protocol/events/Ok.d.ts +0 -4
  68. package/build/types/dtos/protocol/events/Permissions.d.ts +0 -6
  69. package/build/types/dtos/protocol/events/RoleDeleted.d.ts +0 -6
  70. package/build/types/dtos/protocol/events/RoomDeleted.d.ts +0 -5
  71. package/build/types/dtos/protocol/events/RoomJoined.d.ts +0 -6
  72. package/build/types/dtos/protocol/events/RoomLeft.d.ts +0 -5
  73. package/build/types/dtos/protocol/events/RoomMemberJoined.d.ts +0 -6
  74. package/build/types/dtos/protocol/events/RoomMemberLeft.d.ts +0 -5
  75. package/build/types/dtos/protocol/events/RoomMembers.d.ts +0 -6
  76. package/build/types/dtos/protocol/events/Session.d.ts +0 -9
  77. package/build/types/dtos/protocol/events/SpaceDeleted.d.ts +0 -5
  78. package/build/types/dtos/protocol/events/SpaceJoined.d.ts +0 -6
  79. package/build/types/dtos/protocol/events/SpaceLeft.d.ts +0 -5
  80. package/build/types/dtos/protocol/events/SpaceMemberJoined.d.ts +0 -6
  81. package/build/types/dtos/protocol/events/SpaceMemberLeft.d.ts +0 -5
  82. package/build/types/dtos/protocol/events/SpaceMemberUpdate.d.ts +0 -6
  83. package/build/types/dtos/protocol/events/SpaceMembers.d.ts +0 -6
  84. package/build/types/dtos/protocol/events/SpaceRooms.d.ts +0 -6
  85. package/build/types/dtos/protocol/events/TopicDeleted.d.ts +0 -5
  86. package/build/types/protocol.d.ts +0 -102
  87. package/src/Client.ts +0 -267
  88. package/src/ObservableInterface.ts +0 -39
  89. package/src/connections/ConnectionAssets.ts +0 -20
  90. package/src/connections/RestApiConnection.ts +0 -47
  91. package/src/connections/WebSocketConnection.ts +0 -103
  92. package/src/dtos/Dto.ts +0 -45
  93. package/src/dtos/Message.ts +0 -16
  94. package/src/dtos/Permission.ts +0 -12
  95. package/src/dtos/Role.ts +0 -12
  96. package/src/dtos/Room.ts +0 -17
  97. package/src/dtos/RoomMember.ts +0 -13
  98. package/src/dtos/RoomSummary.ts +0 -12
  99. package/src/dtos/Space.ts +0 -15
  100. package/src/dtos/SpaceMember.ts +0 -14
  101. package/src/dtos/Topic.ts +0 -12
  102. package/src/dtos/User.ts +0 -15
  103. package/src/dtos/UserState.ts +0 -16
  104. package/src/dtos/protocol/Envelope.ts +0 -12
  105. package/src/dtos/protocol/commands/AssignRole.ts +0 -12
  106. package/src/dtos/protocol/commands/CreateMessage.ts +0 -12
  107. package/src/dtos/protocol/commands/CreateRole.ts +0 -12
  108. package/src/dtos/protocol/commands/CreateRoom.ts +0 -12
  109. package/src/dtos/protocol/commands/CreateSpace.ts +0 -10
  110. package/src/dtos/protocol/commands/CreateTopic.ts +0 -12
  111. package/src/dtos/protocol/commands/DeassignRole.ts +0 -12
  112. package/src/dtos/protocol/commands/DeleteRole.ts +0 -11
  113. package/src/dtos/protocol/commands/DeleteRoom.ts +0 -10
  114. package/src/dtos/protocol/commands/DeleteSpace.ts +0 -10
  115. package/src/dtos/protocol/commands/DeleteTopic.ts +0 -10
  116. package/src/dtos/protocol/commands/GetComputedPermissions.ts +0 -13
  117. package/src/dtos/protocol/commands/GetRolePermissions.ts +0 -13
  118. package/src/dtos/protocol/commands/GetRoomMembers.ts +0 -10
  119. package/src/dtos/protocol/commands/GetSession.ts +0 -8
  120. package/src/dtos/protocol/commands/GetSpaceMembers.ts +0 -10
  121. package/src/dtos/protocol/commands/GetSpaceRooms.ts +0 -10
  122. package/src/dtos/protocol/commands/GetUserPermissions.ts +0 -13
  123. package/src/dtos/protocol/commands/JoinRoom.ts +0 -10
  124. package/src/dtos/protocol/commands/JoinSpace.ts +0 -10
  125. package/src/dtos/protocol/commands/LeaveRoom.ts +0 -10
  126. package/src/dtos/protocol/commands/LeaveSpace.ts +0 -10
  127. package/src/dtos/protocol/commands/SetRolePermissions.ts +0 -16
  128. package/src/dtos/protocol/commands/SetUserPermissions.ts +0 -16
  129. package/src/dtos/protocol/events/Bye.ts +0 -10
  130. package/src/dtos/protocol/events/Error.ts +0 -11
  131. package/src/dtos/protocol/events/NewMessage.ts +0 -13
  132. package/src/dtos/protocol/events/NewRole.ts +0 -14
  133. package/src/dtos/protocol/events/NewRoom.ts +0 -14
  134. package/src/dtos/protocol/events/NewTopic.ts +0 -14
  135. package/src/dtos/protocol/events/Ok.ts +0 -8
  136. package/src/dtos/protocol/events/Permissions.ts +0 -13
  137. package/src/dtos/protocol/events/RoleDeleted.ts +0 -11
  138. package/src/dtos/protocol/events/RoomDeleted.ts +0 -10
  139. package/src/dtos/protocol/events/RoomJoined.ts +0 -13
  140. package/src/dtos/protocol/events/RoomLeft.ts +0 -10
  141. package/src/dtos/protocol/events/RoomMemberJoined.ts +0 -13
  142. package/src/dtos/protocol/events/RoomMemberLeft.ts +0 -10
  143. package/src/dtos/protocol/events/RoomMembers.ts +0 -13
  144. package/src/dtos/protocol/events/Session.ts +0 -17
  145. package/src/dtos/protocol/events/SpaceDeleted.ts +0 -10
  146. package/src/dtos/protocol/events/SpaceJoined.ts +0 -13
  147. package/src/dtos/protocol/events/SpaceLeft.ts +0 -10
  148. package/src/dtos/protocol/events/SpaceMemberJoined.ts +0 -13
  149. package/src/dtos/protocol/events/SpaceMemberLeft.ts +0 -10
  150. package/src/dtos/protocol/events/SpaceMemberUpdate.ts +0 -13
  151. package/src/dtos/protocol/events/SpaceMembers.ts +0 -13
  152. package/src/dtos/protocol/events/SpaceRooms.ts +0 -13
  153. package/src/dtos/protocol/events/TopicDeleted.ts +0 -10
  154. package/src/protocol.ts +0 -113
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/./src/connections/ConnectionAssets.ts","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/ObservableInterface.ts","webpack://PServ/./src/dtos/Dto.ts","webpack://PServ/./src/dtos/protocol/Envelope.ts","webpack://PServ/./src/dtos/protocol/events/Bye.ts","webpack://PServ/./src/dtos/protocol/events/Ok.ts","webpack://PServ/./src/dtos/protocol/events/Error.ts","webpack://PServ/./src/dtos/Role.ts","webpack://PServ/./src/dtos/Space.ts","webpack://PServ/./src/dtos/Topic.ts","webpack://PServ/./src/dtos/Room.ts","webpack://PServ/./src/dtos/UserState.ts","webpack://PServ/./src/dtos/User.ts","webpack://PServ/./src/dtos/protocol/events/Session.ts","webpack://PServ/./src/dtos/Permission.ts","webpack://PServ/./src/dtos/protocol/events/Permissions.ts","webpack://PServ/./src/dtos/protocol/events/SpaceJoined.ts","webpack://PServ/./src/dtos/protocol/events/SpaceLeft.ts","webpack://PServ/./src/dtos/SpaceMember.ts","webpack://PServ/./src/dtos/protocol/events/SpaceMemberJoined.ts","webpack://PServ/./src/dtos/protocol/events/SpaceMemberLeft.ts","webpack://PServ/./src/dtos/protocol/events/SpaceMemberUpdate.ts","webpack://PServ/./src/dtos/protocol/events/SpaceDeleted.ts","webpack://PServ/./src/dtos/protocol/events/SpaceMembers.ts","webpack://PServ/./src/dtos/RoomSummary.ts","webpack://PServ/./src/dtos/protocol/events/SpaceRooms.ts","webpack://PServ/./src/dtos/protocol/events/NewRole.ts","webpack://PServ/./src/dtos/protocol/events/RoleDeleted.ts","webpack://PServ/./src/dtos/protocol/events/RoomJoined.ts","webpack://PServ/./src/dtos/protocol/events/RoomLeft.ts","webpack://PServ/./src/dtos/RoomMember.ts","webpack://PServ/./src/dtos/protocol/events/RoomMemberJoined.ts","webpack://PServ/./src/dtos/protocol/events/RoomMemberLeft.ts","webpack://PServ/./src/dtos/protocol/events/RoomMembers.ts","webpack://PServ/./src/dtos/protocol/events/NewRoom.ts","webpack://PServ/./src/dtos/protocol/events/RoomDeleted.ts","webpack://PServ/./src/dtos/protocol/events/NewTopic.ts","webpack://PServ/./src/dtos/protocol/events/TopicDeleted.ts","webpack://PServ/./src/dtos/Message.ts","webpack://PServ/./src/dtos/protocol/events/NewMessage.ts","webpack://PServ/./src/dtos/protocol/commands/GetSession.ts","webpack://PServ/./src/dtos/protocol/commands/SetUserPermissions.ts","webpack://PServ/./src/dtos/protocol/commands/GetUserPermissions.ts","webpack://PServ/./src/dtos/protocol/commands/GetComputedPermissions.ts","webpack://PServ/./src/dtos/protocol/commands/JoinSpace.ts","webpack://PServ/./src/dtos/protocol/commands/LeaveSpace.ts","webpack://PServ/./src/dtos/protocol/commands/CreateSpace.ts","webpack://PServ/./src/dtos/protocol/commands/DeleteSpace.ts","webpack://PServ/./src/dtos/protocol/commands/GetSpaceMembers.ts","webpack://PServ/./src/dtos/protocol/commands/GetSpaceRooms.ts","webpack://PServ/./src/dtos/protocol/commands/CreateRole.ts","webpack://PServ/./src/dtos/protocol/commands/DeleteRole.ts","webpack://PServ/./src/dtos/protocol/commands/AssignRole.ts","webpack://PServ/./src/dtos/protocol/commands/DeassignRole.ts","webpack://PServ/./src/dtos/protocol/commands/SetRolePermissions.ts","webpack://PServ/./src/dtos/protocol/commands/GetRolePermissions.ts","webpack://PServ/./src/dtos/protocol/commands/JoinRoom.ts","webpack://PServ/./src/dtos/protocol/commands/LeaveRoom.ts","webpack://PServ/./src/dtos/protocol/commands/CreateRoom.ts","webpack://PServ/./src/dtos/protocol/commands/DeleteRoom.ts","webpack://PServ/./src/dtos/protocol/commands/GetRoomMembers.ts","webpack://PServ/./src/dtos/protocol/commands/CreateTopic.ts","webpack://PServ/./src/dtos/protocol/commands/DeleteTopic.ts","webpack://PServ/./src/dtos/protocol/commands/CreateMessage.ts","webpack://PServ/./src/protocol.ts","webpack://PServ/./src/connections/WebSocketConnection.ts","webpack://PServ/./src/connections/RestApiConnection.ts","webpack://PServ/./src/Client.ts","webpack://PServ/./src/connections/WebApiConnection.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","import {ObservableInterface} from \"../ObservableInterface\";\r\n\r\nexport enum ChatConnectionEvent {\r\n message = 'message',\r\n destroy = 'destroy',\r\n ready = 'ready',\r\n error = 'error',\r\n}\r\n\r\nexport interface ConnectionOptionsInterface {\r\n url: string;\r\n token?: string;\r\n temporaryNick?: string;\r\n}\r\n\r\nexport interface ChatConnectionInterface extends ObservableInterface {\r\n init(): void;\r\n send(data: any): void;\r\n destroy(): void;\r\n}","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<T = any> = (...args: T[]) => void;\r\ntype HandlersMap = Map<string, EventHandler[]>;\r\n\r\nexport interface ObservableInterface {\r\n on(eventName: string, handler: EventHandler): ObservableInterface;\r\n once(eventName: string, handler: EventHandler): ObservableInterface;\r\n}\r\n\r\nexport abstract class EventTarget implements ObservableInterface {\r\n protected events: HandlersMap = new Map<string, EventHandler[]>();\r\n protected onceEvents: HandlersMap = new Map<string, EventHandler[]>();\r\n\r\n public on(eventName: string, handler: EventHandler): EventTarget {\r\n this.addHandler(this.events, eventName, handler);\r\n return this;\r\n }\r\n\r\n public once(eventName: string, handler: EventHandler): EventTarget {\r\n this.addHandler(this.onceEvents, eventName, handler);\r\n return this;\r\n }\r\n\r\n public emit(eventName: string, ...args: any): EventTarget {\r\n this.callHandlers(this.events, eventName, args);\r\n this.callHandlers(this.onceEvents, eventName, args);\r\n this.onceEvents.delete(eventName);\r\n return this;\r\n }\r\n\r\n private addHandler(map: HandlersMap, eventName: string, handler: EventHandler): void {\r\n const handlers = map.get(eventName) ?? [];\r\n handlers.push(handler);\r\n map.set(eventName, handlers);\r\n }\r\n\r\n private callHandlers(map: HandlersMap, eventName: string, args: any[]): void {\r\n map.get(eventName)?.forEach(callback => callback(...args));\r\n }\r\n}","export function cast<T extends typeof Dto>(data: any, dto: T): T|undefined {\r\n if (data instanceof dto) {\r\n return data as any;\r\n }\r\n return new (dto as any)(data);\r\n}\r\n\r\nexport function castArray<T extends typeof Dto>(data: any[], dto: T): T[] {\r\n if (!Array.isArray(data)) throw new Error(`Passed data is not an array of ${dto.name}`);\r\n return data.map(item => cast(item, dto));\r\n}\r\n\r\ntype ExcludeMethods<T> = Pick<T, { [K in keyof T]: T[K] extends Function ? never : K }[keyof T]>;\r\nexport type DtoData<T> = { [K in keyof ExcludeMethods<T>]: any };\r\n\r\nexport abstract class Dto {\r\n public constructor(...args: any[]) {\r\n }\r\n\r\n public toJson(overrideBy: any = {}): string {\r\n return JSON.stringify(this.toRaw(overrideBy));\r\n }\r\n\r\n public toRaw(overrideBy: any = {}): DtoData<this> {\r\n const object: {[key: string]: any} = {};\r\n Object.keys(this).forEach(key => {\r\n if (overrideBy.hasOwnProperty(key)) {\r\n object[key] = overrideBy[key];\r\n } else if ((this as any)[key] instanceof Dto) {\r\n object[key] = (this as any)[key].toRaw();\r\n } else {\r\n object[key] = (this as any)[key]\r\n }\r\n });\r\n return object as DtoData<this>;\r\n }\r\n\r\n public clone(overrideBy: any = {}): this {\r\n return new (this.constructor as any)(this.toRaw(overrideBy));\r\n }\r\n\r\n protected fill(data: any, overrideBy: any = {}) {\r\n Object.assign(this, {...data, ...overrideBy});\r\n }\r\n}","import {Dto, DtoData} from \"../Dto\";\r\n\r\nexport class Envelope<T = any> extends Dto {\r\n public readonly type: string;\r\n public readonly ref?: string;\r\n public readonly data: T;\r\n\r\n public constructor(data: DtoData<Envelope>) {\r\n super();\r\n this.fill(data);\r\n }\r\n}","import {Dto, DtoData} from \"../../Dto\";\n\nexport class Bye extends Dto {\n public readonly reason: string;\n\n public constructor(data: DtoData<Bye>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class Ok extends Dto {\n public constructor(data: DtoData<Ok>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class Error extends Dto {\n public readonly code: string;\n public readonly message: string;\n\n public constructor(data: DtoData<Error>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"./Dto\";\r\n\r\nexport class Role extends Dto {\r\n public readonly id: string;\r\n public readonly name: string;\r\n public readonly color?: string;\r\n\r\n public constructor(data: DtoData<Role>) {\r\n super();\r\n this.fill(data);\r\n }\r\n}","import {castArray, Dto, DtoData} from \"./Dto\";\r\nimport {Role} from \"./Role\";\r\n\r\nexport class Space extends Dto {\r\n public readonly id: string;\r\n public readonly name: string;\r\n public readonly roles: Role[];\r\n\r\n public constructor(data: DtoData<Space>) {\r\n super();\r\n this.fill(data, {\r\n roles: castArray(data.roles, Role)\r\n });\r\n }\r\n}","import {Dto, DtoData} from \"./Dto\";\r\n\r\nexport class Topic extends Dto {\r\n public readonly id: string;\r\n public readonly name: string;\r\n public readonly description: string;\r\n\r\n public constructor(data: DtoData<Topic>) {\r\n super();\r\n this.fill(data);\r\n }\r\n}","import {castArray, Dto, DtoData} from \"./Dto\";\r\nimport {Topic} from \"./Topic\";\r\n\r\nexport class Room extends Dto {\r\n public readonly id: string;\r\n public readonly spaceId: string|null;\r\n public readonly name: string;\r\n public readonly description: string;\r\n public readonly topics: Topic[];\r\n\r\n public constructor(data: DtoData<Room>) {\r\n super();\r\n this.fill(data, {\r\n topics: castArray(data.topics, Topic),\r\n });\r\n }\r\n}","import {Space} from \"./Space\";\r\nimport {Room} from \"./Room\";\r\nimport {castArray, Dto, DtoData} from \"./Dto\";\r\n\r\nexport class UserState extends Dto {\r\n public readonly spaces: Space[];\r\n public readonly rooms: Room[];\r\n\r\n public constructor(data: DtoData<UserState>) {\r\n super();\r\n this.fill(data, {\r\n spaces: castArray(data.spaces, Space),\r\n rooms: castArray(data.rooms, Room),\r\n });\r\n }\r\n}","import {Dto, DtoData} from \"./Dto\";\r\n\r\nexport type UserFlag = 'bot' | 'temp';\r\n\r\nexport class User extends Dto {\r\n public readonly id: string;\r\n public readonly nick: string;\r\n public readonly avatar: string;\r\n public readonly flags: UserFlag[];\r\n\r\n public constructor(data: DtoData<User>) {\r\n super();\r\n this.fill(data);\r\n }\r\n}","import {cast, Dto, DtoData} from \"../../Dto\";\r\nimport {UserState} from \"../../UserState\";\r\nimport {User} from \"../../User\";\r\n\r\nexport class Session extends Dto {\r\n public readonly serverVersion: string;\r\n public readonly state: UserState;\r\n public readonly user: User;\r\n\r\n public constructor(data: DtoData<Session>) {\r\n super();\r\n this.fill(data, {\r\n state: cast(data.state, UserState),\r\n user: cast(data.user, User),\r\n });\r\n }\r\n}\r\n","import {Dto, DtoData} from \"./Dto\";\r\n\r\nexport class Permission extends Dto {\r\n public readonly name: string;\r\n public readonly value: boolean;\r\n public readonly skip: boolean;\r\n\r\n public constructor(data: DtoData<Permission>) {\r\n super(data);\r\n this.fill(data);\r\n }\r\n}","import {castArray, Dto, DtoData} from \"../../Dto\";\nimport {Permission} from \"../../Permission\";\n\nexport class Permissions extends Dto {\n public readonly permissions: Permission[];\n\n public constructor(data: DtoData<Permissions>) {\n super();\n this.fill(data, {\n permissions: castArray(data.permissions, Permission),\n });\n }\n}\n","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {Space} from \"../../Space\";\n\nexport class SpaceJoined extends Dto {\n public readonly space: Space;\n\n public constructor(data: DtoData<SpaceJoined>) {\n super();\n this.fill(data, {\n space: cast(data.space, Space),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class SpaceLeft extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<SpaceLeft>) {\n super();\n this.fill(data);\n }\n}\n","import {castArray, Dto, DtoData} from \"./Dto\";\r\nimport {User} from \"./User\";\r\n\r\nexport class SpaceMember extends Dto {\r\n public readonly user: User;\r\n public readonly roles: string[];\r\n\r\n public constructor(data: DtoData<SpaceMember>) {\r\n super();\r\n this.fill(data, {\r\n user: castArray(data.user, User),\r\n });\r\n }\r\n}","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {SpaceMember} from \"../../SpaceMember\";\n\nexport class SpaceMemberJoined extends Dto {\n public readonly member: SpaceMember;\n\n public constructor(data: DtoData<SpaceMemberJoined>) {\n super();\n this.fill(data, {\n member: cast(data.member, SpaceMember),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class SpaceMemberLeft extends Dto {\n public readonly userId: string;\n\n public constructor(data: DtoData<SpaceMemberLeft>) {\n super();\n this.fill(data);\n }\n}\n","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {SpaceMember} from \"../../SpaceMember\";\n\nexport class SpaceMemberUpdate extends Dto {\n public readonly member: SpaceMember;\n\n public constructor(data: DtoData<SpaceMemberUpdate>) {\n super();\n this.fill(data, {\n member: cast(data.member, SpaceMember),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class SpaceDeleted extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<SpaceDeleted>) {\n super();\n this.fill(data);\n }\n}\n","import {castArray, Dto, DtoData} from \"../../Dto\";\nimport {SpaceMember} from \"../../SpaceMember\";\n\nexport class SpaceMembers extends Dto {\n public readonly members: SpaceMember[];\n\n public constructor(data: DtoData<SpaceMembers>) {\n super();\n this.fill(data, {\n members: castArray(data.members, SpaceMember),\n });\n }\n}\n","import {Dto, DtoData} from \"./Dto\";\r\n\r\nexport class RoomSummary extends Dto {\r\n public readonly id: string;\r\n public readonly name: string;\r\n public readonly description: string;\r\n\r\n public constructor(data: DtoData<RoomSummary>) {\r\n super();\r\n this.fill(data);\r\n }\r\n}","import {castArray, Dto, DtoData} from \"../../Dto\";\nimport {RoomSummary} from \"../../RoomSummary\";\n\nexport class SpaceRooms extends Dto {\n public readonly summaries: RoomSummary[];\n\n public constructor(data: DtoData<SpaceRooms>) {\n super();\n this.fill(data, {\n summaries: castArray(data.summaries, RoomSummary),\n });\n }\n}\n","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {Role} from \"../../Role\";\n\nexport class NewRole extends Dto {\n public readonly spaceId: string;\n public readonly role: Role;\n\n public constructor(data: DtoData<NewRole>) {\n super();\n this.fill(data, {\n role: cast(data.role, Role),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class RoleDeleted extends Dto {\n public readonly roleId: string;\n public readonly spaceId: string;\n\n public constructor(data: DtoData<RoleDeleted>) {\n super();\n this.fill(data);\n }\n}\n","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {Room} from \"../../Room\";\n\nexport class RoomJoined extends Dto {\n public readonly room: Room;\n\n public constructor(data: DtoData<RoomJoined>) {\n super();\n this.fill(data, {\n room: cast(data.room, Room),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class RoomLeft extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<RoomLeft>) {\n super();\n this.fill(data);\n }\n}\n","import {cast, Dto, DtoData} from \"./Dto\";\r\nimport {User} from \"./User\";\r\n\r\nexport class RoomMember extends Dto {\r\n public readonly user: User;\r\n\r\n public constructor(data: DtoData<RoomMember>) {\r\n super();\r\n this.fill(data, {\r\n user: cast(data.user, User),\r\n });\r\n }\r\n}","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {RoomMember} from \"../../RoomMember\";\n\nexport class RoomMemberJoined extends Dto {\n public readonly member: RoomMember;\n\n public constructor(data: DtoData<RoomMemberJoined>) {\n super();\n this.fill(data, {\n member: cast(data.member, RoomMember),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class RoomMemberLeft extends Dto {\n public readonly userId: string;\n\n public constructor(data: DtoData<RoomMemberLeft>) {\n super();\n this.fill(data);\n }\n}\n","import {castArray, Dto, DtoData} from \"../../Dto\";\nimport {RoomMember} from \"../../RoomMember\";\n\nexport class RoomMembers extends Dto {\n public readonly members: RoomMember[];\n\n public constructor(data: DtoData<RoomMembers>) {\n super();\n this.fill(data, {\n members: castArray(data.members, RoomMember),\n });\n }\n}\n","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {RoomSummary} from \"../../RoomSummary\";\n\nexport class NewRoom extends Dto {\n public readonly summary: RoomSummary;\n public readonly spaceId: string;\n\n public constructor(data: DtoData<NewRoom>) {\n super();\n this.fill(data, {\n summary: cast(data.summary, RoomSummary),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class RoomDeleted extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<RoomDeleted>) {\n super();\n this.fill(data);\n }\n}\n","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {Topic} from \"../../Topic\";\n\nexport class NewTopic extends Dto {\n public readonly roomId: string;\n public readonly topic: Topic;\n\n public constructor(data: DtoData<NewTopic>) {\n super();\n this.fill(data, {\n topic: cast(data.topic, Topic),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class TopicDeleted extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<TopicDeleted>) {\n super();\n this.fill(data);\n }\n}\n","import {cast, Dto, DtoData} from \"./Dto\";\r\nimport {User} from \"./User\";\r\n\r\nexport class Message extends Dto {\r\n public readonly id: string;\r\n public readonly author: User;\r\n public readonly topicId: string;\r\n public readonly content: string;\r\n\r\n public constructor(data: DtoData<Message>) {\r\n super();\r\n this.fill(data, {\r\n author: cast(data.author, User),\r\n });\r\n }\r\n}","import {cast, Dto, DtoData} from \"../../Dto\";\nimport {Message} from \"../../Message\";\n\nexport class NewMessage extends Dto {\n public readonly message: Message;\n\n public constructor(data: DtoData<NewMessage>) {\n super();\n this.fill(data, {\n message: cast(data.message, Message),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class GetSession extends Dto {\n public constructor(data: DtoData<GetSession>) {\n super();\n this.fill(data);\n }\n}\n","import {Permission} from \"../../Permission\";\nimport {castArray, Dto, DtoData} from \"../../Dto\";\n\nexport class SetUserPermissions extends Dto {\n public readonly permissions: Permission[];\n public readonly layer: 'Global' | 'Space' | 'Room' | 'Topic';\n public readonly layerId: string;\n public readonly userId: string;\n\n public constructor(data: DtoData<SetUserPermissions>) {\n super();\n this.fill(data, {\n permissions: castArray(data.permissions, Permission),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class GetUserPermissions extends Dto {\n public readonly layer: 'Global' | 'Space' | 'Room' | 'Topic';\n public readonly layerId: string;\n public readonly userId: string;\n public readonly names: string[] | null | undefined;\n\n public constructor(data: DtoData<GetUserPermissions>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class GetComputedPermissions extends Dto {\n public readonly names: string[] | null | undefined;\n public readonly spaceId: string;\n public readonly roomId: string;\n public readonly topicId: string;\n\n public constructor(data: DtoData<GetComputedPermissions>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class JoinSpace extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<JoinSpace>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class LeaveSpace extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<LeaveSpace>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class CreateSpace extends Dto {\n public readonly name: string;\n\n public constructor(data: DtoData<CreateSpace>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class DeleteSpace extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<DeleteSpace>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class GetSpaceMembers extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<GetSpaceMembers>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class GetSpaceRooms extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<GetSpaceRooms>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class CreateRole extends Dto {\n public readonly spaceId: string;\n public readonly name: string;\n public readonly color: string;\n\n public constructor(data: DtoData<CreateRole>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class DeleteRole extends Dto {\n public readonly roleId: string;\n public readonly spaceId: string;\n\n public constructor(data: DtoData<DeleteRole>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class AssignRole extends Dto {\n public readonly roleId: string;\n public readonly spaceId: string;\n public readonly userId: string;\n\n public constructor(data: DtoData<AssignRole>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class DeassignRole extends Dto {\n public readonly roleId: string;\n public readonly spaceId: string;\n public readonly userId: string;\n\n public constructor(data: DtoData<DeassignRole>) {\n super();\n this.fill(data);\n }\n}\n","import {castArray, Dto, DtoData} from \"../../Dto\";\nimport {Permission} from \"../../Permission\";\n\nexport class SetRolePermissions extends Dto {\n public readonly permissions: Permission[];\n public readonly layer: 'Space' | 'Room' | 'Topic';\n public readonly layerId: string;\n public readonly roleId: string;\n\n public constructor(data: DtoData<SetRolePermissions>) {\n super();\n this.fill(data, {\n permissions: castArray(data.permissions, Permission),\n });\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class GetRolePermissions extends Dto {\n public readonly layer: 'Space' | 'Room' | 'Topic';\n public readonly layerId: string;\n public readonly roleId: string;\n public readonly names: string[] | null | undefined;\n\n public constructor(data: DtoData<GetRolePermissions>) {\n super();\n this.fill(data);\n }\n}","import {Dto, DtoData} from \"../../Dto\";\n\nexport class JoinRoom extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<JoinRoom>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class LeaveRoom extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<LeaveRoom>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class CreateRoom extends Dto {\n public readonly spaceId: string;\n public readonly name: string;\n public readonly description: string;\n\n public constructor(data: DtoData<CreateRoom>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class DeleteRoom extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<DeleteRoom>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class GetRoomMembers extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<GetRoomMembers>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class CreateTopic extends Dto {\n public readonly roomId: string;\n public readonly name: string;\n public readonly description: string;\n\n public constructor(data: DtoData<CreateTopic>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\n\nexport class DeleteTopic extends Dto {\n public readonly id: string;\n\n public constructor(data: DtoData<DeleteTopic>) {\n super();\n this.fill(data);\n }\n}\n","import {Dto, DtoData} from \"../../Dto\";\nimport {Message} from \"../../Message\";\n\nexport class CreateMessage extends Dto {\n public readonly topicId: string;\n public readonly content: string;\n\n public constructor(data: DtoData<Message>) {\n super();\n this.fill(data);\n }\n}\n","import {Bye} from \"./dtos/protocol/events/Bye\";\r\nimport {Ok} from \"./dtos/protocol/events/Ok\";\r\nimport {Error} from \"./dtos/protocol/events/Error\";\r\nimport {Session} from \"./dtos/protocol/events/Session\";\r\nimport {Permissions} from \"./dtos/protocol/events/Permissions\";\r\nimport {SpaceJoined} from \"./dtos/protocol/events/SpaceJoined\";\r\nimport {SpaceLeft} from \"./dtos/protocol/events/SpaceLeft\";\r\nimport {SpaceMemberJoined} from \"./dtos/protocol/events/SpaceMemberJoined\";\r\nimport {SpaceMemberLeft} from \"./dtos/protocol/events/SpaceMemberLeft\";\r\nimport {SpaceMemberUpdate} from \"./dtos/protocol/events/SpaceMemberUpdate\";\r\nimport {SpaceDeleted} from \"./dtos/protocol/events/SpaceDeleted\";\r\nimport {SpaceMembers} from \"./dtos/protocol/events/SpaceMembers\";\r\nimport {SpaceRooms} from \"./dtos/protocol/events/SpaceRooms\";\r\nimport {NewRole} from \"./dtos/protocol/events/NewRole\";\r\nimport {RoleDeleted} from \"./dtos/protocol/events/RoleDeleted\";\r\nimport {RoomJoined} from \"./dtos/protocol/events/RoomJoined\";\r\nimport {RoomLeft} from \"./dtos/protocol/events/RoomLeft\";\r\nimport {RoomMemberJoined} from \"./dtos/protocol/events/RoomMemberJoined\";\r\nimport {RoomMemberLeft} from \"./dtos/protocol/events/RoomMemberLeft\";\r\nimport {RoomMembers} from \"./dtos/protocol/events/RoomMembers\";\r\nimport {NewRoom} from \"./dtos/protocol/events/NewRoom\";\r\nimport {RoomDeleted} from \"./dtos/protocol/events/RoomDeleted\";\r\nimport {NewTopic} from \"./dtos/protocol/events/NewTopic\";\r\nimport {TopicDeleted} from \"./dtos/protocol/events/TopicDeleted\";\r\nimport {NewMessage} from \"./dtos/protocol/events/NewMessage\";\r\nimport {GetSession} from \"./dtos/protocol/commands/GetSession\";\r\nimport {SetUserPermissions} from \"./dtos/protocol/commands/SetUserPermissions\";\r\nimport {GetUserPermissions} from \"./dtos/protocol/commands/GetUserPermissions\";\r\nimport {GetComputedPermissions} from \"./dtos/protocol/commands/GetComputedPermissions\";\r\nimport {JoinSpace} from \"./dtos/protocol/commands/JoinSpace\";\r\nimport {LeaveSpace} from \"./dtos/protocol/commands/LeaveSpace\";\r\nimport {CreateSpace} from \"./dtos/protocol/commands/CreateSpace\";\r\nimport {DeleteSpace} from \"./dtos/protocol/commands/DeleteSpace\";\r\nimport {GetSpaceMembers} from \"./dtos/protocol/commands/GetSpaceMembers\";\r\nimport {GetSpaceRooms} from \"./dtos/protocol/commands/GetSpaceRooms\";\r\nimport {CreateRole} from \"./dtos/protocol/commands/CreateRole\";\r\nimport {DeleteRole} from \"./dtos/protocol/commands/DeleteRole\";\r\nimport {AssignRole} from \"./dtos/protocol/commands/AssignRole\";\r\nimport {DeassignRole} from \"./dtos/protocol/commands/DeassignRole\";\r\nimport {SetRolePermissions} from \"./dtos/protocol/commands/SetRolePermissions\";\r\nimport {GetRolePermissions} from \"./dtos/protocol/commands/GetRolePermissions\";\r\nimport {JoinRoom} from \"./dtos/protocol/commands/JoinRoom\";\r\nimport {LeaveRoom} from \"./dtos/protocol/commands/LeaveRoom\";\r\nimport {CreateRoom} from \"./dtos/protocol/commands/CreateRoom\";\r\nimport {DeleteRoom} from \"./dtos/protocol/commands/DeleteRoom\";\r\nimport {GetRoomMembers} from \"./dtos/protocol/commands/GetRoomMembers\";\r\nimport {CreateTopic} from \"./dtos/protocol/commands/CreateTopic\";\r\nimport {DeleteTopic} from \"./dtos/protocol/commands/DeleteTopic\";\r\nimport {CreateMessage} from \"./dtos/protocol/commands/CreateMessage\";\r\nimport {Dto} from \"./dtos/Dto\";\r\n\r\nexport const events = {\r\n // General events\r\n Bye,\r\n Ok,\r\n Error,\r\n Session,\r\n Permissions,\r\n // Space events\r\n SpaceJoined,\r\n SpaceLeft,\r\n SpaceMemberJoined,\r\n SpaceMemberLeft,\r\n SpaceMemberUpdate,\r\n SpaceDeleted,\r\n SpaceMembers,\r\n SpaceRooms,\r\n NewRole,\r\n RoleDeleted,\r\n // Room events\r\n RoomJoined,\r\n RoomLeft,\r\n RoomMemberJoined,\r\n RoomMemberLeft,\r\n RoomMembers,\r\n NewRoom,\r\n RoomDeleted,\r\n // Topic events\r\n NewTopic,\r\n TopicDeleted,\r\n NewMessage,\r\n};\r\n\r\nexport const commands = {\r\n // General commands\r\n GetSession,\r\n SetUserPermissions,\r\n GetUserPermissions,\r\n GetComputedPermissions,\r\n // Space commands\r\n JoinSpace,\r\n LeaveSpace,\r\n CreateSpace,\r\n DeleteSpace,\r\n GetSpaceMembers,\r\n GetSpaceRooms,\r\n CreateRole,\r\n DeleteRole,\r\n AssignRole,\r\n DeassignRole,\r\n SetRolePermissions,\r\n GetRolePermissions,\r\n // Room commands\r\n JoinRoom,\r\n LeaveRoom,\r\n CreateRoom,\r\n DeleteRoom,\r\n GetRoomMembers,\r\n // Topic commands\r\n CreateTopic,\r\n DeleteTopic,\r\n CreateMessage,\r\n};","import {EventTarget} from \"../ObservableInterface\";\r\nimport {\r\n ChatConnectionEvent,\r\n ChatConnectionInterface,\r\n ConnectionOptionsInterface,\r\n} from \"./ConnectionAssets\";\r\n\r\nexport interface WebSocketConnectionInterface extends ConnectionOptionsInterface {\r\n awaitQueueSendDelayMs?: number;\r\n connectingTimeoutMs?: number;\r\n}\r\n\r\nexport class WebSocketConnection extends EventTarget implements ChatConnectionInterface {\r\n protected ws: WebSocket|null = null;\r\n protected sendQueue: any[] = [];\r\n protected connectingTimeoutId: any;\r\n protected authenticated: boolean;\r\n\r\n public constructor(private readonly options: WebSocketConnectionInterface) {\r\n super();\r\n if (!this.options.token && !this.options.temporaryNick) {\r\n throw new Error('Token or temporary nick is required');\r\n }\r\n }\r\n\r\n public init() {\r\n if (this.ws) {\r\n this.destroy();\r\n }\r\n this.connect();\r\n }\r\n\r\n public send(data: any): void {\r\n if (!this.ws || this.ws.readyState === this.ws.CLOSED) {\r\n this.connect();\r\n }\r\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\r\n this.sendQueue.push(data);\r\n return;\r\n }\r\n const dataJson = JSON.stringify(data);\r\n if (this.ws.readyState !== this.ws.OPEN) {\r\n this.emit(ChatConnectionEvent.error, new Error(`Cannot send ${dataJson}; invalid connection state`));\r\n return;\r\n }\r\n this.ws.send(dataJson);\r\n }\r\n\r\n public destroy(): void {\r\n this.sendQueue = [];\r\n this.ws?.close();\r\n this.ws = null;\r\n }\r\n\r\n private connect(): void {\r\n this.authenticated = false;\r\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\r\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\r\n this.ws.onclose = ev => this.onClose(ev);\r\n this.ws.onmessage = ev => this.onMessage(ev);\r\n this.connectingTimeoutId = setTimeout(\r\n () => this.triggerConnectionTimeout(),\r\n this.options.connectingTimeoutMs ?? 10000\r\n );\r\n }\r\n\r\n private onMessage(event: MessageEvent): void {\r\n const payload = JSON.parse(event.data);\r\n // Login successfully\r\n if (!this.authenticated && payload.type && payload.type !== 'Error') {\r\n this.authenticated = true;\r\n this.emit(ChatConnectionEvent.ready);\r\n this.sendFromQueue();\r\n }\r\n this.emit(ChatConnectionEvent.message, payload);\r\n }\r\n\r\n private onClose(event: CloseEvent): void {\r\n clearTimeout(this.connectingTimeoutId);\r\n const reconnect = event.code !== 1000; // Connection was closed because of error\r\n if (reconnect) {\r\n this.connect();\r\n }\r\n this.emit(ChatConnectionEvent.destroy, reconnect);\r\n }\r\n\r\n private sendFromQueue(): void {\r\n // Send awaiting data to server\r\n let lastDelay = 0;\r\n for (const dataIndex in this.sendQueue) {\r\n const data = this.sendQueue[dataIndex];\r\n setTimeout(() => this.send(data), lastDelay);\r\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\r\n }\r\n this.sendQueue = [];\r\n clearTimeout(this.connectingTimeoutId);\r\n }\r\n\r\n private triggerConnectionTimeout(): void {\r\n this.destroy();\r\n this.emit(ChatConnectionEvent.error, new Error('Connection timeout'));\r\n }\r\n}","import {ConnectionOptionsInterface} from \"./ConnectionAssets\";\r\n\r\nexport interface RestResponseInterface {\r\n ok: boolean;\r\n status: number;\r\n data: any;\r\n}\r\n\r\nexport class RestApiConnection {\r\n public constructor(protected options: ConnectionOptionsInterface) {\r\n if (this.options.temporaryNick) {\r\n throw new Error('Temporary nick is not supported authentication method for REST API');\r\n }\r\n }\r\n\r\n public async send(method: string, uri: string, data: any = undefined): Promise<RestResponseInterface> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n const body = data === undefined ? undefined : JSON.stringify(data);\r\n const result = await fetch(this.getUrl(uri), {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: await result.json(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {ChatConnectionEvent, ChatConnectionInterface} from \"./connections/ConnectionAssets\";\r\nimport {EventTarget} from \"./ObservableInterface\";\r\nimport {Envelope} from \"./dtos/protocol/Envelope\";\r\nimport {JoinRoom} from \"./dtos/protocol/commands/JoinRoom\";\r\nimport {Dto} from \"./dtos/Dto\";\r\nimport {RoomJoined} from \"./dtos/protocol/events/RoomJoined\";\r\nimport {LeaveRoom} from \"./dtos/protocol/commands/LeaveRoom\";\r\nimport {RoomLeft} from \"./dtos/protocol/events/RoomLeft\";\r\nimport {CreateRoom} from \"./dtos/protocol/commands/CreateRoom\";\r\nimport {Error as ErrorEvent} from \"./dtos/protocol/events/Error\";\r\nimport {SpaceRooms} from \"./dtos/protocol/events/SpaceRooms\";\r\nimport {DeleteRoom} from \"./dtos/protocol/commands/DeleteRoom\";\r\nimport {RoomDeleted} from \"./dtos/protocol/events/RoomDeleted\";\r\nimport {GetRoomMembers} from \"./dtos/protocol/commands/GetRoomMembers\";\r\nimport {RoomMembers} from \"./dtos/protocol/events/RoomMembers\";\r\nimport {JoinSpace} from \"./dtos/protocol/commands/JoinSpace\";\r\nimport {SpaceJoined} from \"./dtos/protocol/events/SpaceJoined\";\r\nimport {LeaveSpace} from \"./dtos/protocol/commands/LeaveSpace\";\r\nimport {SpaceLeft} from \"./dtos/protocol/events/SpaceLeft\";\r\nimport {CreateSpace} from \"./dtos/protocol/commands/CreateSpace\";\r\nimport {DeleteSpace} from \"./dtos/protocol/commands/DeleteSpace\";\r\nimport {SpaceDeleted} from \"./dtos/protocol/events/SpaceDeleted\";\r\nimport {GetSpaceMembers} from \"./dtos/protocol/commands/GetSpaceMembers\";\r\nimport {SpaceMembers} from \"./dtos/protocol/events/SpaceMembers\";\r\nimport {GetSpaceRooms} from \"./dtos/protocol/commands/GetSpaceRooms\";\r\nimport {GetSession} from \"./dtos/protocol/commands/GetSession\";\r\nimport {Session} from \"./dtos/protocol/events/Session\";\r\nimport {AssignRole} from \"./dtos/protocol/commands/AssignRole\";\r\nimport {SpaceMemberUpdate} from \"./dtos/protocol/events/SpaceMemberUpdate\";\r\nimport {DeassignRole} from \"./dtos/protocol/commands/DeassignRole\";\r\nimport {CreateRole} from \"./dtos/protocol/commands/CreateRole\";\r\nimport {NewRole} from \"./dtos/protocol/events/NewRole\";\r\nimport {DeleteRole} from \"./dtos/protocol/commands/DeleteRole\";\r\nimport {RoleDeleted} from \"./dtos/protocol/events/RoleDeleted\";\r\nimport {SetRolePermissions} from \"./dtos/protocol/commands/SetRolePermissions\";\r\nimport {Permissions} from \"./dtos/protocol/events/Permissions\";\r\nimport {SetUserPermissions} from \"./dtos/protocol/commands/SetUserPermissions\";\r\nimport {CreateTopic} from \"./dtos/protocol/commands/CreateTopic\";\r\nimport {NewTopic} from \"./dtos/protocol/events/NewTopic\";\r\nimport {DeleteTopic} from \"./dtos/protocol/commands/DeleteTopic\";\r\nimport {TopicDeleted} from \"./dtos/protocol/events/TopicDeleted\";\r\nimport {CreateMessage} from \"./dtos/protocol/commands/CreateMessage\";\r\nimport {NewMessage} from \"./dtos/protocol/events/NewMessage\";\r\nimport {GetComputedPermissions} from \"./dtos/protocol/commands/GetComputedPermissions\";\r\nimport {GetRolePermissions} from \"./dtos/protocol/commands/GetRolePermissions\";\r\nimport {GetUserPermissions} from \"./dtos/protocol/commands/GetUserPermissions\";\r\nimport {commands, events} from \"./protocol\";\r\nimport {WebSocketConnection} from \"./connections/WebSocketConnection\";\r\nimport {RestApiConnection} from \"./connections/RestApiConnection\";\r\n\r\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\r\ntype CmdResult<EventDto> = EventDto | ErrorEvent;\r\ntype CommandsToEventsType<CommandT> =\r\n // General commands\r\n CommandT extends GetSession ? CmdResult<Session> :\r\n CommandT extends SetUserPermissions ? CmdResult<Permissions> :\r\n CommandT extends GetUserPermissions ? CmdResult<Permissions> :\r\n CommandT extends GetComputedPermissions ? CmdResult<Permissions> :\r\n // Space commands\r\n CommandT extends JoinSpace ? CmdResult<SpaceJoined> :\r\n CommandT extends LeaveSpace ? CmdResult<SpaceLeft> :\r\n CommandT extends CreateSpace ? CmdResult<SpaceJoined> :\r\n CommandT extends DeleteSpace ? CmdResult<SpaceDeleted> :\r\n CommandT extends GetSpaceMembers ? CmdResult<SpaceMembers> :\r\n CommandT extends GetSpaceRooms ? CmdResult<SpaceRooms> :\r\n CommandT extends CreateRole ? CmdResult<NewRole> :\r\n CommandT extends DeleteRole ? CmdResult<RoleDeleted> :\r\n CommandT extends AssignRole ? CmdResult<SpaceMemberUpdate> :\r\n CommandT extends DeassignRole ? CmdResult<SpaceMemberUpdate> :\r\n CommandT extends SetRolePermissions ? CmdResult<Permissions> :\r\n CommandT extends GetRolePermissions ? CmdResult<Permissions> :\r\n // Room commands\r\n CommandT extends JoinRoom ? CmdResult<RoomJoined> :\r\n CommandT extends LeaveRoom ? CmdResult<RoomLeft> :\r\n CommandT extends CreateRoom ? CmdResult<RoomJoined> :\r\n CommandT extends DeleteRoom ? CmdResult<RoomDeleted> :\r\n CommandT extends GetRoomMembers ? CmdResult<RoomMembers> :\r\n // Topic commands\r\n CommandT extends CreateTopic ? CmdResult<NewTopic> :\r\n CommandT extends DeleteTopic ? CmdResult<TopicDeleted> :\r\n CommandT extends CreateMessage ? CmdResult<NewMessage> :\r\n any;\r\n\r\nfunction guessCommandType(obj: any): string {\r\n for (const type in commands) {\r\n if (obj instanceof commands[type]) {\r\n return type;\r\n }\r\n }\r\n return Object.getPrototypeOf(obj).constructor.name;\r\n}\r\n\r\nexport enum ClientEvent {\r\n message = 'message',\r\n ready = 'ready',\r\n renewal = 'renewalStart',\r\n renewalSuccess = 'renewalSuccess',\r\n renewalError = 'renewalError',\r\n}\r\n\r\nexport interface TokenInterface {\r\n token: string,\r\n expiration: string\r\n}\r\n\r\nexport interface MyAccountInterface {\r\n id: string;\r\n nick: string;\r\n avatar: string;\r\n}\r\n\r\nexport class Client extends EventTarget {\r\n public static readonly defaultClientName = 'polfan-server-js-client';\r\n public static readonly defaultWebSocketUrl = 'ws://pserv.shado.p5.tiktalik.io:1600/ws';\r\n public static readonly defaultWebApiUrl = 'http://pserv.shado.p5.tiktalik.io:1600/api';\r\n public static readonly defaultRestApiUrl = 'https://polfan.pl/webservice/api';\r\n public static readonly defaultAvatarUrlPrefix = 'https://polfan.pl/modules/users/avatars/';\r\n\r\n public static async getToken(\r\n login: string,\r\n password: string,\r\n clientName: string = Client.defaultClientName\r\n ): Promise<TokenInterface> {\r\n const connection = new RestApiConnection({url: Client.defaultRestApiUrl});\r\n const response = await connection.send('POST', 'auth/tokens', {\r\n login, password, client_name: clientName\r\n });\r\n if (response.ok) {\r\n return response.data;\r\n }\r\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\r\n }\r\n\r\n public static createByToken(token: string): Client {\r\n return new Client(\r\n new WebSocketConnection({token, url: Client.defaultWebSocketUrl}),\r\n new RestApiConnection({token, url: Client.defaultRestApiUrl}),\r\n );\r\n }\r\n\r\n public static createByTemporaryNick(temporaryNick: string): Client {\r\n return new Client(\r\n new WebSocketConnection({temporaryNick, url: Client.defaultWebSocketUrl}),\r\n new RestApiConnection({url: Client.defaultRestApiUrl}),\r\n );\r\n }\r\n\r\n protected commandsCount = 0;\r\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\r\n protected eventsMap: {[x: string]: typeof Dto};\r\n protected reconnecting: boolean;\r\n\r\n public constructor(\r\n public readonly chatConnection: ChatConnectionInterface,\r\n public readonly restConnection: RestApiConnection,\r\n ) {\r\n super();\r\n this.setCustomEventMap({}); // Set default event map.\r\n this.chatConnection.on(ChatConnectionEvent.message, (payload: any) => this.onMessage(payload));\r\n this.chatConnection.on(ChatConnectionEvent.destroy, (reconnect: boolean) => this.onDisconnect(reconnect));\r\n this.chatConnection.on(ChatConnectionEvent.ready, () => {\r\n if (this.reconnecting) {\r\n this.reconnecting = false;\r\n this.emit(ClientEvent.renewalSuccess);\r\n return;\r\n }\r\n this.emit(ClientEvent.ready);\r\n });\r\n this.chatConnection.on(ChatConnectionEvent.error, () => {\r\n if (this.reconnecting) {\r\n this.reconnecting = false;\r\n this.emit(ClientEvent.renewalError);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Send command to chat server.\r\n * @param commandPayload Command payload object.\r\n * @param commandType Command type; if not specified, it will be guessed from the command payload class name.\r\n * @return Promise which resolves to the event returned by server (including `Error`)\r\n * in response to command and rejects with connection error.\r\n */\r\n public async sendCommand<CommandT extends Dto = any>(\r\n commandPayload: CommandT,\r\n commandType?: string\r\n ): Promise<CommandsToEventsType<CommandT>> {\r\n const message = this.createEnvelope(commandType ?? guessCommandType(commandPayload), commandPayload);\r\n this.chatConnection.send(message.toRaw());\r\n return new Promise(\r\n (...args) => this.awaitingResponse.set(message.ref as string, args)\r\n );\r\n }\r\n\r\n /**\r\n * Set custom DTO classes for events.\r\n */\r\n public setCustomEventMap(customMap: {[x: string]: typeof Dto}): this {\r\n this.eventsMap = {...events, ...customMap};\r\n return this;\r\n }\r\n\r\n public init(): this {\r\n this.chatConnection.init();\r\n return this;\r\n }\r\n\r\n public destroy(): this {\r\n this.chatConnection.destroy();\r\n return this;\r\n }\r\n\r\n public async getMe(): Promise<MyAccountInterface> {\r\n const response = await this.restConnection.send('GET', 'auth/me');\r\n if (response.ok) {\r\n response.data.id = response.data.id.toString();\r\n return response.data;\r\n }\r\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\r\n }\r\n\r\n public async deleteToken(token: string): Promise<void> {\r\n const response = await this.restConnection.send('DELETE', `auth/tokens/${token}`);\r\n if (!response.ok) {\r\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\r\n }\r\n }\r\n\r\n private onMessage(message: any) {\r\n const dto = this.createEvent(message);\r\n\r\n const [resolve] = this.awaitingResponse.get(message.ref ?? '') ?? [];\r\n if (resolve) {\r\n resolve(dto ?? message.data);\r\n this.awaitingResponse.delete(message.ref as string);\r\n }\r\n\r\n this.emit(ClientEvent.message, message);\r\n this.emit(message.type ?? 'unknown', dto, message);\r\n }\r\n\r\n private onDisconnect(reconnect: boolean): void {\r\n this.awaitingResponse.forEach(([resolve, reject], key: string) => {\r\n reject('Disconnected');\r\n this.awaitingResponse.delete(key);\r\n });\r\n if (reconnect) {\r\n this.reconnecting = true;\r\n this.emit(ClientEvent.renewal);\r\n }\r\n }\r\n\r\n private createEnvelope(commandType: string, dto: Dto): Envelope {\r\n return new Envelope({\r\n type: commandType,\r\n ref: (++this.commandsCount).toString(),\r\n data: dto\r\n });\r\n }\r\n\r\n private createEvent(message: Envelope): Dto | null {\r\n if ((message.type ?? false) && this.eventsMap.hasOwnProperty(message.type)) {\r\n return new (this.eventsMap[message.type] as any)(message.data);\r\n }\r\n return null;\r\n }\r\n}","import {ChatConnectionInterface, ChatConnectionEvent, ConnectionOptionsInterface} from \"./ConnectionAssets\";\r\nimport {EventTarget} from \"../ObservableInterface\";\r\n\r\nexport interface WebApiConnectionOptionsInterface extends ConnectionOptionsInterface {\r\n attemptsToSend?: number;\r\n attemptDelayMs?: number;\r\n}\r\n\r\nexport class WebApiConnection extends EventTarget implements ChatConnectionInterface {\r\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\r\n\r\n public constructor(\r\n protected readonly options: WebApiConnectionOptionsInterface\r\n ) {\r\n super();\r\n if (!this.options.token && !this.options.temporaryNick) {\r\n throw new Error('Token or temporary nick is required for authentication');\r\n }\r\n }\r\n\r\n public init() {\r\n this.emit(ChatConnectionEvent.ready);\r\n }\r\n\r\n public send(data: any): void {\r\n this.sendStack.push({data: data, attempts: 0, lastTimeoutId: null});\r\n this.makeApiCall(this.sendStack.length - 1);\r\n }\r\n\r\n public destroy(): void {\r\n // Cancel all awaiting requests\r\n this.sendStack.forEach(item => {\r\n if (item.lastTimeoutId) {\r\n clearTimeout(item.lastTimeoutId);\r\n }\r\n });\r\n this.sendStack = [];\r\n this.emit(ChatConnectionEvent.destroy, false);\r\n }\r\n\r\n protected async onMessage(reqId: number, response: Response): Promise<void> {\r\n this.sendStack.splice(reqId, 1);\r\n this.emit(ChatConnectionEvent.message, await response.json());\r\n }\r\n\r\n protected onError(reqId: number, body: string): void {\r\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\r\n this.sendStack.splice(reqId, 1);\r\n this.emit(ChatConnectionEvent.error, new Error(\r\n `Cannot send ${body}; aborting after reaching the maximum connection errors`)\r\n );\r\n return;\r\n }\r\n this.sendStack[reqId].lastTimeoutId = setTimeout(\r\n () => this.makeApiCall(reqId),\r\n this.options.attemptDelayMs ?? 3000\r\n );\r\n }\r\n\r\n protected makeApiCall(reqId: number): void {\r\n this.sendStack[reqId].attempts++;\r\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n } else if (this.options.temporaryNick) {\r\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\r\n }\r\n\r\n fetch(this.options.url, {\r\n headers,\r\n body: bodyJson,\r\n method: 'POST',\r\n })\r\n .then(response => this.onMessage(reqId, response))\r\n .catch(() => this.onError(reqId, bodyJson));\r\n }\r\n}"],"names":["root","factory","exports","module","define","amd","self","ChatConnectionEvent","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","EventTarget","Map","eventName","handler","this","addHandler","events","onceEvents","args","callHandlers","map","handlers","push","set","forEach","callback","cast","data","dto","castArray","Array","isArray","Error","name","item","Dto","overrideBy","JSON","stringify","toRaw","object","keys","constructor","assign","Envelope","fill","Bye","Ok","Role","Space","roles","Topic","Room","topics","UserState","spaces","rooms","User","Session","state","user","Permission","Permissions","permissions","SpaceJoined","space","SpaceLeft","SpaceMember","SpaceMemberJoined","member","SpaceMemberLeft","SpaceMemberUpdate","SpaceDeleted","SpaceMembers","members","RoomSummary","SpaceRooms","summaries","NewRole","role","RoleDeleted","RoomJoined","room","RoomLeft","RoomMember","RoomMemberJoined","RoomMemberLeft","RoomMembers","NewRoom","summary","RoomDeleted","NewTopic","topic","TopicDeleted","Message","author","NewMessage","message","GetSession","SetUserPermissions","GetUserPermissions","GetComputedPermissions","JoinSpace","LeaveSpace","CreateSpace","DeleteSpace","GetSpaceMembers","GetSpaceRooms","CreateRole","DeleteRole","AssignRole","DeassignRole","SetRolePermissions","GetRolePermissions","JoinRoom","LeaveRoom","CreateRoom","DeleteRoom","GetRoomMembers","CreateTopic","DeleteTopic","CreateMessage","commands","WebSocketConnection","options","token","temporaryNick","ws","destroy","connect","readyState","CLOSED","CONNECTING","authenticated","dataJson","OPEN","send","emit","error","sendQueue","close","authString","WebSocket","url","onclose","ev","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","event","payload","parse","type","ready","sendFromQueue","clearTimeout","reconnect","code","lastDelay","dataIndex","awaitQueueSendDelayMs","ClientEvent","RestApiConnection","method","uri","undefined","headers","Accept","Authorization","body","fetch","getUrl","result","ok","status","json","removeEndingSlash","removeStartingSlash","text","replace","i","guessCommandType","getPrototypeOf","Client","chatConnection","restConnection","setCustomEventMap","on","onDisconnect","reconnecting","renewalSuccess","renewalError","commandPayload","commandType","createEnvelope","Promise","awaitingResponse","ref","customMap","eventsMap","init","response","id","toString","errors","createEvent","resolve","reject","renewal","commandsCount","login","password","clientName","defaultClientName","connection","defaultRestApiUrl","client_name","defaultWebSocketUrl","WebApiConnection","sendStack","attempts","lastTimeoutId","makeApiCall","length","reqId","splice","attemptsToSend","attemptDelayMs","bodyJson","then","onError"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/WebSocketStateTracker.ts","webpack://PServ/./src/WebSocketClient.ts","webpack://PServ/./src/WebApiClient.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Ok,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdate,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetUserPermissions,\n SetUserPermissions,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetRolePermissions,\n GetRolePermissions,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage, Envelope,\n} from \"pserv-ts-types\";\nimport {EventTarget} from \"./EventTarget\";\n\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\n\nexport abstract class AbstractClient extends EventTarget {\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\n protected sentCounter: number = 0;\n\n public abstract send<CommandType extends keyof CommandsMap>\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\n\n public on<EventName extends keyof EventsMap>\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\n return super.on(eventName, handler);\n }\n\n public once<EventName extends keyof EventsMap>\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\n return super.once(eventName, handler);\n }\n\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\n return {\n type, data, ref: (++this.sentCounter).toString()\n };\n }\n\n protected createPromiseFromCommandEnvelope\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\n return new Promise((...args) =>\n this.awaitingResponse.set(envelope.ref as string, args));\n }\n\n protected handleIncomingEnvelope(envelope: Envelope): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n const isError = envelope.type === 'Error';\n this.awaitingResponse.get(envelope.ref)[0]({\n data: isError ? null : envelope.data,\n error: isError ? envelope.data : null,\n } as CommandResult<any>);\n this.awaitingResponse.delete(envelope.ref);\n }\n\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n this.awaitingResponse.get(envelope.ref)[0](error);\n this.awaitingResponse.delete(envelope.ref);\n }\n}\n\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\n\n/**\n * Map of incoming events.\n */\nexport type EventsMap = {\n // General Events\n Bye: Bye,\n Ok: Ok,\n Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdate: SpaceMemberUpdate,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoomDeleted,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetUserPermissions: [SetUserPermissions, EventsMap['Permissions']],\n GetUserPermissions: [GetUserPermissions, EventsMap['Permissions']],\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\n // Space commands\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\n CreateRole: [CreateRole, EventsMap['NewRole']],\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdate']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdate']],\n SetRolePermissions: [SetRolePermissions, EventsMap['Permissions']],\n GetRolePermissions: [GetRolePermissions, EventsMap['Permissions']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | null {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | null {\n return this._items.get(id);\n }\n\n public getAt(index: number): T|null {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id, items);\n this.eventTarget = new EventTarget();\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n}","import {WebSocketClient} from \"./WebSocketClient\";\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"./IndexedObjectCollection\";\nimport {\n Message,\n NewMessage,\n NewRole,\n NewRoom,\n NewTopic, Role,\n RoleDeleted,\n Room,\n RoomDeleted,\n RoomJoined,\n RoomLeft, RoomMember,\n RoomMemberJoined,\n RoomMemberLeft,\n RoomMembers, RoomSummary,\n Session,\n Space,\n SpaceDeleted,\n SpaceJoined,\n SpaceLeft, SpaceMember,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMembers,\n SpaceMemberUpdate,\n SpaceRooms, Topic,\n TopicDeleted, User\n} from \"pserv-ts-types\";\n\ntype Deferred = {resolver: () => void, promise: Promise<void>};\n\nexport class WebSocketStateTracker {\n private readonly joinedSpaces = new ObservableIndexedObjectCollection<Space>('id');\n private readonly joinedRooms = new ObservableIndexedObjectCollection<Room>('id');\n private readonly spacesRoles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\n private readonly roomsTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\n private readonly topicsMessages = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\n\n // lazy loaded collections\n private readonly spacesRooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\n private readonly spacesMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\n private readonly roomsMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\n private readonly deferredGetters = new IndexedCollection<string, Deferred>();\n\n private reconnecting: boolean = false;\n private me: User = null;\n\n public constructor(private readonly client: WebSocketClient) {\n this.bind();\n }\n\n public async getMe(): Promise<User> {\n await this.deferredGetterReadiness('session');\n return this.me;\n }\n\n public async getJoinedSpaces(): Promise<ObservableIndexedObjectCollection<Space>> {\n await this.deferredGetterReadiness('session');\n return this.joinedSpaces;\n }\n\n public async getJoinedRooms(): Promise<ObservableIndexedObjectCollection<Room>> {\n await this.deferredGetterReadiness('session');\n return this.joinedRooms;\n }\n\n public async getSpaceRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | null> {\n await this.deferredGetterReadiness('session');\n return this.spacesRoles.get(spaceId);\n }\n\n public async getRoomTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | null> {\n await this.deferredGetterReadiness('session');\n return this.roomsTopics.get(roomId);\n }\n\n public async getTopicMessages(topicId: string): Promise<ObservableIndexedObjectCollection<Message> | null> {\n return this.topicsMessages.get(topicId);\n }\n\n public async getSpaceRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | null> {\n const deferredGetterName = `spaces-rooms-${spaceId}`;\n if (!this.spacesRooms.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceRooms', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesRooms.get(spaceId);\n }\n\n public async getSpaceMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | null> {\n const deferredGetterName = `spaces-members-${spaceId}`;\n if (!this.spacesMembers.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceMembers', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesMembers.get(spaceId);\n }\n\n public async getRoomMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | null> {\n const deferredGetterName = `rooms-members-${roomId}`;\n if (!this.roomsMembers.has(roomId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetRoomMembers', {id: roomId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.roomsMembers.get(roomId);\n }\n\n private async deferredGetterReadiness(name: string): Promise<void> {\n if (this.deferredGetters.has(name)) {\n await this.deferredGetters.get(name)?.promise;\n }\n }\n\n private bind(): void {\n this.client.on(this.client.Event.disconnect, ev => this.handleDisconnect(ev as any as boolean));\n this.client.on('NewMessage', ev => this.handleNewMessage(ev));\n this.client.on('NewRole', ev => this.handleNewRole(ev));\n this.client.on('NewRoom', ev => this.handleNewRoom(ev));\n this.client.on('NewTopic', ev => this.handleNewTopic(ev));\n this.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\n this.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\n this.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\n this.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\n this.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\n this.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\n this.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\n this.client.on('Session', ev => this.handleSession(ev));\n this.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\n this.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\n this.client.on('SpaceLeft', ev => this.handleSpaceLeft(ev));\n this.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\n this.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\n this.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\n this.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\n this.client.on('SpaceMemberUpdate', ev => this.handleSpaceMemberUpdate(ev));\n this.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\n }\n\n private createDeferredGetter(name: string): void {\n if (this.deferredGetters.has(name)) {\n return;\n }\n const deferred: Deferred = {promise: undefined, resolver: undefined};\n deferred.promise = new Promise(resolve => deferred.resolver = resolve);\n this.deferredGetters.set([name, deferred]);\n }\n\n private handleDisconnect(reconnect: boolean): void {\n if (reconnect) {\n this.reconnecting = true;\n return;\n }\n }\n\n private handleNewMessage(ev: NewMessage): void {\n this.topicsMessages.get(ev.topicId).set(ev.message);\n }\n\n private handleNewRole(ev: NewRole): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.set(ev.role);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleNewRoom(ev: NewRoom): void {\n this.spacesRooms.get(ev.spaceId)?.set(ev.summary);\n }\n\n private handleNewTopic(ev: NewTopic): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.set(ev.topic);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n\n private handleRoleDeleted(ev: RoleDeleted): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.delete(ev.id);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleRoomDeleted(ev: RoomDeleted): void {\n if (ev.spaceId) {\n this.spacesRooms.get(ev.spaceId).delete(ev.id);\n }\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomJoined(ev: RoomJoined): void {\n this.addJoinedRooms(ev.room);\n }\n\n private addJoinedRooms(...rooms: Room[]): void {\n this.roomsTopics.set(...rooms.map<[string, ObservableIndexedObjectCollection<Topic>]>(room => [\n room.id,\n new ObservableIndexedObjectCollection<Topic>('id', room.topics)\n ]));\n this.joinedRooms.set(...rooms);\n }\n\n private handleRoomLeft(ev: RoomLeft): void {\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).set(ev.member);\n }\n }\n\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).delete(ev.userId);\n }\n }\n\n private handleRoomMembers(ev: RoomMembers): void {\n if (!this.roomsMembers.has(ev.id)) {\n this.roomsMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(\n member => member?.user.id ?? member.spaceMember.user.id,\n ev.members,\n )\n ]);\n this.deferredGetters.get(`rooms-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSession(ev: Session): void {\n this.me = ev.user;\n\n if (this.me && !this.reconnecting) {\n return;\n }\n\n this.reconnecting = false;\n\n this.joinedRooms.deleteAll();\n this.roomsTopics.deleteAll();\n this.roomsMembers.deleteAll();\n this.joinedSpaces.deleteAll();\n this.spacesRoles.deleteAll();\n this.spacesRooms.deleteAll();\n this.spacesMembers.deleteAll();\n\n this.addJoinedRooms(...ev.state.rooms);\n this.addJoinedSpaces(...ev.state.spaces);\n\n this.deferredGetters.get('session')?.resolver();\n }\n\n private handleSpaceDeleted(ev: SpaceDeleted): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n \n private handleSpaceJoined(ev: SpaceJoined): void {\n this.addJoinedSpaces(ev.space);\n }\n\n private addJoinedSpaces(...spaces: Space[]): void {\n this.spacesRoles.set(...(spaces.map(space => [\n space.id,\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\n this.joinedSpaces.set(...spaces);\n }\n\n private handleSpaceLeft(ev: SpaceLeft): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).delete(ev.userId);\n }\n }\n\n private handleSpaceMembers(ev: SpaceMembers): void {\n if (!this.spacesMembers.has(ev.id)) {\n this.spacesMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\n ]);\n this.deferredGetters.get(`spaces-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceRooms(ev: SpaceRooms): void {\n if (!this.spacesRooms.has(ev.id)) {\n this.spacesRooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\n this.deferredGetters.get(`spaces-rooms-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceMemberUpdate(ev: SpaceMemberUpdate): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleTopicDeleted(ev: TopicDeleted): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.delete(ev.id);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractClient, CommandResult, CommandsMap} from \"./AbstractClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {WebSocketStateTracker} from \"./WebSocketStateTracker\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketClient extends AbstractClient implements ObservableInterface {\n public readonly Event = WebSocketClientEvent;\n public readonly state?: WebSocketStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new WebSocketStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n // Login successfully\n if (!this.authenticated) {\n const isAuthenticated = envelope.type !== 'Error';\n this.authenticated = isAuthenticated;\n if (isAuthenticated) {\n this.authenticatedResolvers[0]();\n this.emit(this.Event.connect);\n this.sendFromQueue();\n } else {\n this.authenticatedResolvers[1](envelope.data);\n }\n }\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope);\n this.emit(this.Event.message, envelope);\n }\n\n private onClose(event: CloseEvent): void {\n clearTimeout(this.connectingTimeoutId);\n const reconnect = event.code !== 1000; // Connection was closed because of error\n if (reconnect) {\n this.connect();\n }\n this.emit(this.Event.disconnect, reconnect);\n }\n\n private sendFromQueue(): void {\n // Send awaiting data to server\n let lastDelay = 0;\n for (const dataIndex in this.sendQueue) {\n const data = this.sendQueue[dataIndex];\n setTimeout(() => this.send(...data), lastDelay);\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\n }\n this.sendQueue = [];\n clearTimeout(this.connectingTimeoutId);\n }\n\n private triggerConnectionTimeout(): void {\n this.disconnect();\n this.emit(this.Event.error, new Error('Connection timeout'));\n }\n}","import {AbstractClient, CommandResult, CommandsMap} from \"./AbstractClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"pserv-ts-types\";\n\nexport interface WebApiClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiClient extends AbstractClient implements ObservableInterface {\n public readonly Event = WebApiClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n const envelope = this.createEnvelope(commandType, commandData);\n this.sendStack.push({data: envelope, attempts: 0, lastTimeoutId: null});\n this.makeApiCall(this.sendStack.length - 1);\n return this.createPromiseFromCommandEnvelope(envelope);\n }\n\n public destroy(): void {\n // Cancel all awaiting requests\n this.sendStack.forEach(item => {\n if (item.lastTimeoutId) {\n clearTimeout(item.lastTimeoutId);\n }\n this.awaitingResponse.delete(item.data.ref);\n });\n this.sendStack = [];\n this.emit(this.Event.destroy, false);\n }\n\n protected async onMessage(reqId: number, response: Response): Promise<void> {\n this.sendStack.splice(reqId, 1);\n const envelope: Envelope = await response.json();\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","EventTarget","Map","eventName","handler","this","addHandler","events","onceEvents","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractClient","type","data","ref","sentCounter","toString","envelope","Promise","args","awaitingResponse","has","isError","error","IndexedCollection","items","_items","size","item","id","ids","clear","field","valueToFind","limit","result","entries","next","done","length","Array","from","entry","IndexedObjectCollection","values","getId","index","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","ObservableIndexedObjectCollection","i","WebSocketClientEvent","WebSocketStateTracker","client","bind","deferredGetterReadiness","me","joinedSpaces","joinedRooms","spaceId","spacesRoles","roomId","roomsTopics","topicId","topicsMessages","deferredGetterName","spacesRooms","deferredGetters","createDeferredGetter","send","spacesMembers","roomsMembers","name","promise","Event","disconnect","ev","handleDisconnect","handleNewMessage","handleNewRole","handleNewRoom","handleNewTopic","handleRoleDeleted","handleRoomDeleted","handleRoomJoined","handleRoomLeft","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleSession","handleSpaceDeleted","handleSpaceJoined","handleSpaceLeft","handleSpaceMemberJoined","handleSpaceMemberLeft","handleSpaceMembers","handleSpaceRooms","handleSpaceMemberUpdate","handleTopicDeleted","deferred","undefined","resolver","resolve","reconnect","reconnecting","message","collection","role","roles","summary","topic","topics","addJoinedRooms","room","rooms","member","userId","user","spaceMember","members","state","addJoinedSpaces","spaces","space","summaries","WebApiClientEvent","WebSocketClient","options","token","temporaryNick","Error","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","isAuthenticated","connect","sendFromQueue","handleIncomingEnvelope","clearTimeout","code","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","splice","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","then","onError"],"sourceRoot":""}
@@ -0,0 +1,78 @@
1
+ import { Bye, GetSession, JoinSpace, Ok, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdate, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetUserPermissions, SetUserPermissions, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetRolePermissions, GetRolePermissions, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope } from "pserv-ts-types";
2
+ import { EventTarget } from "./EventTarget";
3
+ type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
4
+ export declare abstract class AbstractClient extends EventTarget {
5
+ protected awaitingResponse: Map<string, ArrayOfPromiseResolvers>;
6
+ protected sentCounter: number;
7
+ abstract send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
8
+ on<EventName extends keyof EventsMap>(eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this;
9
+ once<EventName extends keyof EventsMap>(eventName: EventName, handler: (event: EventsMap[EventName]) => void): this;
10
+ protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT>;
11
+ protected createPromiseFromCommandEnvelope<CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>): Promise<CommandResult<CommandsMap[CommandT][1]>>;
12
+ protected handleIncomingEnvelope(envelope: Envelope): void;
13
+ protected handleEnvelopeSendError(envelope: Envelope, error: any): void;
14
+ }
15
+ export type CommandResult<ResultT> = {
16
+ data?: ResultT;
17
+ error?: Error;
18
+ };
19
+ /**
20
+ * Map of incoming events.
21
+ */
22
+ export type EventsMap = {
23
+ Bye: Bye;
24
+ Ok: Ok;
25
+ Error: ErrorType;
26
+ Session: Session;
27
+ Permissions: Permissions;
28
+ SpaceJoined: SpaceJoined;
29
+ SpaceLeft: SpaceLeft;
30
+ SpaceMemberJoined: SpaceMemberJoined;
31
+ SpaceMemberLeft: SpaceMemberLeft;
32
+ SpaceMemberUpdate: SpaceMemberUpdate;
33
+ SpaceDeleted: SpaceDeleted;
34
+ SpaceMembers: SpaceMembers;
35
+ SpaceRooms: SpaceRooms;
36
+ NewRole: NewRole;
37
+ RoleDeleted: RoomDeleted;
38
+ RoomJoined: RoomJoined;
39
+ RoomLeft: RoomLeft;
40
+ RoomMemberJoined: RoomMemberJoined;
41
+ RoomMemberLeft: RoomMemberLeft;
42
+ RoomMembers: RoomMembers;
43
+ NewRoom: NewRoom;
44
+ RoomDeleted: RoomDeleted;
45
+ NewTopic: NewTopic;
46
+ TopicDeleted: TopicDeleted;
47
+ NewMessage: NewMessage;
48
+ };
49
+ /**
50
+ * Map of commands and their corresponding events.
51
+ */
52
+ export type CommandsMap = {
53
+ GetSession: [GetSession, EventsMap['Session']];
54
+ SetUserPermissions: [SetUserPermissions, EventsMap['Permissions']];
55
+ GetUserPermissions: [GetUserPermissions, EventsMap['Permissions']];
56
+ GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']];
57
+ JoinSpace: [JoinSpace, EventsMap['SpaceJoined']];
58
+ LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']];
59
+ CreateSpace: [CreateSpace, EventsMap['SpaceJoined']];
60
+ DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']];
61
+ GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']];
62
+ GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']];
63
+ CreateRole: [CreateRole, EventsMap['NewRole']];
64
+ DeleteRole: [DeleteRole, EventsMap['RoleDeleted']];
65
+ AssignRole: [AssignRole, EventsMap['SpaceMemberUpdate']];
66
+ DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdate']];
67
+ SetRolePermissions: [SetRolePermissions, EventsMap['Permissions']];
68
+ GetRolePermissions: [GetRolePermissions, EventsMap['Permissions']];
69
+ JoinRoom: [JoinRoom, EventsMap['RoomJoined']];
70
+ LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']];
71
+ CreateRoom: [CreateRoom, EventsMap['NewRoom']];
72
+ DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']];
73
+ GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']];
74
+ CreateTopic: [CreateTopic, EventsMap['NewTopic']];
75
+ DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']];
76
+ CreateMessage: [CreateMessage, EventsMap['NewMessage']];
77
+ };
78
+ export {};
@@ -0,0 +1,16 @@
1
+ export type EventHandler<EventT> = (ev?: EventT) => void;
2
+ type HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;
3
+ export interface ObservableInterface<EventT = any> {
4
+ on(eventName: string, handler: EventHandler<EventT>): this;
5
+ once(eventName: string, handler: EventHandler<EventT>): this;
6
+ }
7
+ export declare class EventTarget<EventT = any> implements ObservableInterface<EventT> {
8
+ protected events: HandlersMap<EventT>;
9
+ protected onceEvents: HandlersMap<EventT>;
10
+ on(eventName: string, handler: EventHandler<EventT>): this;
11
+ once(eventName: string, handler: EventHandler<EventT>): this;
12
+ emit(eventName: string, event?: EventT): this;
13
+ private addHandler;
14
+ private callHandlers;
15
+ }
16
+ export {};
@@ -0,0 +1,53 @@
1
+ import { EventTarget, ObservableInterface } from "./EventTarget";
2
+ export declare class IndexedCollection<KeyT, ValueT> {
3
+ protected _items: Map<KeyT, ValueT>;
4
+ constructor(items?: [key: KeyT, value: ValueT][]);
5
+ get items(): Map<KeyT, ValueT>;
6
+ get length(): number;
7
+ set(...items: [KeyT, ValueT][]): void;
8
+ get(id: KeyT): ValueT | null;
9
+ has(id: KeyT): boolean;
10
+ delete(...ids: KeyT[]): void;
11
+ deleteAll(): void;
12
+ findBy(field: keyof ValueT, valueToFind: any, limit?: number): IndexedCollection<KeyT, ValueT>;
13
+ map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[];
14
+ }
15
+ export declare class IndexedObjectCollection<T> {
16
+ readonly id: keyof T | ((item: T) => any);
17
+ protected _items: IndexedCollection<string, T>;
18
+ constructor(id: keyof T | ((item: T) => any), items?: T[]);
19
+ get items(): T[];
20
+ get length(): number;
21
+ set(...items: T[]): void;
22
+ get(id: any): T | null;
23
+ getAt(index: number): T | null;
24
+ has(id: any): boolean;
25
+ delete(...ids: any[]): void;
26
+ deleteAll(): void;
27
+ findBy(field: keyof T, valueToFind: any, limit?: number): IndexedObjectCollection<T>;
28
+ map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[];
29
+ protected getId(item: T): any;
30
+ }
31
+ interface ObservableCollectionEvent<KeyT> {
32
+ setItems?: KeyT[];
33
+ deletedItems?: KeyT[];
34
+ }
35
+ export declare class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {
36
+ protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;
37
+ set(...items: [KeyT, ValueT][]): void;
38
+ delete(...ids: KeyT[]): void;
39
+ deleteAll(): void;
40
+ on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this;
41
+ once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this;
42
+ }
43
+ export declare class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {
44
+ readonly id: keyof T | ((item: T) => string);
45
+ protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;
46
+ constructor(id: keyof T | ((item: T) => string), items?: T[]);
47
+ set(...items: T[]): void;
48
+ delete(...ids: string[]): void;
49
+ deleteAll(): void;
50
+ on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this;
51
+ once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this;
52
+ }
53
+ export {};
@@ -0,0 +1,30 @@
1
+ import { AbstractClient, CommandResult, CommandsMap } from "./AbstractClient";
2
+ import { ObservableInterface } from "./EventTarget";
3
+ export interface WebApiClientOptions {
4
+ url: string;
5
+ token?: string;
6
+ temporaryNick?: string;
7
+ attemptsToSend?: number;
8
+ attemptDelayMs?: number;
9
+ }
10
+ declare enum WebApiClientEvent {
11
+ message = "message",
12
+ error = "error",
13
+ destroy = "destroy"
14
+ }
15
+ export declare class WebApiClient extends AbstractClient implements ObservableInterface {
16
+ private readonly options;
17
+ readonly Event: typeof WebApiClientEvent;
18
+ protected sendStack: {
19
+ data: any;
20
+ attempts: number;
21
+ lastTimeoutId: any;
22
+ }[];
23
+ constructor(options: WebApiClientOptions);
24
+ send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
25
+ destroy(): void;
26
+ protected onMessage(reqId: number, response: Response): Promise<void>;
27
+ protected onError(reqId: number, body: string): void;
28
+ protected makeApiCall(reqId: number): void;
29
+ }
30
+ export {};
@@ -0,0 +1,36 @@
1
+ import { ObservableInterface } from "./EventTarget";
2
+ import { AbstractClient, CommandResult, CommandsMap } from "./AbstractClient";
3
+ import { WebSocketStateTracker } from "./WebSocketStateTracker";
4
+ export interface WebSocketClientOptions {
5
+ url: string;
6
+ token?: string;
7
+ temporaryNick?: string;
8
+ connectingTimeoutMs?: number;
9
+ awaitQueueSendDelayMs?: number;
10
+ stateTracking?: boolean;
11
+ }
12
+ declare enum WebSocketClientEvent {
13
+ connect = "connect",
14
+ disconnect = "disconnect",
15
+ message = "message",
16
+ error = "error"
17
+ }
18
+ export declare class WebSocketClient extends AbstractClient implements ObservableInterface {
19
+ private readonly options;
20
+ readonly Event: typeof WebSocketClientEvent;
21
+ readonly state?: WebSocketStateTracker;
22
+ protected ws: WebSocket | null;
23
+ protected sendQueue: [commandType: keyof CommandsMap, commandData: any][];
24
+ protected connectingTimeoutId: any;
25
+ protected authenticated: boolean;
26
+ protected authenticatedResolvers: [() => void, (error: Error) => void];
27
+ constructor(options: WebSocketClientOptions);
28
+ connect(): Promise<void>;
29
+ disconnect(): void;
30
+ send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
31
+ private onMessage;
32
+ private onClose;
33
+ private sendFromQueue;
34
+ private triggerConnectionTimeout;
35
+ }
36
+ export {};