@nestjs/websockets 9.4.2 → 10.0.0
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/context/ws-context-creator.d.ts +1 -0
- package/context/ws-context-creator.js +4 -0
- package/enums/ws-paramtype.enum.js +1 -1
- package/exceptions/base-ws-exception-filter.js +1 -1
- package/exceptions/ws-exceptions-handler.js +2 -5
- package/factories/ws-params-factory.js +1 -2
- package/package.json +7 -7
- package/socket-module.d.ts +2 -2
- package/socket-module.js +1 -1
- package/socket-server-provider.js +6 -3
- package/web-sockets-controller.js +2 -4
|
@@ -32,6 +32,7 @@ export declare class WsContextCreator {
|
|
|
32
32
|
constructor(wsProxy: WsProxy, exceptionFiltersContext: ExceptionFiltersContext, pipesContextCreator: PipesContextCreator, pipesConsumer: PipesConsumer, guardsContextCreator: GuardsContextCreator, guardsConsumer: GuardsConsumer, interceptorsContextCreator: InterceptorsContextCreator, interceptorsConsumer: InterceptorsConsumer);
|
|
33
33
|
create<T extends ParamsMetadata = ParamsMetadata>(instance: Controller, callback: (...args: unknown[]) => void, moduleKey: string, methodName: string): (...args: any[]) => Promise<void>;
|
|
34
34
|
reflectCallbackParamtypes(instance: Controller, callback: (...args: any[]) => any): any[];
|
|
35
|
+
reflectCallbackPattern(callback: (...args: any[]) => any): string;
|
|
35
36
|
createGuardsFn<TContext extends string = ContextType>(guards: any[], instance: Controller, callback: (...args: unknown[]) => any, contextType?: TContext): Function | null;
|
|
36
37
|
getMetadata<TMetadata, TContext extends ContextType = ContextType>(instance: Controller, methodName: string, contextType: TContext): WsHandlerMetadata;
|
|
37
38
|
exchangeKeysForValues<TMetadata = any>(keys: string[], metadata: TMetadata, moduleContext: string, paramsFactory: WsParamsFactory, contextFactory: (args: unknown[]) => ExecutionContextHost): ParamProperties[];
|
|
@@ -45,6 +45,7 @@ class WsContextCreator {
|
|
|
45
45
|
return callback.apply(instance, args);
|
|
46
46
|
};
|
|
47
47
|
return this.wsProxy.create(async (...args) => {
|
|
48
|
+
args.push(this.reflectCallbackPattern(callback));
|
|
48
49
|
const initialArgs = this.contextUtils.createNullArray(argsLength);
|
|
49
50
|
fnCanActivate && (await fnCanActivate(args));
|
|
50
51
|
return this.interceptorsConsumer.intercept(interceptors, args, instance, callback, handler(initialArgs, args), contextType);
|
|
@@ -53,6 +54,9 @@ class WsContextCreator {
|
|
|
53
54
|
reflectCallbackParamtypes(instance, callback) {
|
|
54
55
|
return Reflect.getMetadata(constants_1.PARAMTYPES_METADATA, instance, callback.name);
|
|
55
56
|
}
|
|
57
|
+
reflectCallbackPattern(callback) {
|
|
58
|
+
return Reflect.getMetadata(constants_3.MESSAGE_METADATA, callback);
|
|
59
|
+
}
|
|
56
60
|
createGuardsFn(guards, instance, callback, contextType) {
|
|
57
61
|
const canActivateFn = async (args) => {
|
|
58
62
|
const canActivate = await this.guardsConsumer.tryActivate(guards, args, instance, callback, contextType);
|
|
@@ -5,4 +5,4 @@ var WsParamtype;
|
|
|
5
5
|
(function (WsParamtype) {
|
|
6
6
|
WsParamtype[WsParamtype["SOCKET"] = 0] = "SOCKET";
|
|
7
7
|
WsParamtype[WsParamtype["PAYLOAD"] = 3] = "PAYLOAD";
|
|
8
|
-
})(WsParamtype
|
|
8
|
+
})(WsParamtype || (exports.WsParamtype = WsParamtype = {}));
|
|
@@ -42,5 +42,5 @@ class BaseWsExceptionFilter {
|
|
|
42
42
|
return (0, shared_utils_1.isObject)(err) && !!err.message;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
BaseWsExceptionFilter.logger = new common_1.Logger('WsExceptionsHandler');
|
|
46
45
|
exports.BaseWsExceptionFilter = BaseWsExceptionFilter;
|
|
46
|
+
BaseWsExceptionFilter.logger = new common_1.Logger('WsExceptionsHandler');
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WsExceptionsHandler = void 0;
|
|
4
4
|
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
|
5
|
+
const select_exception_filter_metadata_util_1 = require("@nestjs/common/utils/select-exception-filter-metadata.util");
|
|
5
6
|
const invalid_exception_filter_exception_1 = require("@nestjs/core/errors/exceptions/invalid-exception-filter.exception");
|
|
6
7
|
const base_ws_exception_filter_1 = require("./base-ws-exception-filter");
|
|
7
8
|
/**
|
|
@@ -28,11 +29,7 @@ class WsExceptionsHandler extends base_ws_exception_filter_1.BaseWsExceptionFilt
|
|
|
28
29
|
invokeCustomFilters(exception, args) {
|
|
29
30
|
if ((0, shared_utils_1.isEmpty)(this.filters))
|
|
30
31
|
return false;
|
|
31
|
-
const filter = this.filters
|
|
32
|
-
const hasMetatype = !exceptionMetatypes.length ||
|
|
33
|
-
exceptionMetatypes.some(ExceptionMetatype => exception instanceof ExceptionMetatype);
|
|
34
|
-
return hasMetatype;
|
|
35
|
-
});
|
|
32
|
+
const filter = (0, select_exception_filter_metadata_util_1.selectExceptionFilterMetadata)(this.filters, exception);
|
|
36
33
|
filter && filter.func(exception, args);
|
|
37
34
|
return !!filter;
|
|
38
35
|
}
|
|
@@ -4,7 +4,6 @@ exports.WsParamsFactory = void 0;
|
|
|
4
4
|
const ws_paramtype_enum_1 = require("../enums/ws-paramtype.enum");
|
|
5
5
|
class WsParamsFactory {
|
|
6
6
|
exchangeKeyForValue(type, data, args) {
|
|
7
|
-
var _a;
|
|
8
7
|
if (!args) {
|
|
9
8
|
return null;
|
|
10
9
|
}
|
|
@@ -12,7 +11,7 @@ class WsParamsFactory {
|
|
|
12
11
|
case ws_paramtype_enum_1.WsParamtype.SOCKET:
|
|
13
12
|
return args[0];
|
|
14
13
|
case ws_paramtype_enum_1.WsParamtype.PAYLOAD:
|
|
15
|
-
return data ?
|
|
14
|
+
return data ? args[1]?.[data] : args[1];
|
|
16
15
|
default:
|
|
17
16
|
return null;
|
|
18
17
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestjs/websockets",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"description": "Nest - modern, fast, powerful node.js web framework (@websockets)",
|
|
5
5
|
"author": "Kamil Mysliwiec",
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"iterare": "1.2.1",
|
|
17
17
|
"object-hash": "3.0.0",
|
|
18
|
-
"tslib": "2.5.
|
|
18
|
+
"tslib": "2.5.3"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@nestjs/common": "
|
|
22
|
-
"@nestjs/core": "
|
|
21
|
+
"@nestjs/common": "10.0.0",
|
|
22
|
+
"@nestjs/core": "10.0.0"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@nestjs/common": "^
|
|
26
|
-
"@nestjs/core": "^
|
|
27
|
-
"@nestjs/platform-socket.io": "^
|
|
25
|
+
"@nestjs/common": "^10.0.0",
|
|
26
|
+
"@nestjs/core": "^10.0.0",
|
|
27
|
+
"@nestjs/platform-socket.io": "^10.0.0",
|
|
28
28
|
"reflect-metadata": "^0.1.12",
|
|
29
29
|
"rxjs": "^7.1.0"
|
|
30
30
|
},
|
package/socket-module.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { InjectionToken } from '@nestjs/common/interfaces';
|
|
1
2
|
import { Injectable } from '@nestjs/common/interfaces/injectable.interface';
|
|
2
3
|
import { NestApplicationContextOptions } from '@nestjs/common/interfaces/nest-application-context-options.interface';
|
|
3
4
|
import { ApplicationConfig } from '@nestjs/core/application-config';
|
|
4
5
|
import { NestContainer } from '@nestjs/core/injector/container';
|
|
5
6
|
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
|
|
6
|
-
import { InstanceToken } from '@nestjs/core/injector/module';
|
|
7
7
|
import { GraphInspector } from '@nestjs/core/inspector/graph-inspector';
|
|
8
8
|
export declare class SocketModule<THttpServer = any, TAppOptions extends NestApplicationContextOptions = NestApplicationContextOptions> {
|
|
9
9
|
private readonly socketsContainer;
|
|
@@ -13,7 +13,7 @@ export declare class SocketModule<THttpServer = any, TAppOptions extends NestApp
|
|
|
13
13
|
private httpServer;
|
|
14
14
|
private appOptions;
|
|
15
15
|
register(container: NestContainer, applicationConfig: ApplicationConfig, graphInspector: GraphInspector, appOptions: TAppOptions, httpServer?: THttpServer): void;
|
|
16
|
-
connectAllGateways(providers: Map<
|
|
16
|
+
connectAllGateways(providers: Map<InjectionToken, InstanceWrapper<Injectable>>, moduleName: string): void;
|
|
17
17
|
connectGatewayToServer(wrapper: InstanceWrapper<Injectable>, moduleName: string): void;
|
|
18
18
|
close(): Promise<any>;
|
|
19
19
|
private initializeAdapter;
|
package/socket-module.js
CHANGED
|
@@ -58,7 +58,7 @@ class SocketModule {
|
|
|
58
58
|
await Promise.all((0, iterare_1.iterate)(servers.values())
|
|
59
59
|
.filter(({ server }) => server)
|
|
60
60
|
.map(async ({ server }) => adapter.close(server)));
|
|
61
|
-
await
|
|
61
|
+
await adapter?.dispose();
|
|
62
62
|
this.socketsContainer.clear();
|
|
63
63
|
}
|
|
64
64
|
initializeAdapter() {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SocketServerProvider = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
|
6
5
|
const server_and_event_streams_factory_1 = require("./factories/server-and-event-streams-factory");
|
|
7
6
|
class SocketServerProvider {
|
|
@@ -23,7 +22,7 @@ class SocketServerProvider {
|
|
|
23
22
|
}
|
|
24
23
|
createSocketServer(options, port) {
|
|
25
24
|
const adapter = this.applicationConfig.getIoAdapter();
|
|
26
|
-
const
|
|
25
|
+
const { namespace, server, ...partialOptions } = options;
|
|
27
26
|
const ioServer = adapter.create(port, partialOptions);
|
|
28
27
|
const serverAndEventStreamsHost = server_and_event_streams_factory_1.ServerAndEventStreamsFactory.create(ioServer);
|
|
29
28
|
this.socketsContainer.addOne({ port, path: options.path }, serverAndEventStreamsHost);
|
|
@@ -40,7 +39,11 @@ class SocketServerProvider {
|
|
|
40
39
|
}
|
|
41
40
|
getServerOfNamespace(options, port, server) {
|
|
42
41
|
const adapter = this.applicationConfig.getIoAdapter();
|
|
43
|
-
return adapter.create(port,
|
|
42
|
+
return adapter.create(port, {
|
|
43
|
+
...options,
|
|
44
|
+
namespace: this.validateNamespace(options.namespace || ''),
|
|
45
|
+
server,
|
|
46
|
+
});
|
|
44
47
|
}
|
|
45
48
|
validateNamespace(namespace) {
|
|
46
49
|
if (!(0, shared_utils_1.isString)(namespace)) {
|
|
@@ -104,11 +104,10 @@ class WebSocketsController {
|
|
|
104
104
|
}
|
|
105
105
|
inspectEntrypointDefinitions(instance, port, messageHandlers, instanceWrapperId) {
|
|
106
106
|
messageHandlers.forEach(handler => {
|
|
107
|
-
var _a;
|
|
108
107
|
this.graphInspector.insertEntrypointDefinition({
|
|
109
108
|
type: 'websocket',
|
|
110
109
|
methodName: handler.methodName,
|
|
111
|
-
className:
|
|
110
|
+
className: instance.constructor?.name,
|
|
112
111
|
classNodeId: instanceWrapperId,
|
|
113
112
|
metadata: {
|
|
114
113
|
port,
|
|
@@ -124,8 +123,7 @@ class WebSocketsController {
|
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
printSubscriptionLogs(instance, subscribersMap) {
|
|
127
|
-
|
|
128
|
-
const gatewayClassName = (_a = instance === null || instance === void 0 ? void 0 : instance.constructor) === null || _a === void 0 ? void 0 : _a.name;
|
|
126
|
+
const gatewayClassName = instance?.constructor?.name;
|
|
129
127
|
if (!gatewayClassName) {
|
|
130
128
|
return;
|
|
131
129
|
}
|