polfan-server-js-client 0.0.96 → 0.1.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.
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/types/AbstractChatClient.d.ts +78 -0
- package/build/types/AbstractRestClient.d.ts +19 -0
- package/build/types/AuthClient.d.ts +16 -0
- package/build/types/ChatStateTracker.d.ts +54 -0
- package/build/types/EventTarget.d.ts +16 -0
- package/build/types/IndexedObjectCollection.d.ts +53 -0
- package/build/types/WebApiChatClient.d.ts +30 -0
- package/build/types/WebSocketChatClient.d.ts +36 -0
- package/build/types/index.d.ts +5 -68
- package/package.json +65 -64
- package/src/AbstractChatClient.ts +174 -0
- package/src/AbstractRestClient.ts +66 -0
- package/src/AuthClient.ts +46 -0
- package/src/ChatStateTracker.ts +326 -0
- package/src/EventTarget.ts +39 -0
- package/src/IndexedObjectCollection.ts +209 -0
- package/src/{connections/WebApiConnection.ts → WebApiChatClient.ts} +94 -81
- package/src/WebSocketChatClient.ts +125 -0
- package/src/index.ts +15 -123
- package/build/types/Client.d.ts +0 -107
- package/build/types/ObservableInterface.d.ts +0 -16
- package/build/types/connections/ConnectionAssets.d.ts +0 -17
- package/build/types/connections/RestApiConnection.d.ts +0 -14
- package/build/types/connections/WebApiConnection.d.ts +0 -21
- package/build/types/connections/WebSocketConnection.d.ts +0 -22
- package/build/types/dtos/Dto.d.ts +0 -16
- package/build/types/dtos/Message.d.ts +0 -9
- package/build/types/dtos/Permission.d.ts +0 -7
- package/build/types/dtos/Role.d.ts +0 -7
- package/build/types/dtos/Room.d.ts +0 -10
- package/build/types/dtos/RoomMember.d.ts +0 -6
- package/build/types/dtos/RoomSummary.d.ts +0 -7
- package/build/types/dtos/Space.d.ts +0 -8
- package/build/types/dtos/SpaceMember.d.ts +0 -7
- package/build/types/dtos/Topic.d.ts +0 -7
- package/build/types/dtos/User.d.ts +0 -9
- package/build/types/dtos/UserState.d.ts +0 -8
- package/build/types/dtos/protocol/Envelope.d.ts +0 -7
- package/build/types/dtos/protocol/commands/AssignRole.d.ts +0 -7
- package/build/types/dtos/protocol/commands/CreateMessage.d.ts +0 -7
- package/build/types/dtos/protocol/commands/CreateRole.d.ts +0 -7
- package/build/types/dtos/protocol/commands/CreateRoom.d.ts +0 -7
- package/build/types/dtos/protocol/commands/CreateSpace.d.ts +0 -5
- package/build/types/dtos/protocol/commands/CreateTopic.d.ts +0 -7
- package/build/types/dtos/protocol/commands/DeassignRole.d.ts +0 -7
- package/build/types/dtos/protocol/commands/DeleteRole.d.ts +0 -6
- package/build/types/dtos/protocol/commands/DeleteRoom.d.ts +0 -5
- package/build/types/dtos/protocol/commands/DeleteSpace.d.ts +0 -5
- package/build/types/dtos/protocol/commands/DeleteTopic.d.ts +0 -5
- package/build/types/dtos/protocol/commands/GetComputedPermissions.d.ts +0 -8
- package/build/types/dtos/protocol/commands/GetRolePermissions.d.ts +0 -8
- package/build/types/dtos/protocol/commands/GetRoomMembers.d.ts +0 -5
- package/build/types/dtos/protocol/commands/GetSession.d.ts +0 -4
- package/build/types/dtos/protocol/commands/GetSpaceMembers.d.ts +0 -5
- package/build/types/dtos/protocol/commands/GetSpaceRooms.d.ts +0 -5
- package/build/types/dtos/protocol/commands/GetUserPermissions.d.ts +0 -8
- package/build/types/dtos/protocol/commands/JoinRoom.d.ts +0 -5
- package/build/types/dtos/protocol/commands/JoinSpace.d.ts +0 -5
- package/build/types/dtos/protocol/commands/LeaveRoom.d.ts +0 -5
- package/build/types/dtos/protocol/commands/LeaveSpace.d.ts +0 -5
- package/build/types/dtos/protocol/commands/SetRolePermissions.d.ts +0 -9
- package/build/types/dtos/protocol/commands/SetUserPermissions.d.ts +0 -9
- package/build/types/dtos/protocol/events/Bye.d.ts +0 -5
- package/build/types/dtos/protocol/events/Error.d.ts +0 -6
- package/build/types/dtos/protocol/events/NewMessage.d.ts +0 -6
- package/build/types/dtos/protocol/events/NewRole.d.ts +0 -7
- package/build/types/dtos/protocol/events/NewRoom.d.ts +0 -7
- package/build/types/dtos/protocol/events/NewTopic.d.ts +0 -7
- package/build/types/dtos/protocol/events/Ok.d.ts +0 -4
- package/build/types/dtos/protocol/events/Permissions.d.ts +0 -6
- package/build/types/dtos/protocol/events/RoleDeleted.d.ts +0 -6
- package/build/types/dtos/protocol/events/RoomDeleted.d.ts +0 -5
- package/build/types/dtos/protocol/events/RoomJoined.d.ts +0 -6
- package/build/types/dtos/protocol/events/RoomLeft.d.ts +0 -5
- package/build/types/dtos/protocol/events/RoomMemberJoined.d.ts +0 -6
- package/build/types/dtos/protocol/events/RoomMemberLeft.d.ts +0 -5
- package/build/types/dtos/protocol/events/RoomMembers.d.ts +0 -6
- package/build/types/dtos/protocol/events/Session.d.ts +0 -9
- package/build/types/dtos/protocol/events/SpaceDeleted.d.ts +0 -5
- package/build/types/dtos/protocol/events/SpaceJoined.d.ts +0 -6
- package/build/types/dtos/protocol/events/SpaceLeft.d.ts +0 -5
- package/build/types/dtos/protocol/events/SpaceMemberJoined.d.ts +0 -6
- package/build/types/dtos/protocol/events/SpaceMemberLeft.d.ts +0 -5
- package/build/types/dtos/protocol/events/SpaceMemberUpdate.d.ts +0 -6
- package/build/types/dtos/protocol/events/SpaceMembers.d.ts +0 -6
- package/build/types/dtos/protocol/events/SpaceRooms.d.ts +0 -6
- package/build/types/dtos/protocol/events/TopicDeleted.d.ts +0 -5
- package/build/types/protocol.d.ts +0 -102
- package/src/Client.ts +0 -267
- package/src/ObservableInterface.ts +0 -39
- package/src/connections/ConnectionAssets.ts +0 -20
- package/src/connections/RestApiConnection.ts +0 -47
- package/src/connections/WebSocketConnection.ts +0 -103
- package/src/dtos/Dto.ts +0 -45
- package/src/dtos/Message.ts +0 -16
- package/src/dtos/Permission.ts +0 -12
- package/src/dtos/Role.ts +0 -12
- package/src/dtos/Room.ts +0 -17
- package/src/dtos/RoomMember.ts +0 -13
- package/src/dtos/RoomSummary.ts +0 -12
- package/src/dtos/Space.ts +0 -15
- package/src/dtos/SpaceMember.ts +0 -14
- package/src/dtos/Topic.ts +0 -12
- package/src/dtos/User.ts +0 -15
- package/src/dtos/UserState.ts +0 -16
- package/src/dtos/protocol/Envelope.ts +0 -12
- package/src/dtos/protocol/commands/AssignRole.ts +0 -12
- package/src/dtos/protocol/commands/CreateMessage.ts +0 -12
- package/src/dtos/protocol/commands/CreateRole.ts +0 -12
- package/src/dtos/protocol/commands/CreateRoom.ts +0 -12
- package/src/dtos/protocol/commands/CreateSpace.ts +0 -10
- package/src/dtos/protocol/commands/CreateTopic.ts +0 -12
- package/src/dtos/protocol/commands/DeassignRole.ts +0 -12
- package/src/dtos/protocol/commands/DeleteRole.ts +0 -11
- package/src/dtos/protocol/commands/DeleteRoom.ts +0 -10
- package/src/dtos/protocol/commands/DeleteSpace.ts +0 -10
- package/src/dtos/protocol/commands/DeleteTopic.ts +0 -10
- package/src/dtos/protocol/commands/GetComputedPermissions.ts +0 -13
- package/src/dtos/protocol/commands/GetRolePermissions.ts +0 -13
- package/src/dtos/protocol/commands/GetRoomMembers.ts +0 -10
- package/src/dtos/protocol/commands/GetSession.ts +0 -8
- package/src/dtos/protocol/commands/GetSpaceMembers.ts +0 -10
- package/src/dtos/protocol/commands/GetSpaceRooms.ts +0 -10
- package/src/dtos/protocol/commands/GetUserPermissions.ts +0 -13
- package/src/dtos/protocol/commands/JoinRoom.ts +0 -10
- package/src/dtos/protocol/commands/JoinSpace.ts +0 -10
- package/src/dtos/protocol/commands/LeaveRoom.ts +0 -10
- package/src/dtos/protocol/commands/LeaveSpace.ts +0 -10
- package/src/dtos/protocol/commands/SetRolePermissions.ts +0 -16
- package/src/dtos/protocol/commands/SetUserPermissions.ts +0 -16
- package/src/dtos/protocol/events/Bye.ts +0 -10
- package/src/dtos/protocol/events/Error.ts +0 -11
- package/src/dtos/protocol/events/NewMessage.ts +0 -13
- package/src/dtos/protocol/events/NewRole.ts +0 -14
- package/src/dtos/protocol/events/NewRoom.ts +0 -14
- package/src/dtos/protocol/events/NewTopic.ts +0 -14
- package/src/dtos/protocol/events/Ok.ts +0 -8
- package/src/dtos/protocol/events/Permissions.ts +0 -13
- package/src/dtos/protocol/events/RoleDeleted.ts +0 -11
- package/src/dtos/protocol/events/RoomDeleted.ts +0 -10
- package/src/dtos/protocol/events/RoomJoined.ts +0 -13
- package/src/dtos/protocol/events/RoomLeft.ts +0 -10
- package/src/dtos/protocol/events/RoomMemberJoined.ts +0 -13
- package/src/dtos/protocol/events/RoomMemberLeft.ts +0 -10
- package/src/dtos/protocol/events/RoomMembers.ts +0 -13
- package/src/dtos/protocol/events/Session.ts +0 -17
- package/src/dtos/protocol/events/SpaceDeleted.ts +0 -10
- package/src/dtos/protocol/events/SpaceJoined.ts +0 -13
- package/src/dtos/protocol/events/SpaceLeft.ts +0 -10
- package/src/dtos/protocol/events/SpaceMemberJoined.ts +0 -13
- package/src/dtos/protocol/events/SpaceMemberLeft.ts +0 -10
- package/src/dtos/protocol/events/SpaceMemberUpdate.ts +0 -13
- package/src/dtos/protocol/events/SpaceMembers.ts +0 -13
- package/src/dtos/protocol/events/SpaceRooms.ts +0 -13
- package/src/dtos/protocol/events/TopicDeleted.ts +0 -10
- package/src/protocol.ts +0 -113
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AbstractChatClient, CommandResult, CommandsMap } from "./AbstractChatClient";
|
|
2
|
+
import { ObservableInterface } from "./EventTarget";
|
|
3
|
+
export interface WebApiChatClientOptions {
|
|
4
|
+
url: string;
|
|
5
|
+
token?: string;
|
|
6
|
+
temporaryNick?: string;
|
|
7
|
+
attemptsToSend?: number;
|
|
8
|
+
attemptDelayMs?: number;
|
|
9
|
+
}
|
|
10
|
+
declare enum WebApiChatClientEvent {
|
|
11
|
+
message = "message",
|
|
12
|
+
error = "error",
|
|
13
|
+
destroy = "destroy"
|
|
14
|
+
}
|
|
15
|
+
export declare class WebApiChatClient extends AbstractChatClient implements ObservableInterface {
|
|
16
|
+
private readonly options;
|
|
17
|
+
readonly Event: typeof WebApiChatClientEvent;
|
|
18
|
+
protected sendStack: {
|
|
19
|
+
data: any;
|
|
20
|
+
attempts: number;
|
|
21
|
+
lastTimeoutId: any;
|
|
22
|
+
}[];
|
|
23
|
+
constructor(options: WebApiChatClientOptions);
|
|
24
|
+
send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
|
|
25
|
+
destroy(): void;
|
|
26
|
+
protected onMessage(reqId: number, response: Response): Promise<void>;
|
|
27
|
+
protected onError(reqId: number, body: string): void;
|
|
28
|
+
protected makeApiCall(reqId: number): void;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ObservableInterface } from "./EventTarget";
|
|
2
|
+
import { AbstractChatClient, CommandResult, CommandsMap } from "./AbstractChatClient";
|
|
3
|
+
import { ChatStateTracker } from "./ChatStateTracker";
|
|
4
|
+
export interface WebSocketClientOptions {
|
|
5
|
+
url: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
temporaryNick?: string;
|
|
8
|
+
connectingTimeoutMs?: number;
|
|
9
|
+
awaitQueueSendDelayMs?: number;
|
|
10
|
+
stateTracking?: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare enum WebSocketChatClientEvent {
|
|
13
|
+
connect = "connect",
|
|
14
|
+
disconnect = "disconnect",
|
|
15
|
+
message = "message",
|
|
16
|
+
error = "error"
|
|
17
|
+
}
|
|
18
|
+
export declare class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {
|
|
19
|
+
private readonly options;
|
|
20
|
+
readonly Event: typeof WebSocketChatClientEvent;
|
|
21
|
+
readonly state?: ChatStateTracker;
|
|
22
|
+
protected ws: WebSocket | null;
|
|
23
|
+
protected sendQueue: [commandType: keyof CommandsMap, commandData: any][];
|
|
24
|
+
protected connectingTimeoutId: any;
|
|
25
|
+
protected authenticated: boolean;
|
|
26
|
+
protected authenticatedResolvers: [() => void, (error: Error) => void];
|
|
27
|
+
constructor(options: WebSocketClientOptions);
|
|
28
|
+
connect(): Promise<void>;
|
|
29
|
+
disconnect(): void;
|
|
30
|
+
send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
|
|
31
|
+
private onMessage;
|
|
32
|
+
private onClose;
|
|
33
|
+
private sendFromQueue;
|
|
34
|
+
private triggerConnectionTimeout;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
package/build/types/index.d.ts
CHANGED
|
@@ -1,68 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { Dto } from "./dtos/Dto";
|
|
7
|
-
import { Envelope } from "./dtos/protocol/Envelope";
|
|
8
|
-
import { Message } from "./dtos/Message";
|
|
9
|
-
import { Permission } from "./dtos/Permission";
|
|
10
|
-
import { Role } from "./dtos/Role";
|
|
11
|
-
import { Room } from "./dtos/Room";
|
|
12
|
-
import { RoomMember } from "./dtos/RoomMember";
|
|
13
|
-
import { RoomSummary } from "./dtos/RoomSummary";
|
|
14
|
-
import { Space } from "./dtos/Space";
|
|
15
|
-
import { SpaceMember } from "./dtos/SpaceMember";
|
|
16
|
-
import { Topic } from "./dtos/Topic";
|
|
17
|
-
import { User } from "./dtos/User";
|
|
18
|
-
import { UserState } from "./dtos/UserState";
|
|
19
|
-
import { Bye } from "./dtos/protocol/events/Bye";
|
|
20
|
-
import { Ok } from "./dtos/protocol/events/Ok";
|
|
21
|
-
import { Error } from "./dtos/protocol/events/Error";
|
|
22
|
-
import { Session } from "./dtos/protocol/events/Session";
|
|
23
|
-
import { Permissions } from "./dtos/protocol/events/Permissions";
|
|
24
|
-
import { SpaceJoined } from "./dtos/protocol/events/SpaceJoined";
|
|
25
|
-
import { SpaceLeft } from "./dtos/protocol/events/SpaceLeft";
|
|
26
|
-
import { SpaceMemberJoined } from "./dtos/protocol/events/SpaceMemberJoined";
|
|
27
|
-
import { SpaceMemberLeft } from "./dtos/protocol/events/SpaceMemberLeft";
|
|
28
|
-
import { SpaceMemberUpdate } from "./dtos/protocol/events/SpaceMemberUpdate";
|
|
29
|
-
import { SpaceDeleted } from "./dtos/protocol/events/SpaceDeleted";
|
|
30
|
-
import { SpaceMembers } from "./dtos/protocol/events/SpaceMembers";
|
|
31
|
-
import { SpaceRooms } from "./dtos/protocol/events/SpaceRooms";
|
|
32
|
-
import { NewRole } from "./dtos/protocol/events/NewRole";
|
|
33
|
-
import { RoleDeleted } from "./dtos/protocol/events/RoleDeleted";
|
|
34
|
-
import { RoomJoined } from "./dtos/protocol/events/RoomJoined";
|
|
35
|
-
import { RoomLeft } from "./dtos/protocol/events/RoomLeft";
|
|
36
|
-
import { RoomMemberJoined } from "./dtos/protocol/events/RoomMemberJoined";
|
|
37
|
-
import { RoomMemberLeft } from "./dtos/protocol/events/RoomMemberLeft";
|
|
38
|
-
import { RoomMembers } from "./dtos/protocol/events/RoomMembers";
|
|
39
|
-
import { NewRoom } from "./dtos/protocol/events/NewRoom";
|
|
40
|
-
import { RoomDeleted } from "./dtos/protocol/events/RoomDeleted";
|
|
41
|
-
import { NewTopic } from "./dtos/protocol/events/NewTopic";
|
|
42
|
-
import { TopicDeleted } from "./dtos/protocol/events/TopicDeleted";
|
|
43
|
-
import { NewMessage } from "./dtos/protocol/events/NewMessage";
|
|
44
|
-
import { GetSession } from "./dtos/protocol/commands/GetSession";
|
|
45
|
-
import { SetUserPermissions } from "./dtos/protocol/commands/SetUserPermissions";
|
|
46
|
-
import { GetUserPermissions } from "./dtos/protocol/commands/GetUserPermissions";
|
|
47
|
-
import { GetComputedPermissions } from "./dtos/protocol/commands/GetComputedPermissions";
|
|
48
|
-
import { JoinSpace } from "./dtos/protocol/commands/JoinSpace";
|
|
49
|
-
import { LeaveSpace } from "./dtos/protocol/commands/LeaveSpace";
|
|
50
|
-
import { CreateSpace } from "./dtos/protocol/commands/CreateSpace";
|
|
51
|
-
import { DeleteSpace } from "./dtos/protocol/commands/DeleteSpace";
|
|
52
|
-
import { GetSpaceMembers } from "./dtos/protocol/commands/GetSpaceMembers";
|
|
53
|
-
import { GetSpaceRooms } from "./dtos/protocol/commands/GetSpaceRooms";
|
|
54
|
-
import { CreateRole } from "./dtos/protocol/commands/CreateRole";
|
|
55
|
-
import { DeleteRole } from "./dtos/protocol/commands/DeleteRole";
|
|
56
|
-
import { AssignRole } from "./dtos/protocol/commands/AssignRole";
|
|
57
|
-
import { DeassignRole } from "./dtos/protocol/commands/DeassignRole";
|
|
58
|
-
import { SetRolePermissions } from "./dtos/protocol/commands/SetRolePermissions";
|
|
59
|
-
import { GetRolePermissions } from "./dtos/protocol/commands/GetRolePermissions";
|
|
60
|
-
import { JoinRoom } from "./dtos/protocol/commands/JoinRoom";
|
|
61
|
-
import { LeaveRoom } from "./dtos/protocol/commands/LeaveRoom";
|
|
62
|
-
import { CreateRoom } from "./dtos/protocol/commands/CreateRoom";
|
|
63
|
-
import { DeleteRoom } from "./dtos/protocol/commands/DeleteRoom";
|
|
64
|
-
import { GetRoomMembers } from "./dtos/protocol/commands/GetRoomMembers";
|
|
65
|
-
import { CreateTopic } from "./dtos/protocol/commands/CreateTopic";
|
|
66
|
-
import { DeleteTopic } from "./dtos/protocol/commands/DeleteTopic";
|
|
67
|
-
import { CreateMessage } from "./dtos/protocol/commands/CreateMessage";
|
|
68
|
-
export { Client, ClientEvent, WebSocketConnection, WebApiConnection, RestApiConnection, ChatConnectionEvent, Dto, Envelope, Message, Permission, Role, Room, RoomMember, RoomSummary, Space, SpaceMember, Topic, User, UserState, Bye, Error, NewMessage, NewRole, NewRoom, NewTopic, Ok, Permissions, RoleDeleted, RoomDeleted, RoomJoined, RoomLeft, RoomMemberJoined, RoomMemberLeft, RoomMembers, Session, SpaceDeleted, SpaceJoined, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMembers, SpaceMemberUpdate, SpaceRooms, TopicDeleted, AssignRole, CreateMessage, CreateRole, CreateRoom, CreateSpace, CreateTopic, DeassignRole, DeleteRole, DeleteRoom, DeleteSpace, DeleteTopic, GetComputedPermissions, GetRolePermissions, GetRoomMembers, GetSession, GetSpaceMembers, GetSpaceRooms, GetUserPermissions, JoinRoom, JoinSpace, LeaveRoom, LeaveSpace, SetRolePermissions, SetUserPermissions, };
|
|
1
|
+
import { WebSocketChatClient } from "./WebSocketChatClient";
|
|
2
|
+
import { WebApiChatClient } from "./WebApiChatClient";
|
|
3
|
+
import { IndexedCollection, IndexedObjectCollection, ObservableIndexedCollection, ObservableIndexedObjectCollection } from "./IndexedObjectCollection";
|
|
4
|
+
import { AuthClient } from "./AuthClient";
|
|
5
|
+
export { IndexedCollection, ObservableIndexedCollection, IndexedObjectCollection, ObservableIndexedObjectCollection, WebSocketChatClient, WebApiChatClient, AuthClient };
|
package/package.json
CHANGED
|
@@ -1,64 +1,65 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "polfan-server-js-client",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "JavaScript client library for handling communication with Polfan chat server.",
|
|
5
|
-
"author": "Jarosław Żak",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"main": "build/index.js",
|
|
8
|
-
"types": "build/types/index.d.ts",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"start": "webpack serve --config webpack.config.demo.js",
|
|
11
|
-
"build": "webpack && tsc",
|
|
12
|
-
"build:demo": "webpack --config webpack.config.demo.js",
|
|
13
|
-
"test": "jest --silent",
|
|
14
|
-
"coverage": "npm run test -- --coverage",
|
|
15
|
-
"prepare": "npm run build",
|
|
16
|
-
"trypublish": "npm publish || true"
|
|
17
|
-
},
|
|
18
|
-
"devDependencies": {
|
|
19
|
-
"@babel/cli": "^7.20.7",
|
|
20
|
-
"@babel/core": "^7.20.12",
|
|
21
|
-
"@babel/plugin-proposal-class-properties": "^7.16.0",
|
|
22
|
-
"@babel/plugin-transform-typescript": "^7.20.2",
|
|
23
|
-
"@babel/polyfill": "^7.12.1",
|
|
24
|
-
"@babel/preset-env": "^7.20.2",
|
|
25
|
-
"@types/jest": "^29.2.5",
|
|
26
|
-
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
|
27
|
-
"@typescript-eslint/parser": "^4.33.0",
|
|
28
|
-
"babel-eslint": "^10.1.0",
|
|
29
|
-
"babel-loader": "^9.1.2",
|
|
30
|
-
"babel-preset-minify": "^0.5.2",
|
|
31
|
-
"css-loader": "^6.7.3",
|
|
32
|
-
"css-minimizer-webpack-plugin": "^4.2.2",
|
|
33
|
-
"eslint": "^7.32.0",
|
|
34
|
-
"file-loader": "^6.2.0",
|
|
35
|
-
"html-webpack-plugin": "^5.5.0",
|
|
36
|
-
"jest": "^29.3.1",
|
|
37
|
-
"mini-css-extract-plugin": "^2.7.2",
|
|
38
|
-
"style-loader": "^3.3.1",
|
|
39
|
-
"terser-webpack-plugin": "^5.3.5",
|
|
40
|
-
"typescript": "^4.9.4",
|
|
41
|
-
"url-loader": "^4.1.1",
|
|
42
|
-
"webpack": "^5.75.0",
|
|
43
|
-
"webpack-cli": "^5.0.1",
|
|
44
|
-
"webpack-dev-server": "4.11.1"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"\\.(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
"js",
|
|
54
|
-
"
|
|
55
|
-
"ts",
|
|
56
|
-
"
|
|
57
|
-
"tsx",
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"jsx",
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "polfan-server-js-client",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "JavaScript client library for handling communication with Polfan chat server.",
|
|
5
|
+
"author": "Jarosław Żak",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "build/index.js",
|
|
8
|
+
"types": "build/types/index.d.ts",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "webpack serve --config webpack.config.demo.js",
|
|
11
|
+
"build": "webpack && tsc",
|
|
12
|
+
"build:demo": "webpack --config webpack.config.demo.js",
|
|
13
|
+
"test": "jest --silent",
|
|
14
|
+
"coverage": "npm run test -- --coverage",
|
|
15
|
+
"prepare": "npm run build",
|
|
16
|
+
"trypublish": "npm publish || true"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@babel/cli": "^7.20.7",
|
|
20
|
+
"@babel/core": "^7.20.12",
|
|
21
|
+
"@babel/plugin-proposal-class-properties": "^7.16.0",
|
|
22
|
+
"@babel/plugin-transform-typescript": "^7.20.2",
|
|
23
|
+
"@babel/polyfill": "^7.12.1",
|
|
24
|
+
"@babel/preset-env": "^7.20.2",
|
|
25
|
+
"@types/jest": "^29.2.5",
|
|
26
|
+
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
|
27
|
+
"@typescript-eslint/parser": "^4.33.0",
|
|
28
|
+
"babel-eslint": "^10.1.0",
|
|
29
|
+
"babel-loader": "^9.1.2",
|
|
30
|
+
"babel-preset-minify": "^0.5.2",
|
|
31
|
+
"css-loader": "^6.7.3",
|
|
32
|
+
"css-minimizer-webpack-plugin": "^4.2.2",
|
|
33
|
+
"eslint": "^7.32.0",
|
|
34
|
+
"file-loader": "^6.2.0",
|
|
35
|
+
"html-webpack-plugin": "^5.5.0",
|
|
36
|
+
"jest": "^29.3.1",
|
|
37
|
+
"mini-css-extract-plugin": "^2.7.2",
|
|
38
|
+
"style-loader": "^3.3.1",
|
|
39
|
+
"terser-webpack-plugin": "^5.3.5",
|
|
40
|
+
"typescript": "^4.9.4",
|
|
41
|
+
"url-loader": "^4.1.1",
|
|
42
|
+
"webpack": "^5.75.0",
|
|
43
|
+
"webpack-cli": "^5.0.1",
|
|
44
|
+
"webpack-dev-server": "4.11.1",
|
|
45
|
+
"pserv-ts-types": "^0.0.15"
|
|
46
|
+
},
|
|
47
|
+
"jest": {
|
|
48
|
+
"moduleNameMapper": {
|
|
49
|
+
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/scripts/testMock.js",
|
|
50
|
+
"\\.(css|less)$": "<rootDir>/scripts/testMock.js"
|
|
51
|
+
},
|
|
52
|
+
"moduleFileExtensions": [
|
|
53
|
+
"web.js",
|
|
54
|
+
"js",
|
|
55
|
+
"web.ts",
|
|
56
|
+
"ts",
|
|
57
|
+
"web.tsx",
|
|
58
|
+
"tsx",
|
|
59
|
+
"json",
|
|
60
|
+
"web.jsx",
|
|
61
|
+
"jsx",
|
|
62
|
+
"node"
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Bye,
|
|
3
|
+
GetSession,
|
|
4
|
+
JoinSpace,
|
|
5
|
+
Ok,
|
|
6
|
+
Session,
|
|
7
|
+
SpaceJoined,
|
|
8
|
+
Error as ErrorType,
|
|
9
|
+
SpaceLeft,
|
|
10
|
+
SpaceMemberJoined,
|
|
11
|
+
SpaceMemberLeft,
|
|
12
|
+
SpaceMemberUpdate,
|
|
13
|
+
SpaceDeleted,
|
|
14
|
+
SpaceMembers,
|
|
15
|
+
SpaceRooms,
|
|
16
|
+
NewRole,
|
|
17
|
+
RoomDeleted,
|
|
18
|
+
RoomJoined,
|
|
19
|
+
RoomLeft,
|
|
20
|
+
RoomMemberLeft,
|
|
21
|
+
RoomMemberJoined,
|
|
22
|
+
RoomMembers,
|
|
23
|
+
NewRoom,
|
|
24
|
+
NewTopic,
|
|
25
|
+
TopicDeleted,
|
|
26
|
+
NewMessage,
|
|
27
|
+
GetUserPermissions,
|
|
28
|
+
SetUserPermissions,
|
|
29
|
+
GetComputedPermissions,
|
|
30
|
+
LeaveSpace,
|
|
31
|
+
CreateSpace,
|
|
32
|
+
DeleteSpace,
|
|
33
|
+
GetSpaceMembers,
|
|
34
|
+
GetSpaceRooms,
|
|
35
|
+
CreateRole,
|
|
36
|
+
DeleteRole,
|
|
37
|
+
AssignRole,
|
|
38
|
+
DeassignRole,
|
|
39
|
+
SetRolePermissions,
|
|
40
|
+
GetRolePermissions,
|
|
41
|
+
JoinRoom,
|
|
42
|
+
LeaveRoom,
|
|
43
|
+
CreateRoom,
|
|
44
|
+
DeleteRoom,
|
|
45
|
+
GetRoomMembers,
|
|
46
|
+
CreateTopic,
|
|
47
|
+
DeleteTopic,
|
|
48
|
+
CreateMessage, Envelope,
|
|
49
|
+
} from "pserv-ts-types";
|
|
50
|
+
import {EventTarget} from "./EventTarget";
|
|
51
|
+
|
|
52
|
+
type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
|
|
53
|
+
|
|
54
|
+
export abstract class AbstractChatClient extends EventTarget {
|
|
55
|
+
protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();
|
|
56
|
+
protected sentCounter: number = 0;
|
|
57
|
+
|
|
58
|
+
public abstract send<CommandType extends keyof CommandsMap>
|
|
59
|
+
(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
|
|
60
|
+
|
|
61
|
+
public on<EventName extends keyof EventsMap>
|
|
62
|
+
(eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {
|
|
63
|
+
return super.on(eventName, handler);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public once<EventName extends keyof EventsMap>
|
|
67
|
+
(eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {
|
|
68
|
+
return super.once(eventName, handler);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {
|
|
72
|
+
return {
|
|
73
|
+
type, data, ref: (++this.sentCounter).toString()
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
protected createPromiseFromCommandEnvelope
|
|
78
|
+
<CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):
|
|
79
|
+
Promise<CommandResult<CommandsMap[CommandT][1]>> {
|
|
80
|
+
return new Promise((...args) =>
|
|
81
|
+
this.awaitingResponse.set(envelope.ref as string, args));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
protected handleIncomingEnvelope(envelope: Envelope): void {
|
|
85
|
+
if (!this.awaitingResponse.has(envelope.ref)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const isError = envelope.type === 'Error';
|
|
89
|
+
this.awaitingResponse.get(envelope.ref)[0]({
|
|
90
|
+
data: isError ? null : envelope.data,
|
|
91
|
+
error: isError ? envelope.data : null,
|
|
92
|
+
} as CommandResult<any>);
|
|
93
|
+
this.awaitingResponse.delete(envelope.ref);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
protected handleEnvelopeSendError(envelope: Envelope, error: any): void {
|
|
97
|
+
if (!this.awaitingResponse.has(envelope.ref)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
this.awaitingResponse.get(envelope.ref)[0](error);
|
|
101
|
+
this.awaitingResponse.delete(envelope.ref);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export type CommandResult<ResultT> = {data?: ResultT, error?: Error};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Map of incoming events.
|
|
109
|
+
*/
|
|
110
|
+
export type EventsMap = {
|
|
111
|
+
// General Events
|
|
112
|
+
Bye: Bye,
|
|
113
|
+
Ok: Ok,
|
|
114
|
+
Error: ErrorType,
|
|
115
|
+
Session: Session,
|
|
116
|
+
Permissions: Permissions,
|
|
117
|
+
// Space events
|
|
118
|
+
SpaceJoined: SpaceJoined,
|
|
119
|
+
SpaceLeft: SpaceLeft,
|
|
120
|
+
SpaceMemberJoined: SpaceMemberJoined,
|
|
121
|
+
SpaceMemberLeft: SpaceMemberLeft,
|
|
122
|
+
SpaceMemberUpdate: SpaceMemberUpdate,
|
|
123
|
+
SpaceDeleted: SpaceDeleted,
|
|
124
|
+
SpaceMembers: SpaceMembers,
|
|
125
|
+
SpaceRooms: SpaceRooms,
|
|
126
|
+
NewRole: NewRole,
|
|
127
|
+
RoleDeleted: RoomDeleted,
|
|
128
|
+
// Room events
|
|
129
|
+
RoomJoined: RoomJoined,
|
|
130
|
+
RoomLeft: RoomLeft,
|
|
131
|
+
RoomMemberJoined: RoomMemberJoined,
|
|
132
|
+
RoomMemberLeft: RoomMemberLeft,
|
|
133
|
+
RoomMembers: RoomMembers,
|
|
134
|
+
NewRoom: NewRoom,
|
|
135
|
+
RoomDeleted: RoomDeleted,
|
|
136
|
+
// Topic events
|
|
137
|
+
NewTopic: NewTopic,
|
|
138
|
+
TopicDeleted: TopicDeleted,
|
|
139
|
+
NewMessage: NewMessage,
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Map of commands and their corresponding events.
|
|
144
|
+
*/
|
|
145
|
+
export type CommandsMap = {
|
|
146
|
+
// General commands
|
|
147
|
+
GetSession: [GetSession, EventsMap['Session']],
|
|
148
|
+
SetUserPermissions: [SetUserPermissions, EventsMap['Permissions']],
|
|
149
|
+
GetUserPermissions: [GetUserPermissions, EventsMap['Permissions']],
|
|
150
|
+
GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],
|
|
151
|
+
// Space commands
|
|
152
|
+
JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],
|
|
153
|
+
LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],
|
|
154
|
+
CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],
|
|
155
|
+
DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],
|
|
156
|
+
GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],
|
|
157
|
+
GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],
|
|
158
|
+
CreateRole: [CreateRole, EventsMap['NewRole']],
|
|
159
|
+
DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],
|
|
160
|
+
AssignRole: [AssignRole, EventsMap['SpaceMemberUpdate']],
|
|
161
|
+
DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdate']],
|
|
162
|
+
SetRolePermissions: [SetRolePermissions, EventsMap['Permissions']],
|
|
163
|
+
GetRolePermissions: [GetRolePermissions, EventsMap['Permissions']],
|
|
164
|
+
// Room commands
|
|
165
|
+
JoinRoom: [JoinRoom, EventsMap['RoomJoined']],
|
|
166
|
+
LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],
|
|
167
|
+
CreateRoom: [CreateRoom, EventsMap['NewRoom']],
|
|
168
|
+
DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],
|
|
169
|
+
GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],
|
|
170
|
+
// Topic commands
|
|
171
|
+
CreateTopic: [CreateTopic, EventsMap['NewTopic']],
|
|
172
|
+
DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],
|
|
173
|
+
CreateMessage: [CreateMessage, EventsMap['NewMessage']],
|
|
174
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export interface RestClientOptions {
|
|
2
|
+
url?: string;
|
|
3
|
+
token: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface RestClientResponse<T> {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
status: number;
|
|
9
|
+
data: T;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
13
|
+
|
|
14
|
+
export abstract class AbstractRestClient {
|
|
15
|
+
protected abstract defaultUrl: string;
|
|
16
|
+
|
|
17
|
+
protected constructor(
|
|
18
|
+
private readonly options: RestClientOptions,
|
|
19
|
+
) {}
|
|
20
|
+
|
|
21
|
+
protected async send<ResponseT = any>(
|
|
22
|
+
method: HttpMethod,
|
|
23
|
+
uri: string,
|
|
24
|
+
data: any = undefined
|
|
25
|
+
): Promise<RestClientResponse<ResponseT>> {
|
|
26
|
+
const headers: any = {
|
|
27
|
+
'Content-Type': 'application/json',
|
|
28
|
+
Accept: 'application/json'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
if (this.options.token) {
|
|
32
|
+
headers.Authorization = `Bearer ${this.options.token}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let url = this.getUrl(uri);
|
|
36
|
+
let body = undefined;
|
|
37
|
+
|
|
38
|
+
if (data) {
|
|
39
|
+
if (['GET', 'DELETE'].includes(method)) {
|
|
40
|
+
url += new URLSearchParams(data).toString()
|
|
41
|
+
} else {
|
|
42
|
+
body = JSON.stringify(data);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const result = await fetch(url, {method, body, headers});
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
ok: result.ok,
|
|
50
|
+
status: result.status,
|
|
51
|
+
data: await result.json(),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
protected getUrl(uri: string): string {
|
|
56
|
+
return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private removeStartingSlash(text: string): string {
|
|
60
|
+
return text.replace(/^\/+/, '');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private removeEndingSlash(text: string): string {
|
|
64
|
+
return text.replace(/\/+$/, '');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {AbstractRestClient} from "./AbstractRestClient";
|
|
2
|
+
|
|
3
|
+
export interface TokenInterface {
|
|
4
|
+
token: string,
|
|
5
|
+
expiration: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface MyAccountInterface {
|
|
9
|
+
id: string;
|
|
10
|
+
nick: string;
|
|
11
|
+
avatar: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class AuthClient extends AbstractRestClient {
|
|
15
|
+
protected defaultUrl: string = 'https://polfan.pl/webservice';
|
|
16
|
+
|
|
17
|
+
public static async createToken(
|
|
18
|
+
login: string,
|
|
19
|
+
password: string,
|
|
20
|
+
clientName: string = 'pserv-js-client'
|
|
21
|
+
): Promise<TokenInterface> {
|
|
22
|
+
const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {
|
|
23
|
+
login, password, client_name: clientName
|
|
24
|
+
});
|
|
25
|
+
if (response.ok) {
|
|
26
|
+
return response.data;
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`Cannot create user token: ${response.data.errors[0]}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public async deleteToken(token: string): Promise<void> {
|
|
32
|
+
const response = await this.send('DELETE', `auth/tokens/${token}`);
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public async getMe(): Promise<MyAccountInterface> {
|
|
39
|
+
const response = await this.send('GET', 'auth/me');
|
|
40
|
+
if (response.ok) {
|
|
41
|
+
response.data.id = response.data.id.toString();
|
|
42
|
+
return response.data;
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);
|
|
45
|
+
}
|
|
46
|
+
}
|