polfan-server-js-client 0.2.3 → 0.2.7

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 (93) hide show
  1. package/.idea/copilot.data.migration.agent.xml +6 -0
  2. package/.idea/copilot.data.migration.ask.xml +6 -0
  3. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  4. package/.idea/copilot.data.migration.edit.xml +6 -0
  5. package/.idea/workspace.xml +401 -177
  6. package/README.md +22 -2
  7. package/babel.config.js +4 -5
  8. package/build/index.cjs.js +4595 -1816
  9. package/build/index.cjs.js.map +1 -1
  10. package/build/index.umd.js +1 -1
  11. package/build/index.umd.js.map +1 -1
  12. package/build/types/AbstractChatClient.d.ts +14 -2
  13. package/build/types/FilesClient.d.ts +7 -6
  14. package/build/types/IndexedObjectCollection.d.ts +4 -3
  15. package/build/types/Permissions.d.ts +4 -0
  16. package/build/types/WebSocketChatClient.d.ts +23 -0
  17. package/build/types/state-tracker/ChatStateTracker.d.ts +5 -0
  18. package/build/types/state-tracker/RelationshipsManager.d.ts +15 -0
  19. package/build/types/state-tracker/RoomMessagesHistory.d.ts +2 -0
  20. package/build/types/state-tracker/SpacesManager.d.ts +1 -0
  21. package/build/types/state-tracker/TopicHistoryWindow.d.ts +23 -6
  22. package/build/types/state-tracker/UsersManager.d.ts +3 -1
  23. package/build/types/types/src/index.d.ts +14 -3
  24. package/build/types/types/src/schemes/Emoticon.d.ts +1 -0
  25. package/build/types/types/src/schemes/Message.d.ts +1 -1
  26. package/build/types/types/src/schemes/Room.d.ts +2 -0
  27. package/build/types/types/src/schemes/RoomHistory.d.ts +5 -0
  28. package/build/types/types/src/schemes/RoomMember.d.ts +3 -0
  29. package/build/types/types/src/schemes/RoomSummary.d.ts +1 -0
  30. package/build/types/types/src/schemes/SpaceSummary.d.ts +1 -0
  31. package/build/types/types/src/schemes/User.d.ts +2 -2
  32. package/build/types/types/src/schemes/UserRelationship.d.ts +6 -0
  33. package/build/types/types/src/schemes/commands/CreateMessage.d.ts +2 -0
  34. package/build/types/types/src/schemes/commands/CreateRelationship.d.ts +5 -0
  35. package/build/types/types/src/schemes/commands/CreateTopic.d.ts +5 -2
  36. package/build/types/types/src/schemes/commands/DeleteRelationship.d.ts +5 -0
  37. package/build/types/types/src/schemes/commands/GetRelationships.d.ts +2 -0
  38. package/build/types/types/src/schemes/commands/Ping.d.ts +2 -0
  39. package/build/types/types/src/schemes/commands/UpdateRoom.d.ts +2 -0
  40. package/build/types/types/src/schemes/commands/UpdateRoomMember.d.ts +7 -0
  41. package/build/types/types/src/schemes/commands/UpdateSpaceMember.d.ts +5 -0
  42. package/build/types/types/src/schemes/events/NewRelationship.d.ts +4 -0
  43. package/build/types/types/src/schemes/events/Pong.d.ts +2 -0
  44. package/build/types/types/src/schemes/events/RelationshipDeleted.d.ts +4 -0
  45. package/build/types/types/src/schemes/events/Relationships.d.ts +4 -0
  46. package/build/types/types/src/schemes/events/RoomSummaryUpdated.d.ts +7 -0
  47. package/build/types/types/src/schemes/events/Session.d.ts +1 -0
  48. package/package.json +15 -28
  49. package/src/AbstractChatClient.ts +30 -4
  50. package/src/FilesClient.ts +26 -13
  51. package/src/IndexedObjectCollection.ts +26 -10
  52. package/src/Permissions.ts +1 -0
  53. package/src/WebSocketChatClient.ts +92 -14
  54. package/src/state-tracker/ChatStateTracker.ts +22 -6
  55. package/src/state-tracker/EmoticonsManager.ts +6 -4
  56. package/src/state-tracker/MessagesManager.ts +3 -4
  57. package/src/state-tracker/RelationshipsManager.ts +68 -0
  58. package/src/state-tracker/RoomMessagesHistory.ts +20 -3
  59. package/src/state-tracker/RoomsManager.ts +38 -8
  60. package/src/state-tracker/SpacesManager.ts +28 -1
  61. package/src/state-tracker/TopicHistoryWindow.ts +92 -32
  62. package/src/state-tracker/UsersManager.ts +16 -6
  63. package/src/types/src/index.ts +30 -5
  64. package/src/types/src/schemes/Emoticon.ts +1 -0
  65. package/src/types/src/schemes/Message.ts +1 -1
  66. package/src/types/src/schemes/Room.ts +2 -0
  67. package/src/types/src/schemes/RoomHistory.ts +6 -0
  68. package/src/types/src/schemes/RoomMember.ts +3 -0
  69. package/src/types/src/schemes/RoomSummary.ts +1 -0
  70. package/src/types/src/schemes/SpaceSummary.ts +1 -0
  71. package/src/types/src/schemes/User.ts +2 -2
  72. package/src/types/src/schemes/UserRelationship.ts +8 -0
  73. package/src/types/src/schemes/commands/CreateMessage.ts +2 -0
  74. package/src/types/src/schemes/commands/CreateRelationship.ts +6 -0
  75. package/src/types/src/schemes/commands/CreateTopic.ts +6 -2
  76. package/src/types/src/schemes/commands/DeleteRelationship.ts +6 -0
  77. package/src/types/src/schemes/commands/GetRelationships.ts +3 -0
  78. package/src/types/src/schemes/commands/Ping.ts +3 -0
  79. package/src/types/src/schemes/commands/UpdateRoom.ts +2 -0
  80. package/src/types/src/schemes/commands/UpdateRoomMember.ts +7 -0
  81. package/src/types/src/schemes/commands/UpdateSpaceMember.ts +5 -0
  82. package/src/types/src/schemes/events/NewRelationship.ts +5 -0
  83. package/src/types/src/schemes/events/Pong.ts +3 -0
  84. package/src/types/src/schemes/events/RelationshipDeleted.ts +5 -0
  85. package/src/types/src/schemes/events/Relationships.ts +5 -0
  86. package/src/types/src/schemes/events/RoomSummaryUpdated.ts +8 -0
  87. package/src/types/src/schemes/events/Session.ts +1 -0
  88. package/tests/history-window.test.ts +6 -1
  89. package/webpack.config.browser.js +2 -24
  90. package/webpack.config.node.js +2 -14
  91. package/.eslintignore +0 -0
  92. package/.eslintrc.json +0 -0
  93. package/src/types/src/schemes/commands/SetCustomNick.ts +0 -5
@@ -1,5 +1,7 @@
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 } 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, UpdateSpaceMember, Relationships, RelationshipDeleted, NewRelationship, DeleteRelationship, CreateRelationship, RoomSummaryUpdated, Pong, Ping } from "./types/src/index";
2
2
  import { EventTarget } from "./EventTarget";
3
+ import { GetRelationships } from "./types/src/schemes/commands/GetRelationships";
4
+ import { UpdateRoomMember } from "./types/src/schemes/commands/UpdateRoomMember";
3
5
  type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
4
6
  export declare abstract class AbstractChatClient extends EventTarget {
5
7
  protected awaitingResponse: Map<string, ArrayOfPromiseResolvers>;
@@ -34,6 +36,10 @@ export type EventsMap = {
34
36
  Emoticons: Emoticons;
35
37
  Bans: Bans;
36
38
  ClientData: ClientData;
39
+ NewRelationship: NewRelationship;
40
+ RelationshipDeleted: RelationshipDeleted;
41
+ Relationships: Relationships;
42
+ Pong: Pong;
37
43
  DiscoverableSpaces: DiscoverableSpaces;
38
44
  SpaceJoined: SpaceJoined;
39
45
  SpaceLeft: SpaceLeft;
@@ -58,6 +64,7 @@ export type EventsMap = {
58
64
  RoomDeleted: RoomDeleted;
59
65
  RoomUpdated: RoomUpdated;
60
66
  RoomSummaryEvent: RoomSummaryEvent;
67
+ RoomSummaryUpdated: RoomSummaryUpdated;
61
68
  NewTopic: NewTopic;
62
69
  TopicDeleted: TopicDeleted;
63
70
  NewMessage: NewMessage;
@@ -91,6 +98,10 @@ export type CommandsMap = {
91
98
  Kick: [Kick, EventsMap['Ok']];
92
99
  GetClientData: [GetClientData, EventsMap['ClientData']];
93
100
  SetClientData: [SetClientData, EventsMap['Ok']];
101
+ DeleteRelationship: [DeleteRelationship, EventsMap['RelationshipDeleted']];
102
+ CreateRelationship: [CreateRelationship, EventsMap['NewRelationship']];
103
+ GetRelationships: [GetRelationships, EventsMap['Relationships']];
104
+ Ping: [Ping, EventsMap['Pong']];
94
105
  GetDiscoverableSpaces: [GetDiscoverableSpaces, EventsMap['DiscoverableSpaces']];
95
106
  JoinSpace: [JoinSpace, EventsMap['SpaceJoined']];
96
107
  LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']];
@@ -105,7 +116,7 @@ export type CommandsMap = {
105
116
  AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']];
106
117
  DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']];
107
118
  GetSpaceSummary: [GetSpaceSummary, EventsMap['SpaceSummaryEvent']];
108
- SetCustomNick: [SetCustomNick, EventsMap['SpaceMemberUpdated']];
119
+ UpdateSpaceMember: [UpdateSpaceMember, EventsMap['SpaceMemberUpdated']];
109
120
  JoinRoom: [JoinRoom, EventsMap['RoomJoined']];
110
121
  LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']];
111
122
  CreateRoom: [CreateRoom, EventsMap['RoomJoined']];
@@ -113,6 +124,7 @@ export type CommandsMap = {
113
124
  UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']];
114
125
  GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']];
115
126
  GetRoomSummary: [GetRoomSummary, EventsMap['RoomSummaryEvent']];
127
+ UpdateRoomMember: [UpdateRoomMember, EventsMap['RoomMemberUpdated']];
116
128
  CreateTopic: [CreateTopic, EventsMap['NewTopic']];
117
129
  DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']];
118
130
  CreateMessage: [CreateMessage, EventsMap['NewMessage']];
@@ -2,14 +2,15 @@ import { AbstractRestClient, RestClientResponse } from "./AbstractRestClient";
2
2
  export interface File {
3
3
  id: string;
4
4
  url: string;
5
- original_url: string;
6
- original_name: string;
7
- mime_type: string;
5
+ name: string;
6
+ mime: string;
8
7
  size: number;
9
- image_dimensions: [number, number] | null;
8
+ width?: number;
9
+ height?: number;
10
10
  }
11
11
  export declare class FilesClient extends AbstractRestClient {
12
12
  protected defaultUrl: string;
13
- uploadFile(file: Parameters<typeof FormData.prototype.append>[1]): Promise<RestClientResponse<File>>;
14
- getFileMetadata(id: string): Promise<RestClientResponse<File>>;
13
+ uploadFile(file: globalThis.File | Blob): Promise<RestClientResponse<File>>;
14
+ getFileMeta(id: string): Promise<RestClientResponse<File>>;
15
+ getFileMetaBulk(ids: string[]): Promise<RestClientResponse<File[]>>;
15
16
  }
@@ -1,9 +1,7 @@
1
1
  import { EventTarget, ObservableInterface } from "./EventTarget";
2
2
  export declare class IndexedCollection<KeyT, ValueT> {
3
3
  protected _items: Map<KeyT, ValueT>;
4
- protected _mutationCounter: number;
5
4
  constructor(items?: [key: KeyT, value: ValueT][]);
6
- get mutationCounter(): number;
7
5
  get items(): Map<KeyT, ValueT>;
8
6
  get length(): number;
9
7
  set(...items: [KeyT, ValueT][]): void;
@@ -12,6 +10,7 @@ export declare class IndexedCollection<KeyT, ValueT> {
12
10
  delete(...ids: KeyT[]): void;
13
11
  deleteAll(): void;
14
12
  findBy(field: keyof ValueT, valueToFind: any, limit?: number): IndexedCollection<KeyT, ValueT>;
13
+ createMirror(): IndexedCollection<KeyT, ValueT>;
15
14
  }
16
15
  export declare class IndexedObjectCollection<T> {
17
16
  readonly id: keyof T | ((item: T) => any);
@@ -19,7 +18,6 @@ export declare class IndexedObjectCollection<T> {
19
18
  constructor(id: keyof T | ((item: T) => any), items?: T[]);
20
19
  get items(): T[];
21
20
  get length(): number;
22
- get mutationCounter(): number;
23
21
  set(...items: T[]): void;
24
22
  get(id: any): T | undefined;
25
23
  getAt(index: number): T | undefined;
@@ -27,6 +25,7 @@ export declare class IndexedObjectCollection<T> {
27
25
  delete(...ids: any[]): void;
28
26
  deleteAll(): void;
29
27
  findBy(field: keyof T, valueToFind: any, limit?: number): IndexedObjectCollection<T>;
28
+ createMirror(): IndexedObjectCollection<T>;
30
29
  protected getId(item: T): any;
31
30
  }
32
31
  interface ObservableCollectionEvent<KeyT> {
@@ -39,6 +38,7 @@ export declare class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCo
39
38
  set(...items: [KeyT, ValueT][]): void;
40
39
  delete(...ids: KeyT[]): void;
41
40
  deleteAll(): void;
41
+ createMirror(): ObservableIndexedCollection<KeyT, ValueT>;
42
42
  on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this;
43
43
  once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this;
44
44
  off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this;
@@ -50,6 +50,7 @@ export declare class ObservableIndexedObjectCollection<T> extends IndexedObjectC
50
50
  set(...items: T[]): void;
51
51
  delete(...ids: string[]): void;
52
52
  deleteAll(): void;
53
+ createMirror(): IndexedObjectCollection<T>;
53
54
  on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this;
54
55
  once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this;
55
56
  off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this;
@@ -82,6 +82,10 @@ export declare class Permissions {
82
82
  value: number;
83
83
  maxLayer: Layer;
84
84
  };
85
+ ChangeOwnColor: {
86
+ value: number;
87
+ maxLayer: Layer;
88
+ };
85
89
  };
86
90
  static getNames(): (keyof typeof this.list)[];
87
91
  static getByName(name: keyof typeof this.list): PermissionDefinition | undefined;
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import { ObservableInterface } from "./EventTarget";
2
3
  import { AbstractChatClient, CommandResult, CommandsMap } from "./AbstractChatClient";
3
4
  import { ChatStateTracker } from "./state-tracker/ChatStateTracker";
@@ -9,6 +10,20 @@ export interface WebSocketClientOptions {
9
10
  awaitQueueSendDelayMs?: number;
10
11
  stateTracking?: boolean;
11
12
  queryParams?: Record<string, string>;
13
+ /**
14
+ * Ping/pong configuration, enabled by default.
15
+ */
16
+ ping?: {
17
+ enabled?: boolean;
18
+ /**
19
+ * Time without activity after which a ping will be sent. Default is 10 seconds.
20
+ */
21
+ noActivityTimeoutMs?: number;
22
+ /**
23
+ * Time to wait for a pong response before considering the connection dead. Default is 2 seconds.
24
+ */
25
+ pongBackTimeoutMs?: number;
26
+ };
12
27
  }
13
28
  declare enum WebSocketChatClientEvent {
14
29
  connect = "connect",
@@ -25,14 +40,22 @@ export declare class WebSocketChatClient extends AbstractChatClient implements O
25
40
  protected connectingTimeoutId: any;
26
41
  protected authenticated: boolean;
27
42
  protected authenticatedResolvers: [() => void, (error: Error) => void];
43
+ protected pingIntervalId?: NodeJS.Timeout;
44
+ protected lastReceivedMessageAt?: number;
45
+ protected pingInFlight: boolean;
28
46
  constructor(options: WebSocketClientOptions);
29
47
  connect(): Promise<void>;
30
48
  disconnect(): void;
31
49
  send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
50
+ get isReady(): boolean;
32
51
  private sendEnvelope;
33
52
  private onMessage;
34
53
  private onClose;
35
54
  private sendFromQueue;
36
55
  private triggerConnectionTimeout;
56
+ private isConnectingWsState;
57
+ private isOpenWsState;
58
+ private startConnectionMonitor;
59
+ private stopConnectionMonitor;
37
60
  }
38
61
  export {};
@@ -5,6 +5,7 @@ import { SpacesManager } from "./SpacesManager";
5
5
  import { PermissionsManager } from "./PermissionsManager";
6
6
  import { EmoticonsManager } from "./EmoticonsManager";
7
7
  import { UsersManager } from "./UsersManager";
8
+ import { RelationshipsManager } from "./RelationshipsManager";
8
9
  export declare class ChatStateTracker {
9
10
  readonly client: WebSocketChatClient;
10
11
  /**
@@ -27,6 +28,10 @@ export declare class ChatStateTracker {
27
28
  * Users related state.
28
29
  */
29
30
  readonly users: UsersManager;
31
+ /**
32
+ * State of relationships with other users.
33
+ */
34
+ readonly relationships: RelationshipsManager;
30
35
  private _me;
31
36
  private readonly deferredSession;
32
37
  constructor(client: WebSocketChatClient);
@@ -0,0 +1,15 @@
1
+ import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
2
+ import { UserRelationship, UserRelationshipType } from "../types/src";
3
+ import { ChatStateTracker } from "./ChatStateTracker";
4
+ export declare class RelationshipsManager {
5
+ private tracker;
6
+ private relationships;
7
+ private promises;
8
+ constructor(tracker: ChatStateTracker);
9
+ get(): Promise<ObservableIndexedObjectCollection<UserRelationship>>;
10
+ exists(refUserId: string, type: UserRelationshipType): Promise<boolean>;
11
+ private handleRelationships;
12
+ private handleNewRelationship;
13
+ private handleRelationshipDeleted;
14
+ private handleSession;
15
+ }
@@ -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
  }
@@ -45,6 +45,7 @@ export declare class SpacesManager {
45
45
  private handleSpaceMemberLeft;
46
46
  private handleSpaceMembers;
47
47
  private handleSpaceRooms;
48
+ private handleRoomSummaryUpdated;
48
49
  private handleSpaceMemberUpdated;
49
50
  private handleRoleUpdated;
50
51
  private handleSession;
@@ -26,16 +26,25 @@ export declare abstract class TraversableRemoteCollection<T> extends ObservableI
26
26
  * Current mode od collection window. To change mode, call one of available fetch methods.
27
27
  */
28
28
  get state(): WindowState;
29
+ protected internalState: {
30
+ current: WindowState;
31
+ ongoing?: WindowState;
32
+ limit: number | null;
33
+ oldestId: string | null;
34
+ };
29
35
  /**
30
36
  * Maximum numer of items stored in window.
31
37
  * Null for unlimited.
32
38
  */
33
- limit: number | null;
34
- private currentState;
35
- private fetchingState;
36
- oldestId: string;
39
+ get limit(): number | null;
40
+ /**
41
+ * Maximum numer of items stored in window.
42
+ * Null for unlimited.
43
+ */
44
+ set limit(value: number | null);
37
45
  get hasLatest(): boolean;
38
46
  get hasOldest(): boolean;
47
+ abstract createMirror(): TraversableRemoteCollection<T>;
39
48
  resetToLatest(): Promise<void>;
40
49
  fetchPrevious(): Promise<void>;
41
50
  fetchNext(): Promise<void>;
@@ -58,14 +67,22 @@ export declare class TopicHistoryWindow extends TraversableRemoteCollection<Mess
58
67
  * Reexported available window modes enum.
59
68
  */
60
69
  readonly WindowState: typeof WindowState;
61
- constructor(roomId: string, topicId: string, tracker: ChatStateTracker);
70
+ protected internalState: typeof TraversableRemoteCollection<Message>['prototype']['internalState'] & {
71
+ traverseLock: boolean;
72
+ };
73
+ constructor(roomId: string, topicId: string, tracker: ChatStateTracker, bindEvents?: boolean);
74
+ createMirror(): TopicHistoryWindow;
75
+ get isTraverseLocked(): boolean;
76
+ setTraverseLock(lock: boolean): Promise<void>;
77
+ resetToLatest(): Promise<void>;
78
+ fetchNext(): Promise<void>;
79
+ fetchPrevious(): Promise<void>;
62
80
  /**
63
81
  * For internal use.
64
82
  * @internal
65
83
  */
66
84
  _updateMessageReference(refTopic: Topic): void;
67
85
  private handleNewMessage;
68
- private handleSession;
69
86
  protected fetchItemsAfter(): Promise<Message[] | null>;
70
87
  protected fetchItemsBefore(): Promise<Message[] | null>;
71
88
  protected fetchLatestItems(): Promise<Message[]>;
@@ -1,8 +1,10 @@
1
1
  import { ChatStateTracker } from "./ChatStateTracker";
2
2
  import { ObservableIndexedObjectCollection } from "../IndexedObjectCollection";
3
3
  import { User } from "../types/src";
4
+ import { EventTarget } from "../EventTarget";
4
5
  export declare class UsersManager {
5
6
  private tracker;
7
+ readonly onlineStatus: EventTarget<any>;
6
8
  private readonly users;
7
9
  constructor(tracker: ChatStateTracker);
8
10
  /**
@@ -10,6 +12,6 @@ export declare class UsersManager {
10
12
  */
11
13
  getAvailable(): Promise<ObservableIndexedObjectCollection<User>>;
12
14
  private handleMembers;
13
- private handleUsers;
14
15
  private handleSession;
16
+ private handleUsers;
15
17
  }
@@ -57,7 +57,7 @@ import { LeaveRoom } from "./schemes/commands/LeaveRoom";
57
57
  import { CreateRoom } from "./schemes/commands/CreateRoom";
58
58
  import { DeleteRoom } from "./schemes/commands/DeleteRoom";
59
59
  import { GetRoomMembers } from "./schemes/commands/GetRoomMembers";
60
- import { CreateTopic } from "./schemes/commands/CreateTopic";
60
+ import { CreateTopic, CreateTopicInitialMessage } from "./schemes/commands/CreateTopic";
61
61
  import { DeleteTopic } from "./schemes/commands/DeleteTopic";
62
62
  import { CreateMessage } from "./schemes/commands/CreateMessage";
63
63
  import { UpdateRole } from "./schemes/commands/UpdateRole";
@@ -111,10 +111,21 @@ import { GetClientData } from "./schemes/commands/GetClientData";
111
111
  import { SetClientData } from "./schemes/commands/SetClientData";
112
112
  import { ClientData } from "./schemes/events/ClientData";
113
113
  import { RoomStream, RoomStreamType } from "./schemes/RoomStream";
114
+ import { RoomHistory, RoomHistoryMode } from "./schemes/RoomHistory";
114
115
  import { GetRoomSummary } from "./schemes/commands/GetRoomSummary";
115
116
  import { GetSpaceSummary } from "./schemes/commands/GetSpaceSummary";
116
117
  import { SpaceFlag } from "./schemes/Space";
117
118
  import { SpaceSummary as SpaceSummaryEvent } from "./schemes/events/SpaceSummary";
118
119
  import { RoomSummary as RoomSummaryEvent } from "./schemes/events/RoomSummary";
119
- import { SetCustomNick } from "./schemes/commands/SetCustomNick";
120
- export { Envelope, Message, MessageType, MessageAuthor, Role, Room, RoomFlag, RoomType, RoomMember, RoomSummary, RoomSummaryExtras, Space, SpaceFlag, 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, SpaceSummaryEvent, RoomSummaryEvent, 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, };
120
+ import { UpdateSpaceMember } from "./schemes/commands/UpdateSpaceMember";
121
+ import { NewRelationship } from "./schemes/events/NewRelationship";
122
+ import { RelationshipDeleted } from "./schemes/events/RelationshipDeleted";
123
+ import { UserRelationship, UserRelationshipType } from "./schemes/UserRelationship";
124
+ import { DeleteRelationship } from "./schemes/commands/DeleteRelationship";
125
+ import { Relationships } from "./schemes/events/Relationships";
126
+ import { CreateRelationship } from "./schemes/commands/CreateRelationship";
127
+ import { RoomSummaryUpdated } from "./schemes/events/RoomSummaryUpdated";
128
+ import { UpdateRoomMember } from "./schemes/commands/UpdateRoomMember";
129
+ import { Ping } from "./schemes/commands/Ping";
130
+ import { Pong } from "./schemes/events/Pong";
131
+ 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, Pong, 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, UpdateSpaceMember, CreateRelationship, DeleteRelationship, UpdateRoomMember, Ping, };
@@ -5,4 +5,5 @@ export interface Emoticon {
5
5
  name: string;
6
6
  fileId: string;
7
7
  user: User;
8
+ tag?: string;
8
9
  }
@@ -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';
3
+ export type MessageType = 'Text' | 'RoomJoin' | '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 { Topic } from "./Topic";
2
2
  import { User } from "./User";
3
3
  import { RoomStream } from "./RoomStream";
4
+ import { RoomHistory } from "./RoomHistory";
4
5
  export type RoomType = 'Text' | 'ClassicText' | 'Pm';
5
6
  export declare enum RoomFlag {
6
7
  AllowSystemMessages = 1,
@@ -16,4 +17,5 @@ export interface Room {
16
17
  recipients: User[] | null;
17
18
  flags: number;
18
19
  stream: RoomStream | null;
20
+ history: RoomHistory | null;
19
21
  }
@@ -0,0 +1,5 @@
1
+ export type RoomHistoryMode = 'Full' | 'Ephemeral' | 'MaxAge';
2
+ export interface RoomHistory {
3
+ mode: RoomHistoryMode;
4
+ maxAge?: number;
5
+ }
@@ -4,4 +4,7 @@ export interface RoomMember {
4
4
  user: User | null;
5
5
  spaceMember: SpaceMember | null;
6
6
  roles: string[] | null;
7
+ customNick: string | null;
8
+ customColor: string | null;
9
+ extras: string;
7
10
  }
@@ -6,6 +6,7 @@ export interface RoomSummary {
6
6
  id: string;
7
7
  name: string;
8
8
  description: string;
9
+ memberCount: number;
9
10
  type: RoomType;
10
11
  extras?: RoomSummaryExtras;
11
12
  }
@@ -4,4 +4,5 @@ export interface SpaceSummary {
4
4
  description: string;
5
5
  icon?: string;
6
6
  banner?: string;
7
+ memberCount: number;
7
8
  }
@@ -1,8 +1,8 @@
1
- export type UserFlag = 'bot' | 'temp';
1
+ export type UserTags = 'bot' | 'temp' | string;
2
2
  export interface User {
3
3
  id: string;
4
4
  nick: string;
5
5
  avatar: string;
6
- flags: UserFlag[];
6
+ tags: UserTags[];
7
7
  online: boolean;
8
8
  }
@@ -0,0 +1,6 @@
1
+ import { User } from "./User";
2
+ export type UserRelationshipType = 'Ignore';
3
+ export interface UserRelationship {
4
+ refUser: User;
5
+ type: UserRelationshipType;
6
+ }
@@ -3,4 +3,6 @@ export interface CreateMessage {
3
3
  location: ChatLocation;
4
4
  content: string;
5
5
  attachments?: string[];
6
+ customNick?: string;
7
+ customColor?: string;
6
8
  }
@@ -0,0 +1,5 @@
1
+ import { UserRelationshipType } from "../UserRelationship";
2
+ export interface CreateRelationship {
3
+ refUserId: string;
4
+ type: UserRelationshipType;
5
+ }
@@ -1,8 +1,11 @@
1
1
  import { ChatLocation } from "../ChatLocation";
2
- import { CreateMessage } from "./CreateMessage";
2
+ export interface CreateTopicInitialMessage {
3
+ content?: string;
4
+ attachments?: string[];
5
+ }
3
6
  export interface CreateTopic {
4
7
  location: ChatLocation;
5
8
  name: string;
6
9
  refMessageId?: string;
7
- initialMessage?: Omit<CreateMessage, 'location'>;
10
+ initialMessage?: CreateTopicInitialMessage;
8
11
  }
@@ -0,0 +1,5 @@
1
+ import { UserRelationshipType } from "../UserRelationship";
2
+ export interface DeleteRelationship {
3
+ refUserId: string;
4
+ type: UserRelationshipType;
5
+ }
@@ -0,0 +1,2 @@
1
+ export interface GetRelationships {
2
+ }
@@ -0,0 +1,2 @@
1
+ export interface Ping {
2
+ }
@@ -1,8 +1,10 @@
1
1
  import { RoomStream } from "../RoomStream";
2
+ import { RoomHistory } from "../RoomHistory";
2
3
  export interface UpdateRoom {
3
4
  id: string;
4
5
  name?: string;
5
6
  description?: string;
6
7
  flags?: number;
7
8
  stream?: RoomStream | null;
9
+ history?: RoomHistory;
8
10
  }
@@ -0,0 +1,7 @@
1
+ export interface UpdateRoomMember {
2
+ roomId: string;
3
+ userId: string;
4
+ customNick?: string | null;
5
+ customColor?: string | null;
6
+ extras?: string | null;
7
+ }
@@ -0,0 +1,5 @@
1
+ export interface UpdateSpaceMember {
2
+ spaceId: string;
3
+ userId: string;
4
+ customNick?: string | null;
5
+ }
@@ -0,0 +1,4 @@
1
+ import { UserRelationship } from "../UserRelationship";
2
+ export interface NewRelationship {
3
+ relationship: UserRelationship;
4
+ }
@@ -0,0 +1,2 @@
1
+ export interface Pong {
2
+ }
@@ -0,0 +1,4 @@
1
+ import { UserRelationship } from "../UserRelationship";
2
+ export interface RelationshipDeleted {
3
+ relationship: UserRelationship;
4
+ }
@@ -0,0 +1,4 @@
1
+ import { UserRelationship } from "../UserRelationship";
2
+ export interface Relationships {
3
+ relationships: UserRelationship[];
4
+ }
@@ -0,0 +1,7 @@
1
+ import { RoomSummary } from "../RoomSummary";
2
+ export interface RoomSummaryUpdated {
3
+ /**
4
+ * Partial summary: without the `extras` field.
5
+ */
6
+ summary: RoomSummary;
7
+ }
@@ -2,6 +2,7 @@ import { UserState } from "../UserState";
2
2
  import { User } from "../User";
3
3
  export interface Session {
4
4
  serverVersion: string;
5
+ protoVersion: string;
5
6
  state: UserState;
6
7
  user: User;
7
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.2.3",
3
+ "version": "0.2.7",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -9,13 +9,13 @@
9
9
  "types": "build/types/index.d.ts",
10
10
  "exports": {
11
11
  ".": {
12
+ "types": "./build/types/index.d.ts",
12
13
  "require": "./build/index.cjs.js",
13
14
  "browser": "./build/index.umd.js",
14
15
  "default": "./build/index.cjs.js"
15
16
  }
16
17
  },
17
18
  "scripts": {
18
- "start": "webpack serve --config webpack.config.demo.js",
19
19
  "build": "npm run build:node && npm run build:browser && tsc",
20
20
  "build:node": "webpack --config webpack.config.node.js",
21
21
  "build:browser": "webpack --config webpack.config.browser.js",
@@ -24,33 +24,20 @@
24
24
  "trypublish": "npm publish || true"
25
25
  },
26
26
  "devDependencies": {
27
- "@babel/cli": "^7.20.7",
28
- "@babel/core": "^7.20.12",
29
- "@babel/plugin-proposal-class-properties": "^7.16.0",
30
- "@babel/plugin-transform-typescript": "^7.20.2",
31
- "@babel/polyfill": "^7.12.1",
32
- "@babel/preset-env": "^7.20.2",
33
- "@babel/preset-typescript": "^7.27.1",
34
- "@types/jest": "^29.2.5",
35
- "@typescript-eslint/eslint-plugin": "^4.33.0",
36
- "@typescript-eslint/parser": "^4.33.0",
37
- "babel-eslint": "^10.1.0",
38
- "babel-loader": "^9.1.2",
39
- "babel-preset-minify": "^0.5.2",
40
- "css-loader": "^6.7.3",
41
- "css-minimizer-webpack-plugin": "^4.2.2",
42
- "eslint": "^7.32.0",
27
+ "@babel/cli": "^7.28.3",
28
+ "@babel/core": "^7.28.5",
29
+ "@babel/preset-env": "^7.28.5",
30
+ "@babel/preset-typescript": "^7.28.5",
31
+ "@types/jest": "^29.5.14",
32
+ "babel-loader": "^9.2.1",
43
33
  "file-loader": "^6.2.0",
44
- "html-webpack-plugin": "^5.5.0",
45
- "jest": "^29.3.1",
46
- "mini-css-extract-plugin": "^2.7.2",
47
- "style-loader": "^3.3.1",
48
- "terser-webpack-plugin": "^5.3.5",
34
+ "jest": "^29.7.0",
49
35
  "ts-node": "^10.9.2",
50
- "typescript": "^4.9.4",
51
- "url-loader": "^4.1.1",
52
- "webpack": "^5.75.0",
53
- "webpack-cli": "^5.0.1",
54
- "webpack-dev-server": "4.11.1"
36
+ "typescript": "^4.9.5",
37
+ "webpack": "^5.103.0",
38
+ "webpack-cli": "^5.1.4"
39
+ },
40
+ "dependencies": {
41
+ "terser-webpack-plugin": "^5.3.14"
55
42
  }
56
43
  }