polfan-server-js-client 0.0.94 → 0.0.96
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.
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/types/Client.d.ts +3 -0
- package/build/types/connections/ConnectionAssets.d.ts +1 -0
- package/build/types/connections/WebApiConnection.d.ts +1 -0
- package/build/types/connections/WebSocketConnection.d.ts +1 -0
- package/build/types/dtos/Room.d.ts +2 -0
- package/package.json +1 -1
- package/src/Client.ts +22 -2
- package/src/connections/ConnectionAssets.ts +1 -0
- package/src/connections/WebApiConnection.ts +4 -0
- package/src/connections/WebSocketConnection.ts +8 -0
- package/src/dtos/Room.ts +2 -0
package/build/index.js.map
CHANGED
|
@@ -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 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 name: 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 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 }\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 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\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 }\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 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.emit(ClientEvent.renewal);\r\n this.chatConnection.once(ChatConnectionEvent.ready, () => this.emit(ClientEvent.renewalSuccess));\r\n this.chatConnection.once(ChatConnectionEvent.error, () => this.emit(ClientEvent.renewalError));\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 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","readyState","CLOSED","connect","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","destroy","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","commandPayload","commandType","createEnvelope","Promise","awaitingResponse","ref","customMap","eventsMap","response","id","toString","errors","createEvent","resolve","reject","renewal","once","renewalSuccess","renewalError","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/./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":""}
|
package/build/types/Client.d.ts
CHANGED
|
@@ -49,6 +49,7 @@ type CmdResult<EventDto> = EventDto | ErrorEvent;
|
|
|
49
49
|
type CommandsToEventsType<CommandT> = CommandT extends GetSession ? CmdResult<Session> : CommandT extends SetUserPermissions ? CmdResult<Permissions> : CommandT extends GetUserPermissions ? CmdResult<Permissions> : CommandT extends GetComputedPermissions ? CmdResult<Permissions> : CommandT extends JoinSpace ? CmdResult<SpaceJoined> : CommandT extends LeaveSpace ? CmdResult<SpaceLeft> : CommandT extends CreateSpace ? CmdResult<SpaceJoined> : CommandT extends DeleteSpace ? CmdResult<SpaceDeleted> : CommandT extends GetSpaceMembers ? CmdResult<SpaceMembers> : CommandT extends GetSpaceRooms ? CmdResult<SpaceRooms> : CommandT extends CreateRole ? CmdResult<NewRole> : CommandT extends DeleteRole ? CmdResult<RoleDeleted> : CommandT extends AssignRole ? CmdResult<SpaceMemberUpdate> : CommandT extends DeassignRole ? CmdResult<SpaceMemberUpdate> : CommandT extends SetRolePermissions ? CmdResult<Permissions> : CommandT extends GetRolePermissions ? CmdResult<Permissions> : CommandT extends JoinRoom ? CmdResult<RoomJoined> : CommandT extends LeaveRoom ? CmdResult<RoomLeft> : CommandT extends CreateRoom ? CmdResult<RoomJoined> : CommandT extends DeleteRoom ? CmdResult<RoomDeleted> : CommandT extends GetRoomMembers ? CmdResult<RoomMembers> : CommandT extends CreateTopic ? CmdResult<NewTopic> : CommandT extends DeleteTopic ? CmdResult<TopicDeleted> : CommandT extends CreateMessage ? CmdResult<NewMessage> : any;
|
|
50
50
|
export declare enum ClientEvent {
|
|
51
51
|
message = "message",
|
|
52
|
+
ready = "ready",
|
|
52
53
|
renewal = "renewalStart",
|
|
53
54
|
renewalSuccess = "renewalSuccess",
|
|
54
55
|
renewalError = "renewalError"
|
|
@@ -78,6 +79,7 @@ export declare class Client extends EventTarget {
|
|
|
78
79
|
protected eventsMap: {
|
|
79
80
|
[x: string]: typeof Dto;
|
|
80
81
|
};
|
|
82
|
+
protected reconnecting: boolean;
|
|
81
83
|
constructor(chatConnection: ChatConnectionInterface, restConnection: RestApiConnection);
|
|
82
84
|
/**
|
|
83
85
|
* Send command to chat server.
|
|
@@ -93,6 +95,7 @@ export declare class Client extends EventTarget {
|
|
|
93
95
|
setCustomEventMap(customMap: {
|
|
94
96
|
[x: string]: typeof Dto;
|
|
95
97
|
}): this;
|
|
98
|
+
init(): this;
|
|
96
99
|
destroy(): this;
|
|
97
100
|
getMe(): Promise<MyAccountInterface>;
|
|
98
101
|
deleteToken(token: string): Promise<void>;
|
|
@@ -12,6 +12,7 @@ export declare class WebApiConnection extends EventTarget implements ChatConnect
|
|
|
12
12
|
lastTimeoutId: any;
|
|
13
13
|
}[];
|
|
14
14
|
constructor(options: WebApiConnectionOptionsInterface);
|
|
15
|
+
init(): void;
|
|
15
16
|
send(data: any): void;
|
|
16
17
|
destroy(): void;
|
|
17
18
|
protected onMessage(reqId: number, response: Response): Promise<void>;
|
|
@@ -11,6 +11,7 @@ export declare class WebSocketConnection extends EventTarget implements ChatConn
|
|
|
11
11
|
protected connectingTimeoutId: any;
|
|
12
12
|
protected authenticated: boolean;
|
|
13
13
|
constructor(options: WebSocketConnectionInterface);
|
|
14
|
+
init(): void;
|
|
14
15
|
send(data: any): void;
|
|
15
16
|
destroy(): void;
|
|
16
17
|
private connect;
|
|
@@ -2,7 +2,9 @@ import { Dto, DtoData } from "./Dto";
|
|
|
2
2
|
import { Topic } from "./Topic";
|
|
3
3
|
export declare class Room extends Dto {
|
|
4
4
|
readonly id: string;
|
|
5
|
+
readonly spaceId: string | null;
|
|
5
6
|
readonly name: string;
|
|
7
|
+
readonly description: string;
|
|
6
8
|
readonly topics: Topic[];
|
|
7
9
|
constructor(data: DtoData<Room>);
|
|
8
10
|
}
|
package/package.json
CHANGED
package/src/Client.ts
CHANGED
|
@@ -92,6 +92,7 @@ function guessCommandType(obj: any): string {
|
|
|
92
92
|
|
|
93
93
|
export enum ClientEvent {
|
|
94
94
|
message = 'message',
|
|
95
|
+
ready = 'ready',
|
|
95
96
|
renewal = 'renewalStart',
|
|
96
97
|
renewalSuccess = 'renewalSuccess',
|
|
97
98
|
renewalError = 'renewalError',
|
|
@@ -147,6 +148,7 @@ export class Client extends EventTarget {
|
|
|
147
148
|
protected commandsCount = 0;
|
|
148
149
|
protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();
|
|
149
150
|
protected eventsMap: {[x: string]: typeof Dto};
|
|
151
|
+
protected reconnecting: boolean;
|
|
150
152
|
|
|
151
153
|
public constructor(
|
|
152
154
|
public readonly chatConnection: ChatConnectionInterface,
|
|
@@ -156,6 +158,20 @@ export class Client extends EventTarget {
|
|
|
156
158
|
this.setCustomEventMap({}); // Set default event map.
|
|
157
159
|
this.chatConnection.on(ChatConnectionEvent.message, (payload: any) => this.onMessage(payload));
|
|
158
160
|
this.chatConnection.on(ChatConnectionEvent.destroy, (reconnect: boolean) => this.onDisconnect(reconnect));
|
|
161
|
+
this.chatConnection.on(ChatConnectionEvent.ready, () => {
|
|
162
|
+
if (this.reconnecting) {
|
|
163
|
+
this.reconnecting = false;
|
|
164
|
+
this.emit(ClientEvent.renewalSuccess);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
this.emit(ClientEvent.ready);
|
|
168
|
+
});
|
|
169
|
+
this.chatConnection.on(ChatConnectionEvent.error, () => {
|
|
170
|
+
if (this.reconnecting) {
|
|
171
|
+
this.reconnecting = false;
|
|
172
|
+
this.emit(ClientEvent.renewalError);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
159
175
|
}
|
|
160
176
|
|
|
161
177
|
/**
|
|
@@ -184,6 +200,11 @@ export class Client extends EventTarget {
|
|
|
184
200
|
return this;
|
|
185
201
|
}
|
|
186
202
|
|
|
203
|
+
public init(): this {
|
|
204
|
+
this.chatConnection.init();
|
|
205
|
+
return this;
|
|
206
|
+
}
|
|
207
|
+
|
|
187
208
|
public destroy(): this {
|
|
188
209
|
this.chatConnection.destroy();
|
|
189
210
|
return this;
|
|
@@ -224,9 +245,8 @@ export class Client extends EventTarget {
|
|
|
224
245
|
this.awaitingResponse.delete(key);
|
|
225
246
|
});
|
|
226
247
|
if (reconnect) {
|
|
248
|
+
this.reconnecting = true;
|
|
227
249
|
this.emit(ClientEvent.renewal);
|
|
228
|
-
this.chatConnection.once(ChatConnectionEvent.ready, () => this.emit(ClientEvent.renewalSuccess));
|
|
229
|
-
this.chatConnection.once(ChatConnectionEvent.error, () => this.emit(ClientEvent.renewalError));
|
|
230
250
|
}
|
|
231
251
|
}
|
|
232
252
|
|
|
@@ -18,6 +18,10 @@ export class WebApiConnection extends EventTarget implements ChatConnectionInter
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
public init() {
|
|
22
|
+
this.emit(ChatConnectionEvent.ready);
|
|
23
|
+
}
|
|
24
|
+
|
|
21
25
|
public send(data: any): void {
|
|
22
26
|
this.sendStack.push({data: data, attempts: 0, lastTimeoutId: null});
|
|
23
27
|
this.makeApiCall(this.sendStack.length - 1);
|
|
@@ -23,6 +23,13 @@ export class WebSocketConnection extends EventTarget implements ChatConnectionIn
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
public init() {
|
|
27
|
+
if (this.ws) {
|
|
28
|
+
this.destroy();
|
|
29
|
+
}
|
|
30
|
+
this.connect();
|
|
31
|
+
}
|
|
32
|
+
|
|
26
33
|
public send(data: any): void {
|
|
27
34
|
if (!this.ws || this.ws.readyState === this.ws.CLOSED) {
|
|
28
35
|
this.connect();
|
|
@@ -42,6 +49,7 @@ export class WebSocketConnection extends EventTarget implements ChatConnectionIn
|
|
|
42
49
|
public destroy(): void {
|
|
43
50
|
this.sendQueue = [];
|
|
44
51
|
this.ws?.close();
|
|
52
|
+
this.ws = null;
|
|
45
53
|
}
|
|
46
54
|
|
|
47
55
|
private connect(): void {
|
package/src/dtos/Room.ts
CHANGED
|
@@ -3,7 +3,9 @@ import {Topic} from "./Topic";
|
|
|
3
3
|
|
|
4
4
|
export class Room extends Dto {
|
|
5
5
|
public readonly id: string;
|
|
6
|
+
public readonly spaceId: string|null;
|
|
6
7
|
public readonly name: string;
|
|
8
|
+
public readonly description: string;
|
|
7
9
|
public readonly topics: Topic[];
|
|
8
10
|
|
|
9
11
|
public constructor(data: DtoData<Room>) {
|