polfan-server-js-client 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.idea/workspace.xml +27 -17
  2. package/build/index.cjs.js +80 -52
  3. package/build/index.cjs.js.map +1 -1
  4. package/build/index.js +62 -62
  5. package/build/index.umd.js +1 -1
  6. package/build/index.umd.js.map +1 -1
  7. package/build/types/AbstractChatClient.d.ts +6 -2
  8. package/build/types/Permissions.d.ts +4 -0
  9. package/build/types/state-tracker/RoomsManager.d.ts +1 -1
  10. package/build/types/state-tracker/SpacesManager.d.ts +6 -0
  11. package/build/types/types/src/index.d.ts +6 -2
  12. package/build/types/types/src/schemes/Message.d.ts +1 -1
  13. package/build/types/types/src/schemes/RoomSummary.d.ts +1 -0
  14. package/build/types/types/src/schemes/commands/GetInvited.d.ts +3 -0
  15. package/build/types/types/src/schemes/commands/Invite.d.ts +5 -0
  16. package/build/types/types/src/schemes/commands/JoinRoom.d.ts +10 -0
  17. package/build/types/types/src/schemes/commands/Uninvite.d.ts +5 -0
  18. package/build/types/types/src/schemes/events/Invited.d.ts +10 -0
  19. package/build/types/types/src/schemes/events/RoomMembersJoined.d.ts +9 -0
  20. package/build/types/types/src/schemes/events/RoomSummaryUpdated.d.ts +2 -1
  21. package/package.json +1 -1
  22. package/src/AbstractChatClient.ts +10 -2
  23. package/src/Permissions.ts +1 -0
  24. package/src/state-tracker/RoomsManager.ts +4 -4
  25. package/src/state-tracker/SpacesManager.ts +10 -0
  26. package/src/state-tracker/UsersManager.ts +1 -1
  27. package/src/types/src/index.ts +10 -2
  28. package/src/types/src/schemes/Message.ts +1 -1
  29. package/src/types/src/schemes/RoomSummary.ts +2 -1
  30. package/src/types/src/schemes/commands/GetInvited.ts +3 -0
  31. package/src/types/src/schemes/commands/Invite.ts +5 -0
  32. package/src/types/src/schemes/commands/JoinRoom.ts +12 -0
  33. package/src/types/src/schemes/commands/Uninvite.ts +5 -0
  34. package/src/types/src/schemes/events/Invited.ts +13 -0
  35. package/src/types/src/schemes/events/RoomMembersJoined.ts +11 -0
  36. package/src/types/src/schemes/events/RoomSummaryUpdated.ts +3 -2
  37. package/src/types/src/schemes/events/RoomMemberJoined.ts +0 -6
@@ -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, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, FollowedTopics, FollowTopic, UpdateFollowedTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics, TopicUpdated, UpdateTopic, GetDiscoverableSpaces, DiscoverableSpaces, CreateEmoticon, DeleteEmoticon, GetEmoticons, Emoticons, EmoticonDeleted, NewEmoticon, Bans, GetBans, Ban, Unban, Kick, ClientData, GetClientData, SetClientData, GetRoomSummary, GetSpaceSummary, RoomSummaryEvent, SpaceSummaryEvent, UpdateSpaceMember, Relationships, RelationshipDeleted, NewRelationship, DeleteRelationship, CreateRelationship, RoomSummaryUpdated, Pong, Ping, RedactMessages, MessagesRedacted, ReportAbuse, UpdateRoomMember, GetRelationships, GetUserInfo, UserInfo, SetSessionData, SessionData, GetSessionData, SetUserData, UserData, GetUserData, UnfollowTopic, TopicUnfollowed } from "./types/src";
1
+ import { Bye, GetSession, JoinSpace, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdated, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMembersJoined, 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, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, FollowedTopics, FollowTopic, UpdateFollowedTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics, TopicUpdated, UpdateTopic, GetDiscoverableSpaces, DiscoverableSpaces, CreateEmoticon, DeleteEmoticon, GetEmoticons, Emoticons, EmoticonDeleted, NewEmoticon, Bans, GetBans, Ban, Unban, Kick, ClientData, GetClientData, SetClientData, GetRoomSummary, GetSpaceSummary, RoomSummaryEvent, SpaceSummaryEvent, UpdateSpaceMember, Relationships, RelationshipDeleted, NewRelationship, DeleteRelationship, CreateRelationship, RoomSummaryUpdated, Pong, Ping, RedactMessages, MessagesRedacted, ReportAbuse, UpdateRoomMember, GetRelationships, GetUserInfo, UserInfo, SetSessionData, SessionData, GetSessionData, SetUserData, UserData, GetUserData, UnfollowTopic, TopicUnfollowed, Invite, Uninvite, GetInvited, Invited } from "./types/src";
2
2
  import { EventTarget } from "./EventTarget";
3
3
  type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
4
4
  type ExtraEventMap = Record<string, any>;
@@ -68,7 +68,7 @@ export type EventsMap = {
68
68
  SpaceSummaryEvent: SpaceSummaryEvent;
69
69
  RoomJoined: RoomJoined;
70
70
  RoomLeft: RoomLeft;
71
- RoomMemberJoined: RoomMemberJoined;
71
+ RoomMembersJoined: RoomMembersJoined;
72
72
  RoomMemberLeft: RoomMemberLeft;
73
73
  RoomMemberUpdated: RoomMemberUpdated;
74
74
  RoomMembers: RoomMembers;
@@ -77,6 +77,7 @@ export type EventsMap = {
77
77
  RoomUpdated: RoomUpdated;
78
78
  RoomSummaryEvent: RoomSummaryEvent;
79
79
  RoomSummaryUpdated: RoomSummaryUpdated;
80
+ Invited: Invited;
80
81
  NewTopic: NewTopic;
81
82
  TopicDeleted: TopicDeleted;
82
83
  NewMessage: NewMessage;
@@ -144,6 +145,9 @@ export type CommandsMap = {
144
145
  GetRoomMembers: CommandDefinition<GetRoomMembers, EventsMap['RoomMembers']>;
145
146
  GetRoomSummary: CommandDefinition<GetRoomSummary, EventsMap['RoomSummaryEvent']>;
146
147
  UpdateRoomMember: CommandDefinition<UpdateRoomMember, EventsMap['RoomMemberUpdated']>;
148
+ Invite: CommandDefinition<Invite, EventsMap['Invited']>;
149
+ Uninvite: CommandDefinition<Uninvite, EventsMap['Invited']>;
150
+ GetInvited: CommandDefinition<GetInvited, EventsMap['Invited']>;
147
151
  CreateTopic: CommandDefinition<CreateTopic, EventsMap['NewTopic']>;
148
152
  DeleteTopic: CommandDefinition<DeleteTopic, EventsMap['TopicDeleted']>;
149
153
  CreateMessage: CommandDefinition<CreateMessage, EventsMap['NewMessage']>;
@@ -86,6 +86,10 @@ export declare class Permissions {
86
86
  value: number;
87
87
  maxLayer: Layer;
88
88
  };
89
+ AddMembers: {
90
+ value: number;
91
+ maxLayer: Layer;
92
+ };
89
93
  };
90
94
  static getNames(): (keyof typeof this.list)[];
91
95
  static getByName(name: keyof typeof this.list): PermissionDefinition | undefined;
@@ -51,7 +51,7 @@ export declare class RoomsManager {
51
51
  private handleTopicUpdated;
52
52
  private addJoinedRooms;
53
53
  private handleRoomLeft;
54
- private handleRoomMemberJoined;
54
+ private handleRoomMembersJoined;
55
55
  private handleRoomMemberLeft;
56
56
  private handleRoomMembers;
57
57
  private handleSession;
@@ -24,6 +24,12 @@ export declare class SpacesManager {
24
24
  * Get collection of the all available rooms inside given space.
25
25
  */
26
26
  getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined>;
27
+ /**
28
+ * Drop the cached room listing of the space and fetch it again from the server.
29
+ * Room visibility depends on things this client is not notified about (invitations,
30
+ * permission changes), so the listing needs a way to be pulled anew on demand.
31
+ */
32
+ refreshRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined>;
27
33
  /**
28
34
  * Get collection of space members.
29
35
  */
@@ -26,7 +26,7 @@ import { NewRole } from "./schemes/events/NewRole";
26
26
  import { RoleDeleted } from "./schemes/events/RoleDeleted";
27
27
  import { RoomJoined } from "./schemes/events/RoomJoined";
28
28
  import { RoomLeft } from "./schemes/events/RoomLeft";
29
- import { RoomMemberJoined } from "./schemes/events/RoomMemberJoined";
29
+ import { RoomMembersJoined } from "./schemes/events/RoomMembersJoined";
30
30
  import { RoomMemberLeft } from "./schemes/events/RoomMemberLeft";
31
31
  import { RoomMembers } from "./schemes/events/RoomMembers";
32
32
  import { RoomMemberUpdated } from "./schemes/events/RoomMemberUpdated";
@@ -140,5 +140,9 @@ import { UserData, PrivateMessagePolicy } from "./schemes/UserData";
140
140
  import { SetUserData } from "./schemes/commands/SetUserData";
141
141
  import { GetUserData } from "./schemes/commands/GetUserData";
142
142
  import { UnfollowTopic } from "./schemes/commands/UnfollowTopic";
143
+ import { Invite } from "./schemes/commands/Invite";
144
+ import { Uninvite } from "./schemes/commands/Uninvite";
145
+ import { GetInvited } from "./schemes/commands/GetInvited";
146
+ import { Invited } from "./schemes/events/Invited";
143
147
  import { TopicUnfollowed } from "./schemes/events/TopicUnfollowed";
144
- export { Envelope, Message, MessageType, MessageAuthor, Role, Room, RoomType, RoomStream, RoomStreamType, RoomHistory, RoomHistoryMode, RoomMember, RoomSummary, RoomSummaryExtras, Space, SpaceMember, Topic, FollowedTopic, NotificationLevel, User, UserState, PermissionOverwritesValue, ChatLocation, SpaceSummary, SpaceDiscoverable, Emoticon, PermissionOverwritesTarget, BanObject, LeaveReason, UserRelationship, UserRelationshipType, CreateTopicInitialMessage, UserInformation, SessionPush, SessionData, UserData, PrivateMessagePolicy, Bye, Error, Messages, NewMessage, NewRole, NewRoom, NewTopic, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowedTopicUpdated, ComputedPermissions, PermissionOverwrites, PermissionOverwritesUpdated, RoleDeleted, RoleUpdated, RoomDeleted, RoomUpdated, RoomJoined, RoomLeft, RoomMemberJoined, RoomMemberLeft, RoomMembers, RoomMemberUpdated, UserUpdated, Session, SpaceDeleted, SpaceUpdated, SpaceJoined, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, TopicDeleted, TopicUpdated, PermissionOverwriteTargets, Owners, Ok, DiscoverableSpaces, Emoticons, EmoticonDeleted, NewEmoticon, Bans, ClientData, SpaceSummaryEvent, RoomSummaryEvent, NewRelationship, RelationshipDeleted, Relationships, RoomSummaryUpdated, Pong, MessagesRedacted, UserInfo, AssignRole, GetMessages, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, UpdateFollowedTopic, GetFollowedTopics, DeassignRole, DeleteRole, DeleteRoom, DeleteSpace, DeleteTopic, SetPermissionOverwrites, GetPermissionOverwrites, GetComputedPermissions, GetRoomMembers, GetSession, GetSpaceMembers, GetSpaceRooms, JoinRoom, JoinSpace, LeaveRoom, LeaveSpace, UpdateRole, UpdateSpace, UpdateRoom, UpdateTopic, GetPermissionOverwriteTargets, CreateOwner, DeleteOwner, GetOwners, Topics, GetTopics, GetDiscoverableSpaces, GetEmoticons, CreateEmoticon, DeleteEmoticon, Ban, Unban, GetBans, Kick, GetClientData, SetClientData, GetSpaceSummary, GetRoomSummary, UpdateSpaceMember, CreateRelationship, DeleteRelationship, GetRelationships, UpdateRoomMember, Ping, ReportAbuse, RedactMessages, GetUserInfo, SetSessionData, GetSessionData, SetUserData, GetUserData, };
148
+ export { Envelope, Message, MessageType, MessageAuthor, Role, Room, RoomType, RoomStream, RoomStreamType, RoomHistory, RoomHistoryMode, RoomMember, RoomSummary, RoomSummaryExtras, Space, SpaceMember, Topic, FollowedTopic, NotificationLevel, User, UserState, PermissionOverwritesValue, ChatLocation, SpaceSummary, SpaceDiscoverable, Emoticon, PermissionOverwritesTarget, BanObject, LeaveReason, UserRelationship, UserRelationshipType, CreateTopicInitialMessage, UserInformation, SessionPush, SessionData, UserData, PrivateMessagePolicy, Bye, Error, Messages, NewMessage, NewRole, NewRoom, NewTopic, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowedTopicUpdated, ComputedPermissions, PermissionOverwrites, PermissionOverwritesUpdated, RoleDeleted, RoleUpdated, RoomDeleted, RoomUpdated, RoomJoined, RoomLeft, RoomMembersJoined, RoomMemberLeft, RoomMembers, RoomMemberUpdated, UserUpdated, Session, SpaceDeleted, SpaceUpdated, SpaceJoined, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdated, SpaceRooms, TopicDeleted, TopicUpdated, PermissionOverwriteTargets, Owners, Ok, DiscoverableSpaces, Emoticons, EmoticonDeleted, NewEmoticon, Bans, ClientData, SpaceSummaryEvent, RoomSummaryEvent, NewRelationship, RelationshipDeleted, Relationships, RoomSummaryUpdated, Pong, MessagesRedacted, UserInfo, Invited, AssignRole, GetMessages, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, UpdateFollowedTopic, GetFollowedTopics, DeassignRole, DeleteRole, DeleteRoom, DeleteSpace, DeleteTopic, SetPermissionOverwrites, GetPermissionOverwrites, GetComputedPermissions, GetRoomMembers, GetSession, GetSpaceMembers, GetSpaceRooms, JoinRoom, JoinSpace, LeaveRoom, LeaveSpace, UpdateRole, UpdateSpace, UpdateRoom, UpdateTopic, GetPermissionOverwriteTargets, CreateOwner, DeleteOwner, GetOwners, Topics, GetTopics, GetDiscoverableSpaces, GetEmoticons, CreateEmoticon, DeleteEmoticon, Ban, Unban, GetBans, Kick, GetClientData, SetClientData, GetSpaceSummary, GetRoomSummary, UpdateSpaceMember, CreateRelationship, DeleteRelationship, GetRelationships, UpdateRoomMember, Ping, ReportAbuse, RedactMessages, GetUserInfo, SetSessionData, GetSessionData, SetUserData, GetUserData, Invite, Uninvite, GetInvited, };
@@ -1,6 +1,6 @@
1
1
  import { User } from "./User";
2
2
  import { ChatLocation } from "./ChatLocation";
3
- export type MessageType = 'Text' | 'RoomJoin' | 'RoomLeave' | 'SpaceJoin' | 'SpaceLeave' | 'TopicChange' | 'CustomNickChange' | 'Ephemeral';
3
+ export type MessageType = 'Text' | 'RoomJoin' | 'RoomMemberAdd' | 'RoomLeave' | 'SpaceJoin' | 'SpaceLeave' | 'TopicChange' | 'CustomNickChange' | 'Ephemeral';
4
4
  export interface MessageAuthor {
5
5
  user: User;
6
6
  customNick?: string;
@@ -1,6 +1,7 @@
1
1
  import { RoomType } from "./Room";
2
2
  export interface RoomSummaryExtras {
3
3
  isPrivate: boolean;
4
+ isInvitationOnly: boolean;
4
5
  }
5
6
  export interface RoomSummary {
6
7
  id: string;
@@ -0,0 +1,3 @@
1
+ export interface GetInvited {
2
+ roomId: string;
3
+ }
@@ -0,0 +1,5 @@
1
+ export interface Invite {
2
+ roomId: string;
3
+ userIds?: string[];
4
+ roleIds?: string[];
5
+ }
@@ -1,3 +1,13 @@
1
1
  export interface JoinRoom {
2
2
  id: string;
3
+ /**
4
+ * Ids of the users to add to the room instead of joining it yourself.
5
+ * Requires the `AddMembers` permission.
6
+ */
7
+ userIds?: string[];
8
+ /**
9
+ * Ids of the roles whose members should be added to the room. The space default
10
+ * ("everyone") role is not supported. Requires the `AddMembers` permission.
11
+ */
12
+ roleIds?: string[];
3
13
  }
@@ -0,0 +1,5 @@
1
+ export interface Uninvite {
2
+ roomId: string;
3
+ userIds?: string[];
4
+ roleIds?: string[];
5
+ }
@@ -0,0 +1,10 @@
1
+ import { ChatLocation } from "../ChatLocation";
2
+ import { Role } from "../Role";
3
+ export interface Invited {
4
+ location: ChatLocation;
5
+ /**
6
+ * Ids of the invited users. Join them with the space member collection to display them.
7
+ */
8
+ userIds: string[];
9
+ roles: Role[];
10
+ }
@@ -0,0 +1,9 @@
1
+ import { RoomMember } from "../RoomMember";
2
+ export interface RoomMembersJoined {
3
+ roomId: string;
4
+ members: RoomMember[];
5
+ /**
6
+ * Id of the user who added the members to the room, null when they joined on their own.
7
+ */
8
+ addedByUserId: string | null;
9
+ }
@@ -1,7 +1,8 @@
1
1
  import { RoomSummary } from "../RoomSummary";
2
2
  export interface RoomSummaryUpdated {
3
3
  /**
4
- * Partial summary: without the `extras` field.
4
+ * Partial summary - the client merges it into the cached one.
5
+ * Private rooms do not emit this event at all.
5
6
  */
6
7
  summary: RoomSummary;
7
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -17,7 +17,7 @@ import {
17
17
  RoomJoined,
18
18
  RoomLeft,
19
19
  RoomMemberLeft,
20
- RoomMemberJoined,
20
+ RoomMembersJoined,
21
21
  RoomMembers,
22
22
  NewRoom,
23
23
  NewTopic,
@@ -118,6 +118,10 @@ import {
118
118
  GetUserData,
119
119
  UnfollowTopic,
120
120
  TopicUnfollowed,
121
+ Invite,
122
+ Uninvite,
123
+ GetInvited,
124
+ Invited,
121
125
  } from "./types/src";
122
126
  import {EventTarget} from "./EventTarget";
123
127
 
@@ -236,7 +240,7 @@ export type CommandResponse<CommandType extends keyof CommandsMap> = CommandsMap
236
240
  // Room events
237
241
  RoomJoined: RoomJoined,
238
242
  RoomLeft: RoomLeft,
239
- RoomMemberJoined: RoomMemberJoined,
243
+ RoomMembersJoined: RoomMembersJoined,
240
244
  RoomMemberLeft: RoomMemberLeft,
241
245
  RoomMemberUpdated: RoomMemberUpdated,
242
246
  RoomMembers: RoomMembers,
@@ -245,6 +249,7 @@ export type CommandResponse<CommandType extends keyof CommandsMap> = CommandsMap
245
249
  RoomUpdated: RoomUpdated,
246
250
  RoomSummaryEvent: RoomSummaryEvent,
247
251
  RoomSummaryUpdated: RoomSummaryUpdated,
252
+ Invited: Invited,
248
253
  // Topic events
249
254
  NewTopic: NewTopic,
250
255
  TopicDeleted: TopicDeleted,
@@ -317,6 +322,9 @@ export type CommandsMap = {
317
322
  GetRoomMembers: CommandDefinition<GetRoomMembers, EventsMap['RoomMembers']>,
318
323
  GetRoomSummary: CommandDefinition<GetRoomSummary, EventsMap['RoomSummaryEvent']>,
319
324
  UpdateRoomMember: CommandDefinition<UpdateRoomMember, EventsMap['RoomMemberUpdated']>,
325
+ Invite: CommandDefinition<Invite, EventsMap['Invited']>,
326
+ Uninvite: CommandDefinition<Uninvite, EventsMap['Invited']>,
327
+ GetInvited: CommandDefinition<GetInvited, EventsMap['Invited']>,
320
328
  // Topic commands
321
329
  CreateTopic: CommandDefinition<CreateTopic, EventsMap['NewTopic']>,
322
330
  DeleteTopic: CommandDefinition<DeleteTopic, EventsMap['TopicDeleted']>,
@@ -32,6 +32,7 @@ export class Permissions {
32
32
  ChangeOwnNick: {value: 1 << 17, maxLayer: Layer.Space},
33
33
  ChangeOwnColor: {value: 1 << 18, maxLayer: Layer.Room},
34
34
  RedactMessages: {value: 1 << 19, maxLayer: Layer.Topic},
35
+ AddMembers: {value: 1 << 20, maxLayer: Layer.Space},
35
36
  };
36
37
 
37
38
  public static getNames(): (keyof typeof this.list)[] {
@@ -6,7 +6,7 @@ import {
6
6
  NewTopic,
7
7
  Room, RoomDeleted,
8
8
  RoomJoined, RoomLeft,
9
- RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,
9
+ RoomMember, RoomMemberLeft, RoomMembers, RoomMembersJoined,
10
10
  RoomMemberUpdated, RoomUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,
11
11
  SpaceMemberUpdated,
12
12
  Topic,
@@ -42,7 +42,7 @@ export class RoomsManager {
42
42
  this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));
43
43
  this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));
44
44
  this.tracker.client.on('TopicUpdated', ev => this.handleTopicUpdated(ev));
45
- this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));
45
+ this.tracker.client.on('RoomMembersJoined', ev => this.handleRoomMembersJoined(ev));
46
46
  this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));
47
47
  this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));
48
48
  this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));
@@ -282,9 +282,9 @@ export class RoomsManager {
282
282
  this.deleteRoom(ev.id);
283
283
  }
284
284
 
285
- private handleRoomMemberJoined(ev: RoomMemberJoined): void {
285
+ private handleRoomMembersJoined(ev: RoomMembersJoined): void {
286
286
  if (this.members.has(ev.roomId)) {
287
- this.members.get(ev.roomId).set(ev.member);
287
+ this.members.get(ev.roomId).set(...ev.members);
288
288
  }
289
289
  }
290
290
 
@@ -92,6 +92,16 @@ export class SpacesManager {
92
92
  return this.rooms.get(spaceId);
93
93
  }
94
94
 
95
+ /**
96
+ * Drop the cached room listing of the space and fetch it again from the server.
97
+ * Room visibility depends on things this client is not notified about (invitations,
98
+ * permission changes), so the listing needs a way to be pulled anew on demand.
99
+ */
100
+ public async refreshRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {
101
+ this.roomsPromises.forget(spaceId);
102
+ return this.getRooms(spaceId);
103
+ }
104
+
95
105
  /**
96
106
  * Get collection of space members.
97
107
  */
@@ -12,7 +12,7 @@ export class UsersManager {
12
12
  public constructor(private tracker: ChatStateTracker) {
13
13
  // RoomMemberUpdated & SpaceMemberUpdated events are not contains user object
14
14
  tracker.client.on('UserUpdated', event => this.handleUsers([event.user]));
15
- tracker.client.on('RoomMemberJoined', event => this.handleMembers([event.member]));
15
+ tracker.client.on('RoomMembersJoined', event => this.handleMembers(event.members));
16
16
  tracker.client.on('SpaceMemberJoined', event => this.handleMembers([event.member]));
17
17
  tracker.client.on('SpaceMembers', event => this.handleMembers(event.members));
18
18
  tracker.client.on('RoomMembers', event => this.handleMembers(event.members));
@@ -26,7 +26,7 @@ import {NewRole} from "./schemes/events/NewRole";
26
26
  import {RoleDeleted} from "./schemes/events/RoleDeleted";
27
27
  import {RoomJoined} from "./schemes/events/RoomJoined";
28
28
  import {RoomLeft} from "./schemes/events/RoomLeft";
29
- import {RoomMemberJoined} from "./schemes/events/RoomMemberJoined";
29
+ import {RoomMembersJoined} from "./schemes/events/RoomMembersJoined";
30
30
  import {RoomMemberLeft} from "./schemes/events/RoomMemberLeft";
31
31
  import {RoomMembers} from "./schemes/events/RoomMembers";
32
32
  import {RoomMemberUpdated} from "./schemes/events/RoomMemberUpdated";
@@ -140,6 +140,10 @@ import {UserData, PrivateMessagePolicy} from "./schemes/UserData";
140
140
  import {SetUserData} from "./schemes/commands/SetUserData";
141
141
  import {GetUserData} from "./schemes/commands/GetUserData";
142
142
  import {UnfollowTopic} from "./schemes/commands/UnfollowTopic";
143
+ import {Invite} from "./schemes/commands/Invite";
144
+ import {Uninvite} from "./schemes/commands/Uninvite";
145
+ import {GetInvited} from "./schemes/commands/GetInvited";
146
+ import {Invited} from "./schemes/events/Invited";
143
147
  import {TopicUnfollowed} from "./schemes/events/TopicUnfollowed";
144
148
 
145
149
  export {
@@ -202,7 +206,7 @@ export {
202
206
  RoomUpdated,
203
207
  RoomJoined,
204
208
  RoomLeft,
205
- RoomMemberJoined,
209
+ RoomMembersJoined,
206
210
  RoomMemberLeft,
207
211
  RoomMembers,
208
212
  RoomMemberUpdated,
@@ -237,6 +241,7 @@ export {
237
241
  Pong,
238
242
  MessagesRedacted,
239
243
  UserInfo,
244
+ Invited,
240
245
  // commands
241
246
  AssignRole,
242
247
  GetMessages,
@@ -301,4 +306,7 @@ export {
301
306
  GetSessionData,
302
307
  SetUserData,
303
308
  GetUserData,
309
+ Invite,
310
+ Uninvite,
311
+ GetInvited,
304
312
  };
@@ -1,7 +1,7 @@
1
1
  import {User} from "./User";
2
2
  import {ChatLocation} from "./ChatLocation";
3
3
 
4
- export type MessageType = 'Text'|'RoomJoin'|'RoomLeave'|'SpaceJoin'|'SpaceLeave'|'TopicChange'|'CustomNickChange'|'Ephemeral';
4
+ export type MessageType = 'Text'|'RoomJoin'|'RoomMemberAdd'|'RoomLeave'|'SpaceJoin'|'SpaceLeave'|'TopicChange'|'CustomNickChange'|'Ephemeral';
5
5
 
6
6
  export interface MessageAuthor {
7
7
  user: User;
@@ -2,6 +2,7 @@ import {RoomType} from "./Room";
2
2
 
3
3
  export interface RoomSummaryExtras {
4
4
  isPrivate: boolean;
5
+ isInvitationOnly: boolean;
5
6
  }
6
7
 
7
8
  export interface RoomSummary {
@@ -12,4 +13,4 @@ export interface RoomSummary {
12
13
  memberCount: number;
13
14
  type: RoomType;
14
15
  extras?: RoomSummaryExtras;
15
- }
16
+ }
@@ -0,0 +1,3 @@
1
+ export interface GetInvited {
2
+ roomId: string;
3
+ }
@@ -0,0 +1,5 @@
1
+ export interface Invite {
2
+ roomId: string;
3
+ userIds?: string[];
4
+ roleIds?: string[];
5
+ }
@@ -1,3 +1,15 @@
1
1
  export interface JoinRoom {
2
2
  id: string;
3
+
4
+ /**
5
+ * Ids of the users to add to the room instead of joining it yourself.
6
+ * Requires the `AddMembers` permission.
7
+ */
8
+ userIds?: string[];
9
+
10
+ /**
11
+ * Ids of the roles whose members should be added to the room. The space default
12
+ * ("everyone") role is not supported. Requires the `AddMembers` permission.
13
+ */
14
+ roleIds?: string[];
3
15
  }
@@ -0,0 +1,5 @@
1
+ export interface Uninvite {
2
+ roomId: string;
3
+ userIds?: string[];
4
+ roleIds?: string[];
5
+ }
@@ -0,0 +1,13 @@
1
+ import {ChatLocation} from "../ChatLocation";
2
+ import {Role} from "../Role";
3
+
4
+ export interface Invited {
5
+ location: ChatLocation;
6
+
7
+ /**
8
+ * Ids of the invited users. Join them with the space member collection to display them.
9
+ */
10
+ userIds: string[];
11
+
12
+ roles: Role[];
13
+ }
@@ -0,0 +1,11 @@
1
+ import {RoomMember} from "../RoomMember";
2
+
3
+ export interface RoomMembersJoined {
4
+ roomId: string;
5
+ members: RoomMember[];
6
+
7
+ /**
8
+ * Id of the user who added the members to the room, null when they joined on their own.
9
+ */
10
+ addedByUserId: string | null;
11
+ }
@@ -2,7 +2,8 @@ import {RoomSummary} from "../RoomSummary";
2
2
 
3
3
  export interface RoomSummaryUpdated {
4
4
  /**
5
- * Partial summary: without the `extras` field.
5
+ * Partial summary - the client merges it into the cached one.
6
+ * Private rooms do not emit this event at all.
6
7
  */
7
8
  summary: RoomSummary;
8
- }
9
+ }
@@ -1,6 +0,0 @@
1
- import {RoomMember} from "../RoomMember";
2
-
3
- export interface RoomMemberJoined {
4
- roomId: string;
5
- member: RoomMember;
6
- }