polfan-server-js-client 0.1.39 → 0.1.41
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 +90 -43
- package/build/index.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +8 -4
- package/build/types/state-tracker/RoomsManager.d.ts +2 -1
- package/build/types/state-tracker/SpacesManager.d.ts +3 -1
- package/package.json +2 -2
- package/src/AbstractChatClient.ts +9 -5
- package/src/state-tracker/PermissionsManager.ts +12 -8
- package/src/state-tracker/RoomsManager.ts +15 -6
- package/src/state-tracker/SpacesManager.ts +42 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites,
|
|
1
|
+
import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetPermissionOverwrites, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetPermissionOverwrites, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope, PermissionOverwrites, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, AckReports, Ack, GetAckReports, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated } from "pserv-ts-types";
|
|
2
2
|
import { EventTarget } from "./EventTarget";
|
|
3
3
|
type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
|
|
4
4
|
export declare abstract class AbstractChatClient extends EventTarget {
|
|
@@ -25,12 +25,13 @@ export type EventsMap = {
|
|
|
25
25
|
Session: Session;
|
|
26
26
|
Permissions: Permissions;
|
|
27
27
|
PermissionOverwrites: PermissionOverwrites;
|
|
28
|
-
|
|
28
|
+
PermissionOverwritesUpdated: PermissionOverwritesUpdated;
|
|
29
29
|
SpaceJoined: SpaceJoined;
|
|
30
30
|
SpaceLeft: SpaceLeft;
|
|
31
31
|
SpaceMemberJoined: SpaceMemberJoined;
|
|
32
32
|
SpaceMemberLeft: SpaceMemberLeft;
|
|
33
33
|
SpaceMemberUpdated: SpaceMemberUpdated;
|
|
34
|
+
SpaceUpdated: SpaceUpdated;
|
|
34
35
|
SpaceDeleted: SpaceDeleted;
|
|
35
36
|
SpaceMembers: SpaceMembers;
|
|
36
37
|
SpaceRooms: SpaceRooms;
|
|
@@ -45,23 +46,25 @@ export type EventsMap = {
|
|
|
45
46
|
RoomMembers: RoomMembers;
|
|
46
47
|
NewRoom: NewRoom;
|
|
47
48
|
RoomDeleted: RoomDeleted;
|
|
49
|
+
RoomUpdated: RoomUpdated;
|
|
48
50
|
NewTopic: NewTopic;
|
|
49
51
|
TopicDeleted: TopicDeleted;
|
|
50
52
|
NewMessage: NewMessage;
|
|
51
53
|
AckReports: AckReports;
|
|
52
|
-
|
|
54
|
+
UserUpdated: UserUpdated;
|
|
53
55
|
};
|
|
54
56
|
/**
|
|
55
57
|
* Map of commands and their corresponding events.
|
|
56
58
|
*/
|
|
57
59
|
export type CommandsMap = {
|
|
58
60
|
GetSession: [GetSession, EventsMap['Session']];
|
|
59
|
-
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['
|
|
61
|
+
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']];
|
|
60
62
|
GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']];
|
|
61
63
|
GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']];
|
|
62
64
|
JoinSpace: [JoinSpace, EventsMap['SpaceJoined']];
|
|
63
65
|
LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']];
|
|
64
66
|
CreateSpace: [CreateSpace, EventsMap['SpaceJoined']];
|
|
67
|
+
UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']];
|
|
65
68
|
DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']];
|
|
66
69
|
GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']];
|
|
67
70
|
GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']];
|
|
@@ -74,6 +77,7 @@ export type CommandsMap = {
|
|
|
74
77
|
LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']];
|
|
75
78
|
CreateRoom: [CreateRoom, EventsMap['NewRoom']];
|
|
76
79
|
DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']];
|
|
80
|
+
UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']];
|
|
77
81
|
GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']];
|
|
78
82
|
CreateTopic: [CreateTopic, EventsMap['NewTopic']];
|
|
79
83
|
DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']];
|
|
@@ -37,6 +37,7 @@ export declare class RoomsManager {
|
|
|
37
37
|
private handleNewTopic;
|
|
38
38
|
private addJoinedRoomTopics;
|
|
39
39
|
private handleRoomJoined;
|
|
40
|
+
private handleRoomUpdated;
|
|
40
41
|
private handleRoomDeleted;
|
|
41
42
|
private addJoinedRooms;
|
|
42
43
|
private handleRoomLeft;
|
|
@@ -44,5 +45,5 @@ export declare class RoomsManager {
|
|
|
44
45
|
private handleRoomMemberLeft;
|
|
45
46
|
private handleRoomMembers;
|
|
46
47
|
private handleSession;
|
|
47
|
-
private
|
|
48
|
+
private handleUserUpdated;
|
|
48
49
|
}
|
|
@@ -33,8 +33,10 @@ export declare class SpacesManager {
|
|
|
33
33
|
getMe(spaceId: string): Promise<SpaceMember | undefined>;
|
|
34
34
|
private handleNewRole;
|
|
35
35
|
private handleNewRoom;
|
|
36
|
+
private handleRoomUpdated;
|
|
36
37
|
private handleRoomDeleted;
|
|
37
38
|
private handleRoleDeleted;
|
|
39
|
+
private handleSpaceUpdated;
|
|
38
40
|
private handleSpaceDeleted;
|
|
39
41
|
private handleSpaceJoined;
|
|
40
42
|
private addJoinedSpaces;
|
|
@@ -45,5 +47,5 @@ export declare class SpacesManager {
|
|
|
45
47
|
private handleSpaceMemberUpdated;
|
|
46
48
|
private handleRoleUpdated;
|
|
47
49
|
private handleSession;
|
|
48
|
-
private
|
|
50
|
+
private handleUserUpdated;
|
|
49
51
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polfan-server-js-client",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.41",
|
|
4
4
|
"description": "JavaScript client library for handling communication with Polfan chat server.",
|
|
5
5
|
"author": "Jarosław Żak",
|
|
6
6
|
"license": "MIT",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"html-webpack-plugin": "^5.5.0",
|
|
36
36
|
"jest": "^29.3.1",
|
|
37
37
|
"mini-css-extract-plugin": "^2.7.2",
|
|
38
|
-
"pserv-ts-types": "^0.0.
|
|
38
|
+
"pserv-ts-types": "^0.0.26",
|
|
39
39
|
"style-loader": "^3.3.1",
|
|
40
40
|
"terser-webpack-plugin": "^5.3.5",
|
|
41
41
|
"typescript": "^4.9.4",
|
|
@@ -45,14 +45,14 @@ import {
|
|
|
45
45
|
CreateMessage,
|
|
46
46
|
Envelope,
|
|
47
47
|
PermissionOverwrites,
|
|
48
|
-
|
|
48
|
+
PermissionOverwritesUpdated,
|
|
49
49
|
RoomMemberUpdated,
|
|
50
50
|
UpdateRole,
|
|
51
51
|
RoleUpdated,
|
|
52
52
|
AckReports,
|
|
53
53
|
Ack,
|
|
54
54
|
GetAckReports,
|
|
55
|
-
|
|
55
|
+
UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated,
|
|
56
56
|
} from "pserv-ts-types";
|
|
57
57
|
import {EventTarget} from "./EventTarget";
|
|
58
58
|
|
|
@@ -121,13 +121,14 @@ export type EventsMap = {
|
|
|
121
121
|
Session: Session,
|
|
122
122
|
Permissions: Permissions,
|
|
123
123
|
PermissionOverwrites: PermissionOverwrites,
|
|
124
|
-
|
|
124
|
+
PermissionOverwritesUpdated: PermissionOverwritesUpdated,
|
|
125
125
|
// Space events
|
|
126
126
|
SpaceJoined: SpaceJoined,
|
|
127
127
|
SpaceLeft: SpaceLeft,
|
|
128
128
|
SpaceMemberJoined: SpaceMemberJoined,
|
|
129
129
|
SpaceMemberLeft: SpaceMemberLeft,
|
|
130
130
|
SpaceMemberUpdated: SpaceMemberUpdated,
|
|
131
|
+
SpaceUpdated: SpaceUpdated,
|
|
131
132
|
SpaceDeleted: SpaceDeleted,
|
|
132
133
|
SpaceMembers: SpaceMembers,
|
|
133
134
|
SpaceRooms: SpaceRooms,
|
|
@@ -143,12 +144,13 @@ export type EventsMap = {
|
|
|
143
144
|
RoomMembers: RoomMembers,
|
|
144
145
|
NewRoom: NewRoom,
|
|
145
146
|
RoomDeleted: RoomDeleted,
|
|
147
|
+
RoomUpdated: RoomUpdated,
|
|
146
148
|
// Topic events
|
|
147
149
|
NewTopic: NewTopic,
|
|
148
150
|
TopicDeleted: TopicDeleted,
|
|
149
151
|
NewMessage: NewMessage,
|
|
150
152
|
AckReports: AckReports,
|
|
151
|
-
|
|
153
|
+
UserUpdated: UserUpdated,
|
|
152
154
|
};
|
|
153
155
|
|
|
154
156
|
/**
|
|
@@ -157,13 +159,14 @@ export type EventsMap = {
|
|
|
157
159
|
export type CommandsMap = {
|
|
158
160
|
// General commands
|
|
159
161
|
GetSession: [GetSession, EventsMap['Session']],
|
|
160
|
-
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['
|
|
162
|
+
SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']],
|
|
161
163
|
GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],
|
|
162
164
|
GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],
|
|
163
165
|
// Space commands
|
|
164
166
|
JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],
|
|
165
167
|
LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],
|
|
166
168
|
CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],
|
|
169
|
+
UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']],
|
|
167
170
|
DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],
|
|
168
171
|
GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],
|
|
169
172
|
GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],
|
|
@@ -177,6 +180,7 @@ export type CommandsMap = {
|
|
|
177
180
|
LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],
|
|
178
181
|
CreateRoom: [CreateRoom, EventsMap['NewRoom']],
|
|
179
182
|
DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],
|
|
183
|
+
UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']],
|
|
180
184
|
GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],
|
|
181
185
|
// Topic commands
|
|
182
186
|
CreateTopic: [CreateTopic, EventsMap['NewTopic']],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {ChatStateTracker} from "./ChatStateTracker";
|
|
2
2
|
import {
|
|
3
3
|
PermissionOverwrites,
|
|
4
|
-
|
|
4
|
+
PermissionOverwritesUpdated,
|
|
5
5
|
PermissionOverwritesValue, RoleDeleted, RoomDeleted, RoomLeft, SpaceDeleted, SpaceLeft, TopicDeleted,
|
|
6
6
|
} from "pserv-ts-types";
|
|
7
7
|
import {EventHandler, EventTarget} from "../EventTarget";
|
|
@@ -16,7 +16,7 @@ const getOvId = (
|
|
|
16
16
|
targetId?: PermissionOverwrites['targetId'],
|
|
17
17
|
) => layer + (layerId ?? '') + (target ?? '') + (targetId ?? '');
|
|
18
18
|
|
|
19
|
-
const getOvIdByObject = (overwrites: PermissionOverwrites |
|
|
19
|
+
const getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesUpdated): string => getOvId(
|
|
20
20
|
overwrites.layer, overwrites.layerId, overwrites.target, overwrites.targetId
|
|
21
21
|
);
|
|
22
22
|
|
|
@@ -27,7 +27,7 @@ export class PermissionsManager extends EventTarget {
|
|
|
27
27
|
public constructor(private tracker: ChatStateTracker) {
|
|
28
28
|
super();
|
|
29
29
|
this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));
|
|
30
|
-
this.tracker.client.on('
|
|
30
|
+
this.tracker.client.on('PermissionOverwritesUpdated', ev => this.handlePermissionOverwrites(ev));
|
|
31
31
|
this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
|
|
32
32
|
this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));
|
|
33
33
|
this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
|
|
@@ -89,21 +89,25 @@ export class PermissionsManager extends EventTarget {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
const userId = (await this.tracker.getMe()).id;
|
|
92
|
-
|
|
93
92
|
const userRoles: string[] = [];
|
|
93
|
+
const [spaces, rooms, topics] = await Promise.all([
|
|
94
|
+
this.tracker.spaces.get(),
|
|
95
|
+
this.tracker.rooms.get(),
|
|
96
|
+
roomId ? this.tracker.rooms.getTopics(roomId) : null,
|
|
97
|
+
]);
|
|
94
98
|
|
|
95
99
|
const promises: Promise<PermissionOverwritesValue>[] = [
|
|
96
100
|
// Global user overwrites
|
|
97
101
|
this.getOverwrites('Global', null, 'User', userId).then(v => v.overwrites),
|
|
98
102
|
];
|
|
99
103
|
|
|
100
|
-
if (spaceId) {
|
|
104
|
+
if (spaceId && spaces.has(spaceId)) {
|
|
101
105
|
userRoles.push(...(await this.tracker.spaces.getMe(spaceId)).roles);
|
|
102
106
|
promises.push(this.collectRoleOverwrites(spaceId, 'Space', spaceId, userRoles));
|
|
103
107
|
promises.push(this.getOverwrites('Space', spaceId, 'User', userId).then(v => v.overwrites));
|
|
104
108
|
}
|
|
105
109
|
|
|
106
|
-
if (roomId) {
|
|
110
|
+
if (roomId && rooms.has(roomId)) {
|
|
107
111
|
const roomMember = await this.tracker.rooms.getMe(roomId);
|
|
108
112
|
|
|
109
113
|
if (roomMember.roles !== null) { // Room overwrites from roles (only for space rooms)
|
|
@@ -114,7 +118,7 @@ export class PermissionsManager extends EventTarget {
|
|
|
114
118
|
promises.push(this.getOverwrites('Room', roomId, 'User', userId).then(v => v.overwrites));
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
if (topicId) {
|
|
121
|
+
if (topicId && topics && topics.has(topicId)) {
|
|
118
122
|
if (userRoles.length) {
|
|
119
123
|
promises.push(this.collectRoleOverwrites(spaceId, 'Topic', topicId, userRoles));
|
|
120
124
|
}
|
|
@@ -125,7 +129,7 @@ export class PermissionsManager extends EventTarget {
|
|
|
125
129
|
return this.resolveOverwritesHierarchy(await Promise.all(promises));
|
|
126
130
|
}
|
|
127
131
|
|
|
128
|
-
private handlePermissionOverwrites(ev:
|
|
132
|
+
private handlePermissionOverwrites(ev: PermissionOverwritesUpdated | PermissionOverwrites): void {
|
|
129
133
|
this.overwrites.set([getOvIdByObject(ev), ev]);
|
|
130
134
|
this.emit('change');
|
|
131
135
|
}
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
Room, RoomDeleted,
|
|
5
5
|
RoomJoined, RoomLeft,
|
|
6
6
|
RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,
|
|
7
|
-
RoomMemberUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,
|
|
7
|
+
RoomMemberUpdated, RoomUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,
|
|
8
8
|
SpaceMemberUpdated,
|
|
9
9
|
Topic,
|
|
10
10
|
TopicDeleted,
|
|
11
|
-
|
|
11
|
+
UserUpdated,
|
|
12
12
|
} from "pserv-ts-types";
|
|
13
13
|
import {ChatStateTracker} from "./ChatStateTracker";
|
|
14
14
|
import {DeferredTask, PromiseRegistry} from "./AsyncUtils";
|
|
@@ -30,6 +30,7 @@ export class RoomsManager {
|
|
|
30
30
|
this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));
|
|
31
31
|
this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));
|
|
32
32
|
this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));
|
|
33
|
+
this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));
|
|
33
34
|
this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
|
|
34
35
|
this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));
|
|
35
36
|
this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));
|
|
@@ -39,7 +40,7 @@ export class RoomsManager {
|
|
|
39
40
|
this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
|
|
40
41
|
this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
|
|
41
42
|
this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));
|
|
42
|
-
this.tracker.client.on('
|
|
43
|
+
this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));
|
|
43
44
|
this.tracker.client.on('Session', ev => this.handleSession(ev));
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -66,13 +67,13 @@ export class RoomsManager {
|
|
|
66
67
|
*/
|
|
67
68
|
public async getMe(roomId: string): Promise<RoomMember | undefined> {
|
|
68
69
|
const userId = (await this.tracker.getMe()).id;
|
|
69
|
-
const members = await this.getMembers(roomId);
|
|
70
70
|
|
|
71
|
-
if (!
|
|
71
|
+
if (! this.list.has(roomId)) {
|
|
72
72
|
// User is not in passed room.
|
|
73
73
|
return undefined;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
const members = await this.getMembers(roomId);
|
|
76
77
|
return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);
|
|
77
78
|
}
|
|
78
79
|
|
|
@@ -186,6 +187,14 @@ export class RoomsManager {
|
|
|
186
187
|
this.addJoinedRooms(ev.room);
|
|
187
188
|
}
|
|
188
189
|
|
|
190
|
+
private handleRoomUpdated(ev: RoomUpdated): void {
|
|
191
|
+
this.list.set({
|
|
192
|
+
...this.list.get(ev.room.id),
|
|
193
|
+
name: ev.room.name,
|
|
194
|
+
description: ev.room.description,
|
|
195
|
+
} as Room);
|
|
196
|
+
}
|
|
197
|
+
|
|
189
198
|
private handleRoomDeleted(ev: RoomDeleted): void {
|
|
190
199
|
this.deleteRoom(ev.id);
|
|
191
200
|
}
|
|
@@ -235,7 +244,7 @@ export class RoomsManager {
|
|
|
235
244
|
this.deferredSession.resolve();
|
|
236
245
|
}
|
|
237
246
|
|
|
238
|
-
private
|
|
247
|
+
private handleUserUpdated(ev: UserUpdated): void {
|
|
239
248
|
this.members.items.forEach((members) => {
|
|
240
249
|
const member = members.get(ev.user.id);
|
|
241
250
|
|
|
@@ -4,11 +4,24 @@ import {
|
|
|
4
4
|
NewRole,
|
|
5
5
|
NewRoom,
|
|
6
6
|
Role,
|
|
7
|
-
RoleDeleted,
|
|
8
|
-
|
|
7
|
+
RoleDeleted,
|
|
8
|
+
RoleUpdated,
|
|
9
|
+
RoomDeleted,
|
|
10
|
+
RoomSummary,
|
|
11
|
+
RoomUpdated,
|
|
12
|
+
Session,
|
|
9
13
|
Space,
|
|
10
|
-
SpaceDeleted,
|
|
11
|
-
|
|
14
|
+
SpaceDeleted,
|
|
15
|
+
SpaceJoined,
|
|
16
|
+
SpaceLeft,
|
|
17
|
+
SpaceMember,
|
|
18
|
+
SpaceMemberJoined,
|
|
19
|
+
SpaceMemberLeft,
|
|
20
|
+
SpaceMembers,
|
|
21
|
+
SpaceMemberUpdated,
|
|
22
|
+
SpaceRooms,
|
|
23
|
+
SpaceUpdated,
|
|
24
|
+
UserUpdated
|
|
12
25
|
} from "pserv-ts-types";
|
|
13
26
|
import {DeferredTask, PromiseRegistry} from "./AsyncUtils";
|
|
14
27
|
import {reorderRolesOnPriorityUpdate} from "./functions";
|
|
@@ -25,7 +38,9 @@ export class SpacesManager {
|
|
|
25
38
|
public constructor(private tracker: ChatStateTracker) {
|
|
26
39
|
this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));
|
|
27
40
|
this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
|
|
41
|
+
this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));
|
|
28
42
|
this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));
|
|
43
|
+
this.tracker.client.on('SpaceUpdated', ev => this.handleSpaceUpdated(ev));
|
|
29
44
|
this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));
|
|
30
45
|
this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));
|
|
31
46
|
this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));
|
|
@@ -33,7 +48,7 @@ export class SpacesManager {
|
|
|
33
48
|
this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));
|
|
34
49
|
this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));
|
|
35
50
|
this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
|
|
36
|
-
this.tracker.client.on('
|
|
51
|
+
this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));
|
|
37
52
|
this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));
|
|
38
53
|
this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));
|
|
39
54
|
this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));
|
|
@@ -97,13 +112,13 @@ export class SpacesManager {
|
|
|
97
112
|
*/
|
|
98
113
|
public async getMe(spaceId: string): Promise<SpaceMember | undefined> {
|
|
99
114
|
const userId = (await this.tracker.getMe()).id;
|
|
100
|
-
const members = await this.getMembers(spaceId);
|
|
101
115
|
|
|
102
|
-
if (!
|
|
116
|
+
if (! this.list.has(spaceId)) {
|
|
103
117
|
// User is not in passed space.
|
|
104
118
|
return undefined;
|
|
105
119
|
}
|
|
106
120
|
|
|
121
|
+
const members = await this.getMembers(spaceId);
|
|
107
122
|
return members.items.find(member => member.user.id === userId);
|
|
108
123
|
}
|
|
109
124
|
|
|
@@ -117,8 +132,19 @@ export class SpacesManager {
|
|
|
117
132
|
this.rooms.get(ev.spaceId)?.set(ev.summary);
|
|
118
133
|
}
|
|
119
134
|
|
|
135
|
+
private handleRoomUpdated(ev: RoomUpdated): void {
|
|
136
|
+
if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {
|
|
137
|
+
const rooms = this.rooms.get(ev.room.spaceId);
|
|
138
|
+
rooms.set({
|
|
139
|
+
...rooms.get(ev.room.id),
|
|
140
|
+
name: ev.room.name,
|
|
141
|
+
description: ev.room.description,
|
|
142
|
+
} as RoomSummary);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
120
146
|
private handleRoomDeleted(ev: RoomDeleted): void {
|
|
121
|
-
if (ev.spaceId) {
|
|
147
|
+
if (ev.spaceId && this.rooms.has(ev.id)) {
|
|
122
148
|
this.rooms.get(ev.spaceId).delete(ev.id);
|
|
123
149
|
}
|
|
124
150
|
}
|
|
@@ -129,6 +155,13 @@ export class SpacesManager {
|
|
|
129
155
|
this.list.get(ev.spaceId).roles = collection.items;
|
|
130
156
|
}
|
|
131
157
|
|
|
158
|
+
private handleSpaceUpdated(ev: SpaceUpdated): void {
|
|
159
|
+
this.list.set({
|
|
160
|
+
...this.list.get(ev.space.id),
|
|
161
|
+
name: ev.space.name,
|
|
162
|
+
} as Space);
|
|
163
|
+
}
|
|
164
|
+
|
|
132
165
|
private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {
|
|
133
166
|
this.roles.delete(ev.id);
|
|
134
167
|
this.members.delete(ev.id);
|
|
@@ -211,7 +244,7 @@ export class SpacesManager {
|
|
|
211
244
|
this.deferredSession.resolve();
|
|
212
245
|
}
|
|
213
246
|
|
|
214
|
-
private
|
|
247
|
+
private handleUserUpdated(ev: UserUpdated): void {
|
|
215
248
|
this.members.items.forEach((members) => {
|
|
216
249
|
const member = members.get(ev.user.id);
|
|
217
250
|
|