@scpxl/nodejs-framework 1.0.22 → 1.0.24
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/README.md +199 -9
- package/dist/api-requester/api-requester.d.ts +32 -0
- package/dist/api-requester/api-requester.d.ts.map +1 -0
- package/dist/api-requester/index.d.ts +3 -0
- package/dist/api-requester/index.d.ts.map +1 -0
- package/dist/application/base-application.d.ts +106 -0
- package/dist/application/base-application.d.ts.map +1 -0
- package/dist/application/base-application.interface.d.ts +162 -0
- package/dist/application/base-application.interface.d.ts.map +1 -0
- package/dist/application/base-application.js +3 -0
- package/dist/application/base-application.js.map +2 -2
- package/dist/application/command-application.d.ts +18 -0
- package/dist/application/command-application.d.ts.map +1 -0
- package/dist/application/command-application.interface.d.ts +26 -0
- package/dist/application/command-application.interface.d.ts.map +1 -0
- package/dist/application/index.d.ts +5 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/web-application.d.ts +43 -0
- package/dist/application/web-application.d.ts.map +1 -0
- package/dist/application/web-application.interface.d.ts +21 -0
- package/dist/application/web-application.interface.d.ts.map +1 -0
- package/dist/application/web-application.js +1 -0
- package/dist/application/web-application.js.map +2 -2
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/jwt.d.ts +25 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/manager.d.ts +107 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +5655 -0
- package/dist/cli/index.js.map +7 -0
- package/dist/cluster/cluster-manager.d.ts +15 -0
- package/dist/cluster/cluster-manager.d.ts.map +1 -0
- package/dist/cluster/cluster-manager.interface.d.ts +23 -0
- package/dist/cluster/cluster-manager.interface.d.ts.map +1 -0
- package/dist/cluster/index.d.ts +2 -0
- package/dist/cluster/index.d.ts.map +1 -0
- package/dist/command/command-manager.d.ts +19 -0
- package/dist/command/command-manager.d.ts.map +1 -0
- package/dist/command/command.d.ts +27 -0
- package/dist/command/command.d.ts.map +1 -0
- package/dist/command/command.interface.d.ts +11 -0
- package/dist/command/command.interface.d.ts.map +1 -0
- package/dist/command/index.d.ts +3 -0
- package/dist/command/index.d.ts.map +1 -0
- package/dist/config/env.d.ts +11 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/schema.d.ts +432 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/database/dynamic-entity-form-decorators.d.ts +31 -0
- package/dist/database/dynamic-entity-form-decorators.d.ts.map +1 -0
- package/dist/database/dynamic-entity.d.ts +15 -0
- package/dist/database/dynamic-entity.d.ts.map +1 -0
- package/dist/database/index.d.ts +5 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/instance.d.ts +36 -0
- package/dist/database/instance.d.ts.map +1 -0
- package/dist/database/instance.interface.d.ts +5 -0
- package/dist/database/instance.interface.d.ts.map +1 -0
- package/dist/database/manager.d.ts +27 -0
- package/dist/database/manager.d.ts.map +1 -0
- package/dist/database/manager.interface.d.ts +18 -0
- package/dist/database/manager.interface.d.ts.map +1 -0
- package/dist/error/error-reporter.d.ts +96 -0
- package/dist/error/error-reporter.d.ts.map +1 -0
- package/dist/error/error.interface.d.ts +126 -0
- package/dist/error/error.interface.d.ts.map +1 -0
- package/dist/error/framework-errors.d.ts +113 -0
- package/dist/error/framework-errors.d.ts.map +1 -0
- package/dist/error/index.d.ts +6 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/event/controller/base.d.ts +23 -0
- package/dist/event/controller/base.d.ts.map +1 -0
- package/dist/event/controller/base.interface.d.ts +11 -0
- package/dist/event/controller/base.interface.d.ts.map +1 -0
- package/dist/event/index.d.ts +5 -0
- package/dist/event/index.d.ts.map +1 -0
- package/dist/event/manager.d.ts +21 -0
- package/dist/event/manager.d.ts.map +1 -0
- package/dist/event/manager.interface.d.ts +137 -0
- package/dist/event/manager.interface.d.ts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/lifecycle/exit.d.ts +11 -0
- package/dist/lifecycle/exit.d.ts.map +1 -0
- package/dist/lifecycle/index.d.ts +7 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/lifecycle-manager.d.ts +66 -0
- package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -0
- package/dist/lifecycle/lifecycle-manager.js +6 -11
- package/dist/lifecycle/lifecycle-manager.js.map +2 -2
- package/dist/lifecycle/shutdown-controller.d.ts +15 -0
- package/dist/lifecycle/shutdown-controller.d.ts.map +1 -0
- package/dist/lifecycle/types.d.ts +28 -0
- package/dist/lifecycle/types.d.ts.map +1 -0
- package/dist/logger/index.d.ts +2 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/logger.d.ts +59 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.interface.d.ts +2 -0
- package/dist/logger/logger.interface.d.ts.map +1 -0
- package/dist/logger/logger.js +8 -1
- package/dist/logger/logger.js.map +2 -2
- package/dist/performance/cache-performance.d.ts +64 -0
- package/dist/performance/cache-performance.d.ts.map +1 -0
- package/dist/performance/database-performance.d.ts +40 -0
- package/dist/performance/database-performance.d.ts.map +1 -0
- package/dist/performance/index.d.ts +8 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/performance-monitor.d.ts +68 -0
- package/dist/performance/performance-monitor.d.ts.map +1 -0
- package/dist/performance/performance-monitor.plugin.d.ts +24 -0
- package/dist/performance/performance-monitor.plugin.d.ts.map +1 -0
- package/dist/performance/queue-performance.d.ts +46 -0
- package/dist/performance/queue-performance.d.ts.map +1 -0
- package/dist/performance/webserver-performance.d.ts +69 -0
- package/dist/performance/webserver-performance.d.ts.map +1 -0
- package/dist/performance/websocket-performance.d.ts +44 -0
- package/dist/performance/websocket-performance.d.ts.map +1 -0
- package/dist/queue/index.d.ts +6 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.interface.d.ts +10 -0
- package/dist/queue/index.interface.d.ts.map +1 -0
- package/dist/queue/job.interface.d.ts +43 -0
- package/dist/queue/job.interface.d.ts.map +1 -0
- package/dist/queue/manager.d.ts +44 -0
- package/dist/queue/manager.d.ts.map +1 -0
- package/dist/queue/manager.interface.d.ts +18 -0
- package/dist/queue/manager.interface.d.ts.map +1 -0
- package/dist/queue/processor/base.d.ts +29 -0
- package/dist/queue/processor/base.d.ts.map +1 -0
- package/dist/queue/processor/processor.interface.d.ts +16 -0
- package/dist/queue/processor/processor.interface.d.ts.map +1 -0
- package/dist/queue/worker.d.ts +14 -0
- package/dist/queue/worker.d.ts.map +1 -0
- package/dist/queue/worker.interface.d.ts +13 -0
- package/dist/queue/worker.interface.d.ts.map +1 -0
- package/dist/redis/index.d.ts +3 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/instance.d.ts +32 -0
- package/dist/redis/instance.d.ts.map +1 -0
- package/dist/redis/instance.interface.d.ts +9 -0
- package/dist/redis/instance.interface.d.ts.map +1 -0
- package/dist/redis/manager.d.ts +15 -0
- package/dist/redis/manager.d.ts.map +1 -0
- package/dist/redis/manager.interface.d.ts +8 -0
- package/dist/redis/manager.interface.d.ts.map +1 -0
- package/dist/redis/manager.js +13 -14
- package/dist/redis/manager.js.map +2 -2
- package/dist/request-context/index.d.ts +3 -0
- package/dist/request-context/index.d.ts.map +1 -0
- package/dist/request-context/request-context.d.ts +108 -0
- package/dist/request-context/request-context.d.ts.map +1 -0
- package/dist/request-context/request-context.interface.d.ts +46 -0
- package/dist/request-context/request-context.interface.d.ts.map +1 -0
- package/dist/services/aws/index.d.ts +2 -0
- package/dist/services/aws/index.d.ts.map +1 -0
- package/dist/services/aws/s3.d.ts +54 -0
- package/dist/services/aws/s3.d.ts.map +1 -0
- package/dist/services/aws/s3.interface.d.ts +14 -0
- package/dist/services/aws/s3.interface.d.ts.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/util/file.d.ts +58 -0
- package/dist/util/file.d.ts.map +1 -0
- package/dist/util/helper.d.ts +51 -0
- package/dist/util/helper.d.ts.map +1 -0
- package/dist/util/helper.js +72 -10
- package/dist/util/helper.js.map +2 -2
- package/dist/util/image.d.ts +12 -0
- package/dist/util/image.d.ts.map +1 -0
- package/dist/util/index.d.ts +11 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/loader.d.ts +21 -0
- package/dist/util/loader.d.ts.map +1 -0
- package/dist/util/loader.js +5 -2
- package/dist/util/loader.js.map +2 -2
- package/dist/util/num.d.ts +13 -0
- package/dist/util/num.d.ts.map +1 -0
- package/dist/util/os.d.ts +6 -0
- package/dist/util/os.d.ts.map +1 -0
- package/dist/util/str.d.ts +39 -0
- package/dist/util/str.d.ts.map +1 -0
- package/dist/util/time.d.ts +19 -0
- package/dist/util/time.d.ts.map +1 -0
- package/dist/util/time.interface.d.ts +12 -0
- package/dist/util/time.interface.d.ts.map +1 -0
- package/dist/util/timing.d.ts +36 -0
- package/dist/util/timing.d.ts.map +1 -0
- package/dist/util/timing.interface.d.ts +47 -0
- package/dist/util/timing.interface.d.ts.map +1 -0
- package/dist/util/url.d.ts +7 -0
- package/dist/util/url.d.ts.map +1 -0
- package/dist/webserver/controller/auth-middleware.d.ts +21 -0
- package/dist/webserver/controller/auth-middleware.d.ts.map +1 -0
- package/dist/webserver/controller/base.d.ts +41 -0
- package/dist/webserver/controller/base.d.ts.map +1 -0
- package/dist/webserver/controller/base.interface.d.ts +50 -0
- package/dist/webserver/controller/base.interface.d.ts.map +1 -0
- package/dist/webserver/controller/entity.d.ts +94 -0
- package/dist/webserver/controller/entity.d.ts.map +1 -0
- package/dist/webserver/controller/example-auth.d.ts +12 -0
- package/dist/webserver/controller/example-auth.d.ts.map +1 -0
- package/dist/webserver/controller/health.d.ts +15 -0
- package/dist/webserver/controller/health.d.ts.map +1 -0
- package/dist/webserver/define-action.d.ts +26 -0
- package/dist/webserver/define-action.d.ts.map +1 -0
- package/dist/webserver/define-action.js +16 -0
- package/dist/webserver/define-action.js.map +7 -0
- package/dist/webserver/define-route.d.ts +53 -0
- package/dist/webserver/define-route.d.ts.map +1 -0
- package/dist/webserver/define-route.js +11 -6
- package/dist/webserver/define-route.js.map +2 -2
- package/dist/webserver/index.d.ts +14 -0
- package/dist/webserver/index.d.ts.map +1 -0
- package/dist/webserver/index.js +2 -0
- package/dist/webserver/index.js.map +2 -2
- package/dist/webserver/util.d.ts +10 -0
- package/dist/webserver/util.d.ts.map +1 -0
- package/dist/webserver/util.js +5 -2
- package/dist/webserver/util.js.map +2 -2
- package/dist/webserver/webserver.d.ts +93 -0
- package/dist/webserver/webserver.d.ts.map +1 -0
- package/dist/webserver/webserver.interface.d.ts +181 -0
- package/dist/webserver/webserver.interface.d.ts.map +1 -0
- package/dist/webserver/webserver.interface.js.map +1 -1
- package/dist/webserver/webserver.js +28 -31
- package/dist/webserver/webserver.js.map +2 -2
- package/dist/websocket/controller/client/base.d.ts +12 -0
- package/dist/websocket/controller/client/base.d.ts.map +1 -0
- package/dist/websocket/controller/client/base.interface.d.ts +12 -0
- package/dist/websocket/controller/client/base.interface.d.ts.map +1 -0
- package/dist/websocket/controller/server/base.d.ts +13 -0
- package/dist/websocket/controller/server/base.d.ts.map +1 -0
- package/dist/websocket/controller/server/base.interface.d.ts +13 -0
- package/dist/websocket/controller/server/base.interface.d.ts.map +1 -0
- package/dist/websocket/controllers/client/system.d.ts +6 -0
- package/dist/websocket/controllers/client/system.d.ts.map +1 -0
- package/dist/websocket/controllers/server/system.d.ts +7 -0
- package/dist/websocket/controllers/server/system.d.ts.map +1 -0
- package/dist/websocket/index.d.ts +7 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/routes/client/system.d.ts +3 -0
- package/dist/websocket/routes/client/system.d.ts.map +1 -0
- package/dist/websocket/routes/server/system.d.ts +3 -0
- package/dist/websocket/routes/server/system.d.ts.map +1 -0
- package/dist/websocket/utils.d.ts +9 -0
- package/dist/websocket/utils.d.ts.map +1 -0
- package/dist/websocket/websocket-base.d.ts +19 -0
- package/dist/websocket/websocket-base.d.ts.map +1 -0
- package/dist/websocket/websocket-client-manager.d.ts +53 -0
- package/dist/websocket/websocket-client-manager.d.ts.map +1 -0
- package/dist/websocket/websocket-client-manager.interface.d.ts +8 -0
- package/dist/websocket/websocket-client-manager.interface.d.ts.map +1 -0
- package/dist/websocket/websocket-client.d.ts +35 -0
- package/dist/websocket/websocket-client.d.ts.map +1 -0
- package/dist/websocket/websocket-client.interface.d.ts +14 -0
- package/dist/websocket/websocket-client.interface.d.ts.map +1 -0
- package/dist/websocket/websocket-room-manager.d.ts +32 -0
- package/dist/websocket/websocket-room-manager.d.ts.map +1 -0
- package/dist/websocket/websocket-server.d.ts +92 -0
- package/dist/websocket/websocket-server.d.ts.map +1 -0
- package/dist/websocket/websocket-server.interface.d.ts +16 -0
- package/dist/websocket/websocket-server.interface.d.ts.map +1 -0
- package/dist/websocket/websocket-server.js +33 -9
- package/dist/websocket/websocket-server.js.map +2 -2
- package/dist/websocket/websocket-service.d.ts +44 -0
- package/dist/websocket/websocket-service.d.ts.map +1 -0
- package/dist/websocket/websocket.interface.d.ts +124 -0
- package/dist/websocket/websocket.interface.d.ts.map +1 -0
- package/package.json +13 -13
- package/pxl.js +0 -4
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { WebSocket } from 'ws';
|
|
2
|
+
import { WebSocketClientBaseController } from '../../index.js';
|
|
3
|
+
export default class SystemController extends WebSocketClientBaseController {
|
|
4
|
+
clientList: (_clientWebSocket: WebSocket, _webSocketClientId: string, _data: any) => any;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../src/websocket/controllers/client/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,6BAA6B;IAClE,UAAU,GAAI,kBAAkB,SAAS,EAAE,oBAAoB,MAAM,EAAE,OAAO,GAAG,KAAG,GAAG,CAE5F;CACH"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WebSocket } from 'ws';
|
|
2
|
+
import WebSocketServerBaseController from '../../controller/server/base.js';
|
|
3
|
+
export default class SystemController extends WebSocketServerBaseController {
|
|
4
|
+
joinRoom: (clientWebSocket: WebSocket, webSocketClientId: string, data: any) => any;
|
|
5
|
+
leaveRoom: (clientWebSocket: WebSocket, webSocketClientId: string, data: any) => any;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../src/websocket/controllers/server/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,6BAA6B,MAAM,iCAAiC,CAAC;AAG5E,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,6BAA6B;IAClE,QAAQ,GAAI,iBAAiB,SAAS,EAAE,mBAAmB,MAAM,EAAE,MAAM,GAAG,KAAG,GAAG,CA6CvF;IAEK,SAAS,GAAI,iBAAiB,SAAS,EAAE,mBAAmB,MAAM,EAAE,MAAM,GAAG,KAAG,GAAG,CAqCxF;CACH"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { WebSocketRoute } from './websocket.interface.js';
|
|
2
|
+
export { WebSocketRedisSubscriberEvent } from './websocket.interface.js';
|
|
3
|
+
export { default as WebSocketServerBaseController } from './controller/server/base.js';
|
|
4
|
+
export { default as WebSocketClientBaseController } from './controller/client/base.js';
|
|
5
|
+
export { WebSocketService } from './websocket-service.js';
|
|
6
|
+
export type { WebSocketMessage, WebSocketServiceOptions } from './websocket-service.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/websocket/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../src/websocket/routes/client/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,eAAO,MAAM,2BAA2B,EAAE,cAAc,EAMvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../src/websocket/routes/server/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,eAAO,MAAM,2BAA2B,EAAE,cAAc,EAWvD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type WebSocket from 'ws';
|
|
2
|
+
export interface LogOptions {
|
|
3
|
+
muteWorker?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function generateClientId(): string;
|
|
6
|
+
export declare function log(message: string, meta?: Record<string, unknown>, options?: LogOptions): void;
|
|
7
|
+
export declare function parseServerMessage(message: WebSocket.Data): Record<string, unknown>;
|
|
8
|
+
export declare function getRouteKey(type: string, action: string): string;
|
|
9
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/websocket/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAGhC,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAE/F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBnF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { WebSocketMessageHandler, WebSocketRoute, WebSocketType } from './websocket.interface.js';
|
|
2
|
+
import type WebSocket from 'ws';
|
|
3
|
+
export default abstract class WebSocketBase {
|
|
4
|
+
protected routes: WebSocketRoute[];
|
|
5
|
+
protected routeHandlers: Map<string, WebSocketMessageHandler>;
|
|
6
|
+
protected defaultRoutes: WebSocketRoute[];
|
|
7
|
+
abstract get type(): WebSocketType;
|
|
8
|
+
protected abstract getControllerDependencies(): Record<string, unknown>;
|
|
9
|
+
protected abstract shouldPrintRoutes(): boolean;
|
|
10
|
+
protected abstract handleMessageError(clientId: string, error: string): void;
|
|
11
|
+
protected configureRoutes(routes: WebSocketRoute[], controllersDirectory: string): Promise<void>;
|
|
12
|
+
protected handleServerMessage(ws: WebSocket, message: WebSocket.Data, clientId: string): Promise<{
|
|
13
|
+
type: unknown;
|
|
14
|
+
action: unknown;
|
|
15
|
+
response: unknown;
|
|
16
|
+
} | void>;
|
|
17
|
+
protected printRoutes(): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=websocket-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-base.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIvG,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAGhC,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,aAAa;IACzC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,CAAM;IACxC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAa;IAE1E,SAAS,CAAC,aAAa,EAAE,cAAc,EAAE,CAAM;IAE/C,aAAoB,IAAI,IAAI,aAAa,CAAC;IAE1C,SAAS,CAAC,QAAQ,CAAC,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO;IAC/C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;cAE5D,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAwEtF,mBAAmB,CACjC,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,SAAS,CAAC,IAAI,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAuDxE,SAAS,CAAC,WAAW,IAAI,IAAI;CAiB9B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import type { WebSocketClientData } from './websocket-client-manager.interface.js';
|
|
3
|
+
export default class WebSocketClientManager {
|
|
4
|
+
private clients;
|
|
5
|
+
addClient({ clientId, ws, lastActivity, user, }: {
|
|
6
|
+
clientId: string;
|
|
7
|
+
ws: WebSocket | null;
|
|
8
|
+
lastActivity: number;
|
|
9
|
+
user?: {
|
|
10
|
+
userId: number;
|
|
11
|
+
payload: any;
|
|
12
|
+
} | null;
|
|
13
|
+
}): void;
|
|
14
|
+
getClientId({ ws }: {
|
|
15
|
+
ws: WebSocket;
|
|
16
|
+
}): string | undefined;
|
|
17
|
+
getClient({ clientId, requireWs, }: {
|
|
18
|
+
clientId: string;
|
|
19
|
+
requireWs?: boolean;
|
|
20
|
+
}): WebSocketClientData | undefined;
|
|
21
|
+
updateClient({ clientId, key, data, broadcastClientList, }: {
|
|
22
|
+
clientId: string;
|
|
23
|
+
key: string;
|
|
24
|
+
data: any;
|
|
25
|
+
broadcastClientList?: boolean;
|
|
26
|
+
}): void;
|
|
27
|
+
removeClient(clientId: string): void;
|
|
28
|
+
getClientList(): {
|
|
29
|
+
[key: string]: any;
|
|
30
|
+
clientId: string;
|
|
31
|
+
}[];
|
|
32
|
+
getClientByKey({ key, value, requireWs, userType, }: {
|
|
33
|
+
key: string;
|
|
34
|
+
value: string;
|
|
35
|
+
requireWs?: boolean;
|
|
36
|
+
userType?: string;
|
|
37
|
+
}): {
|
|
38
|
+
ws: WebSocket | null;
|
|
39
|
+
lastActivity: number;
|
|
40
|
+
roomName?: string;
|
|
41
|
+
clientId: string;
|
|
42
|
+
} | undefined;
|
|
43
|
+
getClients({ userType }?: {
|
|
44
|
+
userType?: string;
|
|
45
|
+
}): WebSocketClientData[];
|
|
46
|
+
disconnectClient({ clientId }: {
|
|
47
|
+
clientId: string;
|
|
48
|
+
}): void;
|
|
49
|
+
printClients(): void;
|
|
50
|
+
broadcastClientList(type: string): void;
|
|
51
|
+
cleanup(): void;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=websocket-client-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client-manager.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-client-manager.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAInF,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC,OAAO,CAAC,OAAO,CAA+C;IAEvD,SAAS,CAAC,EACf,QAAQ,EACR,EAAE,EACF,YAAY,EACZ,IAAI,GACL,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,GAAG,CAAA;SAAE,GAAG,IAAI,CAAC;KAChD;IAiBM,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,SAAS,CAAA;KAAE,GAAG,MAAM,GAAG,SAAS;IAI1D,SAAS,CAAC,EACf,QAAQ,EACR,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,mBAAmB,GAAG,SAAS;IAU5B,YAAY,CAAC,EAClB,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,mBAAmB,GACpB,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,GAAG,CAAC;QACV,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B;IA2CM,YAAY,CAAC,QAAQ,EAAE,MAAM;IAsB7B,aAAa;;kBAEN,MAAM;;IAcb,cAAc,CAAC,EACpB,GAAG,EACH,KAAK,EACL,SAAS,EACT,QAAQ,GACT,EAAE;QACD,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;;;;IA6BM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAgBnD,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAwBnD,YAAY;IAwBZ,mBAAmB,CAAC,IAAI,EAAE,MAAM;IA0BhC,OAAO,IAAI,IAAI;CAsBvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client-manager.interface.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-client-manager.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAEhC,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { WebSocketRoute, WebSocketType } from './websocket.interface.js';
|
|
2
|
+
import type RedisInstance from '../redis/instance.js';
|
|
3
|
+
import type QueueManager from '../queue/manager.js';
|
|
4
|
+
import type DatabaseInstance from '../database/instance.js';
|
|
5
|
+
import type { WebSocketClientProps } from './websocket-client.interface.js';
|
|
6
|
+
import WebSocketBase from './websocket-base.js';
|
|
7
|
+
export default class WebSocketClient extends WebSocketBase {
|
|
8
|
+
protected defaultRoutes: WebSocketRoute[];
|
|
9
|
+
private applicationConfig;
|
|
10
|
+
private options;
|
|
11
|
+
private redisInstance;
|
|
12
|
+
private queueManager;
|
|
13
|
+
private databaseInstance;
|
|
14
|
+
private ws?;
|
|
15
|
+
private clientId?;
|
|
16
|
+
private isConnected;
|
|
17
|
+
constructor(props: WebSocketClientProps);
|
|
18
|
+
get type(): WebSocketType;
|
|
19
|
+
load(): Promise<void>;
|
|
20
|
+
connectToServer(): Promise<void>;
|
|
21
|
+
protected getControllerDependencies(): {
|
|
22
|
+
sendMessage: (data: unknown) => void;
|
|
23
|
+
redisInstance: RedisInstance;
|
|
24
|
+
queueManager: QueueManager;
|
|
25
|
+
databaseInstance: DatabaseInstance;
|
|
26
|
+
};
|
|
27
|
+
protected shouldPrintRoutes(): boolean;
|
|
28
|
+
private handleIncomingMessage;
|
|
29
|
+
protected handleMessageError(clientId: string, error: string): void;
|
|
30
|
+
sendClientMessage: (data: unknown, binary?: boolean) => void;
|
|
31
|
+
sendMessage: (data: unknown) => void;
|
|
32
|
+
disconnect(): void;
|
|
33
|
+
isClientConnected(): boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=websocket-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE5E,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAKhD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,aAAa;IACxD,SAAS,CAAC,aAAa,EAAE,cAAc,EAAE,CAMvC;IAEF,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAkB;gBAEzB,KAAK,EAAE,oBAAoB;IAWvC,IAAW,IAAI,IAAI,aAAa,CAE/B;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA0E7C,SAAS,CAAC,yBAAyB,IAAI;QACrC,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,aAAa,EAAE,aAAa,CAAC;QAC7B,YAAY,EAAE,YAAY,CAAC;QAC3B,gBAAgB,EAAE,gBAAgB,CAAC;KACpC;IAQD,SAAS,CAAC,iBAAiB,IAAI,OAAO;IAItC,OAAO,CAAC,qBAAqB,CAqB3B;IAEF,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5D,iBAAiB,GAAI,MAAM,OAAO,EAAE,SAAQ,OAAe,KAAG,IAAI,CAYvE;IAEK,WAAW,GAAI,MAAM,OAAO,KAAG,IAAI,CAExC;IAEK,UAAU,IAAI,IAAI;IAWlB,iBAAiB,IAAI,OAAO;CAGpC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ApplicationConfig } from '../application/base-application.interface.js';
|
|
2
|
+
import type DatabaseInstance from '../database/instance.js';
|
|
3
|
+
import type QueueManager from '../queue/manager.js';
|
|
4
|
+
import type { RedisInstance } from '../redis/index.js';
|
|
5
|
+
import type { WebSocketOptions, WebSocketRoute } from './websocket.interface.js';
|
|
6
|
+
export interface WebSocketClientProps {
|
|
7
|
+
applicationConfig: ApplicationConfig;
|
|
8
|
+
options: WebSocketOptions;
|
|
9
|
+
redisInstance: RedisInstance;
|
|
10
|
+
queueManager: QueueManager;
|
|
11
|
+
databaseInstance: DatabaseInstance;
|
|
12
|
+
routes: WebSocketRoute[];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=websocket-client.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client.interface.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-client.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEjF,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type WebSocketClientManager from './websocket-client-manager.js';
|
|
2
|
+
export default class WebSocketRoomManager {
|
|
3
|
+
private clientManager;
|
|
4
|
+
rooms: Map<string, Set<string>>;
|
|
5
|
+
constructor({ clientManager }: {
|
|
6
|
+
clientManager: WebSocketClientManager;
|
|
7
|
+
});
|
|
8
|
+
addClientToRoom({ clientId, user, roomName, broadcast, }: {
|
|
9
|
+
clientId: string;
|
|
10
|
+
user: any;
|
|
11
|
+
roomName: string;
|
|
12
|
+
broadcast?: boolean;
|
|
13
|
+
}): void;
|
|
14
|
+
removeClientFromRoom({ roomName, clientId, broadcast, }: {
|
|
15
|
+
roomName: string;
|
|
16
|
+
clientId: string;
|
|
17
|
+
broadcast?: boolean;
|
|
18
|
+
}): void;
|
|
19
|
+
removeClientFromAllRooms({ clientId }: {
|
|
20
|
+
clientId: string;
|
|
21
|
+
}): void;
|
|
22
|
+
isClientInRoom({ clientId, roomName }: {
|
|
23
|
+
clientId: string;
|
|
24
|
+
roomName: string;
|
|
25
|
+
}): boolean;
|
|
26
|
+
printRooms(): void;
|
|
27
|
+
getRoomClients({ roomName }: {
|
|
28
|
+
roomName: string;
|
|
29
|
+
}): string[];
|
|
30
|
+
cleanup(): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=websocket-room-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-room-manager.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-room-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,sBAAsB,MAAM,+BAA+B,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAAC,aAAa,CAAyB;IAEvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAa;gBAEvC,EAAE,aAAa,EAAE,EAAE;QAAE,aAAa,EAAE,sBAAsB,CAAA;KAAE;IAIjE,eAAe,CAAC,EACrB,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,GAAG,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAwCM,oBAAoB,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IA0CM,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAc3D,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAY7E,UAAU;IAqCV,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE;IAK5D,OAAO,IAAI,IAAI;CAKvB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { WebSocketServer as WS, WebSocket } from 'ws';
|
|
2
|
+
import { type WebSocketRoute, type WebSocketType } from './websocket.interface.js';
|
|
3
|
+
import type RedisInstance from '../redis/instance.js';
|
|
4
|
+
import type QueueManager from '../queue/manager.js';
|
|
5
|
+
import type DatabaseInstance from '../database/instance.js';
|
|
6
|
+
import type { WebSocketServerProps } from './websocket-server.interface.js';
|
|
7
|
+
import WebSocketClientManager from './websocket-client-manager.js';
|
|
8
|
+
import WebSocketBase from './websocket-base.js';
|
|
9
|
+
import type { FastifyInstance } from 'fastify';
|
|
10
|
+
export default class WebSocketServer extends WebSocketBase {
|
|
11
|
+
protected defaultRoutes: WebSocketRoute[];
|
|
12
|
+
private server?;
|
|
13
|
+
private abortController;
|
|
14
|
+
private workerId;
|
|
15
|
+
private uniqueInstanceId;
|
|
16
|
+
private applicationConfig;
|
|
17
|
+
private options;
|
|
18
|
+
clientManager: WebSocketClientManager;
|
|
19
|
+
private roomManager;
|
|
20
|
+
get rooms(): Map<string, Set<string>>;
|
|
21
|
+
private redisInstance;
|
|
22
|
+
private queueManager;
|
|
23
|
+
private databaseInstance;
|
|
24
|
+
/** Redis subscriber events */
|
|
25
|
+
private redisSubscriberEvents;
|
|
26
|
+
constructor(props: WebSocketServerProps);
|
|
27
|
+
get type(): WebSocketType;
|
|
28
|
+
private validateWebSocketAuth;
|
|
29
|
+
load(): Promise<void>;
|
|
30
|
+
start({ fastifyServer }: {
|
|
31
|
+
fastifyServer: FastifyInstance;
|
|
32
|
+
}): Promise<{
|
|
33
|
+
server: WS;
|
|
34
|
+
}>;
|
|
35
|
+
stop(): Promise<void>;
|
|
36
|
+
protected getControllerDependencies(): {
|
|
37
|
+
webSocketServer: WebSocketServer;
|
|
38
|
+
redisInstance: RedisInstance;
|
|
39
|
+
queueManager: QueueManager;
|
|
40
|
+
databaseInstance: DatabaseInstance;
|
|
41
|
+
};
|
|
42
|
+
protected shouldPrintRoutes(): boolean;
|
|
43
|
+
private handleServerStart;
|
|
44
|
+
/**
|
|
45
|
+
* Handle subscriber message.
|
|
46
|
+
*/
|
|
47
|
+
private handleSubscriberMessage;
|
|
48
|
+
private handleServerError;
|
|
49
|
+
private handleServerClientConnection;
|
|
50
|
+
leaveRoom({ ws, roomName }: {
|
|
51
|
+
ws: WebSocket;
|
|
52
|
+
roomName: string;
|
|
53
|
+
}): void;
|
|
54
|
+
private onClientConnect;
|
|
55
|
+
private onClientDisconnect;
|
|
56
|
+
private handleServerClientDisconnection;
|
|
57
|
+
private handleClientMessage;
|
|
58
|
+
protected handleMessageError(clientId: string, error: string): void;
|
|
59
|
+
private checkInactiveClients;
|
|
60
|
+
broadcastToAllClients({ data, excludeClientId, }: {
|
|
61
|
+
data: {
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
};
|
|
64
|
+
excludeClientId?: string;
|
|
65
|
+
}): void;
|
|
66
|
+
sendMessageError({ webSocketClientId, error }: {
|
|
67
|
+
webSocketClientId: string;
|
|
68
|
+
error: string;
|
|
69
|
+
}): void;
|
|
70
|
+
private onJoinRoom;
|
|
71
|
+
joinRoom({ ws, userId, userType, username, roomName, }: {
|
|
72
|
+
ws: WebSocket;
|
|
73
|
+
userId?: number;
|
|
74
|
+
userType?: string;
|
|
75
|
+
username?: string;
|
|
76
|
+
roomName: string;
|
|
77
|
+
}): Promise<true | undefined>;
|
|
78
|
+
sendClientMessage: (ws: WebSocket, data: unknown, binary?: boolean) => void;
|
|
79
|
+
sendMessage: ({ data }: {
|
|
80
|
+
data: unknown;
|
|
81
|
+
}) => void;
|
|
82
|
+
sendMessageToAll: ({ data }: {
|
|
83
|
+
data: unknown;
|
|
84
|
+
}) => void;
|
|
85
|
+
sendCustomMessage: ({ data }: {
|
|
86
|
+
data: unknown;
|
|
87
|
+
}) => void;
|
|
88
|
+
getClients({ userType }: {
|
|
89
|
+
userType?: string;
|
|
90
|
+
}): any[];
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=websocket-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ApplicationConfig } from '../application/base-application.interface.js';
|
|
2
|
+
import type DatabaseInstance from '../database/instance.js';
|
|
3
|
+
import type QueueManager from '../queue/manager.js';
|
|
4
|
+
import type { RedisInstance } from '../redis/index.js';
|
|
5
|
+
import type { WebSocketOptions, WebSocketRoute } from './websocket.interface.js';
|
|
6
|
+
export interface WebSocketServerProps {
|
|
7
|
+
uniqueInstanceId: string;
|
|
8
|
+
applicationConfig: ApplicationConfig;
|
|
9
|
+
options: WebSocketOptions;
|
|
10
|
+
redisInstance: RedisInstance;
|
|
11
|
+
queueManager: QueueManager;
|
|
12
|
+
databaseInstance: DatabaseInstance;
|
|
13
|
+
routes: WebSocketRoute[];
|
|
14
|
+
workerId: number | null;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=websocket-server.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-server.interface.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-server.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEjF,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB"}
|
|
@@ -288,7 +288,10 @@ class WebSocketServer extends WebSocketBase {
|
|
|
288
288
|
break;
|
|
289
289
|
}
|
|
290
290
|
case WebSocketRedisSubscriberEvent.QueueJobError: {
|
|
291
|
-
parsedMessage.data =
|
|
291
|
+
parsedMessage.data = {
|
|
292
|
+
...parsedMessage.data ?? {},
|
|
293
|
+
error: parsedMessage.error
|
|
294
|
+
};
|
|
292
295
|
break;
|
|
293
296
|
}
|
|
294
297
|
case WebSocketRedisSubscriberEvent.Custom: {
|
|
@@ -462,9 +465,30 @@ class WebSocketServer extends WebSocketBase {
|
|
|
462
465
|
);
|
|
463
466
|
}
|
|
464
467
|
checkInactiveClients() {
|
|
468
|
+
const now = Date.now();
|
|
465
469
|
if (this.options.disconnectInactiveClients?.enabled && this.options.disconnectInactiveClients.log) {
|
|
466
470
|
log("Checking inactive clients...");
|
|
467
471
|
}
|
|
472
|
+
if (!this.options.disconnectInactiveClients?.enabled) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
const maxInactiveTime = this.options.disconnectInactiveClients.inactiveTime;
|
|
476
|
+
if (!maxInactiveTime) {
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
const clients = this.clientManager.getClients();
|
|
480
|
+
clients.forEach((client) => {
|
|
481
|
+
const inactiveTime = now - client.lastActivity;
|
|
482
|
+
if (inactiveTime > maxInactiveTime) {
|
|
483
|
+
this.clientManager.disconnectClient(client.clientId);
|
|
484
|
+
if (this.options.disconnectInactiveClients?.log) {
|
|
485
|
+
log("Disconnected inactive client", {
|
|
486
|
+
"Client ID": client.clientId,
|
|
487
|
+
"Inactive Time": `${inactiveTime}ms`
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
});
|
|
468
492
|
}
|
|
469
493
|
broadcastToAllClients({
|
|
470
494
|
data,
|
|
@@ -532,14 +556,14 @@ class WebSocketServer extends WebSocketBase {
|
|
|
532
556
|
});
|
|
533
557
|
return;
|
|
534
558
|
}
|
|
535
|
-
const
|
|
536
|
-
if (
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
}
|
|
559
|
+
const canJoinMultipleRooms = this.options.rooms?.clientCanJoinMultipleRooms ?? true;
|
|
560
|
+
if (!canJoinMultipleRooms && client.roomName) {
|
|
561
|
+
this.roomManager.removeClientFromRoom({
|
|
562
|
+
roomName: client.roomName,
|
|
563
|
+
clientId,
|
|
564
|
+
broadcast: false
|
|
565
|
+
// Don't broadcast here, will broadcast after adding to new room
|
|
566
|
+
});
|
|
543
567
|
}
|
|
544
568
|
this.clientManager.updateClient({
|
|
545
569
|
clientId,
|