polfan-server-js-client 0.2.49 → 0.2.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +34 -32
- package/build/index.cjs.js +66 -2
- package/build/index.cjs.js.map +1 -1
- package/build/index.umd.js +1 -1
- package/build/index.umd.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +2 -1
- package/build/types/state-tracker/RoomMessagesHistory.d.ts +2 -0
- package/build/types/state-tracker/SpacesManager.d.ts +1 -0
- package/build/types/state-tracker/TopicHistoryWindow.d.ts +6 -0
- package/build/types/types/src/index.d.ts +2 -1
- package/build/types/types/src/schemes/events/RoomSummaryUpdated.d.ts +7 -0
- package/package.json +1 -1
- package/src/AbstractChatClient.ts +17 -2
- package/src/state-tracker/RoomMessagesHistory.ts +20 -3
- package/src/state-tracker/SpacesManager.ts +28 -1
- package/src/state-tracker/TopicHistoryWindow.ts +35 -0
- package/src/types/src/index.ts +2 -0
- package/src/types/src/schemes/events/RoomSummaryUpdated.ts +8 -0
|
@@ -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, ClientData, GetClientData, SetClientData, GetRoomSummary, GetSpaceSummary, RoomSummaryEvent, SpaceSummaryEvent, SetCustomNick, Relationships, RelationshipDeleted, NewRelationship, DeleteRelationship, CreateRelationship } 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, GetRoomSummary, GetSpaceSummary, RoomSummaryEvent, SpaceSummaryEvent, SetCustomNick, Relationships, RelationshipDeleted, NewRelationship, DeleteRelationship, CreateRelationship, RoomSummaryUpdated } from "./types/src/index";
|
|
2
2
|
import { EventTarget } from "./EventTarget";
|
|
3
3
|
import { GetRelationships } from "./types/src/schemes/commands/GetRelationships";
|
|
4
4
|
type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
|
|
@@ -62,6 +62,7 @@ export type EventsMap = {
|
|
|
62
62
|
RoomDeleted: RoomDeleted;
|
|
63
63
|
RoomUpdated: RoomUpdated;
|
|
64
64
|
RoomSummaryEvent: RoomSummaryEvent;
|
|
65
|
+
RoomSummaryUpdated: RoomSummaryUpdated;
|
|
65
66
|
NewTopic: NewTopic;
|
|
66
67
|
TopicDeleted: TopicDeleted;
|
|
67
68
|
NewMessage: NewMessage;
|
|
@@ -5,6 +5,7 @@ export declare class RoomMessagesHistory {
|
|
|
5
5
|
private room;
|
|
6
6
|
private tracker;
|
|
7
7
|
private historyWindows;
|
|
8
|
+
private traverseLock;
|
|
8
9
|
constructor(room: Room, tracker: ChatStateTracker);
|
|
9
10
|
/**
|
|
10
11
|
* Returns a history window object for the given topic ID, allowing you to view message history.
|
|
@@ -14,4 +15,5 @@ export declare class RoomMessagesHistory {
|
|
|
14
15
|
private handleNewTopic;
|
|
15
16
|
private handleTopicDeleted;
|
|
16
17
|
private createHistoryWindowForTopic;
|
|
18
|
+
private updateTraverseLock;
|
|
17
19
|
}
|
|
@@ -58,7 +58,13 @@ export declare class TopicHistoryWindow extends TraversableRemoteCollection<Mess
|
|
|
58
58
|
* Reexported available window modes enum.
|
|
59
59
|
*/
|
|
60
60
|
readonly WindowState: typeof WindowState;
|
|
61
|
+
private traverseLock;
|
|
61
62
|
constructor(roomId: string, topicId: string, tracker: ChatStateTracker);
|
|
63
|
+
get isTraverseLocked(): boolean;
|
|
64
|
+
setTraverseLock(lock: boolean): Promise<void>;
|
|
65
|
+
resetToLatest(): Promise<void>;
|
|
66
|
+
fetchNext(): Promise<void>;
|
|
67
|
+
fetchPrevious(): Promise<void>;
|
|
62
68
|
/**
|
|
63
69
|
* For internal use.
|
|
64
70
|
* @internal
|
|
@@ -124,4 +124,5 @@ import { UserRelationship, UserRelationshipType } from "./schemes/UserRelationsh
|
|
|
124
124
|
import { DeleteRelationship } from "./schemes/commands/DeleteRelationship";
|
|
125
125
|
import { Relationships } from "./schemes/events/Relationships";
|
|
126
126
|
import { CreateRelationship } from "./schemes/commands/CreateRelationship";
|
|
127
|
-
|
|
127
|
+
import { RoomSummaryUpdated } from "./schemes/events/RoomSummaryUpdated";
|
|
128
|
+
export { Envelope, Message, MessageType, MessageAuthor, Role, Room, RoomFlag, RoomType, RoomStream, RoomStreamType, RoomHistory, RoomHistoryMode, RoomMember, RoomSummary, RoomSummaryExtras, Space, SpaceFlag, SpaceMember, Topic, FollowedTopic, User, UserState, PermissionOverwritesValue, ChatLocation, SpaceSummary, SpaceDiscoverable, Emoticon, PermissionOverwritesTarget, BanObject, LeaveReason, UserRelationship, UserRelationshipType, CreateTopicInitialMessage, 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, 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, GetSpaceSummary, GetRoomSummary, SetCustomNick, CreateRelationship, DeleteRelationship };
|
package/package.json
CHANGED
|
@@ -82,12 +82,26 @@ import {
|
|
|
82
82
|
GetEmoticons,
|
|
83
83
|
Emoticons,
|
|
84
84
|
EmoticonDeleted,
|
|
85
|
-
NewEmoticon,
|
|
85
|
+
NewEmoticon,
|
|
86
|
+
Bans,
|
|
87
|
+
GetBans,
|
|
88
|
+
Ban,
|
|
89
|
+
Unban,
|
|
90
|
+
Kick,
|
|
91
|
+
ClientData,
|
|
92
|
+
GetClientData,
|
|
93
|
+
SetClientData,
|
|
86
94
|
GetRoomSummary,
|
|
87
95
|
GetSpaceSummary,
|
|
88
96
|
RoomSummaryEvent,
|
|
89
97
|
SpaceSummaryEvent,
|
|
90
|
-
SetCustomNick,
|
|
98
|
+
SetCustomNick,
|
|
99
|
+
Relationships,
|
|
100
|
+
RelationshipDeleted,
|
|
101
|
+
NewRelationship,
|
|
102
|
+
DeleteRelationship,
|
|
103
|
+
CreateRelationship,
|
|
104
|
+
RoomSummaryUpdated,
|
|
91
105
|
} from "./types/src/index";
|
|
92
106
|
import {EventTarget} from "./EventTarget";
|
|
93
107
|
import {GetRelationships} from "./types/src/schemes/commands/GetRelationships";
|
|
@@ -195,6 +209,7 @@ export type EventsMap = {
|
|
|
195
209
|
RoomDeleted: RoomDeleted,
|
|
196
210
|
RoomUpdated: RoomUpdated,
|
|
197
211
|
RoomSummaryEvent: RoomSummaryEvent,
|
|
212
|
+
RoomSummaryUpdated: RoomSummaryUpdated,
|
|
198
213
|
// Topic events
|
|
199
214
|
NewTopic: NewTopic,
|
|
200
215
|
TopicDeleted: TopicDeleted,
|
|
@@ -5,6 +5,7 @@ import {TopicHistoryWindow} from "./TopicHistoryWindow";
|
|
|
5
5
|
|
|
6
6
|
export class RoomMessagesHistory {
|
|
7
7
|
private historyWindows = new IndexedCollection<string, TopicHistoryWindow>();
|
|
8
|
+
private traverseLock: boolean = false;
|
|
8
9
|
|
|
9
10
|
public constructor(
|
|
10
11
|
private room: Room,
|
|
@@ -14,6 +15,8 @@ export class RoomMessagesHistory {
|
|
|
14
15
|
this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));
|
|
15
16
|
this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));
|
|
16
17
|
|
|
18
|
+
this.updateTraverseLock(this.room);
|
|
19
|
+
|
|
17
20
|
if (this.room.defaultTopic) {
|
|
18
21
|
this.createHistoryWindowForTopic(this.room.defaultTopic);
|
|
19
22
|
}
|
|
@@ -25,7 +28,7 @@ export class RoomMessagesHistory {
|
|
|
25
28
|
public async getMessagesWindow(topicId: string): Promise<TopicHistoryWindow | undefined> {
|
|
26
29
|
let historyWindow = this.historyWindows.get(topicId);
|
|
27
30
|
|
|
28
|
-
if (!
|
|
31
|
+
if (!historyWindow) {
|
|
29
32
|
const topic = (await this.tracker.rooms.getTopics(this.room.id, [topicId])).get(topicId);
|
|
30
33
|
|
|
31
34
|
if (topic) {
|
|
@@ -36,13 +39,19 @@ export class RoomMessagesHistory {
|
|
|
36
39
|
return this.historyWindows.get(topicId);
|
|
37
40
|
}
|
|
38
41
|
|
|
39
|
-
private handleRoomUpdated(ev: RoomUpdated): void {
|
|
42
|
+
private async handleRoomUpdated(ev: RoomUpdated): Promise<void> {
|
|
40
43
|
if (this.room.id === ev.room.id) {
|
|
41
44
|
this.room = ev.room;
|
|
42
45
|
|
|
46
|
+
this.updateTraverseLock(ev.room);
|
|
47
|
+
|
|
43
48
|
if (ev.room.defaultTopic) {
|
|
44
49
|
this.createHistoryWindowForTopic(ev.room.defaultTopic);
|
|
45
50
|
}
|
|
51
|
+
|
|
52
|
+
for (const [, window] of Array.from(this.historyWindows.items)) {
|
|
53
|
+
await window.setTraverseLock(this.traverseLock);
|
|
54
|
+
}
|
|
46
55
|
}
|
|
47
56
|
}
|
|
48
57
|
|
|
@@ -63,7 +72,11 @@ export class RoomMessagesHistory {
|
|
|
63
72
|
return;
|
|
64
73
|
}
|
|
65
74
|
|
|
66
|
-
|
|
75
|
+
const historyWindow = new TopicHistoryWindow(this.room.id, topic.id, this.tracker);
|
|
76
|
+
|
|
77
|
+
historyWindow.setTraverseLock(this.traverseLock);
|
|
78
|
+
|
|
79
|
+
this.historyWindows.set([topic.id, historyWindow]);
|
|
67
80
|
|
|
68
81
|
// If new topic refers to some message from this room, update other structures
|
|
69
82
|
if (topic.refMessage) {
|
|
@@ -71,4 +84,8 @@ export class RoomMessagesHistory {
|
|
|
71
84
|
refHistoryWindow?._updateMessageReference(topic);
|
|
72
85
|
}
|
|
73
86
|
}
|
|
87
|
+
|
|
88
|
+
private updateTraverseLock(room: Room): void {
|
|
89
|
+
this.traverseLock = room.history.mode === 'Ephemeral';
|
|
90
|
+
}
|
|
74
91
|
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
RoleUpdated,
|
|
9
9
|
RoomDeleted,
|
|
10
10
|
RoomSummary,
|
|
11
|
+
RoomSummaryUpdated,
|
|
11
12
|
RoomUpdated,
|
|
12
13
|
Session,
|
|
13
14
|
Space,
|
|
@@ -48,6 +49,7 @@ export class SpacesManager {
|
|
|
48
49
|
this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));
|
|
49
50
|
this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));
|
|
50
51
|
this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));
|
|
52
|
+
this.tracker.client.on('RoomSummaryUpdated', ev => this.handleRoomSummaryUpdated(ev));
|
|
51
53
|
this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));
|
|
52
54
|
this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));
|
|
53
55
|
this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));
|
|
@@ -229,12 +231,37 @@ export class SpacesManager {
|
|
|
229
231
|
}
|
|
230
232
|
|
|
231
233
|
private handleSpaceRooms(ev: SpaceRooms): void {
|
|
232
|
-
if (!
|
|
234
|
+
if (!this.rooms.has(ev.id)) {
|
|
233
235
|
this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);
|
|
234
236
|
ev.summaries.forEach(summary => this.roomIdToSpaceId.set([summary.id, ev.id]));
|
|
235
237
|
}
|
|
236
238
|
}
|
|
237
239
|
|
|
240
|
+
private async handleRoomSummaryUpdated(ev: RoomSummaryUpdated): Promise<void> {
|
|
241
|
+
const spaceId = this.roomIdToSpaceId.get(ev.summary.id);
|
|
242
|
+
const summariesPromise = this.roomsPromises.get(spaceId);
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Update summary only if the list was already loaded.
|
|
246
|
+
* RoomSummaryUpdated event has a partial summary, so we need to update the existing summary by merging it.
|
|
247
|
+
*/
|
|
248
|
+
if (spaceId && summariesPromise) {
|
|
249
|
+
await summariesPromise;
|
|
250
|
+
|
|
251
|
+
const summaries = this.rooms.get(spaceId);
|
|
252
|
+
const oldSummary = summaries.get(ev.summary.id);
|
|
253
|
+
let newSummary: RoomSummary;
|
|
254
|
+
|
|
255
|
+
if (oldSummary) {
|
|
256
|
+
newSummary = {...oldSummary, ...ev.summary};
|
|
257
|
+
} else {
|
|
258
|
+
newSummary = ev.summary;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
summaries.set(newSummary);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
238
265
|
private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {
|
|
239
266
|
if (this.members.has(ev.spaceId)) {
|
|
240
267
|
const members = this.members.get(ev.spaceId);
|
|
@@ -187,6 +187,8 @@ export class TopicHistoryWindow extends TraversableRemoteCollection<Message> {
|
|
|
187
187
|
*/
|
|
188
188
|
public readonly WindowState: typeof WindowState = WindowState;
|
|
189
189
|
|
|
190
|
+
private traverseLock: boolean = false;
|
|
191
|
+
|
|
190
192
|
public constructor(
|
|
191
193
|
private roomId: string,
|
|
192
194
|
private topicId: string,
|
|
@@ -197,6 +199,39 @@ export class TopicHistoryWindow extends TraversableRemoteCollection<Message> {
|
|
|
197
199
|
this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));
|
|
198
200
|
}
|
|
199
201
|
|
|
202
|
+
public get isTraverseLocked(): boolean {
|
|
203
|
+
return this.traverseLock;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
public async setTraverseLock(lock: boolean): Promise<void> {
|
|
207
|
+
this.traverseLock = lock;
|
|
208
|
+
|
|
209
|
+
if (lock && (this.state !== WindowState.LIVE && this.state !== WindowState.LATEST)) {
|
|
210
|
+
await super.resetToLatest();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
public async resetToLatest(): Promise<void> {
|
|
215
|
+
if (this.traverseLock) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
return super.resetToLatest();
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
public async fetchNext(): Promise<void> {
|
|
222
|
+
if (this.traverseLock) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
return super.fetchNext();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public async fetchPrevious(): Promise<void> {
|
|
229
|
+
if (this.traverseLock) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
return super.fetchPrevious();
|
|
233
|
+
}
|
|
234
|
+
|
|
200
235
|
/**
|
|
201
236
|
* For internal use.
|
|
202
237
|
* @internal
|
package/src/types/src/index.ts
CHANGED
|
@@ -124,6 +124,7 @@ import {UserRelationship, UserRelationshipType} from "./schemes/UserRelationship
|
|
|
124
124
|
import {DeleteRelationship} from "./schemes/commands/DeleteRelationship";
|
|
125
125
|
import {Relationships} from "./schemes/events/Relationships";
|
|
126
126
|
import {CreateRelationship} from "./schemes/commands/CreateRelationship";
|
|
127
|
+
import {RoomSummaryUpdated} from "./schemes/events/RoomSummaryUpdated";
|
|
127
128
|
|
|
128
129
|
export {
|
|
129
130
|
// objects
|
|
@@ -212,6 +213,7 @@ export {
|
|
|
212
213
|
NewRelationship,
|
|
213
214
|
RelationshipDeleted,
|
|
214
215
|
Relationships,
|
|
216
|
+
RoomSummaryUpdated,
|
|
215
217
|
// commands
|
|
216
218
|
AssignRole,
|
|
217
219
|
GetMessages,
|