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.
@@ -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, PermissionOverwritesChanged, RoomMemberUpdated, UpdateRole, RoleUpdated, AckReports, Ack, GetAckReports, UserChanged } from "pserv-ts-types";
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
- PermissionOverwritesChanged: PermissionOverwritesChanged;
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
- UserChanged: UserChanged;
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['PermissionOverwritesChanged']];
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 handleUserChanged;
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 handleUserChanged;
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.39",
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.25",
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
- PermissionOverwritesChanged,
48
+ PermissionOverwritesUpdated,
49
49
  RoomMemberUpdated,
50
50
  UpdateRole,
51
51
  RoleUpdated,
52
52
  AckReports,
53
53
  Ack,
54
54
  GetAckReports,
55
- UserChanged,
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
- PermissionOverwritesChanged: PermissionOverwritesChanged,
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
- UserChanged: UserChanged,
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['PermissionOverwritesChanged']],
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
- PermissionOverwritesChanged,
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 | PermissionOverwritesChanged): string => getOvId(
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('PermissionOverwritesChanged', ev => this.handlePermissionOverwrites(ev));
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: PermissionOverwritesChanged | PermissionOverwrites): void {
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
- UserChanged,
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('UserChanged', ev => this.handleUserChanged(ev));
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 (! members) {
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 handleUserChanged(ev: UserChanged): void {
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, RoleUpdated, RoomDeleted,
8
- RoomSummary, Session,
7
+ RoleDeleted,
8
+ RoleUpdated,
9
+ RoomDeleted,
10
+ RoomSummary,
11
+ RoomUpdated,
12
+ Session,
9
13
  Space,
10
- SpaceDeleted, SpaceJoined, SpaceLeft,
11
- SpaceMember, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, UserChanged
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('UserChanged', ev => this.handleUserChanged(ev));
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 (! members) {
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 handleUserChanged(ev: UserChanged): void {
247
+ private handleUserUpdated(ev: UserUpdated): void {
215
248
  this.members.items.forEach((members) => {
216
249
  const member = members.get(ev.user.id);
217
250