@scpxl/nodejs-framework 1.0.13
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 +195 -0
- package/dist/api-requester/api-requester.d.ts +11 -0
- package/dist/api-requester/api-requester.d.ts.map +1 -0
- package/dist/api-requester/api-requester.js +59 -0
- package/dist/api-requester/api-requester.js.map +7 -0
- package/dist/api-requester/index.d.ts +2 -0
- package/dist/api-requester/index.d.ts.map +1 -0
- package/dist/api-requester/index.js +5 -0
- package/dist/api-requester/index.js.map +7 -0
- package/dist/application/base-application.d.ts +110 -0
- package/dist/application/base-application.d.ts.map +1 -0
- package/dist/application/base-application.interface.d.ts +161 -0
- package/dist/application/base-application.interface.d.ts.map +1 -0
- package/dist/application/base-application.interface.js +1 -0
- package/dist/application/base-application.interface.js.map +7 -0
- package/dist/application/base-application.js +350 -0
- package/dist/application/base-application.js.map +7 -0
- 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/command-application.interface.js +1 -0
- package/dist/application/command-application.interface.js.map +7 -0
- package/dist/application/command-application.js +110 -0
- package/dist/application/command-application.js.map +7 -0
- package/dist/application/index.d.ts +5 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +7 -0
- package/dist/application/index.js.map +7 -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.interface.js +1 -0
- package/dist/application/web-application.interface.js.map +7 -0
- package/dist/application/web-application.js +176 -0
- package/dist/application/web-application.js.map +7 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +7 -0
- package/dist/auth/jwt.d.ts +25 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/jwt.js +51 -0
- package/dist/auth/jwt.js.map +7 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +7 -0
- package/dist/cache/manager.d.ts +26 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/manager.js +54 -0
- package/dist/cache/manager.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/cluster-manager.interface.js +1 -0
- package/dist/cluster/cluster-manager.interface.js.map +7 -0
- package/dist/cluster/cluster-manager.js +106 -0
- package/dist/cluster/cluster-manager.js.map +7 -0
- package/dist/cluster/index.d.ts +2 -0
- package/dist/cluster/index.d.ts.map +1 -0
- package/dist/cluster/index.js +13 -0
- package/dist/cluster/index.js.map +7 -0
- package/dist/command/command-manager.d.ts +19 -0
- package/dist/command/command-manager.d.ts.map +1 -0
- package/dist/command/command-manager.js +42 -0
- package/dist/command/command-manager.js.map +7 -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/command.interface.js +1 -0
- package/dist/command/command.interface.js.map +7 -0
- package/dist/command/command.js +37 -0
- package/dist/command/command.js.map +7 -0
- package/dist/command/index.d.ts +3 -0
- package/dist/command/index.d.ts.map +1 -0
- package/dist/command/index.js +7 -0
- package/dist/command/index.js.map +7 -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-form-decorators.js +62 -0
- package/dist/database/dynamic-entity-form-decorators.js.map +7 -0
- package/dist/database/dynamic-entity.d.ts +15 -0
- package/dist/database/dynamic-entity.d.ts.map +1 -0
- package/dist/database/dynamic-entity.js +42 -0
- package/dist/database/dynamic-entity.js.map +7 -0
- package/dist/database/index.d.ts +5 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +12 -0
- package/dist/database/index.js.map +7 -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/instance.interface.js +1 -0
- package/dist/database/instance.interface.js.map +7 -0
- package/dist/database/instance.js +57 -0
- package/dist/database/instance.js.map +7 -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/database/manager.interface.js +1 -0
- package/dist/database/manager.interface.js.map +7 -0
- package/dist/database/manager.js +49 -0
- package/dist/database/manager.js.map +7 -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/controller/base.interface.js +1 -0
- package/dist/event/controller/base.interface.js.map +7 -0
- package/dist/event/controller/base.js +51 -0
- package/dist/event/controller/base.js.map +7 -0
- package/dist/event/index.d.ts +5 -0
- package/dist/event/index.d.ts.map +1 -0
- package/dist/event/index.js +9 -0
- package/dist/event/index.js.map +7 -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 +134 -0
- package/dist/event/manager.interface.d.ts.map +1 -0
- package/dist/event/manager.interface.js +1 -0
- package/dist/event/manager.interface.js.map +7 -0
- package/dist/event/manager.js +134 -0
- package/dist/event/manager.js.map +7 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +7 -0
- package/dist/logger/index.d.ts +2 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +5 -0
- package/dist/logger/index.js.map +7 -0
- package/dist/logger/logger.d.ts +51 -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.interface.js +1 -0
- package/dist/logger/logger.interface.js.map +7 -0
- package/dist/logger/logger.js +168 -0
- package/dist/logger/logger.js.map +7 -0
- package/dist/performance/cache-performance.d.ts +58 -0
- package/dist/performance/cache-performance.d.ts.map +1 -0
- package/dist/performance/cache-performance.js +199 -0
- package/dist/performance/cache-performance.js.map +7 -0
- package/dist/performance/database-performance.d.ts +40 -0
- package/dist/performance/database-performance.d.ts.map +1 -0
- package/dist/performance/database-performance.js +132 -0
- package/dist/performance/database-performance.js.map +7 -0
- package/dist/performance/index.d.ts +7 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +7 -0
- package/dist/performance/index.js.map +7 -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.js +270 -0
- package/dist/performance/performance-monitor.js.map +7 -0
- package/dist/performance/queue-performance.d.ts +46 -0
- package/dist/performance/queue-performance.d.ts.map +1 -0
- package/dist/performance/queue-performance.js +144 -0
- package/dist/performance/queue-performance.js.map +7 -0
- package/dist/performance/webserver-performance.d.ts +69 -0
- package/dist/performance/webserver-performance.d.ts.map +1 -0
- package/dist/performance/webserver-performance.js +164 -0
- package/dist/performance/webserver-performance.js.map +7 -0
- package/dist/performance/websocket-performance.d.ts +44 -0
- package/dist/performance/websocket-performance.d.ts.map +1 -0
- package/dist/performance/websocket-performance.js +139 -0
- package/dist/performance/websocket-performance.js.map +7 -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/index.interface.js +1 -0
- package/dist/queue/index.interface.js.map +7 -0
- package/dist/queue/index.js +7 -0
- package/dist/queue/index.js.map +7 -0
- package/dist/queue/job.interface.d.ts +42 -0
- package/dist/queue/job.interface.d.ts.map +1 -0
- package/dist/queue/job.interface.js +1 -0
- package/dist/queue/job.interface.js.map +7 -0
- package/dist/queue/manager.d.ts +36 -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/manager.interface.js +1 -0
- package/dist/queue/manager.interface.js.map +7 -0
- package/dist/queue/manager.js +244 -0
- package/dist/queue/manager.js.map +7 -0
- package/dist/queue/processor/base.d.ts +28 -0
- package/dist/queue/processor/base.d.ts.map +1 -0
- package/dist/queue/processor/base.js +46 -0
- package/dist/queue/processor/base.js.map +7 -0
- package/dist/queue/processor/processor.interface.d.ts +15 -0
- package/dist/queue/processor/processor.interface.d.ts.map +1 -0
- package/dist/queue/processor/processor.interface.js +1 -0
- package/dist/queue/processor/processor.interface.js.map +7 -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/queue/worker.interface.js +1 -0
- package/dist/queue/worker.interface.js.map +7 -0
- package/dist/queue/worker.js +72 -0
- package/dist/queue/worker.js.map +7 -0
- package/dist/redis/index.d.ts +3 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/index.js +7 -0
- package/dist/redis/index.js.map +7 -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/instance.interface.js +1 -0
- package/dist/redis/instance.interface.js.map +7 -0
- package/dist/redis/instance.js +92 -0
- package/dist/redis/instance.js.map +7 -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.interface.js +1 -0
- package/dist/redis/manager.interface.js.map +7 -0
- package/dist/redis/manager.js +65 -0
- package/dist/redis/manager.js.map +7 -0
- package/dist/services/aws/index.d.ts +2 -0
- package/dist/services/aws/index.d.ts.map +1 -0
- package/dist/services/aws/index.js +5 -0
- package/dist/services/aws/index.js.map +7 -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/aws/s3.interface.js +1 -0
- package/dist/services/aws/s3.interface.js.map +7 -0
- package/dist/services/aws/s3.js +236 -0
- package/dist/services/aws/s3.js.map +7 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +7 -0
- package/dist/util/file.d.ts +45 -0
- package/dist/util/file.d.ts.map +1 -0
- package/dist/util/file.js +105 -0
- package/dist/util/file.js.map +7 -0
- package/dist/util/helper.d.ts +37 -0
- package/dist/util/helper.d.ts.map +1 -0
- package/dist/util/helper.js +73 -0
- package/dist/util/helper.js.map +7 -0
- package/dist/util/image.d.ts +12 -0
- package/dist/util/image.d.ts.map +1 -0
- package/dist/util/image.js +35 -0
- package/dist/util/image.js.map +7 -0
- package/dist/util/index.d.ts +10 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +21 -0
- package/dist/util/index.js.map +7 -0
- package/dist/util/loader.d.ts +19 -0
- package/dist/util/loader.d.ts.map +1 -0
- package/dist/util/loader.js +84 -0
- package/dist/util/loader.js.map +7 -0
- package/dist/util/num.d.ts +13 -0
- package/dist/util/num.d.ts.map +1 -0
- package/dist/util/num.js +16 -0
- package/dist/util/num.js.map +7 -0
- package/dist/util/os.d.ts +6 -0
- package/dist/util/os.d.ts.map +1 -0
- package/dist/util/os.js +32 -0
- package/dist/util/os.js.map +7 -0
- package/dist/util/str.d.ts +39 -0
- package/dist/util/str.d.ts.map +1 -0
- package/dist/util/str.js +34 -0
- package/dist/util/str.js.map +7 -0
- package/dist/util/time.d.ts +13 -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/time.interface.js +1 -0
- package/dist/util/time.interface.js.map +7 -0
- package/dist/util/time.js +90 -0
- package/dist/util/time.js.map +7 -0
- package/dist/util/url.d.ts +7 -0
- package/dist/util/url.d.ts.map +1 -0
- package/dist/util/url.js +12 -0
- package/dist/util/url.js.map +7 -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/auth-middleware.js +33 -0
- package/dist/webserver/controller/auth-middleware.js.map +7 -0
- package/dist/webserver/controller/base.d.ts +39 -0
- package/dist/webserver/controller/base.d.ts.map +1 -0
- package/dist/webserver/controller/base.interface.d.ts +45 -0
- package/dist/webserver/controller/base.interface.d.ts.map +1 -0
- package/dist/webserver/controller/base.interface.js +1 -0
- package/dist/webserver/controller/base.interface.js.map +7 -0
- package/dist/webserver/controller/base.js +188 -0
- package/dist/webserver/controller/base.js.map +7 -0
- package/dist/webserver/controller/entity.d.ts +94 -0
- package/dist/webserver/controller/entity.d.ts.map +1 -0
- package/dist/webserver/controller/entity.js +361 -0
- package/dist/webserver/controller/entity.js.map +7 -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/example-auth.js +53 -0
- package/dist/webserver/controller/example-auth.js.map +7 -0
- package/dist/webserver/controller/health.d.ts +8 -0
- package/dist/webserver/controller/health.d.ts.map +1 -0
- package/dist/webserver/controller/health.js +50 -0
- package/dist/webserver/controller/health.js.map +7 -0
- package/dist/webserver/index.d.ts +12 -0
- package/dist/webserver/index.d.ts.map +1 -0
- package/dist/webserver/index.js +19 -0
- package/dist/webserver/index.js.map +7 -0
- package/dist/webserver/util.d.ts +10 -0
- package/dist/webserver/util.d.ts.map +1 -0
- package/dist/webserver/util.js +63 -0
- package/dist/webserver/util.js.map +7 -0
- package/dist/webserver/webserver.d.ts +65 -0
- package/dist/webserver/webserver.d.ts.map +1 -0
- package/dist/webserver/webserver.interface.d.ts +118 -0
- package/dist/webserver/webserver.interface.d.ts.map +1 -0
- package/dist/webserver/webserver.interface.js +9 -0
- package/dist/webserver/webserver.interface.js.map +7 -0
- package/dist/webserver/webserver.js +347 -0
- package/dist/webserver/webserver.js.map +7 -0
- 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/client/base.interface.js +1 -0
- package/dist/websocket/controller/client/base.interface.js.map +7 -0
- package/dist/websocket/controller/client/base.js +26 -0
- package/dist/websocket/controller/client/base.js.map +7 -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/controller/server/base.interface.js +1 -0
- package/dist/websocket/controller/server/base.interface.js.map +7 -0
- package/dist/websocket/controller/server/base.js +26 -0
- package/dist/websocket/controller/server/base.js.map +7 -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/client/system.js +14 -0
- package/dist/websocket/controllers/client/system.js.map +7 -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/controllers/server/system.js +87 -0
- package/dist/websocket/controllers/server/system.js.map +7 -0
- package/dist/websocket/index.d.ts +7 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +11 -0
- package/dist/websocket/index.js.map +7 -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/client/system.js +11 -0
- package/dist/websocket/routes/client/system.js.map +7 -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/routes/server/system.js +16 -0
- package/dist/websocket/routes/server/system.js.map +7 -0
- package/dist/websocket/utils.d.ts +9 -0
- package/dist/websocket/utils.d.ts.map +1 -0
- package/dist/websocket/utils.js +39 -0
- package/dist/websocket/utils.js.map +7 -0
- package/dist/websocket/websocket-base.d.ts +15 -0
- package/dist/websocket/websocket-base.d.ts.map +1 -0
- package/dist/websocket/websocket-base.js +104 -0
- package/dist/websocket/websocket-base.js.map +7 -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-manager.interface.js +1 -0
- package/dist/websocket/websocket-client-manager.interface.js.map +7 -0
- package/dist/websocket/websocket-client-manager.js +225 -0
- package/dist/websocket/websocket-client-manager.js.map +7 -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-client.interface.js +1 -0
- package/dist/websocket/websocket-client.interface.js.map +7 -0
- package/dist/websocket/websocket-client.js +158 -0
- package/dist/websocket/websocket-client.js.map +7 -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-room-manager.js +130 -0
- package/dist/websocket/websocket-room-manager.js.map +7 -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.interface.js +1 -0
- package/dist/websocket/websocket-server.interface.js.map +7 -0
- package/dist/websocket/websocket-server.js +686 -0
- package/dist/websocket/websocket-server.js.map +7 -0
- package/dist/websocket/websocket-service.d.ts +44 -0
- package/dist/websocket/websocket-service.d.ts.map +1 -0
- package/dist/websocket/websocket-service.js +99 -0
- package/dist/websocket/websocket-service.js.map +7 -0
- package/dist/websocket/websocket.interface.d.ts +119 -0
- package/dist/websocket/websocket.interface.d.ts.map +1 -0
- package/dist/websocket/websocket.interface.js +18 -0
- package/dist/websocket/websocket.interface.js.map +7 -0
- package/package.json +159 -0
- package/pxl.js +4 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/websocket/websocket-server.ts"],
|
|
4
|
+
"sourcesContent": ["import { type RawData, WebSocketServer as WS, WebSocket } from 'ws';\nimport {\n type WebSocketOptions,\n WebSocketRedisSubscriberEvent,\n type WebSocketRoute,\n type WebSocketType,\n} from './websocket.interface.js';\nimport type RedisInstance from '../redis/instance.js';\nimport type QueueManager from '../queue/manager.js';\nimport type DatabaseInstance from '../database/instance.js';\nimport type { WebSocketServerProps } from './websocket-server.interface.js';\nimport WebSocketClientManager from './websocket-client-manager.js';\nimport { generateClientId, log } from './utils.js';\nimport WebSocketBase from './websocket-base.js';\nimport { Logger } from '../logger/index.js';\nimport path from 'path';\nimport { type WebApplicationConfig, baseDir } from '../index.js';\nimport WebSocketRoomManager from './websocket-room-manager.js';\nimport logger from '../logger/logger.js';\nimport type { FastifyInstance } from 'fastify';\nimport { URL } from 'url';\nimport Jwt from '../auth/jwt.js';\n\nexport default class WebSocketServer extends WebSocketBase {\n protected defaultRoutes: WebSocketRoute[] = [\n {\n type: 'system',\n action: 'joinRoom',\n controllerName: 'system',\n },\n {\n type: 'system',\n action: 'leaveRoom',\n controllerName: 'system',\n },\n ];\n\n private server?: WS;\n\n private checkConnectedClientsInterval?: ReturnType<typeof setInterval>;\n private workerId: number | null;\n private uniqueInstanceId: string;\n private applicationConfig: WebApplicationConfig;\n private options: WebSocketOptions;\n public clientManager = new WebSocketClientManager();\n private roomManager = new WebSocketRoomManager({\n clientManager: this.clientManager,\n });\n\n public get rooms() {\n return this.roomManager.rooms;\n }\n private redisInstance: RedisInstance;\n private queueManager: QueueManager;\n private databaseInstance: DatabaseInstance;\n\n /** Redis subscriber events */\n private redisSubscriberEvents: string[] = [\n WebSocketRedisSubscriberEvent.ClientConnected,\n WebSocketRedisSubscriberEvent.ClientJoinedRoom,\n WebSocketRedisSubscriberEvent.ClientLeftRoom,\n WebSocketRedisSubscriberEvent.ClientDisconnected,\n WebSocketRedisSubscriberEvent.DisconnectClient,\n WebSocketRedisSubscriberEvent.SendMessage,\n WebSocketRedisSubscriberEvent.SendMessageToAll,\n WebSocketRedisSubscriberEvent.MessageError,\n WebSocketRedisSubscriberEvent.QueueJobCompleted,\n WebSocketRedisSubscriberEvent.QueueJobError,\n WebSocketRedisSubscriberEvent.Custom,\n ];\n\n constructor(props: WebSocketServerProps) {\n super();\n\n this.uniqueInstanceId = props.uniqueInstanceId;\n this.applicationConfig = props.applicationConfig;\n this.options = props.options;\n this.redisInstance = props.redisInstance;\n this.queueManager = props.queueManager;\n this.databaseInstance = props.databaseInstance;\n this.routes = props.routes;\n this.workerId = props.workerId;\n }\n\n public get type(): WebSocketType {\n return 'server';\n }\n\n private async validateWebSocketAuth(url: string): Promise<{ userId: number; payload: any } | null> {\n try {\n const parsedUrl = new URL(url, 'ws://localhost');\n const token = parsedUrl.searchParams.get('token');\n\n if (!token) {\n return null; // No token provided, allow unauthenticated connection\n }\n\n // Get JWT secret key from application config\n const jwtSecretKey = this.applicationConfig.auth?.jwtSecretKey;\n\n if (!jwtSecretKey) {\n throw new Error('JWT secret key not configured');\n }\n\n // Import JWT secret key\n const importedJwtSecretKey = await Jwt.importJwtSecretKey({\n jwtSecretKey,\n });\n\n // Verify JWT token\n const { payload } = await Jwt.jwtVerify(token, importedJwtSecretKey);\n\n const userId = parseInt(payload.sub as string);\n\n if (isNaN(userId)) {\n throw new Error('Invalid user ID in token');\n }\n\n return { userId, payload };\n } catch (error: any) {\n throw new Error(`JWT verification failed: ${error.message}`);\n }\n }\n\n public async load(): Promise<void> {\n const libraryControllersDirectory = path.join(baseDir, 'websocket', 'controllers', 'server');\n\n // Configure default routes\n await this.configureRoutes(this.defaultRoutes, libraryControllersDirectory);\n\n // Configure custom routes\n await this.configureRoutes(this.routes, this.options.controllersDirectory);\n }\n\n public async start({ fastifyServer }: { fastifyServer: FastifyInstance }): Promise<{ server: WS }> {\n return new Promise(resolve => {\n const server = new WS({\n noServer: true, // We're handling the server externally\n });\n\n this.server = server;\n\n // Ensure this is called after the server has been properly set up\n this.handleServerStart();\n\n fastifyServer.server.on('upgrade', async (request, socket, head) => {\n if (request.url?.startsWith('/ws')) {\n try {\n // Validate authentication token if provided\n const authenticatedUser = await this.validateWebSocketAuth(request.url);\n\n server.handleUpgrade(request, socket, head, ws => {\n server.emit('connection', ws, request, authenticatedUser);\n });\n } catch (error: any) {\n log('WebSocket authentication failed', { error: error.message });\n socket.write('HTTP/1.1 401 Unauthorized\\r\\n\\r\\n');\n socket.destroy();\n }\n } else {\n socket.destroy();\n }\n });\n\n server.on('error', this.handleServerError);\n\n server.on(\n 'connection',\n (ws: WebSocket, request: any, authenticatedUser: { userId: number; payload: any } | null) => {\n this.handleServerClientConnection(ws, authenticatedUser);\n },\n );\n\n // Resolve the promise with the server instance\n resolve({ server });\n });\n }\n\n public async stop(): Promise<void> {\n if (this.checkConnectedClientsInterval) {\n clearInterval(this.checkConnectedClientsInterval);\n this.checkConnectedClientsInterval = undefined;\n }\n\n // Clean up Redis subscriber listeners\n this.redisInstance.subscriberClient?.removeListener('message', this.handleSubscriberMessage);\n\n // Unsubscribe from all Redis events\n this.redisSubscriberEvents.forEach(subscriberEventName => {\n this.redisInstance.subscriberClient?.unsubscribe(subscriberEventName);\n });\n\n // Close all client connections and clean up\n if (this.server) {\n this.server.clients.forEach(client => {\n client.removeAllListeners();\n client.close();\n });\n\n this.server.removeAllListeners();\n this.server.close();\n }\n\n // Clean up client manager and room manager\n this.clientManager.cleanup();\n this.roomManager.cleanup();\n\n // Reset managers\n this.clientManager = new WebSocketClientManager();\n this.roomManager = new WebSocketRoomManager({\n clientManager: this.clientManager,\n });\n\n log('Server stopped');\n }\n\n protected getControllerDependencies(): {\n webSocketServer: WebSocketServer;\n redisInstance: RedisInstance;\n queueManager: QueueManager;\n databaseInstance: DatabaseInstance;\n } {\n return {\n webSocketServer: this,\n redisInstance: this.redisInstance,\n queueManager: this.queueManager,\n databaseInstance: this.databaseInstance,\n };\n }\n\n protected shouldPrintRoutes(): boolean {\n return this.options.debug?.printRoutes ?? false;\n }\n\n private handleServerStart = (): void => {\n if (!this.server) {\n throw new Error('WebSocket server not started');\n }\n\n if (this.options.disconnectInactiveClients?.enabled) {\n this.checkConnectedClientsInterval = setInterval(\n () => this.checkInactiveClients(),\n this.options.disconnectInactiveClients.intervalCheckTime,\n );\n }\n\n // Go through each event and subscribe to it\n this.redisSubscriberEvents.forEach(subscriberEventName => {\n // Subscribe to event\n this.redisInstance.subscriberClient?.subscribe(subscriberEventName);\n });\n\n // Handle subscriber message\n this.redisInstance.subscriberClient.on('message', this.handleSubscriberMessage);\n\n log('Server started', {\n Host: this.options.host,\n URL: this.options.url,\n });\n\n if (this.options.events?.onServerStarted) {\n this.options.events.onServerStarted({\n webSocketServer: this.server,\n });\n }\n };\n\n /**\n * Handle subscriber message.\n */\n private handleSubscriberMessage = async (channel: string, message: string): Promise<void> => {\n let parsedMessage: { [key: string]: any };\n\n try {\n parsedMessage = JSON.parse(message);\n } catch (error) {\n log('Failed to parse subscriber message', {\n Channel: channel,\n Message: message,\n Error: error,\n });\n\n return;\n }\n\n const runSameWorker = parsedMessage.runSameWorker === true;\n\n const isSameWorker = parsedMessage.workerId === this.workerId;\n\n // Check if message is from the same worker\n if (runSameWorker !== true && isSameWorker) {\n // Ignore the message if it's from the same worker\n return;\n }\n\n log('Incoming subscriber message', {\n Channel: channel,\n // 'Run Same Worker': parsedMessage.runSameWorker ? 'Yes' : 'No',\n 'Client ID': parsedMessage.clientId ?? '-',\n });\n\n switch (channel) {\n case WebSocketRedisSubscriberEvent.ClientConnected: {\n this.onClientConnect({\n clientId: parsedMessage.clientId,\n lastActivity: parsedMessage.lastActivity,\n user: parsedMessage.user,\n });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.ClientDisconnected: {\n this.onClientDisconnect({\n clientId: parsedMessage.clientId,\n });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.DisconnectClient: {\n const clientToDisconnect = this.clientManager.getClient({\n clientId: parsedMessage.clientId,\n // requireWs: true,\n });\n\n log(\n `GOT A REQUEST TO POTENTIALLY DISCONNECT LCIENT IF THIS CLIENT IS CONNETED HERE, GET CLIENT ------------------------- ${clientToDisconnect ?? 'NO CLIENT'}`,\n );\n\n console.log('clientToDisconnect', clientToDisconnect, 'workerId: ', this.workerId);\n\n if (clientToDisconnect) {\n this.clientManager.disconnectClient({\n clientId: parsedMessage.clientId,\n });\n\n // this.onClientDisconnect({\n // clientId: parsedMessage.clientId,\n // });\n\n // Remove client from rooms\n this.roomManager.removeClientFromAllRooms({\n clientId: parsedMessage.clientId,\n });\n }\n\n break;\n }\n case WebSocketRedisSubscriberEvent.ClientJoinedRoom: {\n this.onJoinRoom({\n clientId: parsedMessage.clientId,\n roomName: parsedMessage.roomName,\n userData: parsedMessage.user,\n });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.ClientLeftRoom: {\n this.roomManager.removeClientFromRoom({\n roomName: parsedMessage.room,\n clientId: parsedMessage.clientId,\n });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.SendMessage: {\n break;\n }\n case WebSocketRedisSubscriberEvent.SendMessageToAll: {\n this.broadcastToAllClients({ data: parsedMessage });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.MessageError: {\n this.sendMessageError({\n webSocketClientId: parsedMessage.clientId,\n error: parsedMessage.error,\n });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.QueueJobCompleted: {\n // const parsedMessage = JSON.parse(message);\n\n // this.sendJobDoneMessage({ type: 'jobCompleted', ...parsedMessage });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.QueueJobError: {\n // const parsedMessage = JSON.parse(message);\n\n // action and data is separate\n // TODO: Instead allow to pass anything\n parsedMessage.data = parsedMessage.error;\n\n // this.sendJobDoneMessage({ type: 'jobError', ...parsedMessage });\n\n break;\n }\n case WebSocketRedisSubscriberEvent.Custom: {\n // Custom logic is being handled in the app\n\n break;\n }\n default: {\n log('Unknown subscriber message received', {\n Channel: channel,\n Message: message,\n });\n }\n }\n\n if (typeof this.applicationConfig.webSocket?.subscriberEventHandler === 'function') {\n // Execute custom application subscriber event handler\n this.applicationConfig.webSocket.subscriberEventHandler({\n channel,\n message: parsedMessage,\n webSocketServer: this,\n databaseInstance: this.databaseInstance,\n });\n }\n };\n\n private handleServerError = (error: Error): void => {\n Logger.error({ error });\n };\n\n private handleServerClientConnection = (\n ws: WebSocket,\n authenticatedUser?: { userId: number; payload: any } | null,\n ): void => {\n const clientId = generateClientId();\n\n const lastActivity = Date.now();\n\n ws.on('message', (message: RawData) => this.handleClientMessage(ws, message));\n\n ws.on('close', () => {\n this.handleServerClientDisconnection(clientId);\n this.clientManager.removeClient(clientId);\n\n // Clean up event listeners to prevent memory leaks\n ws.removeAllListeners();\n });\n\n try {\n this.clientManager.addClient({\n clientId,\n ws,\n lastActivity,\n user: authenticatedUser,\n });\n\n // Let other workers know that the client has connected\n this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.ClientConnected,\n JSON.stringify({\n clientId,\n lastActivity,\n workerId: this.workerId,\n user: authenticatedUser,\n }),\n );\n\n // Send authentication success message if user is authenticated\n if (authenticatedUser) {\n this.sendClientMessage(ws, {\n type: 'auth',\n action: 'authenticated',\n data: {\n userId: authenticatedUser.userId,\n message: 'Authentication successful',\n },\n });\n }\n } catch (error) {\n logger.error({ error });\n }\n };\n\n public leaveRoom({ ws, roomName }: { ws: WebSocket; roomName: string }): void {\n const clientId = this.clientManager.getClientId({ ws });\n\n if (!clientId) {\n log('Client ID not found when removing client from room');\n\n return;\n }\n\n // Check if client is in room\n const clientInRoom = this.roomManager.isClientInRoom({\n clientId,\n roomName,\n });\n\n if (!clientInRoom) {\n log('Client not in room when removing client from room', {\n 'Client ID': clientId || '-',\n 'Room Name': roomName,\n });\n\n return;\n }\n\n this.roomManager.removeClientFromRoom({\n roomName,\n clientId,\n });\n\n this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.ClientLeftRoom,\n JSON.stringify({\n clientId,\n room: roomName,\n workerId: this.workerId,\n }),\n );\n\n // Optionally send a message to the client\n this.sendClientMessage(ws, {\n type: 'user',\n action: 'leftRoom',\n data: {\n roomName,\n },\n });\n }\n\n private onClientConnect({\n clientId,\n lastActivity,\n user,\n }: {\n clientId: string;\n lastActivity: number;\n user?: { userId: number; payload: any } | null;\n }): void {\n this.clientManager.addClient({\n clientId,\n ws: null,\n lastActivity,\n user,\n });\n }\n\n private onClientDisconnect({ clientId }: { clientId: string }): void {\n // Set client as disconnected\n this.clientManager.removeClient(clientId);\n\n // Remove client from rooms\n this.roomManager.removeClientFromAllRooms({ clientId });\n }\n\n private handleServerClientDisconnection = (clientId: string): void => {\n const client = this.clientManager.getClient({\n clientId,\n });\n\n if (!client) {\n log('Client not found when handling server client disconnection', {\n 'Client ID': clientId || '-',\n });\n\n return;\n }\n\n this.onClientDisconnect({ clientId });\n\n this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.ClientDisconnected,\n JSON.stringify({\n clientId,\n workerId: this.workerId,\n }),\n );\n\n // log('Client disconnected', { ID: clientId });\n };\n\n private handleClientMessage = async (ws: WebSocket, message: RawData): Promise<void> => {\n try {\n const clientId = this.clientManager.getClientId({\n ws,\n });\n\n if (!clientId) {\n log('Client ID not found when handling server message');\n\n return;\n }\n\n // Handle server message\n const serverMessageResponse = await this.handleServerMessage(ws, message, clientId);\n\n if (serverMessageResponse) {\n this.sendClientMessage(ws, {\n type: serverMessageResponse.type,\n action: serverMessageResponse.action,\n response: serverMessageResponse?.response,\n });\n\n if (serverMessageResponse?.response?.error) {\n // throw new Error(serverMessageResponse?.response?.error);\n\n Logger.error({ error: serverMessageResponse.response.error });\n }\n }\n } catch (error) {\n Logger.error({ error });\n\n log('Error handling client message', {\n Error: error,\n });\n }\n };\n\n protected handleMessageError(clientId: string, error: string): void {\n this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.MessageError,\n JSON.stringify({\n runSameWorker: true,\n clientId,\n error,\n }),\n );\n }\n\n private checkInactiveClients(): void {\n // const now = Date.now();\n\n if (this.options.disconnectInactiveClients?.enabled && this.options.disconnectInactiveClients.log) {\n log('Checking inactive clients...');\n }\n\n // const numInactiveClients = 0;\n\n // this.connectedClients.forEach(\n // (clientInfo, clientId) => {\n // if (\n // this.options.disconnectInactiveClients?.enabled &&\n // typeof this.options.disconnectInactiveClients\n // .inactiveTime === 'number'\n // ) {\n // const timeUntilInactive = Math.max(\n // 0,\n // this.options.disconnectInactiveClients\n // .inactiveTime -\n // (now - clientInfo.lastActivity),\n // );\n // const isClientInactive = timeUntilInactive <= 0;\n\n // if (this.options.disconnectInactiveClients.log) {\n // log('Checking client activity', {\n // ID: clientId,\n // 'Time Until Inactive': Time.formatTime({\n // time: timeUntilInactive,\n // format: 'auto',\n // }),\n // });\n // }\n\n // if (isClientInactive) {\n // this.disconnectClient({ clientId });\n\n // numInactiveClients++;\n // }\n // }\n // },\n // );\n\n // if (\n // this.options.disconnectInactiveClients?.enabled &&\n // this.options.disconnectInactiveClients.log\n // ) {\n // if (numInactiveClients > 0) {\n // log('Inactive clients disconnected', {\n // Count: numInactiveClients,\n // });\n // } else {\n // log('No inactive clients');\n // }\n // }\n }\n\n // private disconnectClient({\n // clientId,\n // }: {\n // clientId: string;\n // }) {\n // const clientInfo = this.connectedClients.get(clientId);\n\n // if (clientInfo?.ws) {\n // const connectedTime =\n // Date.now() - clientInfo.lastActivity;\n\n // clientInfo.ws.close();\n\n // Logger.info(\n // 'WebSocket client was disconnected due to inactivity',\n // {\n // ID: clientId,\n // Worker: this.workerId,\n // 'Time Connected': Time.formatTime({\n // time: connectedTime,\n // format: 's',\n // }),\n // },\n // );\n // }\n // }\n\n public broadcastToAllClients({\n data,\n excludeClientId,\n }: {\n data: { [key: string]: any };\n excludeClientId?: string;\n }): void {\n if (!this.server) {\n log('Server not started when broadcasting to all clients');\n\n return;\n }\n\n this.server.clients.forEach(client => {\n let excludeClient = false;\n\n if (excludeClientId) {\n const clientId = this.clientManager.getClientId({\n ws: client,\n });\n\n excludeClient = clientId === excludeClientId;\n }\n\n if (client.readyState === WebSocket.OPEN && !excludeClient) {\n client.send(JSON.stringify(data));\n }\n });\n }\n\n public sendMessageError({ webSocketClientId, error }: { webSocketClientId: string; error: string }): void {\n const client = this.clientManager.getClient({\n clientId: webSocketClientId,\n });\n\n if (!client) {\n log('Client not found when sending message error', {\n 'Client ID': webSocketClientId || '-',\n Error: error,\n });\n\n return;\n } else if (!client.ws) {\n log('Client WebSocket not found when sending message error', {\n 'Client ID': webSocketClientId || '-',\n Error: error,\n });\n\n return;\n }\n\n this.sendClientMessage(client.ws, {\n type: 'error',\n action: 'message',\n data: {\n error,\n },\n });\n }\n\n // private getClientId({\n // client,\n // }: {\n // client: WebSocket;\n // }): string | undefined {\n // return [...this.connectedClients.entries()].find(\n // ([_, value]) => value.ws === client,\n // )?.[0];\n // }\n\n private onJoinRoom({ clientId, roomName, userData }: { clientId: string; roomName: string; userData: any }): void {\n // TODO: If config clientCanJoinMultipleRooms !== true, then it should remove the user from existing room first\n const client = this.clientManager.getClient({\n clientId,\n });\n\n if (!client) {\n log('Client not found when joining room', {\n 'Client ID': clientId || '-',\n 'Room Name': roomName,\n });\n\n return;\n }\n\n const clientCanJoinMultipleRooms: any = false;\n\n if (clientCanJoinMultipleRooms !== true) {\n if (client.roomName) {\n // Remove client from current room\n this.roomManager.removeClientFromRoom({\n roomName: client.roomName,\n clientId,\n });\n }\n }\n\n // Update client with user in client manager\n this.clientManager.updateClient({\n clientId,\n key: 'user',\n data: userData,\n });\n\n this.roomManager.addClientToRoom({\n clientId,\n user: userData,\n roomName,\n });\n }\n\n public async joinRoom({\n ws,\n userId,\n userType,\n username,\n roomName,\n }: {\n ws: WebSocket;\n userId?: number;\n userType?: string;\n username?: string;\n roomName: string;\n }) {\n const clientId = this.clientManager.getClientId({ ws });\n\n if (!clientId) {\n // throw new Error('Client ID not found when joining room');\n\n logger.warn({\n message: 'Client ID not found when joining room',\n meta: {\n // 'WebSocket ID': ws?.id || '-',\n 'Room Name': roomName,\n },\n });\n\n return;\n }\n\n // Check if client is already in room\n const isClientInRoom = this.roomManager.isClientInRoom({\n clientId,\n roomName,\n });\n\n if (isClientInRoom) {\n // throw new Error('Client already in room when joining');\n\n logger.warn({\n message: 'Client already in room when joining',\n meta: {\n // 'WebSocket ID': ws?. || '-',\n 'Room Name': roomName,\n 'Client ID': clientId,\n },\n });\n\n return;\n }\n\n let userData: any = {};\n\n // // Get WebSocket client ID\n // const webSocketId = this.clientManager.getClientId({ ws });\n\n if (userId) {\n // Get user email from database\n const dbEntityManager = this.databaseInstance.getEntityManager();\n\n const getUserQuery = 'SELECT email FROM users WHERE id = ?';\n const getUserParams = [userId];\n\n const getUserResult = await dbEntityManager.execute(getUserQuery, getUserParams);\n\n if (!getUserResult || getUserResult.length === 0) {\n throw new Error('User not found in database');\n }\n\n const user = getUserResult[0];\n\n userData = {\n id: userId,\n ...user,\n };\n }\n\n // userData.uniqueId = webSocketId;\n\n if (username) {\n userData.username = username;\n }\n\n userData.userType = userType;\n\n // if user with same email is already connected, disconnect the previous connection\n // const existingClient =\n // this.clientManager.getClientByKey({\n // key: 'user.email',\n // value: user.email,\n // });\n\n // if (existingClient) {\n // if (existingClient.ws) {\n // this.clientManager.disconnectClient({\n // clientId: existingClient.clientId,\n // });\n // } else {\n // // Publish to Redis that we should disconnect this client\n // this.redisInstance.publisherClient.publish(\n // WebSocketRedisSubscriberEvent.DisconnectClient,\n // JSON.stringify({\n // clientId,\n // workerId: this.workerId,\n // }),\n // );\n // }\n // }\n\n this.onJoinRoom({\n clientId,\n roomName,\n userData,\n });\n\n // Let other workers know that the client has joined the room\n this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.ClientJoinedRoom,\n JSON.stringify({\n clientId,\n user: userData,\n roomName,\n workerId: this.workerId,\n }),\n );\n\n return true;\n }\n\n public sendClientMessage = (ws: WebSocket, data: unknown, binary: boolean = false): void => {\n const webSocketMessage = JSON.stringify(data);\n\n ws.send(webSocketMessage, { binary });\n };\n\n public sendMessage = ({ data }: { data: unknown }): void => {\n const formattedData = {\n ...(data as object),\n workerId: this.workerId,\n };\n\n this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.SendMessage,\n JSON.stringify(formattedData),\n );\n };\n\n public sendMessageToAll = ({ data }: { data: unknown }): void => {\n const formattedData = {\n ...(data as object),\n workerId: this.workerId,\n };\n\n this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.SendMessageToAll,\n JSON.stringify(formattedData),\n );\n };\n\n public sendCustomMessage = ({ data }: { data: unknown }): void => {\n const formattedData = {\n ...(data as object),\n workerId: this.workerId,\n };\n\n console.log('SEND CUSTOM MESSAGE:', formattedData);\n\n this.redisInstance.publisherClient.publish(WebSocketRedisSubscriberEvent.Custom, JSON.stringify(formattedData));\n };\n\n public getClients({ userType }: { userType?: string }): any[] {\n return this.clientManager.getClients({ userType });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type WebSocketServer from './websocket-server.js';
|
|
2
|
+
import type RedisInstance from '../redis/instance.js';
|
|
3
|
+
export interface WebSocketMessage {
|
|
4
|
+
type: string;
|
|
5
|
+
action: string;
|
|
6
|
+
data?: any;
|
|
7
|
+
}
|
|
8
|
+
export interface WebSocketServiceOptions {
|
|
9
|
+
webSocketServer?: WebSocketServer;
|
|
10
|
+
redisInstance?: RedisInstance;
|
|
11
|
+
workerId?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class WebSocketService {
|
|
14
|
+
private webSocketServer?;
|
|
15
|
+
private redisInstance?;
|
|
16
|
+
private workerId?;
|
|
17
|
+
constructor(options?: WebSocketServiceOptions);
|
|
18
|
+
/**
|
|
19
|
+
* Send a message to all connected WebSocket clients
|
|
20
|
+
*/
|
|
21
|
+
broadcast(message: WebSocketMessage): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Send a message to specific clients by their IDs
|
|
24
|
+
* Note: This requires direct access to WebSocket server and room functionality
|
|
25
|
+
*/
|
|
26
|
+
sendToClients(clientIds: string[], message: WebSocketMessage): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Send a message to all clients in specific rooms
|
|
29
|
+
*/
|
|
30
|
+
sendToRooms(roomNames: string[], message: WebSocketMessage): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Convenience method for sending user-targeted messages
|
|
33
|
+
*/
|
|
34
|
+
sendUserMessage(action: string, data: any): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Convenience method for sending system messages
|
|
37
|
+
*/
|
|
38
|
+
sendSystemMessage(action: string, data: any): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Convenience method for sending error messages
|
|
41
|
+
*/
|
|
42
|
+
sendErrorMessage(action: string, error: any): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=websocket-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-service.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,OAAO,GAAE,uBAA4B;IAMjD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzD;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlF;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhF;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAWlE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { WebSocketRedisSubscriberEvent } from "./websocket.interface.js";
|
|
4
|
+
class WebSocketService {
|
|
5
|
+
static {
|
|
6
|
+
__name(this, "WebSocketService");
|
|
7
|
+
}
|
|
8
|
+
webSocketServer;
|
|
9
|
+
redisInstance;
|
|
10
|
+
workerId;
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.webSocketServer = options.webSocketServer;
|
|
13
|
+
this.redisInstance = options.redisInstance;
|
|
14
|
+
this.workerId = options.workerId;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Send a message to all connected WebSocket clients
|
|
18
|
+
*/
|
|
19
|
+
async broadcast(message) {
|
|
20
|
+
if (this.webSocketServer) {
|
|
21
|
+
await this.webSocketServer.sendCustomMessage({
|
|
22
|
+
data: message
|
|
23
|
+
});
|
|
24
|
+
} else if (this.redisInstance) {
|
|
25
|
+
await this.redisInstance.publisherClient.publish(
|
|
26
|
+
WebSocketRedisSubscriberEvent.Custom,
|
|
27
|
+
JSON.stringify({
|
|
28
|
+
...message,
|
|
29
|
+
workerId: this.workerId
|
|
30
|
+
})
|
|
31
|
+
);
|
|
32
|
+
} else {
|
|
33
|
+
throw new Error("WebSocket service requires either webSocketServer or redisInstance");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Send a message to specific clients by their IDs
|
|
38
|
+
* Note: This requires direct access to WebSocket server and room functionality
|
|
39
|
+
*/
|
|
40
|
+
async sendToClients(clientIds, message) {
|
|
41
|
+
await this.broadcast(message);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Send a message to all clients in specific rooms
|
|
45
|
+
*/
|
|
46
|
+
async sendToRooms(roomNames, message) {
|
|
47
|
+
if (!this.webSocketServer) {
|
|
48
|
+
throw new Error("Sending to specific rooms requires direct access to WebSocket server");
|
|
49
|
+
}
|
|
50
|
+
const clientIds = [];
|
|
51
|
+
for (const roomName of roomNames) {
|
|
52
|
+
const room = this.webSocketServer.rooms.get(roomName);
|
|
53
|
+
if (room) {
|
|
54
|
+
clientIds.push(...Array.from(room));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (clientIds.length > 0) {
|
|
58
|
+
await this.sendToClients(clientIds, message);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Convenience method for sending user-targeted messages
|
|
63
|
+
*/
|
|
64
|
+
async sendUserMessage(action, data) {
|
|
65
|
+
await this.broadcast({
|
|
66
|
+
type: "user",
|
|
67
|
+
action,
|
|
68
|
+
data
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Convenience method for sending system messages
|
|
73
|
+
*/
|
|
74
|
+
async sendSystemMessage(action, data) {
|
|
75
|
+
await this.broadcast({
|
|
76
|
+
type: "system",
|
|
77
|
+
action,
|
|
78
|
+
data
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Convenience method for sending error messages
|
|
83
|
+
*/
|
|
84
|
+
async sendErrorMessage(action, error) {
|
|
85
|
+
await this.broadcast({
|
|
86
|
+
type: "error",
|
|
87
|
+
action,
|
|
88
|
+
data: {
|
|
89
|
+
message: error.message ?? "An error occurred",
|
|
90
|
+
code: error.code,
|
|
91
|
+
details: error.details
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
WebSocketService
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=websocket-service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/websocket/websocket-service.ts"],
|
|
4
|
+
"sourcesContent": ["import type WebSocketServer from './websocket-server.js';\nimport type RedisInstance from '../redis/instance.js';\nimport { WebSocketRedisSubscriberEvent } from './websocket.interface.js';\n\nexport interface WebSocketMessage {\n type: string;\n action: string;\n data?: any;\n}\n\nexport interface WebSocketServiceOptions {\n webSocketServer?: WebSocketServer;\n redisInstance?: RedisInstance;\n workerId?: string;\n}\n\nexport class WebSocketService {\n private webSocketServer?: WebSocketServer;\n private redisInstance?: RedisInstance;\n private workerId?: string;\n\n constructor(options: WebSocketServiceOptions = {}) {\n this.webSocketServer = options.webSocketServer;\n this.redisInstance = options.redisInstance;\n this.workerId = options.workerId;\n }\n\n /**\n * Send a message to all connected WebSocket clients\n */\n async broadcast(message: WebSocketMessage): Promise<void> {\n if (this.webSocketServer) {\n // Direct broadcast if we have access to the WebSocket server\n await this.webSocketServer.sendCustomMessage({\n data: message,\n });\n } else if (this.redisInstance) {\n // Use Redis pub/sub for cross-worker communication\n await this.redisInstance.publisherClient.publish(\n WebSocketRedisSubscriberEvent.Custom,\n JSON.stringify({\n ...message,\n workerId: this.workerId,\n }),\n );\n } else {\n throw new Error('WebSocket service requires either webSocketServer or redisInstance');\n }\n }\n\n /**\n * Send a message to specific clients by their IDs\n * Note: This requires direct access to WebSocket server and room functionality\n */\n async sendToClients(clientIds: string[], message: WebSocketMessage): Promise<void> {\n // Currently not implemented in the framework\n // For now, we'll broadcast to all clients\n await this.broadcast(message);\n }\n\n /**\n * Send a message to all clients in specific rooms\n */\n async sendToRooms(roomNames: string[], message: WebSocketMessage): Promise<void> {\n if (!this.webSocketServer) {\n throw new Error('Sending to specific rooms requires direct access to WebSocket server');\n }\n\n const clientIds: string[] = [];\n\n // Get all client IDs from the specified rooms\n for (const roomName of roomNames) {\n const room = this.webSocketServer.rooms.get(roomName);\n if (room) {\n clientIds.push(...Array.from(room));\n }\n }\n\n if (clientIds.length > 0) {\n await this.sendToClients(clientIds, message);\n }\n }\n\n /**\n * Convenience method for sending user-targeted messages\n */\n async sendUserMessage(action: string, data: any): Promise<void> {\n await this.broadcast({\n type: 'user',\n action,\n data,\n });\n }\n\n /**\n * Convenience method for sending system messages\n */\n async sendSystemMessage(action: string, data: any): Promise<void> {\n await this.broadcast({\n type: 'system',\n action,\n data,\n });\n }\n\n /**\n * Convenience method for sending error messages\n */\n async sendErrorMessage(action: string, error: any): Promise<void> {\n await this.broadcast({\n type: 'error',\n action,\n data: {\n message: error.message ?? 'An error occurred',\n code: error.code,\n details: error.details,\n },\n });\n }\n}\n"],
|
|
5
|
+
"mappings": ";;AAEA,SAAS,qCAAqC;AAcvC,MAAM,iBAAiB;AAAA,EAhB9B,OAgB8B;AAAA;AAAA;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,UAAmC,CAAC,GAAG;AACjD,SAAK,kBAAkB,QAAQ;AAC/B,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,WAAW,QAAQ;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,SAA0C;AACxD,QAAI,KAAK,iBAAiB;AAExB,YAAM,KAAK,gBAAgB,kBAAkB;AAAA,QAC3C,MAAM;AAAA,MACR,CAAC;AAAA,IACH,WAAW,KAAK,eAAe;AAE7B,YAAM,KAAK,cAAc,gBAAgB;AAAA,QACvC,8BAA8B;AAAA,QAC9B,KAAK,UAAU;AAAA,UACb,GAAG;AAAA,UACH,UAAU,KAAK;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACtF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,WAAqB,SAA0C;AAGjF,UAAM,KAAK,UAAU,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,WAAqB,SAA0C;AAC/E,QAAI,CAAC,KAAK,iBAAiB;AACzB,YAAM,IAAI,MAAM,sEAAsE;AAAA,IACxF;AAEA,UAAM,YAAsB,CAAC;AAG7B,eAAW,YAAY,WAAW;AAChC,YAAM,OAAO,KAAK,gBAAgB,MAAM,IAAI,QAAQ;AACpD,UAAI,MAAM;AACR,kBAAU,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA,MACpC;AAAA,IACF;AAEA,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM,KAAK,cAAc,WAAW,OAAO;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,QAAgB,MAA0B;AAC9D,UAAM,KAAK,UAAU;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,QAAgB,MAA0B;AAChE,UAAM,KAAK,UAAU;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,QAAgB,OAA2B;AAChE,UAAM,KAAK,UAAU;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACJ,SAAS,MAAM,WAAW;AAAA,QAC1B,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { WebSocket, WebSocketServer } from 'ws';
|
|
2
|
+
import type DatabaseInstance from '../database/instance.js';
|
|
3
|
+
import type QueueManager from '../queue/manager.js';
|
|
4
|
+
import type RedisInstance from '../redis/instance.js';
|
|
5
|
+
import type { WebSocketServerBaseControllerType } from './controller/server/base.interface.js';
|
|
6
|
+
import type { WebSocketClientBaseControllerType } from './controller/client/base.interface.js';
|
|
7
|
+
export type WebSocketType = 'server' | 'client';
|
|
8
|
+
export interface WebSocketDebugOptions {
|
|
9
|
+
printRoutes?: boolean;
|
|
10
|
+
printConnectedClients?: 'simple' | 'table';
|
|
11
|
+
}
|
|
12
|
+
export interface WebSocketEventsConfig {
|
|
13
|
+
onServerStarted?: ({ webSocketServer }: {
|
|
14
|
+
webSocketServer: WebSocketServer;
|
|
15
|
+
}) => void;
|
|
16
|
+
onConnected?: ({ ws, clientId, joinRoom, }: {
|
|
17
|
+
ws: WebSocket;
|
|
18
|
+
clientId: string;
|
|
19
|
+
joinRoom({ userId, userType, username, roomName, }: {
|
|
20
|
+
userId?: string;
|
|
21
|
+
userType?: string;
|
|
22
|
+
username?: string;
|
|
23
|
+
roomName: string;
|
|
24
|
+
}): void;
|
|
25
|
+
}) => void;
|
|
26
|
+
onDisconnected?: ({ clientId }: {
|
|
27
|
+
clientId?: string;
|
|
28
|
+
}) => void;
|
|
29
|
+
onError?: ({ error }: {
|
|
30
|
+
error: Error;
|
|
31
|
+
}) => void;
|
|
32
|
+
onMessage?: ({ ws, clientId, data, redisInstance, queueManager, databaseInstance, }: {
|
|
33
|
+
ws: WebSocket;
|
|
34
|
+
clientId: string;
|
|
35
|
+
data: any;
|
|
36
|
+
redisInstance: RedisInstance;
|
|
37
|
+
queueManager: QueueManager;
|
|
38
|
+
databaseInstance: DatabaseInstance;
|
|
39
|
+
}) => void;
|
|
40
|
+
}
|
|
41
|
+
export interface WebSocketOptions {
|
|
42
|
+
/** WebSocket type */
|
|
43
|
+
type: WebSocketType;
|
|
44
|
+
/** WebSocket host */
|
|
45
|
+
host?: string;
|
|
46
|
+
/** WebSocket URL */
|
|
47
|
+
url: string;
|
|
48
|
+
/** WebSocket controllers directory */
|
|
49
|
+
controllersDirectory: string;
|
|
50
|
+
/** Disconnect inactive WebSocket clients configuration */
|
|
51
|
+
disconnectInactiveClients?: {
|
|
52
|
+
/** Whether to enable disconnection of inactive WebSocket clients */
|
|
53
|
+
enabled?: boolean;
|
|
54
|
+
/** Interval check time in milliseconds */
|
|
55
|
+
intervalCheckTime?: number;
|
|
56
|
+
/** Inactive time in milliseconds */
|
|
57
|
+
inactiveTime?: number;
|
|
58
|
+
/** Whether to log disconnection of inactive WebSocket clients */
|
|
59
|
+
log?: boolean;
|
|
60
|
+
};
|
|
61
|
+
rooms?: {
|
|
62
|
+
enabled?: boolean;
|
|
63
|
+
clientCanJoinMultipleRooms?: boolean;
|
|
64
|
+
};
|
|
65
|
+
/** WebSocket debug options */
|
|
66
|
+
debug?: WebSocketDebugOptions;
|
|
67
|
+
/** WebSocket events */
|
|
68
|
+
events?: WebSocketEventsConfig;
|
|
69
|
+
}
|
|
70
|
+
export interface WebSocketRoute {
|
|
71
|
+
/** WebSocket route type */
|
|
72
|
+
type: string;
|
|
73
|
+
/** WebSocket route controller name */
|
|
74
|
+
controllerName: string;
|
|
75
|
+
/** WebSocket route controller */
|
|
76
|
+
controller?: WebSocketServerBaseControllerType | WebSocketClientBaseControllerType;
|
|
77
|
+
/** WebSocket route action */
|
|
78
|
+
action: string;
|
|
79
|
+
}
|
|
80
|
+
export interface WebSocketConstructorParams {
|
|
81
|
+
/** WebSocket options */
|
|
82
|
+
options: WebSocketOptions;
|
|
83
|
+
/** WebSocket routes */
|
|
84
|
+
routes: WebSocketRoute[];
|
|
85
|
+
/** Redis instance */
|
|
86
|
+
redisInstance: RedisInstance;
|
|
87
|
+
/** Queue manager */
|
|
88
|
+
queueManager: QueueManager;
|
|
89
|
+
/** Database instance */
|
|
90
|
+
databaseInstance: DatabaseInstance;
|
|
91
|
+
}
|
|
92
|
+
export interface WebSocketConnectedClientData {
|
|
93
|
+
/** WebSocket client */
|
|
94
|
+
ws: WebSocket | null;
|
|
95
|
+
/** Last activity time */
|
|
96
|
+
lastActivity: number;
|
|
97
|
+
/** Client username */
|
|
98
|
+
username?: string;
|
|
99
|
+
}
|
|
100
|
+
export interface WebSocketMessageResponse {
|
|
101
|
+
error?: string;
|
|
102
|
+
}
|
|
103
|
+
export interface WebSocketMessageHandler {
|
|
104
|
+
(ws: WebSocket, clientId: string, data: any): WebSocketMessageResponse;
|
|
105
|
+
}
|
|
106
|
+
export declare enum WebSocketRedisSubscriberEvent {
|
|
107
|
+
ClientConnected = "clientConnected",
|
|
108
|
+
ClientDisconnected = "clientDisconnected",
|
|
109
|
+
DisconnectClient = "disconnectClient",
|
|
110
|
+
ClientJoinedRoom = "clientJoinedRoom",
|
|
111
|
+
ClientLeftRoom = "clientLeftRoom",
|
|
112
|
+
SendMessage = "sendMessage",
|
|
113
|
+
SendMessageToAll = "sendMessageToAll",
|
|
114
|
+
MessageError = "messageError",
|
|
115
|
+
QueueJobCompleted = "queueJobCompleted",
|
|
116
|
+
QueueJobError = "queueJobError",
|
|
117
|
+
Custom = "custom"
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=websocket.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.interface.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
var WebSocketRedisSubscriberEvent = /* @__PURE__ */ ((WebSocketRedisSubscriberEvent2) => {
|
|
2
|
+
WebSocketRedisSubscriberEvent2["ClientConnected"] = "clientConnected";
|
|
3
|
+
WebSocketRedisSubscriberEvent2["ClientDisconnected"] = "clientDisconnected";
|
|
4
|
+
WebSocketRedisSubscriberEvent2["DisconnectClient"] = "disconnectClient";
|
|
5
|
+
WebSocketRedisSubscriberEvent2["ClientJoinedRoom"] = "clientJoinedRoom";
|
|
6
|
+
WebSocketRedisSubscriberEvent2["ClientLeftRoom"] = "clientLeftRoom";
|
|
7
|
+
WebSocketRedisSubscriberEvent2["SendMessage"] = "sendMessage";
|
|
8
|
+
WebSocketRedisSubscriberEvent2["SendMessageToAll"] = "sendMessageToAll";
|
|
9
|
+
WebSocketRedisSubscriberEvent2["MessageError"] = "messageError";
|
|
10
|
+
WebSocketRedisSubscriberEvent2["QueueJobCompleted"] = "queueJobCompleted";
|
|
11
|
+
WebSocketRedisSubscriberEvent2["QueueJobError"] = "queueJobError";
|
|
12
|
+
WebSocketRedisSubscriberEvent2["Custom"] = "custom";
|
|
13
|
+
return WebSocketRedisSubscriberEvent2;
|
|
14
|
+
})(WebSocketRedisSubscriberEvent || {});
|
|
15
|
+
export {
|
|
16
|
+
WebSocketRedisSubscriberEvent
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=websocket.interface.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/websocket/websocket.interface.ts"],
|
|
4
|
+
"sourcesContent": ["import type { WebSocket, WebSocketServer } from 'ws';\nimport type DatabaseInstance from '../database/instance.js';\nimport type QueueManager from '../queue/manager.js';\nimport type RedisInstance from '../redis/instance.js';\nimport type { WebSocketServerBaseControllerType } from './controller/server/base.interface.js';\nimport type { WebSocketClientBaseControllerType } from './controller/client/base.interface.js';\n\nexport type WebSocketType = 'server' | 'client';\n\nexport interface WebSocketDebugOptions {\n printRoutes?: boolean;\n printConnectedClients?: 'simple' | 'table';\n}\n\nexport interface WebSocketEventsConfig {\n onServerStarted?: ({ webSocketServer }: { webSocketServer: WebSocketServer }) => void;\n onConnected?: ({\n ws,\n clientId,\n joinRoom,\n }: {\n ws: WebSocket;\n clientId: string;\n joinRoom({\n userId,\n userType,\n username,\n roomName,\n }: {\n userId?: string;\n userType?: string;\n username?: string;\n roomName: string;\n }): void;\n }) => void;\n onDisconnected?: ({ clientId }: { clientId?: string }) => void;\n onError?: ({ error }: { error: Error }) => void;\n onMessage?: ({\n ws,\n clientId,\n data,\n redisInstance,\n queueManager,\n databaseInstance,\n }: {\n ws: WebSocket;\n clientId: string;\n data: any;\n redisInstance: RedisInstance;\n queueManager: QueueManager;\n databaseInstance: DatabaseInstance;\n }) => void;\n}\n\nexport interface WebSocketOptions {\n /** WebSocket type */\n type: WebSocketType;\n\n /** WebSocket host */\n host?: string;\n\n /** WebSocket URL */\n url: string;\n\n /** WebSocket controllers directory */\n controllersDirectory: string;\n\n /** Disconnect inactive WebSocket clients configuration */\n disconnectInactiveClients?: {\n /** Whether to enable disconnection of inactive WebSocket clients */\n enabled?: boolean;\n\n /** Interval check time in milliseconds */\n intervalCheckTime?: number;\n\n /** Inactive time in milliseconds */\n inactiveTime?: number;\n\n /** Whether to log disconnection of inactive WebSocket clients */\n log?: boolean;\n };\n\n rooms?: {\n enabled?: boolean;\n clientCanJoinMultipleRooms?: boolean;\n };\n\n /** WebSocket debug options */\n debug?: WebSocketDebugOptions;\n\n /** WebSocket events */\n events?: WebSocketEventsConfig;\n}\n\nexport interface WebSocketRoute {\n /** WebSocket route type */\n type: string;\n\n /** WebSocket route controller name */\n controllerName: string;\n\n /** WebSocket route controller */\n controller?: WebSocketServerBaseControllerType | WebSocketClientBaseControllerType;\n\n /** WebSocket route action */\n action: string;\n}\n\nexport interface WebSocketConstructorParams {\n /** WebSocket options */\n options: WebSocketOptions;\n\n /** WebSocket routes */\n routes: WebSocketRoute[];\n\n /** Redis instance */\n redisInstance: RedisInstance;\n\n /** Queue manager */\n queueManager: QueueManager;\n\n /** Database instance */\n databaseInstance: DatabaseInstance;\n}\n\nexport interface WebSocketConnectedClientData {\n /** WebSocket client */\n ws: WebSocket | null;\n\n /** Last activity time */\n lastActivity: number;\n\n /** Client username */\n username?: string;\n}\n\nexport interface WebSocketMessageResponse {\n error?: string;\n}\n\nexport interface WebSocketMessageHandler {\n (ws: WebSocket, clientId: string, data: any): WebSocketMessageResponse;\n}\n\nexport enum WebSocketRedisSubscriberEvent {\n ClientConnected = 'clientConnected',\n ClientDisconnected = 'clientDisconnected',\n DisconnectClient = 'disconnectClient',\n ClientJoinedRoom = 'clientJoinedRoom',\n ClientLeftRoom = 'clientLeftRoom',\n SendMessage = 'sendMessage',\n SendMessageToAll = 'sendMessageToAll',\n MessageError = 'messageError',\n QueueJobCompleted = 'queueJobCompleted',\n QueueJobError = 'queueJobError',\n Custom = 'custom',\n}\n"],
|
|
5
|
+
"mappings": "AAgJO,IAAK,gCAAL,kBAAKA,mCAAL;AACL,EAAAA,+BAAA,qBAAkB;AAClB,EAAAA,+BAAA,wBAAqB;AACrB,EAAAA,+BAAA,sBAAmB;AACnB,EAAAA,+BAAA,sBAAmB;AACnB,EAAAA,+BAAA,oBAAiB;AACjB,EAAAA,+BAAA,iBAAc;AACd,EAAAA,+BAAA,sBAAmB;AACnB,EAAAA,+BAAA,kBAAe;AACf,EAAAA,+BAAA,uBAAoB;AACpB,EAAAA,+BAAA,mBAAgB;AAChB,EAAAA,+BAAA,YAAS;AAXC,SAAAA;AAAA,GAAA;",
|
|
6
|
+
"names": ["WebSocketRedisSubscriberEvent"]
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@scpxl/nodejs-framework",
|
|
3
|
+
"version": "1.0.13",
|
|
4
|
+
"description": "PXL Node.js Framework",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": ">=22.0.0"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"bin": {
|
|
12
|
+
"pxl": "./pxl.js"
|
|
13
|
+
},
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts"
|
|
18
|
+
},
|
|
19
|
+
"./application": {
|
|
20
|
+
"import": "./dist/application/index.js",
|
|
21
|
+
"types": "./dist/application/index.d.ts"
|
|
22
|
+
},
|
|
23
|
+
"./logger": {
|
|
24
|
+
"import": "./dist/logger/index.js",
|
|
25
|
+
"types": "./dist/logger/index.d.ts"
|
|
26
|
+
},
|
|
27
|
+
"./database": {
|
|
28
|
+
"import": "./dist/database/index.js",
|
|
29
|
+
"types": "./dist/database/index.d.ts"
|
|
30
|
+
},
|
|
31
|
+
"./webserver": {
|
|
32
|
+
"import": "./dist/webserver/index.js",
|
|
33
|
+
"types": "./dist/webserver/index.d.ts"
|
|
34
|
+
},
|
|
35
|
+
"./websocket": {
|
|
36
|
+
"import": "./dist/websocket/index.js",
|
|
37
|
+
"types": "./dist/websocket/index.d.ts"
|
|
38
|
+
},
|
|
39
|
+
"./queue": {
|
|
40
|
+
"import": "./dist/queue/index.js",
|
|
41
|
+
"types": "./dist/queue/index.d.ts"
|
|
42
|
+
},
|
|
43
|
+
"./redis": {
|
|
44
|
+
"import": "./dist/redis/index.js",
|
|
45
|
+
"types": "./dist/redis/index.d.ts"
|
|
46
|
+
},
|
|
47
|
+
"./cache": {
|
|
48
|
+
"import": "./dist/cache/index.js",
|
|
49
|
+
"types": "./dist/cache/index.d.ts"
|
|
50
|
+
},
|
|
51
|
+
"./util": {
|
|
52
|
+
"import": "./dist/util/index.js",
|
|
53
|
+
"types": "./dist/util/index.d.ts"
|
|
54
|
+
},
|
|
55
|
+
"./services": {
|
|
56
|
+
"import": "./dist/services/index.js",
|
|
57
|
+
"types": "./dist/services/index.d.ts"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"files": [
|
|
61
|
+
"dist",
|
|
62
|
+
"pxl.js",
|
|
63
|
+
"README.md"
|
|
64
|
+
],
|
|
65
|
+
"scripts": {
|
|
66
|
+
"dev": "node scripts/hmr-watcher.js",
|
|
67
|
+
"dev:import-map": "node --experimental-import-map=import-map.json --loader ts-node/esm src/index.ts",
|
|
68
|
+
"clean": "del-cli dist",
|
|
69
|
+
"build": "npm run clean && node esbuild.config.js",
|
|
70
|
+
"build:tsc": "npm run clean && tsc",
|
|
71
|
+
"build:local": "npm run clean && node esbuild.config.js && yalc push",
|
|
72
|
+
"docs": "typedoc",
|
|
73
|
+
"release": "node scripts/release.js",
|
|
74
|
+
"prepare": "husky",
|
|
75
|
+
"lint": "eslint .",
|
|
76
|
+
"lint:fix": "eslint . --fix",
|
|
77
|
+
"format": "prettier --check .",
|
|
78
|
+
"format:fix": "prettier --write .",
|
|
79
|
+
"typecheck": "tsc --noEmit",
|
|
80
|
+
"test": "node --test --experimental-strip-types test/**/*.test.ts",
|
|
81
|
+
"test:watch": "node --test --watch --experimental-strip-types test/**/*.test.ts",
|
|
82
|
+
"test:coverage": "node --test --experimental-test-coverage --experimental-strip-types test/**/*.test.ts",
|
|
83
|
+
"test:unit": "node --test --experimental-strip-types test/unit/**/*.test.ts",
|
|
84
|
+
"test:integration": "node --test --experimental-strip-types test/integration/**/*.test.ts",
|
|
85
|
+
"test:e2e": "node --test --experimental-strip-types test/e2e/**/*.test.ts",
|
|
86
|
+
"check-all": "npm run lint && npm run format && npm run typecheck",
|
|
87
|
+
"yalc:publish": "yalc publish",
|
|
88
|
+
"yalc:push": "yalc push",
|
|
89
|
+
"dev:yalc": "npm run build && npm run yalc:push"
|
|
90
|
+
},
|
|
91
|
+
"keywords": [],
|
|
92
|
+
"author": "PXL <devops@pxlagency.com>",
|
|
93
|
+
"license": "ISC",
|
|
94
|
+
"devDependencies": {
|
|
95
|
+
"@swc/core": "^1.4.1",
|
|
96
|
+
"@types/fluent-ffmpeg": "^2.1.26",
|
|
97
|
+
"@types/node": "^24.0.13",
|
|
98
|
+
"@types/uuid": "^10.0.0",
|
|
99
|
+
"@types/ws": "^8.5.10",
|
|
100
|
+
"@types/yargs": "^17.0.33",
|
|
101
|
+
"@typescript-eslint/eslint-plugin": "^8.1.0",
|
|
102
|
+
"@typescript-eslint/parser": "^8.1.0",
|
|
103
|
+
"del-cli": "^6.0.0",
|
|
104
|
+
"esbuild": "^0.25.5",
|
|
105
|
+
"eslint": "^9.9.0",
|
|
106
|
+
"eslint-config-prettier": "^10.1.5",
|
|
107
|
+
"eslint-plugin-node": "^11.1.0",
|
|
108
|
+
"eslint-plugin-prettier": "^5.0.1",
|
|
109
|
+
"eslint-plugin-security": "^3.0.1",
|
|
110
|
+
"glob": "^11.0.3",
|
|
111
|
+
"husky": "^9.1.7",
|
|
112
|
+
"lint-staged": "^16.1.2",
|
|
113
|
+
"prettier": "^3.1.1",
|
|
114
|
+
"redis-memory-server": "^0.12.1",
|
|
115
|
+
"ts-node": "^10.9.2",
|
|
116
|
+
"tsc-alias": "^1.8.16",
|
|
117
|
+
"tsconfig-paths": "^4.2.0",
|
|
118
|
+
"typedoc": "^0.28.7"
|
|
119
|
+
},
|
|
120
|
+
"dependencies": {
|
|
121
|
+
"@aws-sdk/client-s3": "^3.496.0",
|
|
122
|
+
"@aws-sdk/s3-request-presigner": "^3.675.0",
|
|
123
|
+
"@fastify/cors": "^11.0.0",
|
|
124
|
+
"@fastify/multipart": "^9.0.0",
|
|
125
|
+
"@mikro-orm/cli": "^6.0.5",
|
|
126
|
+
"@mikro-orm/core": "^6.0.5",
|
|
127
|
+
"@mikro-orm/migrations": "^6.0.5",
|
|
128
|
+
"@mikro-orm/postgresql": "^6.0.5",
|
|
129
|
+
"@mikro-orm/seeder": "^6.0.5",
|
|
130
|
+
"@sentry/node": "^9.37.0",
|
|
131
|
+
"@sentry/profiling-node": "^9.37.0",
|
|
132
|
+
"axios": "^1.6.2",
|
|
133
|
+
"bullmq": "^5.1.3",
|
|
134
|
+
"dotenv": "^17.2.0",
|
|
135
|
+
"fastify": "^5.0.0",
|
|
136
|
+
"fluent-ffmpeg": "^2.1.3",
|
|
137
|
+
"http-status-codes": "^2.3.0",
|
|
138
|
+
"ioredis": "^5.3.2",
|
|
139
|
+
"joi": "^17.12.1",
|
|
140
|
+
"jose": "^6.0.10",
|
|
141
|
+
"redis": "^5.6.0",
|
|
142
|
+
"sharp": "^0.34.3",
|
|
143
|
+
"typescript": "^5.8.3",
|
|
144
|
+
"uuid": "^11.0.2",
|
|
145
|
+
"winston": "^3.11.0",
|
|
146
|
+
"ws": "^8.15.1",
|
|
147
|
+
"yalc": "^1.0.0-pre.53",
|
|
148
|
+
"yargs": "^18.0.0"
|
|
149
|
+
},
|
|
150
|
+
"lint-staged": {
|
|
151
|
+
"*.{ts,js}": [
|
|
152
|
+
"eslint --fix",
|
|
153
|
+
"prettier --write"
|
|
154
|
+
],
|
|
155
|
+
"*.{json,md,yml,yaml}": [
|
|
156
|
+
"prettier --write"
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
}
|
package/pxl.js
ADDED