@nestjs/platform-ws 10.4.10 → 11.0.0-next.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/adapters/ws-adapter.d.ts +12 -2
- package/adapters/ws-adapter.js +15 -3
- package/package.json +1 -1
package/adapters/ws-adapter.d.ts
CHANGED
|
@@ -4,6 +4,14 @@ import { MessageMappingProperties } from '@nestjs/websockets/gateway-metadata-ex
|
|
|
4
4
|
import * as http from 'http';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
6
6
|
type WsServerRegistryEntry = any[];
|
|
7
|
+
type WsData = string | Buffer | ArrayBuffer | Buffer[];
|
|
8
|
+
type WsMessageParser = (data: WsData) => {
|
|
9
|
+
event: string;
|
|
10
|
+
data: any;
|
|
11
|
+
} | void;
|
|
12
|
+
type WsAdapterOptions = {
|
|
13
|
+
messageParser?: WsMessageParser;
|
|
14
|
+
};
|
|
7
15
|
/**
|
|
8
16
|
* @publicApi
|
|
9
17
|
*/
|
|
@@ -11,7 +19,8 @@ export declare class WsAdapter extends AbstractWsAdapter {
|
|
|
11
19
|
protected readonly logger: Logger;
|
|
12
20
|
protected readonly httpServersRegistry: Map<number, any>;
|
|
13
21
|
protected readonly wsServersRegistry: Map<number, WsServerRegistryEntry>;
|
|
14
|
-
|
|
22
|
+
protected messageParser: WsMessageParser;
|
|
23
|
+
constructor(appOrHttpServer?: INestApplicationContext | object, options?: WsAdapterOptions);
|
|
15
24
|
create(port: number, options?: Record<string, any> & {
|
|
16
25
|
namespace?: string;
|
|
17
26
|
server?: any;
|
|
@@ -23,7 +32,8 @@ export declare class WsAdapter extends AbstractWsAdapter {
|
|
|
23
32
|
bindClientDisconnect(client: any, callback: Function): void;
|
|
24
33
|
close(server: any): Promise<void>;
|
|
25
34
|
dispose(): Promise<void>;
|
|
26
|
-
|
|
35
|
+
setMessageParser(parser: WsMessageParser): void;
|
|
36
|
+
protected ensureHttpServerExists(port: number, httpServer?: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>): http.Server<typeof http.IncomingMessage, typeof http.ServerResponse> | undefined;
|
|
27
37
|
protected addWsServerToRegistry<T extends Record<'path', string> = any>(wsServer: T, port: number, path: string): void;
|
|
28
38
|
}
|
|
29
39
|
export {};
|
package/adapters/ws-adapter.js
CHANGED
|
@@ -22,12 +22,18 @@ const UNDERLYING_HTTP_SERVER_PORT = 0;
|
|
|
22
22
|
* @publicApi
|
|
23
23
|
*/
|
|
24
24
|
class WsAdapter extends websockets_1.AbstractWsAdapter {
|
|
25
|
-
constructor(appOrHttpServer) {
|
|
25
|
+
constructor(appOrHttpServer, options) {
|
|
26
26
|
super(appOrHttpServer);
|
|
27
27
|
this.logger = new common_1.Logger(WsAdapter.name);
|
|
28
28
|
this.httpServersRegistry = new Map();
|
|
29
29
|
this.wsServersRegistry = new Map();
|
|
30
|
+
this.messageParser = (data) => {
|
|
31
|
+
return JSON.parse(data.toString());
|
|
32
|
+
};
|
|
30
33
|
wsPackage = (0, load_package_util_1.loadPackage)('ws', 'WsAdapter', () => require('ws'));
|
|
34
|
+
if (options?.messageParser) {
|
|
35
|
+
this.messageParser = options.messageParser;
|
|
36
|
+
}
|
|
31
37
|
}
|
|
32
38
|
create(port, options) {
|
|
33
39
|
const { server, path, ...wsOptions } = options;
|
|
@@ -83,7 +89,10 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
|
|
|
83
89
|
}
|
|
84
90
|
bindMessageHandler(buffer, handlersMap, transform) {
|
|
85
91
|
try {
|
|
86
|
-
const message =
|
|
92
|
+
const message = this.messageParser(buffer.data);
|
|
93
|
+
if (!message) {
|
|
94
|
+
return rxjs_1.EMPTY;
|
|
95
|
+
}
|
|
87
96
|
const messageHandler = handlersMap.get(message.event);
|
|
88
97
|
const { callback } = messageHandler;
|
|
89
98
|
return transform(callback(message.data, message.event));
|
|
@@ -101,7 +110,7 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
|
|
|
101
110
|
client.on(constants_1.CLOSE_EVENT, callback);
|
|
102
111
|
}
|
|
103
112
|
async close(server) {
|
|
104
|
-
const closeEventSignal = new Promise((resolve, reject) => server.close(err => (err ? reject(err) : resolve(undefined))));
|
|
113
|
+
const closeEventSignal = new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve(undefined))));
|
|
105
114
|
for (const ws of server.clients) {
|
|
106
115
|
ws.terminate();
|
|
107
116
|
}
|
|
@@ -115,6 +124,9 @@ class WsAdapter extends websockets_1.AbstractWsAdapter {
|
|
|
115
124
|
this.httpServersRegistry.clear();
|
|
116
125
|
this.wsServersRegistry.clear();
|
|
117
126
|
}
|
|
127
|
+
setMessageParser(parser) {
|
|
128
|
+
this.messageParser = parser;
|
|
129
|
+
}
|
|
118
130
|
ensureHttpServerExists(port, httpServer = http.createServer()) {
|
|
119
131
|
if (this.httpServersRegistry.has(port)) {
|
|
120
132
|
return;
|