@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.
@@ -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, UnexpectedResponseEvent, UpgradeEvent, ConnectingEvent, RemoveAuthTokenEvent, DeauthenticateEvent, AuthStateChangeEvent } from "@socket-mesh/core";
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> | SocketUnexpectedResponseEvent<T> | SocketUpgradeEvent<T> | WarningEvent;
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>;
@@ -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
  }
@@ -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
- get exchange() {
39
- return this.server.exchange;
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 { RawData } from "ws";
7
- import { AnyPacket, AnyResponse, SocketStatus, SocketTransport, InvokeMethodRequest, InvokeServiceRequest, TransmitMethodRequest, TransmitServiceRequest } from "@socket-mesh/core";
8
- import { ClientRequest, IncomingMessage } from "http";
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 decode(data: string | RawData): AnyPacket<SocketMapFromServer<T>> | AnyPacket<SocketMapFromServer<T>>[] | AnyResponse<SocketMapFromServer<T>> | AnyResponse<SocketMapFromServer<T>>[] | null;
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: RawData, isBinary: boolean): void;
23
- protected onPing(data: Buffer): void;
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
- protected onUpgrade(request: IncomingMessage): void;
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;
@@ -24,13 +24,12 @@ export class ServerTransport extends SocketTransport {
24
24
  }
25
25
  return false;
26
26
  }
27
- decode(data) {
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 null;
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
- onPing(data) {
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
- super.onPong(data);
105
- this.socket.server.emit('socketPong', { socket: this.socket, data });
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
- onUpgrade(request) {
148
- super.onUpgrade(request);
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, SocketUnexpectedResponseEvent, SocketUnsubscribeEvent, SocketUpgradeEvent, WarningEvent } from "./server-event.js";
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]: ClientSocket<ClientMapFromServer<T>> | ServerSocket<T>;
32
+ [id: string]: ServerSocket<T>;
35
33
  };
36
34
  clientCount: number;
37
35
  readonly codecEngine: CodecEngine;
38
36
  readonly pendingClients: {
39
- [id: string]: ClientSocket<ClientMapFromServer<T>> | ServerSocket<T>;
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
- if (socket.type === 'client') {
83
- (async () => {
84
- for await (let event of socket.listen()) {
85
- this.emit(`socket${event.stream[0].toUpperCase()}${event.stream.substring(1)}`, Object.assign({ socket }, event.value));
86
- }
87
- })();
88
- (async () => {
89
- for await (let event of socket.channels.listen()) {
90
- this.emit(`socket${event.stream[0].toUpperCase()}${event.stream.substring(1)}`, Object.assign({ socket }, event.value));
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.0",
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.0",
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",