polfan-server-js-client 0.2.111 → 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 (43) hide show
  1. package/.idea/workspace.xml +44 -27
  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 +9 -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 +9 -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/UserData.d.ts +4 -0
  15. package/build/types/types/src/schemes/commands/GetInvited.d.ts +3 -0
  16. package/build/types/types/src/schemes/commands/GetUserData.d.ts +2 -0
  17. package/build/types/types/src/schemes/commands/Invite.d.ts +5 -0
  18. package/build/types/types/src/schemes/commands/JoinRoom.d.ts +10 -0
  19. package/build/types/types/src/schemes/commands/SetUserData.d.ts +4 -0
  20. package/build/types/types/src/schemes/commands/Uninvite.d.ts +5 -0
  21. package/build/types/types/src/schemes/events/Invited.d.ts +10 -0
  22. package/build/types/types/src/schemes/events/RoomMembersJoined.d.ts +9 -0
  23. package/build/types/types/src/schemes/events/RoomSummaryUpdated.d.ts +2 -1
  24. package/package.json +1 -1
  25. package/src/AbstractChatClient.ts +16 -2
  26. package/src/Permissions.ts +1 -0
  27. package/src/state-tracker/RoomsManager.ts +4 -4
  28. package/src/state-tracker/SpacesManager.ts +10 -0
  29. package/src/state-tracker/UsersManager.ts +1 -1
  30. package/src/types/src/index.ts +17 -2
  31. package/src/types/src/schemes/Message.ts +1 -1
  32. package/src/types/src/schemes/RoomSummary.ts +2 -1
  33. package/src/types/src/schemes/UserData.ts +5 -0
  34. package/src/types/src/schemes/commands/GetInvited.ts +3 -0
  35. package/src/types/src/schemes/commands/GetUserData.ts +3 -0
  36. package/src/types/src/schemes/commands/Invite.ts +5 -0
  37. package/src/types/src/schemes/commands/JoinRoom.ts +12 -0
  38. package/src/types/src/schemes/commands/SetUserData.ts +5 -0
  39. package/src/types/src/schemes/commands/Uninvite.ts +5 -0
  40. package/src/types/src/schemes/events/Invited.ts +13 -0
  41. package/src/types/src/schemes/events/RoomMembersJoined.ts +11 -0
  42. package/src/types/src/schemes/events/RoomSummaryUpdated.ts +3 -2
  43. 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, 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>;
@@ -46,6 +46,7 @@ export type EventsMap = {
46
46
  Bans: Bans;
47
47
  ClientData: ClientData;
48
48
  SessionData: SessionData;
49
+ UserData: UserData;
49
50
  NewRelationship: NewRelationship;
50
51
  RelationshipDeleted: RelationshipDeleted;
51
52
  Relationships: Relationships;
@@ -67,7 +68,7 @@ export type EventsMap = {
67
68
  SpaceSummaryEvent: SpaceSummaryEvent;
68
69
  RoomJoined: RoomJoined;
69
70
  RoomLeft: RoomLeft;
70
- RoomMemberJoined: RoomMemberJoined;
71
+ RoomMembersJoined: RoomMembersJoined;
71
72
  RoomMemberLeft: RoomMemberLeft;
72
73
  RoomMemberUpdated: RoomMemberUpdated;
73
74
  RoomMembers: RoomMembers;
@@ -76,6 +77,7 @@ export type EventsMap = {
76
77
  RoomUpdated: RoomUpdated;
77
78
  RoomSummaryEvent: RoomSummaryEvent;
78
79
  RoomSummaryUpdated: RoomSummaryUpdated;
80
+ Invited: Invited;
79
81
  NewTopic: NewTopic;
80
82
  TopicDeleted: TopicDeleted;
81
83
  NewMessage: NewMessage;
@@ -118,6 +120,8 @@ export type CommandsMap = {
118
120
  GetUserInfo: CommandDefinition<GetUserInfo, EventsMap['UserInfo']>;
119
121
  GetSessionData: CommandDefinition<GetSessionData, EventsMap['SessionData']>;
120
122
  SetSessionData: CommandDefinition<SetSessionData, EventsMap['Ok']>;
123
+ GetUserData: CommandDefinition<GetUserData, EventsMap['UserData']>;
124
+ SetUserData: CommandDefinition<SetUserData, EventsMap['Ok']>;
121
125
  GetDiscoverableSpaces: CommandDefinition<GetDiscoverableSpaces, EventsMap['DiscoverableSpaces']>;
122
126
  JoinSpace: CommandDefinition<JoinSpace, EventsMap['SpaceJoined']>;
123
127
  LeaveSpace: CommandDefinition<LeaveSpace, EventsMap['SpaceLeft']>;
@@ -141,6 +145,9 @@ export type CommandsMap = {
141
145
  GetRoomMembers: CommandDefinition<GetRoomMembers, EventsMap['RoomMembers']>;
142
146
  GetRoomSummary: CommandDefinition<GetRoomSummary, EventsMap['RoomSummaryEvent']>;
143
147
  UpdateRoomMember: CommandDefinition<UpdateRoomMember, EventsMap['RoomMemberUpdated']>;
148
+ Invite: CommandDefinition<Invite, EventsMap['Invited']>;
149
+ Uninvite: CommandDefinition<Uninvite, EventsMap['Invited']>;
150
+ GetInvited: CommandDefinition<GetInvited, EventsMap['Invited']>;
144
151
  CreateTopic: CommandDefinition<CreateTopic, EventsMap['NewTopic']>;
145
152
  DeleteTopic: CommandDefinition<DeleteTopic, EventsMap['TopicDeleted']>;
146
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";
@@ -136,6 +136,13 @@ import { UserInformation } from "./schemes/UserInformation";
136
136
  import { SetSessionData, SessionPush } from "./schemes/commands/SetSessionData";
137
137
  import { SessionData } from "./schemes/SessionData";
138
138
  import { GetSessionData } from "./schemes/commands/GetSessionData";
139
+ import { UserData, PrivateMessagePolicy } from "./schemes/UserData";
140
+ import { SetUserData } from "./schemes/commands/SetUserData";
141
+ import { GetUserData } from "./schemes/commands/GetUserData";
139
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";
140
147
  import { TopicUnfollowed } from "./schemes/events/TopicUnfollowed";
141
- 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, 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, };
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,4 @@
1
+ export type PrivateMessagePolicy = 'None' | 'Mutual' | 'All';
2
+ export interface UserData {
3
+ privateMessagePolicy: PrivateMessagePolicy;
4
+ }
@@ -0,0 +1,3 @@
1
+ export interface GetInvited {
2
+ roomId: string;
3
+ }
@@ -0,0 +1,2 @@
1
+ export interface GetUserData {
2
+ }
@@ -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,4 @@
1
+ import { PrivateMessagePolicy } from "../UserData";
2
+ export interface SetUserData {
3
+ privateMessagePolicy?: PrivateMessagePolicy;
4
+ }
@@ -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.2.111",
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,
@@ -113,8 +113,15 @@ import {
113
113
  SetSessionData,
114
114
  SessionData,
115
115
  GetSessionData,
116
+ SetUserData,
117
+ UserData,
118
+ GetUserData,
116
119
  UnfollowTopic,
117
120
  TopicUnfollowed,
121
+ Invite,
122
+ Uninvite,
123
+ GetInvited,
124
+ Invited,
118
125
  } from "./types/src";
119
126
  import {EventTarget} from "./EventTarget";
120
127
 
@@ -209,6 +216,7 @@ export type CommandResponse<CommandType extends keyof CommandsMap> = CommandsMap
209
216
  Bans: Bans,
210
217
  ClientData: ClientData,
211
218
  SessionData: SessionData,
219
+ UserData: UserData,
212
220
  NewRelationship: NewRelationship,
213
221
  RelationshipDeleted: RelationshipDeleted,
214
222
  Relationships: Relationships,
@@ -232,7 +240,7 @@ export type CommandResponse<CommandType extends keyof CommandsMap> = CommandsMap
232
240
  // Room events
233
241
  RoomJoined: RoomJoined,
234
242
  RoomLeft: RoomLeft,
235
- RoomMemberJoined: RoomMemberJoined,
243
+ RoomMembersJoined: RoomMembersJoined,
236
244
  RoomMemberLeft: RoomMemberLeft,
237
245
  RoomMemberUpdated: RoomMemberUpdated,
238
246
  RoomMembers: RoomMembers,
@@ -241,6 +249,7 @@ export type CommandResponse<CommandType extends keyof CommandsMap> = CommandsMap
241
249
  RoomUpdated: RoomUpdated,
242
250
  RoomSummaryEvent: RoomSummaryEvent,
243
251
  RoomSummaryUpdated: RoomSummaryUpdated,
252
+ Invited: Invited,
244
253
  // Topic events
245
254
  NewTopic: NewTopic,
246
255
  TopicDeleted: TopicDeleted,
@@ -286,6 +295,8 @@ export type CommandsMap = {
286
295
  GetUserInfo: CommandDefinition<GetUserInfo, EventsMap['UserInfo']>,
287
296
  GetSessionData: CommandDefinition<GetSessionData, EventsMap['SessionData']>,
288
297
  SetSessionData: CommandDefinition<SetSessionData, EventsMap['Ok']>,
298
+ GetUserData: CommandDefinition<GetUserData, EventsMap['UserData']>,
299
+ SetUserData: CommandDefinition<SetUserData, EventsMap['Ok']>,
289
300
  // Space commands
290
301
  GetDiscoverableSpaces: CommandDefinition<GetDiscoverableSpaces, EventsMap['DiscoverableSpaces']>,
291
302
  JoinSpace: CommandDefinition<JoinSpace, EventsMap['SpaceJoined']>,
@@ -311,6 +322,9 @@ export type CommandsMap = {
311
322
  GetRoomMembers: CommandDefinition<GetRoomMembers, EventsMap['RoomMembers']>,
312
323
  GetRoomSummary: CommandDefinition<GetRoomSummary, EventsMap['RoomSummaryEvent']>,
313
324
  UpdateRoomMember: CommandDefinition<UpdateRoomMember, EventsMap['RoomMemberUpdated']>,
325
+ Invite: CommandDefinition<Invite, EventsMap['Invited']>,
326
+ Uninvite: CommandDefinition<Uninvite, EventsMap['Invited']>,
327
+ GetInvited: CommandDefinition<GetInvited, EventsMap['Invited']>,
314
328
  // Topic commands
315
329
  CreateTopic: CommandDefinition<CreateTopic, EventsMap['NewTopic']>,
316
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";
@@ -136,7 +136,14 @@ import {UserInformation} from "./schemes/UserInformation";
136
136
  import {SetSessionData, SessionPush} from "./schemes/commands/SetSessionData";
137
137
  import {SessionData} from "./schemes/SessionData";
138
138
  import {GetSessionData} from "./schemes/commands/GetSessionData";
139
+ import {UserData, PrivateMessagePolicy} from "./schemes/UserData";
140
+ import {SetUserData} from "./schemes/commands/SetUserData";
141
+ import {GetUserData} from "./schemes/commands/GetUserData";
139
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";
140
147
  import {TopicUnfollowed} from "./schemes/events/TopicUnfollowed";
141
148
 
142
149
  export {
@@ -176,6 +183,8 @@ export {
176
183
  UserInformation,
177
184
  SessionPush,
178
185
  SessionData,
186
+ UserData,
187
+ PrivateMessagePolicy,
179
188
  // events
180
189
  Bye,
181
190
  Error,
@@ -197,7 +206,7 @@ export {
197
206
  RoomUpdated,
198
207
  RoomJoined,
199
208
  RoomLeft,
200
- RoomMemberJoined,
209
+ RoomMembersJoined,
201
210
  RoomMemberLeft,
202
211
  RoomMembers,
203
212
  RoomMemberUpdated,
@@ -232,6 +241,7 @@ export {
232
241
  Pong,
233
242
  MessagesRedacted,
234
243
  UserInfo,
244
+ Invited,
235
245
  // commands
236
246
  AssignRole,
237
247
  GetMessages,
@@ -294,4 +304,9 @@ export {
294
304
  GetUserInfo,
295
305
  SetSessionData,
296
306
  GetSessionData,
307
+ SetUserData,
308
+ GetUserData,
309
+ Invite,
310
+ Uninvite,
311
+ GetInvited,
297
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,5 @@
1
+ export type PrivateMessagePolicy = 'None' | 'Mutual' | 'All';
2
+
3
+ export interface UserData {
4
+ privateMessagePolicy: PrivateMessagePolicy;
5
+ }
@@ -0,0 +1,3 @@
1
+ export interface GetInvited {
2
+ roomId: string;
3
+ }
@@ -0,0 +1,3 @@
1
+ export interface GetUserData {
2
+
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
+ import {PrivateMessagePolicy} from "../UserData";
2
+
3
+ export interface SetUserData {
4
+ privateMessagePolicy?: PrivateMessagePolicy;
5
+ }
@@ -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
- }