polfan-server-js-client 0.1.99933 → 0.1.99935

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, PermissionOverwritesUpdated, RoomMemberUpdated, UpdateRole, RoleUpdated, Ack, UserUpdated, UpdateRoom, RoomUpdated, UpdateSpace, SpaceUpdated, PermissionOverwriteTargets, GetPermissionOverwriteTargets, Owners, Ok, GetOwners, CreateOwner, RoleDeleted, FollowedTopicUpdated, TopicFollowed, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics, TopicUpdated, UpdateTopic, GetDiscoverableSpaces, DiscoverableSpaces, CreateEmoticon, DeleteEmoticon, GetEmoticons, Emoticons, EmoticonDeleted, NewEmoticon, Bans, GetBans, Ban, Unban, Kick } from "./types/src/index";
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, TopicUnfollowed, FollowedTopics, FollowTopic, UnfollowTopic, GetFollowedTopics, Messages, GetMessages, Topics, GetTopics, TopicUpdated, UpdateTopic, GetDiscoverableSpaces, DiscoverableSpaces, CreateEmoticon, DeleteEmoticon, GetEmoticons, Emoticons, EmoticonDeleted, NewEmoticon, Bans, GetBans, Ban, Unban, Kick, ClientData, GetClientData, SetClientData } from "./types/src/index";
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 {
@@ -33,6 +33,7 @@ export type EventsMap = {
33
33
  EmoticonDeleted: EmoticonDeleted;
34
34
  Emoticons: Emoticons;
35
35
  Bans: Bans;
36
+ ClientData: ClientData;
36
37
  DiscoverableSpaces: DiscoverableSpaces;
37
38
  SpaceJoined: SpaceJoined;
38
39
  SpaceLeft: SpaceLeft;
@@ -86,6 +87,8 @@ export type CommandsMap = {
86
87
  Ban: [Ban, EventsMap['Ok']];
87
88
  Unban: [Unban, EventsMap['Ok']];
88
89
  Kick: [Kick, EventsMap['Ok']];
90
+ GetClientData: [GetClientData, EventsMap['ClientData']];
91
+ SetClientData: [SetClientData, EventsMap['Ok']];
89
92
  GetDiscoverableSpaces: [GetDiscoverableSpaces, EventsMap['DiscoverableSpaces']];
90
93
  JoinSpace: [JoinSpace, EventsMap['SpaceJoined']];
91
94
  LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']];
@@ -4,7 +4,7 @@ import { RoomsManager } from "./RoomsManager";
4
4
  import { SpacesManager } from "./SpacesManager";
5
5
  import { PermissionsManager } from "./PermissionsManager";
6
6
  import { EmoticonsManager } from "./EmoticonsManager";
7
- import { Utils } from "./Utils";
7
+ import { UsersManager } from "./UsersManager";
8
8
  export declare class ChatStateTracker {
9
9
  readonly client: WebSocketChatClient;
10
10
  /**
@@ -24,9 +24,9 @@ export declare class ChatStateTracker {
24
24
  */
25
25
  readonly emoticons: EmoticonsManager;
26
26
  /**
27
- * Various utilities.
27
+ * Users related state.
28
28
  */
29
- readonly utils: Utils;
29
+ readonly users: UsersManager;
30
30
  private _me;
31
31
  private readonly deferredSession;
32
32
  constructor(client: WebSocketChatClient);
@@ -0,0 +1,15 @@
1
+ import { ChatStateTracker } from "./ChatStateTracker";
2
+ import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
3
+ import { User } from "../types/src";
4
+ export declare class UsersManager {
5
+ private tracker;
6
+ private readonly users;
7
+ constructor(tracker: ChatStateTracker);
8
+ /**
9
+ * Get all available (cached) user objects at once.
10
+ */
11
+ getAvailable(): Promise<ObservableIndexedObjectCollection<User>>;
12
+ private handleMembers;
13
+ private handleUsers;
14
+ private handleSession;
15
+ }
@@ -107,4 +107,8 @@ import { BanObject } from "./schemes/BanObject";
107
107
  import { Bans } from "./schemes/events/Bans";
108
108
  import { Kick } from "./schemes/commands/Kick";
109
109
  import { LeaveReason } from "./schemes/LeaveReason";
110
- export { Envelope, Message, MessageType, Role, Room, RoomFlag, RoomType, RoomMember, RoomSummary, Space, SpaceMember, Topic, FollowedTopic, User, UserState, PermissionOverwritesValue, ChatLocation, SpaceSummary, SpaceDiscoverable, Emoticon, PermissionOverwritesTarget, BanObject, LeaveReason, 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, AssignRole, GetMessages, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, 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, };
110
+ import { GetClientData } from "./schemes/commands/GetClientData";
111
+ import { SetClientData } from "./schemes/commands/SetClientData";
112
+ import { ClientData } from "./schemes/events/ClientData";
113
+ import { RoomStream, RoomStreamType } from "./schemes/RoomStream";
114
+ export { Envelope, Message, MessageType, Role, Room, RoomFlag, RoomType, RoomMember, RoomSummary, Space, SpaceMember, Topic, FollowedTopic, User, UserState, PermissionOverwritesValue, ChatLocation, SpaceSummary, SpaceDiscoverable, Emoticon, PermissionOverwritesTarget, BanObject, LeaveReason, RoomStream, RoomStreamType, 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, AssignRole, GetMessages, CreateMessage, Ack, CreateRole, CreateRoom, CreateSpace, CreateTopic, FollowTopic, UnfollowTopic, 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, };
@@ -1,5 +1,6 @@
1
1
  import { Topic } from "./Topic";
2
2
  import { User } from "./User";
3
+ import { RoomStream } from "./RoomStream";
3
4
  export type RoomType = 'Text' | 'ClassicText' | 'Pm';
4
5
  export declare enum RoomFlag {
5
6
  AllowSystemMessages = 1
@@ -13,4 +14,5 @@ export interface Room {
13
14
  defaultTopic: Topic | null;
14
15
  recipients: User[] | null;
15
16
  flags: number;
17
+ stream: RoomStream | null;
16
18
  }
@@ -0,0 +1,5 @@
1
+ export type RoomStreamType = 'Direct' | 'Shoutcast';
2
+ export interface RoomStream {
3
+ type: RoomStreamType;
4
+ url: string;
5
+ }
@@ -0,0 +1,2 @@
1
+ export interface GetClientData {
2
+ }
@@ -0,0 +1 @@
1
+ export type SetClientData = Record<string, any>;
@@ -1,6 +1,8 @@
1
+ import { RoomStream } from "../RoomStream";
1
2
  export interface UpdateRoom {
2
3
  id: string;
3
4
  name?: string;
4
5
  description?: string;
5
6
  flags?: number;
7
+ stream?: RoomStream | null;
6
8
  }
@@ -0,0 +1 @@
1
+ export type ClientData = Record<string, any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.1.99933",
3
+ "version": "0.1.99935",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -82,7 +82,7 @@ import {
82
82
  GetEmoticons,
83
83
  Emoticons,
84
84
  EmoticonDeleted,
85
- NewEmoticon, Bans, GetBans, Ban, Unban, Kick,
85
+ NewEmoticon, Bans, GetBans, Ban, Unban, Kick, ClientData, GetClientData, SetClientData,
86
86
  } from "./types/src/index";
87
87
  import {EventTarget} from "./EventTarget";
88
88
  import {ErrorObject} from "css-minimizer-webpack-plugin";
@@ -160,6 +160,7 @@ export type EventsMap = {
160
160
  EmoticonDeleted: EmoticonDeleted,
161
161
  Emoticons: Emoticons,
162
162
  Bans: Bans,
163
+ ClientData: ClientData,
163
164
  // Space events
164
165
  DiscoverableSpaces: DiscoverableSpaces,
165
166
  SpaceJoined: SpaceJoined,
@@ -218,6 +219,8 @@ export type CommandsMap = {
218
219
  Ban: [Ban, EventsMap['Ok']],
219
220
  Unban: [Unban, EventsMap['Ok']],
220
221
  Kick: [Kick, EventsMap['Ok']],
222
+ GetClientData: [GetClientData, EventsMap['ClientData']],
223
+ SetClientData: [SetClientData, EventsMap['Ok']],
221
224
  // Space commands
222
225
  GetDiscoverableSpaces: [GetDiscoverableSpaces, EventsMap['DiscoverableSpaces']],
223
226
  JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],
@@ -5,7 +5,7 @@ import {SpacesManager} from "./SpacesManager";
5
5
  import {PermissionsManager} from "./PermissionsManager";
6
6
  import {DeferredTask} from "./AsyncUtils";
7
7
  import {EmoticonsManager} from "./EmoticonsManager";
8
- import {Utils} from "./Utils";
8
+ import {UsersManager} from "./UsersManager";
9
9
 
10
10
  export class ChatStateTracker {
11
11
  /**
@@ -29,9 +29,9 @@ export class ChatStateTracker {
29
29
  public readonly emoticons = new EmoticonsManager(this);
30
30
 
31
31
  /**
32
- * Various utilities.
32
+ * Users related state.
33
33
  */
34
- public readonly utils = new Utils(this);
34
+ public readonly users = new UsersManager(this);
35
35
 
36
36
  private _me: User = null;
37
37
  private readonly deferredSession = new DeferredTask();
@@ -0,0 +1,41 @@
1
+ import {ChatStateTracker} from "./ChatStateTracker";
2
+ import {ObservableIndexedObjectCollection} from "../IndexedObjectCollection";
3
+ import {RoomMember, Session, SpaceMember, User} from "../types/src";
4
+ import {extractUserFromMember} from "./functions";
5
+
6
+ export class UsersManager {
7
+ private readonly users: ObservableIndexedObjectCollection<User> = new ObservableIndexedObjectCollection('id');
8
+
9
+ public constructor(private tracker: ChatStateTracker) {
10
+ tracker.client.on('UserUpdated', event => this.handleUsers([event.user]));
11
+ tracker.client.on('RoomMemberJoined', event => this.handleMembers([event.member]));
12
+ tracker.client.on('RoomMemberUpdated', event => this.handleMembers([event.member]));
13
+ tracker.client.on('SpaceMemberJoined', event => this.handleMembers([event.member]));
14
+ tracker.client.on('SpaceMemberUpdated', event => this.handleMembers([event.member]));
15
+ tracker.client.on('SpaceMembers', event => this.handleMembers(event.members));
16
+ tracker.client.on('RoomMembers', event => this.handleMembers(event.members));
17
+ tracker.client.on('Messages', event => this.handleUsers(event.messages.map(message => message.user)));
18
+ tracker.client.on('NewMessage', event => this.handleUsers([event.message.user]));
19
+ tracker.client.on('Session', event => this.handleSession(event));
20
+ }
21
+
22
+ /**
23
+ * Get all available (cached) user objects at once.
24
+ */
25
+ public async getAvailable(): Promise<ObservableIndexedObjectCollection<User>> {
26
+ return this.users;
27
+ }
28
+
29
+ private handleMembers(members: (RoomMember | SpaceMember)[]): void {
30
+ this.users.set(...members.map(extractUserFromMember));
31
+ }
32
+
33
+ private handleUsers(users: User[]): void {
34
+ this.users.set(...users);
35
+ }
36
+
37
+ private handleSession(session: Session): void {
38
+ this.users.deleteAll();
39
+ this.users.set(session.user);
40
+ }
41
+ }
@@ -107,6 +107,10 @@ import {BanObject} from "./schemes/BanObject";
107
107
  import {Bans} from "./schemes/events/Bans";
108
108
  import {Kick} from "./schemes/commands/Kick";
109
109
  import {LeaveReason} from "./schemes/LeaveReason";
110
+ import {GetClientData} from "./schemes/commands/GetClientData";
111
+ import {SetClientData} from "./schemes/commands/SetClientData";
112
+ import {ClientData} from "./schemes/events/ClientData";
113
+ import {RoomStream, RoomStreamType} from "./schemes/RoomStream";
110
114
 
111
115
  export {
112
116
  // objects
@@ -133,6 +137,8 @@ export {
133
137
  PermissionOverwritesTarget,
134
138
  BanObject,
135
139
  LeaveReason,
140
+ RoomStream,
141
+ RoomStreamType,
136
142
  // events
137
143
  Bye,
138
144
  Error,
@@ -179,6 +185,7 @@ export {
179
185
  EmoticonDeleted,
180
186
  NewEmoticon,
181
187
  Bans,
188
+ ClientData,
182
189
  // commands
183
190
  AssignRole,
184
191
  GetMessages,
@@ -225,4 +232,6 @@ export {
225
232
  Unban,
226
233
  GetBans,
227
234
  Kick,
235
+ GetClientData,
236
+ SetClientData,
228
237
  };
@@ -1,5 +1,6 @@
1
1
  import {Topic} from "./Topic";
2
2
  import {User} from "./User";
3
+ import {RoomStream} from "./RoomStream";
3
4
 
4
5
  export type RoomType = 'Text' | 'ClassicText' | 'Pm';
5
6
 
@@ -16,4 +17,5 @@ export interface Room {
16
17
  defaultTopic: Topic | null;
17
18
  recipients: User[] | null;
18
19
  flags: number;
20
+ stream: RoomStream | null;
19
21
  }
@@ -0,0 +1,6 @@
1
+ export type RoomStreamType = 'Direct' | 'Shoutcast';
2
+
3
+ export interface RoomStream {
4
+ type: RoomStreamType;
5
+ url: string;
6
+ }
@@ -0,0 +1,3 @@
1
+ export interface GetClientData {
2
+
3
+ }
@@ -0,0 +1 @@
1
+ export type SetClientData = Record<string, any>;
@@ -1,6 +1,9 @@
1
+ import {RoomStream} from "../RoomStream";
2
+
1
3
  export interface UpdateRoom {
2
4
  id: string;
3
5
  name?: string;
4
6
  description?: string;
5
7
  flags?: number;
8
+ stream?: RoomStream | null;
6
9
  }
@@ -0,0 +1 @@
1
+ export type ClientData = Record<string, any>;
@@ -1,15 +0,0 @@
1
- import { ChatStateTracker } from "./ChatStateTracker";
2
- import { IndexedObjectCollection } from "../IndexedObjectCollection";
3
- import { Room, RoomSummary, User } from "../types/src";
4
- export declare class Utils {
5
- private tracker;
6
- constructor(tracker: ChatStateTracker);
7
- /**
8
- * Collect all room summaries and rooms you joined in one collection.
9
- */
10
- collectAllAvailableRooms(): Promise<IndexedObjectCollection<Room | RoomSummary>>;
11
- /**
12
- * Collect all users from all spaces and rooms you are in.
13
- */
14
- collectAllAvailableUsers(): Promise<IndexedObjectCollection<User>>;
15
- }
@@ -1,40 +0,0 @@
1
- import {ChatStateTracker} from "./ChatStateTracker";
2
- import {IndexedObjectCollection} from "../IndexedObjectCollection";
3
- import {Room, RoomSummary, User} from "../types/src";
4
- import {extractUserFromMember} from "./functions";
5
-
6
- export class Utils {
7
- public constructor(private tracker: ChatStateTracker) {}
8
-
9
- /**
10
- * Collect all room summaries and rooms you joined in one collection.
11
- */
12
- public async collectAllAvailableRooms(): Promise<IndexedObjectCollection<Room | RoomSummary>> {
13
- const result = new IndexedObjectCollection<Room | RoomSummary>('id');
14
- const spaces = await this.tracker.spaces.get();
15
- const collections = await Promise.all([
16
- ...spaces.items.map(space => this.tracker.spaces.getRooms(space.id)),
17
- this.tracker.rooms.get(),
18
- ]);
19
-
20
- collections.forEach(collection => result.set(...collection.items));
21
-
22
- return result;
23
- }
24
-
25
- /**
26
- * Collect all users from all spaces and rooms you are in.
27
- */
28
- public async collectAllAvailableUsers(): Promise<IndexedObjectCollection<User>> {
29
- const result = new IndexedObjectCollection<User>('id');
30
- const [spaces, rooms] = await Promise.all([this.tracker.spaces.get(), this.tracker.rooms.get()]);
31
- const collections = await Promise.all([
32
- ...spaces.items.map(space => this.tracker.spaces.getMembers(space.id)),
33
- ...rooms.items.map(room => this.tracker.rooms.getMembers(room.id)),
34
- ]);
35
-
36
- collections.forEach(collection => result.set(...collection.items.map(extractUserFromMember)));
37
-
38
- return result;
39
- }
40
- }