@socket-mesh/server 18.1.0 → 18.1.2
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/dist/server-event.d.ts +2 -4
- package/dist/server-socket.d.ts +2 -1
- package/dist/server-socket.js +5 -2
- package/dist/server-transport.d.ts +7 -9
- package/dist/server-transport.js +19 -18
- package/dist/server.d.ts +3 -9
- package/dist/server.js +26 -11
- package/package.json +9 -2
package/dist/server-event.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { IncomingMessage } from "http";
|
|
2
2
|
import { ClientSocket } from "@socket-mesh/client";
|
|
3
3
|
import { ServerSocket } from "./server-socket.js";
|
|
4
|
-
import { AuthenticateEvent, BadAuthTokenEvent, ConnectEvent, CloseEvent as SCloseEvent, DisconnectEvent, ErrorEvent as SErrorEvent, MessageEvent, PingEvent, PongEvent, RequestEvent, ResponseEvent,
|
|
4
|
+
import { AuthenticateEvent, BadAuthTokenEvent, ConnectEvent, CloseEvent as SCloseEvent, DisconnectEvent, ErrorEvent as SErrorEvent, MessageEvent, PingEvent, PongEvent, RequestEvent, ResponseEvent, ConnectingEvent, RemoveAuthTokenEvent, DeauthenticateEvent, AuthStateChangeEvent } from "@socket-mesh/core";
|
|
5
5
|
import { ServerMap } from "./maps/server-map.js";
|
|
6
6
|
import { ClientMapFromServer } from "./maps/client-map.js";
|
|
7
7
|
import { SubscribeEvent, SubscribeFailEvent, SubscribeStateChangeEvent, UnsubscribeEvent } from "@socket-mesh/channels";
|
|
8
8
|
import { SocketMapFromServer } from "./maps/socket-map.js";
|
|
9
|
-
export type ServerEvent<T extends ServerMap> = ConnectionEvent<T> | CloseEvent | ErrorEvent | HeadersEvent | HandshakeEvent<T> | ListeningEvent | SocketAuthStateChangeEvent<T> | SocketAuthenticateEvent<T> | SocketBadAuthTokenEvent<T> | SocketCloseEvent<T> | SocketDeauthenticateEvent<T> | SocketErrorEvent<T> | SocketMessageEvent<T> | SocketConnectEvent<T> | SocketConnectingEvent<T> | SocketDisconnectEvent<T> | SocketPingEvent<T> | SocketPongEvent<T> | SocketRemoveAuthTokenEvent<T> | SocketRequestEvent<T> | SocketResponseEvent<T> |
|
|
9
|
+
export type ServerEvent<T extends ServerMap> = ConnectionEvent<T> | CloseEvent | ErrorEvent | HeadersEvent | HandshakeEvent<T> | ListeningEvent | SocketAuthStateChangeEvent<T> | SocketAuthenticateEvent<T> | SocketBadAuthTokenEvent<T> | SocketCloseEvent<T> | SocketDeauthenticateEvent<T> | SocketErrorEvent<T> | SocketMessageEvent<T> | SocketConnectEvent<T> | SocketConnectingEvent<T> | SocketDisconnectEvent<T> | SocketPingEvent<T> | SocketPongEvent<T> | SocketRemoveAuthTokenEvent<T> | SocketRequestEvent<T> | SocketResponseEvent<T> | WarningEvent;
|
|
10
10
|
export interface ConnectionEvent<T extends ServerMap> {
|
|
11
11
|
socket: ServerSocket<T>;
|
|
12
12
|
upgradeReq: IncomingMessage;
|
|
@@ -50,5 +50,3 @@ export type SocketSubscribeEvent<T extends ServerMap> = SubscribeEvent & ServerS
|
|
|
50
50
|
export type SocketSubscribeFailEvent<T extends ServerMap> = SubscribeFailEvent & ServerSocketEvent<T>;
|
|
51
51
|
export type SocketSubscribeStateChangeEvent<T extends ServerMap> = SubscribeStateChangeEvent & ServerSocketEvent<T>;
|
|
52
52
|
export type SocketUnsubscribeEvent<T extends ServerMap> = UnsubscribeEvent & ServerSocketEvent<T>;
|
|
53
|
-
export type SocketUnexpectedResponseEvent<T extends ServerMap> = UnexpectedResponseEvent & ServerSocketEvent<T>;
|
|
54
|
-
export type SocketUpgradeEvent<T extends ServerMap> = UpgradeEvent & ServerSocketEvent<T>;
|
package/dist/server-socket.d.ts
CHANGED
|
@@ -20,8 +20,9 @@ export declare class ServerSocket<T extends ServerMap> extends Socket<SocketMapF
|
|
|
20
20
|
private _serverTransport;
|
|
21
21
|
constructor(options: ServerSocketOptions<T>);
|
|
22
22
|
deauthenticate(rejectOnFailedDelivery?: boolean): Promise<boolean>;
|
|
23
|
-
kickOut(channel: string, message: string): Promise<void[]>;
|
|
24
23
|
get exchange(): Exchange<T['Channel']>;
|
|
24
|
+
kickOut(channel: string, message: string): Promise<void[]>;
|
|
25
|
+
ping(): Promise<void>;
|
|
25
26
|
get service(): string;
|
|
26
27
|
get type(): 'server';
|
|
27
28
|
}
|
package/dist/server-socket.js
CHANGED
|
@@ -28,6 +28,9 @@ export class ServerSocket extends Socket {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
+
get exchange() {
|
|
32
|
+
return this.server.exchange;
|
|
33
|
+
}
|
|
31
34
|
kickOut(channel, message) {
|
|
32
35
|
const channels = channel ? [channel] : Object.keys(this.state.channelSubscriptions);
|
|
33
36
|
return Promise.all(channels.map((channelName) => {
|
|
@@ -35,8 +38,8 @@ export class ServerSocket extends Socket {
|
|
|
35
38
|
return this._serverTransport.unsubscribe(channelName);
|
|
36
39
|
}));
|
|
37
40
|
}
|
|
38
|
-
|
|
39
|
-
return this.
|
|
41
|
+
ping() {
|
|
42
|
+
return this._serverTransport.ping();
|
|
40
43
|
}
|
|
41
44
|
get service() {
|
|
42
45
|
return this._serverTransport.service;
|
|
@@ -3,9 +3,9 @@ import { ServerSocket, ServerSocketOptions } from "./server-socket.js";
|
|
|
3
3
|
import { AuthToken, SignedAuthToken } from "@socket-mesh/auth";
|
|
4
4
|
import { SocketMapFromServer } from "./maps/socket-map.js";
|
|
5
5
|
import { AuthTokenOptions } from "@socket-mesh/auth-engine";
|
|
6
|
-
import {
|
|
7
|
-
import { AnyPacket, AnyResponse, SocketStatus, SocketTransport, InvokeMethodRequest, InvokeServiceRequest, TransmitMethodRequest, TransmitServiceRequest } from "@socket-mesh/core";
|
|
8
|
-
import {
|
|
6
|
+
import { Data } from "ws";
|
|
7
|
+
import { AnyPacket, AnyResponse, SocketStatus, SocketTransport, InvokeMethodRequest, InvokeServiceRequest, TransmitMethodRequest, TransmitServiceRequest, InboundMessage } from "@socket-mesh/core";
|
|
8
|
+
import { IncomingMessage } from "http";
|
|
9
9
|
import { ServerPlugin } from "./plugin/server-plugin.js";
|
|
10
10
|
import { PublishOptions } from "@socket-mesh/channels";
|
|
11
11
|
export declare class ServerTransport<T extends ServerMap> extends SocketTransport<SocketMapFromServer<T>> {
|
|
@@ -14,20 +14,18 @@ export declare class ServerTransport<T extends ServerMap> extends SocketTranspor
|
|
|
14
14
|
readonly request: IncomingMessage;
|
|
15
15
|
constructor(options: ServerSocketOptions<T>);
|
|
16
16
|
changeToUnauthenticatedState(): Promise<boolean>;
|
|
17
|
-
protected
|
|
17
|
+
protected handleInboudMessage({ packet, timestamp }: InboundMessage<SocketMapFromServer<T>>): Promise<void>;
|
|
18
18
|
protected onClose(code: number, reason?: string | Buffer): void;
|
|
19
19
|
protected onDisconnect(status: SocketStatus, code: number, reason?: string): void;
|
|
20
20
|
onError(error: Error): void;
|
|
21
21
|
protected onInvoke<TService extends keyof T["Service"], TServiceMethod extends keyof T["Service"][TService], TMethod extends keyof T["Outgoing"], TPrivateMethod extends keyof T["PrivateOutgoing"]>(request: InvokeMethodRequest<T["Outgoing"], TMethod> | InvokeMethodRequest<T["PrivateOutgoing"], TPrivateMethod> | InvokeServiceRequest<T["Service"], TService, TServiceMethod>): void;
|
|
22
|
-
protected onMessage(data:
|
|
23
|
-
protected
|
|
24
|
-
protected onPong(data: Buffer): void;
|
|
22
|
+
protected onMessage(data: Data, isBinary: boolean): void;
|
|
23
|
+
protected onPingPong(): void;
|
|
25
24
|
protected onPublish(options: PublishOptions): Promise<void>;
|
|
26
25
|
protected onRequest(packet: AnyPacket<SocketMapFromServer<T>>, timestamp: Date, pluginError?: Error): Promise<boolean>;
|
|
27
26
|
protected onResponse(response: AnyResponse<SocketMapFromServer<T>>): void;
|
|
28
27
|
protected onTransmit<TService extends keyof T["Service"], TServiceMethod extends keyof T["Service"][TService], TMethod extends keyof T["Outgoing"]>(request: TransmitMethodRequest<T["Outgoing"], TMethod> | TransmitServiceRequest<T["Service"], TService, TServiceMethod>): void;
|
|
29
|
-
|
|
30
|
-
protected onUnexpectedResponse(request: ClientRequest, response: IncomingMessage): void;
|
|
28
|
+
ping(): Promise<void>;
|
|
31
29
|
setAuthorization(authToken: AuthToken, options?: AuthTokenOptions): Promise<boolean>;
|
|
32
30
|
setAuthorization(signedAuthToken: SignedAuthToken, authToken?: AuthToken): Promise<boolean>;
|
|
33
31
|
setReadyStatus(pingTimeoutMs: number, authError?: Error): void;
|
package/dist/server-transport.js
CHANGED
|
@@ -24,13 +24,12 @@ export class ServerTransport extends SocketTransport {
|
|
|
24
24
|
}
|
|
25
25
|
return false;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
const packet = super.decode(data);
|
|
27
|
+
handleInboudMessage({ packet, timestamp }) {
|
|
29
28
|
if ((packet === null || typeof packet !== 'object') && this.socket.server.strictHandshake && this.status === 'connecting') {
|
|
30
29
|
this.disconnect(4009);
|
|
31
|
-
return
|
|
30
|
+
return;
|
|
32
31
|
}
|
|
33
|
-
return packet;
|
|
32
|
+
return super.handleInboudMessage({ packet, timestamp });
|
|
34
33
|
}
|
|
35
34
|
onClose(code, reason) {
|
|
36
35
|
const status = this.status;
|
|
@@ -91,18 +90,25 @@ export class ServerTransport extends SocketTransport {
|
|
|
91
90
|
this.socket.server.emit('socketMessage', { socket: this.socket, data, isBinary });
|
|
92
91
|
super.onMessage(data, isBinary);
|
|
93
92
|
}
|
|
94
|
-
|
|
93
|
+
/*
|
|
94
|
+
protected override onPing(data: Buffer): void {
|
|
95
|
+
if (this.socket.server.strictHandshake && this.status === 'connecting') {
|
|
96
|
+
this.disconnect(4009);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
super.onPing(data);
|
|
101
|
+
this.socket.server.emit('socketPing', { socket: this.socket, data });
|
|
102
|
+
}
|
|
103
|
+
*/
|
|
104
|
+
onPingPong() {
|
|
95
105
|
if (this.socket.server.strictHandshake && this.status === 'connecting') {
|
|
96
106
|
this.disconnect(4009);
|
|
97
107
|
return;
|
|
98
108
|
}
|
|
99
|
-
super.onPing(data);
|
|
100
|
-
this.socket.server.emit('socketPing', { socket: this.socket, data });
|
|
101
|
-
}
|
|
102
|
-
onPong(data) {
|
|
103
109
|
this.resetPingTimeout(this.socket.server.isPingTimeoutDisabled ? false : this.socket.server.pingTimeoutMs, 4001);
|
|
104
|
-
|
|
105
|
-
this.socket.server.emit('socketPong', { socket: this.socket
|
|
110
|
+
this.socket.emit('pong', {});
|
|
111
|
+
this.socket.server.emit('socketPong', { socket: this.socket });
|
|
106
112
|
}
|
|
107
113
|
async onPublish(options) {
|
|
108
114
|
let data = options.data;
|
|
@@ -144,13 +150,8 @@ export class ServerTransport extends SocketTransport {
|
|
|
144
150
|
abortRequest(request, err);
|
|
145
151
|
});
|
|
146
152
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.socket.server.emit('socketUpgrade', { socket: this.socket, request });
|
|
150
|
-
}
|
|
151
|
-
onUnexpectedResponse(request, response) {
|
|
152
|
-
super.onUnexpectedResponse(request, response);
|
|
153
|
-
this.socket.server.emit('socketUnexpectedResponse', { socket: this.socket, request, response });
|
|
153
|
+
ping() {
|
|
154
|
+
return this.send('');
|
|
154
155
|
}
|
|
155
156
|
async setAuthorization(authToken, options) {
|
|
156
157
|
const wasAuthenticated = !!this.signedAuthToken;
|
package/dist/server.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { ServerSocket } from "./server-socket.js";
|
|
2
2
|
import { Server as HttpServer } from 'http';
|
|
3
3
|
import { CodecEngine } from "@socket-mesh/formatter";
|
|
4
|
-
import { ClientSocket } from "@socket-mesh/client";
|
|
5
4
|
import { StreamCleanupMode } from "@socket-mesh/core";
|
|
6
5
|
import { AuthEngine } from "@socket-mesh/auth-engine";
|
|
7
6
|
import { ServerPlugin } from "./plugin/server-plugin.js";
|
|
8
|
-
import { CloseEvent, ConnectionEvent, ErrorEvent, HandshakeEvent, HeadersEvent, ListeningEvent, ServerEvent, SocketAuthenticateEvent, SocketAuthStateChangeEvent, SocketBadAuthTokenEvent, SocketCloseEvent, SocketConnectEvent, SocketConnectingEvent, SocketDeauthenticateEvent, SocketDisconnectEvent, SocketErrorEvent, SocketMessageEvent, SocketPingEvent, SocketPongEvent, SocketRemoveAuthTokenEvent, SocketRequestEvent, SocketResponseEvent, SocketSubscribeEvent, SocketSubscribeFailEvent, SocketSubscribeStateChangeEvent,
|
|
7
|
+
import { CloseEvent, ConnectionEvent, ErrorEvent, HandshakeEvent, HeadersEvent, ListeningEvent, ServerEvent, SocketAuthenticateEvent, SocketAuthStateChangeEvent, SocketBadAuthTokenEvent, SocketCloseEvent, SocketConnectEvent, SocketConnectingEvent, SocketDeauthenticateEvent, SocketDisconnectEvent, SocketErrorEvent, SocketMessageEvent, SocketPingEvent, SocketPongEvent, SocketRemoveAuthTokenEvent, SocketRequestEvent, SocketResponseEvent, SocketSubscribeEvent, SocketSubscribeFailEvent, SocketSubscribeStateChangeEvent, SocketUnsubscribeEvent, WarningEvent } from "./server-event.js";
|
|
9
8
|
import { AsyncStreamEmitter } from "@socket-mesh/async-stream-emitter";
|
|
10
9
|
import { DemuxedConsumableStream, StreamEvent } from "@socket-mesh/stream-demux";
|
|
11
10
|
import { ServerOptions } from "./server-options.js";
|
|
12
11
|
import { ServerMap } from "./maps/server-map.js";
|
|
13
|
-
import { ClientMapFromServer } from "./maps/client-map.js";
|
|
14
12
|
import { Broker } from "./broker/broker.js";
|
|
15
13
|
import { Exchange } from "./broker/exchange.js";
|
|
16
14
|
export declare class Server<T extends ServerMap> extends AsyncStreamEmitter<ServerEvent<T>> {
|
|
@@ -31,12 +29,12 @@ export declare class Server<T extends ServerMap> extends AsyncStreamEmitter<Serv
|
|
|
31
29
|
readonly auth: AuthEngine;
|
|
32
30
|
readonly brokerEngine: Broker<T['Channel']>;
|
|
33
31
|
readonly clients: {
|
|
34
|
-
[id: string]:
|
|
32
|
+
[id: string]: ServerSocket<T>;
|
|
35
33
|
};
|
|
36
34
|
clientCount: number;
|
|
37
35
|
readonly codecEngine: CodecEngine;
|
|
38
36
|
readonly pendingClients: {
|
|
39
|
-
[id: string]:
|
|
37
|
+
[id: string]: ServerSocket<T>;
|
|
40
38
|
};
|
|
41
39
|
pendingClientCount: number;
|
|
42
40
|
readonly socketStreamCleanupMode: StreamCleanupMode;
|
|
@@ -87,8 +85,6 @@ export declare class Server<T extends ServerMap> extends AsyncStreamEmitter<Serv
|
|
|
87
85
|
emit(event: 'socketSubscribeRequest', data: SocketSubscribeEvent<T>): void;
|
|
88
86
|
emit(event: 'socketSubscribeStateChange', data: SocketSubscribeStateChangeEvent<T>): void;
|
|
89
87
|
emit(event: 'socketUnsubscribe', data: SocketUnsubscribeEvent<T>): void;
|
|
90
|
-
emit(event: 'socketUnexpectedResponse', data: SocketUnexpectedResponseEvent<T>): void;
|
|
91
|
-
emit(event: 'socketUpgrade', data: SocketUpgradeEvent<T>): void;
|
|
92
88
|
emit(event: "warning", data: WarningEvent): void;
|
|
93
89
|
listen(): DemuxedConsumableStream<StreamEvent<ServerEvent<T>>>;
|
|
94
90
|
listen(event: "close"): DemuxedConsumableStream<CloseEvent>;
|
|
@@ -119,7 +115,5 @@ export declare class Server<T extends ServerMap> extends AsyncStreamEmitter<Serv
|
|
|
119
115
|
listen(event: 'socketSubscribeRequest'): DemuxedConsumableStream<SocketSubscribeEvent<T>>;
|
|
120
116
|
listen(event: 'socketSubscribeStateChange'): DemuxedConsumableStream<SocketSubscribeStateChangeEvent<T>>;
|
|
121
117
|
listen(event: 'socketUnsubscribe'): DemuxedConsumableStream<SocketUnsubscribeEvent<T>>;
|
|
122
|
-
listen(event: 'socketUnexpectedResponse'): DemuxedConsumableStream<SocketUnexpectedResponseEvent<T>>;
|
|
123
|
-
listen(event: 'socketUpgrade'): DemuxedConsumableStream<SocketUpgradeEvent<T>>;
|
|
124
118
|
listen(event: "warning"): DemuxedConsumableStream<WarningEvent>;
|
|
125
119
|
}
|
package/dist/server.js
CHANGED
|
@@ -79,18 +79,33 @@ export class Server extends AsyncStreamEmitter {
|
|
|
79
79
|
this.plugins.push(...plugin);
|
|
80
80
|
}
|
|
81
81
|
bind(socket) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
82
|
+
/*
|
|
83
|
+
if (socket.type === 'client') {
|
|
84
|
+
(async () => {
|
|
85
|
+
for await (let event of socket.listen()) {
|
|
86
|
+
this.emit(
|
|
87
|
+
`socket${event.stream[0].toUpperCase()}${event.stream.substring(1)}` as any,
|
|
88
|
+
Object.assign(
|
|
89
|
+
{ socket },
|
|
90
|
+
event.value
|
|
91
|
+
)
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
})();
|
|
95
|
+
|
|
96
|
+
(async () => {
|
|
97
|
+
for await (let event of socket.channels.listen()) {
|
|
98
|
+
this.emit(
|
|
99
|
+
`socket${event.stream[0].toUpperCase()}${event.stream.substring(1)}` as any,
|
|
100
|
+
Object.assign(
|
|
101
|
+
{ socket },
|
|
102
|
+
event.value
|
|
103
|
+
)
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
91
107
|
}
|
|
92
|
-
|
|
93
|
-
}
|
|
108
|
+
*/
|
|
94
109
|
(async () => {
|
|
95
110
|
for await (let {} of socket.listen('connect')) {
|
|
96
111
|
if (this.pendingClients[socket.id]) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@socket-mesh/server",
|
|
3
3
|
"description": "A TCP socket pair for easily transmitting full messages without worrying about request size limits.",
|
|
4
|
-
"version": "18.1.
|
|
4
|
+
"version": "18.1.2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -14,6 +14,13 @@
|
|
|
14
14
|
"deploy": "npm run build && node ../../scripts/publish.mjs",
|
|
15
15
|
"test": "cross-env node --test --import=./run-test.js test/server-test.ts"
|
|
16
16
|
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/socket-mesh/client-server.git"
|
|
20
|
+
},
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/socket-mesh/client-server/labels/server"
|
|
23
|
+
},
|
|
17
24
|
"devDependencies": {
|
|
18
25
|
"@socket-mesh/local-storage": "^1.0.2",
|
|
19
26
|
"@types/base64id": "^2.0.2",
|
|
@@ -24,7 +31,7 @@
|
|
|
24
31
|
"@socket-mesh/async-stream-emitter": "^7.1.2",
|
|
25
32
|
"@socket-mesh/auth": "^2.2.0",
|
|
26
33
|
"@socket-mesh/auth-engine": "^1.0.0",
|
|
27
|
-
"@socket-mesh/client": "^18.1.
|
|
34
|
+
"@socket-mesh/client": "^18.1.3",
|
|
28
35
|
"@socket-mesh/errors": "^3.2.0",
|
|
29
36
|
"@socket-mesh/formatter": "^4.1.0",
|
|
30
37
|
"base64id": "^2.0.0",
|