@scpxl/nodejs-framework 1.0.32 → 1.0.43
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/dist/application/base-application.d.ts +7 -7
- package/dist/application/base-application.d.ts.map +1 -1
- package/dist/application/base-application.interface.d.ts +1 -1
- package/dist/application/base-application.interface.d.ts.map +1 -1
- package/dist/application/base-application.js +114 -14
- package/dist/application/base-application.js.map +2 -2
- package/dist/application/web-application.d.ts.map +1 -1
- package/dist/application/web-application.js +2 -1
- package/dist/application/web-application.js.map +2 -2
- package/dist/cache/manager.d.ts +1 -0
- package/dist/cache/manager.d.ts.map +1 -1
- package/dist/cache/manager.js +11 -2
- package/dist/cache/manager.js.map +2 -2
- package/dist/cli/index.js +28 -12
- package/dist/cli/index.js.map +2 -2
- package/dist/config/schema.d.ts +2 -63
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +1 -7
- package/dist/config/schema.js.map +2 -2
- package/dist/event/manager.js +2 -2
- package/dist/event/manager.js.map +2 -2
- package/dist/logger/logger.js +0 -1
- package/dist/logger/logger.js.map +2 -2
- package/dist/queue/manager.d.ts.map +1 -1
- package/dist/queue/manager.js +19 -7
- package/dist/queue/manager.js.map +2 -2
- package/dist/redis/instance.d.ts.map +1 -1
- package/dist/redis/instance.js +9 -1
- package/dist/redis/instance.js.map +2 -2
- package/dist/redis/manager.d.ts.map +1 -1
- package/dist/redis/manager.js +26 -16
- package/dist/redis/manager.js.map +3 -3
- package/dist/webserver/controller/entity.js +1 -1
- package/dist/webserver/controller/entity.js.map +2 -2
- package/dist/webserver/controller/health.js.map +1 -1
- package/dist/webserver/util.d.ts +1 -1
- package/dist/webserver/util.d.ts.map +1 -1
- package/dist/webserver/util.js +5 -23
- package/dist/webserver/util.js.map +2 -2
- package/dist/webserver/webserver.d.ts +2 -13
- package/dist/webserver/webserver.d.ts.map +1 -1
- package/dist/webserver/webserver.interface.d.ts +1 -21
- package/dist/webserver/webserver.interface.d.ts.map +1 -1
- package/dist/webserver/webserver.interface.js.map +1 -1
- package/dist/webserver/webserver.js +34 -36
- package/dist/webserver/webserver.js.map +2 -2
- package/dist/websocket/define-subscriber.d.ts +8 -1
- package/dist/websocket/define-subscriber.d.ts.map +1 -1
- package/dist/websocket/define-subscriber.js +2 -1
- package/dist/websocket/define-subscriber.js.map +2 -2
- package/dist/websocket/index.d.ts +4 -0
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +43 -1
- package/dist/websocket/index.js.map +2 -2
- package/dist/websocket/subscriber-middleware.d.ts +52 -0
- package/dist/websocket/subscriber-middleware.d.ts.map +1 -0
- package/dist/websocket/subscriber-middleware.js +200 -0
- package/dist/websocket/subscriber-middleware.js.map +7 -0
- package/dist/websocket/subscriber-utils.d.ts +88 -0
- package/dist/websocket/subscriber-utils.d.ts.map +1 -0
- package/dist/websocket/subscriber-utils.js +227 -0
- package/dist/websocket/subscriber-utils.js.map +7 -0
- package/dist/websocket/utils.d.ts.map +1 -1
- package/dist/websocket/utils.js +5 -1
- package/dist/websocket/utils.js.map +2 -2
- package/dist/websocket/websocket-base.d.ts.map +1 -1
- package/dist/websocket/websocket-base.js +9 -1
- package/dist/websocket/websocket-base.js.map +2 -2
- package/dist/websocket/websocket-server.d.ts +41 -1
- package/dist/websocket/websocket-server.d.ts.map +1 -1
- package/dist/websocket/websocket-server.js +90 -7
- package/dist/websocket/websocket-server.js.map +2 -2
- package/dist/websocket/websocket.interface.d.ts +7 -0
- package/dist/websocket/websocket.interface.d.ts.map +1 -1
- package/dist/websocket/websocket.interface.js.map +2 -2
- package/package.json +5 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/websocket/websocket.interface.ts"],
|
|
4
|
-
"sourcesContent": ["import type { WebSocketServer as NativeWebSocketServer, WebSocket } from 'ws';\nimport type WebSocketServerInstance from './websocket-server.js';\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 WebSocketSubscriberHandlerContext<TMessage = any> {\n /** Redis channel that emitted the message */\n channel: string;\n\n /** Parsed message payload */\n message: TMessage;\n\n /** Running WebSocket server instance */\n webSocketServer: WebSocketServerInstance;\n\n /** Database instance bound to the application */\n databaseInstance: DatabaseInstance;\n\n /** Redis instance used by the framework */\n redisInstance: RedisInstance;\n\n /** Queue manager instance used by the framework */\n queueManager: QueueManager;\n}\n\nexport type WebSocketSubscriberHandler<TMessage = any> = (\n context: WebSocketSubscriberHandlerContext<TMessage>,\n) => unknown | Promise<unknown>;\n\nexport type WebSocketSubscriberMatcher<TMessage = any> =\n | string\n | RegExp\n | ((context: WebSocketSubscriberHandlerContext<TMessage>) => boolean);\n\nexport interface WebSocketSubscriberDefinition<TMessage = any> {\n /** Optional identifier, used for logging and debugging */\n name?: string;\n\n /** Optional description to document the handler */\n description?: string;\n\n /** Optional priority to control execution order (higher runs first) */\n priority?: number;\n\n /** Optional explicit channel filters */\n channels?: string[];\n\n /** Optional matchers that allow advanced filtering */\n matchers?: WebSocketSubscriberMatcher<TMessage>[];\n\n /** Handler that will be invoked when the message is matched */\n handle: WebSocketSubscriberHandler<TMessage>;\n}\n\nexport interface WebSocketSubscriberHandlersConfig {\n /** Directory that contains subscriber handler modules */\n directory?: string;\n\n /** Additional handlers defined inline */\n handlers?: WebSocketSubscriberDefinition[];\n}\n\nexport interface WebSocketDebugOptions {\n printRoutes?: boolean;\n printConnectedClients?: 'simple' | 'table';\n}\n\nexport interface WebSocketMessage<TData = unknown> {\n type: string;\n action: string;\n data: TData;\n}\n\nexport interface WebSocketEventsConfig {\n onServerStarted?: ({ webSocketServer }: { webSocketServer: NativeWebSocketServer }) => 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?: <TData = unknown>({\n ws,\n clientId,\n data,\n redisInstance,\n queueManager,\n databaseInstance,\n }: {\n ws: WebSocket;\n clientId: string;\n data: WebSocketMessage<TData>;\n redisInstance: RedisInstance;\n queueManager: QueueManager;\n databaseInstance: DatabaseInstance;\n }) => void;\n /** Fired when attempting to reconnect */\n onReconnecting?: ({ attempt, delay }: { attempt: number; delay: number }) => void;\n /** Fired when reconnection is successful */\n onReconnected?: ({ clientId }: { clientId?: string }) => void;\n /** Fired when max reconnection attempts are reached */\n onReconnectFailed?: ({ attempts }: { attempts: number }) => 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 /** WebSocket subscriber handlers configuration */\n subscriberHandlers?: WebSocketSubscriberHandlersConfig;\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<TData = unknown, TResponse = WebSocketMessageResponse> {\n (ws: WebSocket, clientId: string, data: TData): Promise<TResponse> | TResponse;\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": "
|
|
4
|
+
"sourcesContent": ["import type { WebSocketServer as NativeWebSocketServer, WebSocket } from 'ws';\nimport type WebSocketServerInstance from './websocket-server.js';\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 WebSocketSubscriberHandlerContext<TMessage = any> {\n /** Redis channel that emitted the message */\n channel: string;\n\n /** Parsed message payload */\n message: TMessage;\n\n /** Running WebSocket server instance */\n webSocketServer: WebSocketServerInstance;\n\n /** Database instance bound to the application */\n databaseInstance: DatabaseInstance;\n\n /** Redis instance used by the framework */\n redisInstance: RedisInstance;\n\n /** Queue manager instance used by the framework */\n queueManager: QueueManager;\n}\n\nexport type WebSocketSubscriberHandler<TMessage = any> = (\n context: WebSocketSubscriberHandlerContext<TMessage>,\n) => unknown | Promise<unknown>;\n\nexport type WebSocketSubscriberMatcher<TMessage = any> =\n | string\n | RegExp\n | ((context: WebSocketSubscriberHandlerContext<TMessage>) => boolean);\n\nexport interface WebSocketSubscriberDefinition<TMessage = any> {\n /** Optional identifier, used for logging and debugging */\n name?: string;\n\n /** Optional description to document the handler */\n description?: string;\n\n /** Optional priority to control execution order (higher runs first) */\n priority?: number;\n\n /** Optional explicit channel filters */\n channels?: string[];\n\n /** Optional matchers that allow advanced filtering */\n matchers?: WebSocketSubscriberMatcher<TMessage>[];\n\n /** Handler that will be invoked when the message is matched */\n handle: WebSocketSubscriberHandler<TMessage>;\n\n /** Optional middleware to apply to this handler */\n middleware?: Array<{\n name: string;\n onBefore?: (context: WebSocketSubscriberHandlerContext<TMessage>) => boolean | Promise<boolean>;\n onAfter?: (context: WebSocketSubscriberHandlerContext<TMessage>, result: unknown) => void | Promise<void>;\n onError?: (context: WebSocketSubscriberHandlerContext<TMessage>, error: Error) => boolean | Promise<boolean>;\n }>;\n}\n\nexport interface WebSocketSubscriberHandlersConfig {\n /** Directory that contains subscriber handler modules */\n directory?: string;\n\n /** Additional handlers defined inline */\n handlers?: WebSocketSubscriberDefinition[];\n}\n\nexport interface WebSocketDebugOptions {\n printRoutes?: boolean;\n printConnectedClients?: 'simple' | 'table';\n}\n\nexport interface WebSocketMessage<TData = unknown> {\n type: string;\n action: string;\n data: TData;\n}\n\nexport interface WebSocketEventsConfig {\n onServerStarted?: ({ webSocketServer }: { webSocketServer: NativeWebSocketServer }) => 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?: <TData = unknown>({\n ws,\n clientId,\n data,\n redisInstance,\n queueManager,\n databaseInstance,\n }: {\n ws: WebSocket;\n clientId: string;\n data: WebSocketMessage<TData>;\n redisInstance: RedisInstance;\n queueManager: QueueManager;\n databaseInstance: DatabaseInstance;\n }) => void;\n /** Fired when attempting to reconnect */\n onReconnecting?: ({ attempt, delay }: { attempt: number; delay: number }) => void;\n /** Fired when reconnection is successful */\n onReconnected?: ({ clientId }: { clientId?: string }) => void;\n /** Fired when max reconnection attempts are reached */\n onReconnectFailed?: ({ attempts }: { attempts: number }) => 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 /** WebSocket subscriber handlers configuration */\n subscriberHandlers?: WebSocketSubscriberHandlersConfig;\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<TData = unknown, TResponse = WebSocketMessageResponse> {\n (ws: WebSocket, clientId: string, data: TData): Promise<TResponse> | TResponse;\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": "AAiOO,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
6
|
"names": ["WebSocketRedisSubscriberEvent"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scpxl/nodejs-framework",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.43",
|
|
4
4
|
"description": "PXL Node.js Framework",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -103,7 +103,6 @@
|
|
|
103
103
|
],
|
|
104
104
|
"scripts": {
|
|
105
105
|
"dev": "node scripts/hmr-watcher-enhanced.js",
|
|
106
|
-
"dev:legacy": "node scripts/hmr-watcher.js",
|
|
107
106
|
"dev:import-map": "tsx src/index.ts",
|
|
108
107
|
"clean": "del-cli dist",
|
|
109
108
|
"build": "npm run clean && node esbuild.config.js",
|
|
@@ -149,8 +148,8 @@
|
|
|
149
148
|
"@types/yargs": "^17.0.33",
|
|
150
149
|
"@typescript-eslint/eslint-plugin": "^8.1.0",
|
|
151
150
|
"@typescript-eslint/parser": "^8.1.0",
|
|
152
|
-
"@vitest/coverage-v8": "^
|
|
153
|
-
"@vitest/ui": "^
|
|
151
|
+
"@vitest/coverage-v8": "^4.0.6",
|
|
152
|
+
"@vitest/ui": "^4.0.6",
|
|
154
153
|
"concurrently": "^9.1.2",
|
|
155
154
|
"del-cli": "^7.0.0",
|
|
156
155
|
"esbuild": "^0.25.5",
|
|
@@ -164,12 +163,12 @@
|
|
|
164
163
|
"husky": "^9.1.7",
|
|
165
164
|
"lint-staged": "^16.1.2",
|
|
166
165
|
"prettier": "^3.1.1",
|
|
167
|
-
"redis-memory-server": "^0.
|
|
166
|
+
"redis-memory-server": "^0.14.0",
|
|
168
167
|
"simple-git": "^3.25.0",
|
|
169
168
|
"tsx": "^4.19.2",
|
|
170
169
|
"tsc-alias": "^1.8.16",
|
|
171
170
|
"vitepress": "^1.6.4",
|
|
172
|
-
"vitest": "^
|
|
171
|
+
"vitest": "^4.0.6"
|
|
173
172
|
},
|
|
174
173
|
"dependencies": {
|
|
175
174
|
"@aws-sdk/client-s3": "^3.496.0",
|