@fluojs/websockets 1.0.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.ko.md +30 -10
  2. package/README.md +30 -10
  3. package/dist/bun/bun-service.d.ts +3 -1
  4. package/dist/bun/bun-service.d.ts.map +1 -1
  5. package/dist/bun/bun-service.js +75 -26
  6. package/dist/bun/bun-types.d.ts +15 -4
  7. package/dist/bun/bun-types.d.ts.map +1 -1
  8. package/dist/bun.d.ts +2 -1
  9. package/dist/bun.d.ts.map +1 -1
  10. package/dist/bun.js +2 -1
  11. package/dist/cloudflare-workers/cloudflare-workers-service.d.ts +4 -0
  12. package/dist/cloudflare-workers/cloudflare-workers-service.d.ts.map +1 -1
  13. package/dist/cloudflare-workers/cloudflare-workers-service.js +108 -33
  14. package/dist/cloudflare-workers/cloudflare-workers-types.d.ts +2 -2
  15. package/dist/cloudflare-workers/cloudflare-workers-types.d.ts.map +1 -1
  16. package/dist/cloudflare-workers.d.ts +2 -1
  17. package/dist/cloudflare-workers.d.ts.map +1 -1
  18. package/dist/cloudflare-workers.js +2 -1
  19. package/dist/decorators.d.ts +2 -2
  20. package/dist/decorators.d.ts.map +1 -1
  21. package/dist/decorators.js +4 -4
  22. package/dist/deno/deno-service.d.ts +4 -0
  23. package/dist/deno/deno-service.d.ts.map +1 -1
  24. package/dist/deno/deno-service.js +85 -16
  25. package/dist/deno/deno-types.d.ts +2 -2
  26. package/dist/deno/deno-types.d.ts.map +1 -1
  27. package/dist/deno.d.ts +2 -1
  28. package/dist/deno.d.ts.map +1 -1
  29. package/dist/deno.js +2 -1
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/internal/shared.d.ts +6 -3
  33. package/dist/internal/shared.d.ts.map +1 -1
  34. package/dist/internal/shared.js +26 -6
  35. package/dist/internal.d.ts +7 -0
  36. package/dist/internal.d.ts.map +1 -0
  37. package/dist/internal.js +6 -0
  38. package/dist/module.d.ts +1 -1
  39. package/dist/module.d.ts.map +1 -1
  40. package/dist/module.js +23 -3
  41. package/dist/node/node-module.d.ts.map +1 -1
  42. package/dist/node/node-module.js +6 -2
  43. package/dist/node/node-service-token.d.ts +20 -0
  44. package/dist/node/node-service-token.d.ts.map +1 -0
  45. package/dist/node/node-service-token.js +29 -0
  46. package/dist/node/node-service.d.ts +5 -3
  47. package/dist/node/node-service.d.ts.map +1 -1
  48. package/dist/node/node-service.js +26 -8
  49. package/dist/node/node-types.d.ts +2 -2
  50. package/dist/node/node-types.d.ts.map +1 -1
  51. package/dist/node/node.d.ts +1 -1
  52. package/dist/node/node.d.ts.map +1 -1
  53. package/dist/node/node.js +1 -1
  54. package/dist/node.d.ts +1 -0
  55. package/dist/node.d.ts.map +1 -1
  56. package/dist/node.js +2 -1
  57. package/dist/service.d.ts +1 -8
  58. package/dist/service.d.ts.map +1 -1
  59. package/dist/service.js +1 -8
  60. package/dist/types.d.ts +26 -2
  61. package/dist/types.d.ts.map +1 -1
  62. package/package.json +21 -12
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from './decorators.js';
2
2
  export * from './metadata.js';
3
3
  export * from './module.js';
4
- export * from './service.js';
5
- export type { WebSocketEventMap, WebSocketGatewayDescriptor, WebSocketGatewayHandlerDescriptor, WebSocketGatewayHandlerMetadata, WebSocketGatewayHandlerType, WebSocketGatewayMetadata, WebSocketGatewayOptions, WebSocketGatewayServerBackedOptions, WebSocketRoomService, WebSocketUpgradeContext, WebSocketUpgradeRejection, } from './types.js';
6
4
  export type { TypedOnMessageHandler, WebSocketGatewayContext, WebSocketModuleOptions, WebSocketUpgradeGuard, } from './node/node-types.js';
5
+ export * from './service.js';
6
+ export type { WebSocketEventEnvelope, WebSocketEventMap, WebSocketGatewayDescriptor, WebSocketGatewayHandlerDescriptor, WebSocketGatewayHandlerMetadata, WebSocketGatewayHandlerType, WebSocketGatewayMetadata, WebSocketGatewayOptions, WebSocketGatewayServerBackedOptions, WebSocketReplyMode, WebSocketRoomService, WebSocketUpgradeContext, WebSocketUpgradeRejection, } from './types.js';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,YAAY,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,iCAAiC,EACjC,+BAA+B,EAC/B,2BAA2B,EAC3B,wBAAwB,EACxB,uBAAuB,EACvB,mCAAmC,EACnC,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,iCAAiC,EACjC,+BAA+B,EAC/B,2BAA2B,EAC3B,wBAAwB,EACxB,uBAAuB,EACvB,mCAAmC,EACnC,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
@@ -2,7 +2,7 @@ import type { Token } from '@fluojs/core';
2
2
  import type { Container } from '@fluojs/di';
3
3
  import type { FetchStyleHttpAdapterRealtimeCapability, HttpApplicationAdapter } from '@fluojs/http';
4
4
  import type { ApplicationLogger, CompiledModule } from '@fluojs/runtime';
5
- import type { WebSocketGatewayDescriptor, WebSocketGatewayHandlerDescriptor } from '../types.js';
5
+ import type { WebSocketGatewayDescriptor, WebSocketGatewayHandlerDescriptor, WebSocketReplyMode } from '../types.js';
6
6
  /**
7
7
  * Describes the discovery candidate contract.
8
8
  */
@@ -98,11 +98,14 @@ export declare function resolveGatewayInstance(runtimeContainer: Container, desc
98
98
  * @param socket The socket.
99
99
  * @param request The request.
100
100
  * @param data The data.
101
+ * @param socketId Stable connection identity passed to message handlers.
102
+ * @param replyMode Optional policy for serializing valid handler return envelopes.
103
+ * @param sendReply Runtime-owned reply sender that reports terminal send failures.
101
104
  * @param logger The logger.
102
105
  * @param loggerContext The logger context.
103
- * @returns The dispatch gateway message result.
106
+ * @returns `terminal` when reply delivery failed; otherwise `completed`.
104
107
  */
105
- export declare function dispatchGatewayMessage<TSocket, TRequest>(resolved: readonly ResolvedGatewayInstance[], socket: TSocket, request: TRequest, data: SharedWebSocketIncomingMessage, logger: ApplicationLogger, loggerContext: string): Promise<void>;
108
+ export declare function dispatchGatewayMessage<TSocket, TRequest>(resolved: readonly ResolvedGatewayInstance[], socket: TSocket, request: TRequest, data: SharedWebSocketIncomingMessage, socketId: string, replyMode: WebSocketReplyMode | undefined, sendReply: (message: string) => boolean, logger: ApplicationLogger, loggerContext: string): Promise<'completed' | 'terminal'>;
106
109
  /**
107
110
  * Dispatch gateway disconnect.
108
111
  *
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/internal/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/internal/shared.ts"],"names":[],"mappings":"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"}
@@ -179,27 +179,46 @@ export async function resolveGatewayInstance(runtimeContainer, descriptor, logge
179
179
  * @param socket The socket.
180
180
  * @param request The request.
181
181
  * @param data The data.
182
+ * @param socketId Stable connection identity passed to message handlers.
183
+ * @param replyMode Optional policy for serializing valid handler return envelopes.
184
+ * @param sendReply Runtime-owned reply sender that reports terminal send failures.
182
185
  * @param logger The logger.
183
186
  * @param loggerContext The logger context.
184
- * @returns The dispatch gateway message result.
187
+ * @returns `terminal` when reply delivery failed; otherwise `completed`.
185
188
  */
186
- export async function dispatchGatewayMessage(resolved, socket, request, data, logger, loggerContext) {
189
+ export async function dispatchGatewayMessage(resolved, socket, request, data, socketId, replyMode, sendReply, logger, loggerContext) {
187
190
  const parsed = parseIncomingMessage(data);
188
191
  for (const {
189
192
  descriptor,
190
193
  instance
191
194
  } of resolved) {
192
195
  for (const handler of descriptor.wildcardMessageHandlers) {
193
- await invokeGatewayMethod(instance, descriptor, handler, [parsed.payload, socket, request], logger, loggerContext);
196
+ const result = await invokeGatewayMethod(instance, descriptor, handler, [parsed.payload, socket, request, socketId], logger, loggerContext);
197
+ if (!sendHandlerReply(result, replyMode, sendReply)) {
198
+ return 'terminal';
199
+ }
194
200
  }
195
201
  if (parsed.event === undefined) {
196
202
  continue;
197
203
  }
198
204
  const eventHandlers = descriptor.messageHandlersByEvent.get(parsed.event) ?? [];
199
205
  for (const handler of eventHandlers) {
200
- await invokeGatewayMethod(instance, descriptor, handler, [parsed.payload, socket, request], logger, loggerContext);
206
+ const result = await invokeGatewayMethod(instance, descriptor, handler, [parsed.payload, socket, request, socketId], logger, loggerContext);
207
+ if (!sendHandlerReply(result, replyMode, sendReply)) {
208
+ return 'terminal';
209
+ }
201
210
  }
202
211
  }
212
+ return 'completed';
213
+ }
214
+ function sendHandlerReply(result, replyMode, sendReply) {
215
+ if (replyMode !== 'event-envelope' || !isWebSocketEventEnvelope(result)) {
216
+ return true;
217
+ }
218
+ return sendReply(JSON.stringify(result));
219
+ }
220
+ function isWebSocketEventEnvelope(value) {
221
+ return typeof value === 'object' && value !== null && 'event' in value && typeof value.event === 'string';
203
222
  }
204
223
 
205
224
  /**
@@ -244,12 +263,13 @@ async function invokeGatewayMethod(instance, descriptor, handler, args, logger,
244
263
  const value = instance[handler.methodKey];
245
264
  if (typeof value !== 'function') {
246
265
  logger.warn(`WebSocket gateway handler ${descriptor.targetName}.${handler.methodName} is not callable and was skipped.`, loggerContext);
247
- return;
266
+ return undefined;
248
267
  }
249
268
  try {
250
- await Promise.resolve(value.call(instance, ...args));
269
+ return await Promise.resolve(value.call(instance, ...args));
251
270
  } catch (error) {
252
271
  logger.error(`WebSocket gateway handler ${descriptor.targetName}.${handler.methodName} failed.`, error, loggerContext);
272
+ return undefined;
253
273
  }
254
274
  }
255
275
  function discoveryCandidates(compiledModules) {
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Framework-internal gateway discovery and dispatch primitives shared by protocol adapters.
3
+ *
4
+ * @internal
5
+ */
6
+ export { discoverGatewayDescriptors, resolveGatewayInstance, type ResolvedGatewayInstance, } from './internal/shared.js';
7
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Framework-internal gateway discovery and dispatch primitives shared by protocol adapters.
3
+ *
4
+ * @internal
5
+ */
6
+ export { discoverGatewayDescriptors, resolveGatewayInstance } from './internal/shared.js';
package/dist/module.d.ts CHANGED
@@ -8,7 +8,7 @@ export declare class WebSocketModule {
8
8
  * Creates a module definition backed by the default Node.js WebSocket runtime.
9
9
  *
10
10
  * @param options WebSocket adapter options shared with the runtime lifecycle service.
11
- * @returns A runtime module definition that delegates to {@link NodeWebSocketModule.forRoot}.
11
+ * @returns A runtime module definition that lazily binds the Node.js lifecycle implementation.
12
12
  *
13
13
  * @example
14
14
  * ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,sBAA2B,GAAG,UAAU;CAGjE"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqC,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGrF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAInE;;GAEG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,sBAA2B,GAAG,UAAU;CAkCjE"}
package/dist/module.js CHANGED
@@ -1,4 +1,8 @@
1
- import { NodeWebSocketModule } from './node.js';
1
+ import { defineModule } from '@fluojs/runtime';
2
+ import { APPLICATION_LOGGER, COMPILED_MODULES, HTTP_APPLICATION_ADAPTER, RUNTIME_CONTAINER } from '@fluojs/runtime/internal';
3
+ import { WEBSOCKET_OPTIONS_INTERNAL } from './options-token.internal.js';
4
+ import { WebSocketGatewayLifecycleService } from './service.js';
5
+
2
6
  /**
3
7
  * Root module entry point that defaults to the Node.js WebSocket adapter.
4
8
  */
@@ -7,7 +11,7 @@ export class WebSocketModule {
7
11
  * Creates a module definition backed by the default Node.js WebSocket runtime.
8
12
  *
9
13
  * @param options WebSocket adapter options shared with the runtime lifecycle service.
10
- * @returns A runtime module definition that delegates to {@link NodeWebSocketModule.forRoot}.
14
+ * @returns A runtime module definition that lazily binds the Node.js lifecycle implementation.
11
15
  *
12
16
  * @example
13
17
  * ```ts
@@ -21,6 +25,22 @@ export class WebSocketModule {
21
25
  * ```
22
26
  */
23
27
  static forRoot(options = {}) {
24
- return NodeWebSocketModule.forRoot(options);
28
+ class WebSocketRuntimeModule extends WebSocketModule {}
29
+ return defineModule(WebSocketRuntimeModule, {
30
+ providers: [{
31
+ provide: WEBSOCKET_OPTIONS_INTERNAL,
32
+ useValue: options
33
+ }, {
34
+ inject: [RUNTIME_CONTAINER, COMPILED_MODULES, APPLICATION_LOGGER, HTTP_APPLICATION_ADAPTER, WEBSOCKET_OPTIONS_INTERNAL],
35
+ provide: WebSocketGatewayLifecycleService,
36
+ useFactory: async (...deps) => {
37
+ const [runtimeContainer, compiledModules, logger, adapter, moduleOptions] = deps;
38
+ const {
39
+ NodeWebSocketGatewayLifecycleServiceImplementation
40
+ } = await import('./node/node-service.js');
41
+ return new NodeWebSocketGatewayLifecycleServiceImplementation(runtimeContainer, compiledModules, logger, adapter, moduleOptions);
42
+ }
43
+ }]
44
+ });
25
45
  }
26
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node-module.d.ts","sourceRoot":"","sources":["../../src/node/node-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIhE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAY9D;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,sBAA2B,GAAG,UAAU;CAOjE"}
1
+ {"version":3,"file":"node-module.d.ts","sourceRoot":"","sources":["../../src/node/node-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKhE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAe9D;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,sBAA2B,GAAG,UAAU;CAOjE"}
@@ -1,11 +1,15 @@
1
1
  import { defineModule } from '@fluojs/runtime';
2
2
  import { WEBSOCKET_OPTIONS_INTERNAL } from '../options-token.internal.js';
3
- import { NodeWebSocketGatewayLifecycleService } from './node-service.js';
3
+ import { NodeWebSocketGatewayLifecycleServiceImplementation } from './node-service.js';
4
+ import { NodeWebSocketGatewayLifecycleService } from './node-service-token.js';
4
5
  function createNodeWebSocketProviders(options = {}) {
5
6
  return [{
6
7
  provide: WEBSOCKET_OPTIONS_INTERNAL,
7
8
  useValue: options
8
- }, NodeWebSocketGatewayLifecycleService];
9
+ }, {
10
+ provide: NodeWebSocketGatewayLifecycleService,
11
+ useClass: NodeWebSocketGatewayLifecycleServiceImplementation
12
+ }];
9
13
  }
10
14
 
11
15
  /**
@@ -0,0 +1,20 @@
1
+ import type { WebSocketRoomService } from '../types.js';
2
+ /**
3
+ * Lifecycle-service token for the default Node.js-backed websocket runtime.
4
+ *
5
+ * @remarks
6
+ * The root `WebSocketGatewayLifecycleService` export is an alias of this token. Runtime modules bind this
7
+ * token to the Node.js lifecycle implementation lazily during provider resolution so root-package imports
8
+ * preserve token identity without eagerly loading Node-only `node:*` or `ws` implementation modules.
9
+ */
10
+ export declare class NodeWebSocketGatewayLifecycleService implements WebSocketRoomService {
11
+ /** @inheritdoc */
12
+ joinRoom(_socketId: string, _room: string): void;
13
+ /** @inheritdoc */
14
+ leaveRoom(_socketId: string, _room: string): void;
15
+ /** @inheritdoc */
16
+ broadcastToRoom(_room: string, _event: string, _data: unknown): void;
17
+ /** @inheritdoc */
18
+ getRooms(_socketId: string): ReadonlySet<string>;
19
+ }
20
+ //# sourceMappingURL=node-service-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-service-token.d.ts","sourceRoot":"","sources":["../../src/node/node-service-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;;GAOG;AACH,qBAAa,oCAAqC,YAAW,oBAAoB;IAC/E,kBAAkB;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhD,kBAAkB;IAClB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjD,kBAAkB;IAClB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIpE,kBAAkB;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;CAGjD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Lifecycle-service token for the default Node.js-backed websocket runtime.
3
+ *
4
+ * @remarks
5
+ * The root `WebSocketGatewayLifecycleService` export is an alias of this token. Runtime modules bind this
6
+ * token to the Node.js lifecycle implementation lazily during provider resolution so root-package imports
7
+ * preserve token identity without eagerly loading Node-only `node:*` or `ws` implementation modules.
8
+ */
9
+ export class NodeWebSocketGatewayLifecycleService {
10
+ /** @inheritdoc */
11
+ joinRoom(_socketId, _room) {
12
+ throw new Error('NodeWebSocketGatewayLifecycleService is a runtime provider token and must be resolved from DI.');
13
+ }
14
+
15
+ /** @inheritdoc */
16
+ leaveRoom(_socketId, _room) {
17
+ throw new Error('NodeWebSocketGatewayLifecycleService is a runtime provider token and must be resolved from DI.');
18
+ }
19
+
20
+ /** @inheritdoc */
21
+ broadcastToRoom(_room, _event, _data) {
22
+ throw new Error('NodeWebSocketGatewayLifecycleService is a runtime provider token and must be resolved from DI.');
23
+ }
24
+
25
+ /** @inheritdoc */
26
+ getRooms(_socketId) {
27
+ throw new Error('NodeWebSocketGatewayLifecycleService is a runtime provider token and must be resolved from DI.');
28
+ }
29
+ }
@@ -1,7 +1,8 @@
1
1
  import type { Container } from '@fluojs/di';
2
- import type { ApplicationLogger, CompiledModule, OnApplicationBootstrap, OnApplicationShutdown, OnModuleDestroy } from '@fluojs/runtime';
3
2
  import type { HttpApplicationAdapter } from '@fluojs/http';
3
+ import type { ApplicationLogger, CompiledModule, OnApplicationBootstrap, OnApplicationShutdown, OnModuleDestroy } from '@fluojs/runtime';
4
4
  import type { WebSocketRoomService } from '../types.js';
5
+ import { NodeWebSocketGatewayLifecycleService } from './node-service-token.js';
5
6
  import type { WebSocketModuleOptions } from './node-types.js';
6
7
  /**
7
8
  * Lifecycle service that discovers WebSocket gateways, attaches upgrade listeners, and manages room state.
@@ -10,7 +11,7 @@ import type { WebSocketModuleOptions } from './node-types.js';
10
11
  * This service preserves the documented runtime behavior for shared-path discovery order, optional server-backed
11
12
  * listeners, buffered pre-ready events, heartbeat handling, and graceful shutdown.
12
13
  */
13
- export declare class NodeWebSocketGatewayLifecycleService implements OnApplicationBootstrap, OnApplicationShutdown, OnModuleDestroy, WebSocketRoomService {
14
+ export declare class NodeWebSocketGatewayLifecycleServiceImplementation extends NodeWebSocketGatewayLifecycleService implements OnApplicationBootstrap, OnApplicationShutdown, OnModuleDestroy, WebSocketRoomService {
14
15
  private readonly runtimeContainer;
15
16
  private readonly compiledModules;
16
17
  private readonly logger;
@@ -104,7 +105,8 @@ export declare class NodeWebSocketGatewayLifecycleService implements OnApplicati
104
105
  private closeGatewayAttachment;
105
106
  private clearConnectionTrackingState;
106
107
  /**
107
- * Adds one socket to an in-memory room membership set.
108
+ * Adds one currently open, runtime-registered socket to an in-memory room membership set.
109
+ * Unknown or already closed socket identifiers are ignored.
108
110
  *
109
111
  * @param socketId Socket identifier to add.
110
112
  * @param room Room identifier to join.
@@ -1 +1 @@
1
- {"version":3,"file":"node-service.d.ts","sourceRoot":"","sources":["../../src/node/node-service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEzI,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAc3D,OAAO,KAAK,EAIV,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAgO9D;;;;;;GAMG;AACH,qBACa,oCACX,YAAW,sBAAsB,EAAE,qBAAqB,EAAE,eAAe,EAAE,oBAAoB;IAmB7F,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IArBhC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,mBAAmB,CAAwC;IACnE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA4B;IACrE,OAAO,CAAC,0BAA0B,CAAK;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAgC;gBAGlC,gBAAgB,EAAE,SAAS,EAC3B,eAAe,EAAE,SAAS,cAAc,EAAE,EAC1C,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,sBAAsB,EAC/B,aAAa,EAAE,sBAAsB;IAGxD;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7C;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAIxB,yBAAyB;YAazB,oBAAoB;IAalC,OAAO,CAAC,2BAA2B;YASrB,gCAAgC;IAiB9C,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,4BAA4B;IA+BpC,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,iCAAiC;IAQzC,OAAO,CAAC,qBAAqB;YAuBf,oBAAoB;IA2ClC,OAAO,CAAC,oBAAoB;YAad,sBAAsB;IA4BpC,OAAO,CAAC,wBAAwB;YASlB,yBAAyB;IAUvC,OAAO,CAAC,4BAA4B;IA0BpC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,sBAAsB;YAyDhB,iBAAiB;YAyBjB,aAAa;IAgB3B,OAAO,CAAC,yBAAyB;IAuBjC,OAAO,CAAC,yBAAyB;IA6CjC,OAAO,CAAC,qBAAqB;YA0Cf,yBAAyB;YAkBzB,kBAAkB;IAiBhC,OAAO,CAAC,8BAA8B;YAyBxB,gBAAgB;YAkBhB,uBAAuB;IAkErC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,8BAA8B;IAItC,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,sBAAsB;YAkChB,QAAQ;YAWR,oBAAoB;IAelC,OAAO,CAAC,4BAA4B;YAetB,6BAA6B;IA4C3C,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,2BAA2B;YAarB,wBAAwB;IAmBtC,OAAO,CAAC,kCAAkC;IAiC1C,OAAO,CAAC,wBAAwB;YAelB,uBAAuB;IAoBrC,OAAO,CAAC,sBAAsB;YAUhB,sBAAsB;IAkDpC,OAAO,CAAC,0BAA0B;YAWpB,sBAAsB;IAepC,OAAO,CAAC,4BAA4B;IAUpC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAmB9C;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAc/C;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAuCjE;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAU/C,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,wCAAwC;IAKhD,OAAO,CAAC,+CAA+C;IAWvD,OAAO,CAAC,gBAAgB;CAoBzB"}
1
+ {"version":3,"file":"node-service.d.ts","sourceRoot":"","sources":["../../src/node/node-service.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,9 @@ import { createServer as createHttpServer } from 'node:http';
9
9
  import { Inject } from '@fluojs/core';
10
10
  import { APPLICATION_LOGGER, COMPILED_MODULES, HTTP_APPLICATION_ADAPTER, RUNTIME_CONTAINER } from '@fluojs/runtime/internal';
11
11
  import { WebSocket, WebSocketServer } from 'ws';
12
- import { dispatchGatewayDisconnect, dispatchGatewayMessage, discoverGatewayDescriptors, isFinitePositiveInteger, normalizeGatewayPath, resolveGatewayInstance, runGatewayHandlers } from '../internal/shared.js';
12
+ import { discoverGatewayDescriptors, dispatchGatewayDisconnect, dispatchGatewayMessage, isFinitePositiveInteger, normalizeGatewayPath, resolveGatewayInstance, runGatewayHandlers } from '../internal/shared.js';
13
13
  import { WEBSOCKET_OPTIONS_INTERNAL } from '../options-token.internal.js';
14
+ import { NodeWebSocketGatewayLifecycleService } from './node-service-token.js';
14
15
  function resolveHttpStatusText(status) {
15
16
  switch (status) {
16
17
  case 400:
@@ -128,9 +129,9 @@ function createCompletionSignal() {
128
129
  * listeners, buffered pre-ready events, heartbeat handling, and graceful shutdown.
129
130
  */
130
131
  let _NodeWebSocketGateway;
131
- class NodeWebSocketGatewayLifecycleService {
132
+ class NodeWebSocketGatewayLifecycleServiceImplementation extends NodeWebSocketGatewayLifecycleService {
132
133
  static {
133
- [_NodeWebSocketGateway, _initClass] = _applyDecs(this, [Inject(RUNTIME_CONTAINER, COMPILED_MODULES, APPLICATION_LOGGER, HTTP_APPLICATION_ADAPTER, WEBSOCKET_OPTIONS_INTERNAL)], []).c;
134
+ [_NodeWebSocketGateway, _initClass] = _applyDecs(this, [Inject(RUNTIME_CONTAINER, COMPILED_MODULES, APPLICATION_LOGGER, HTTP_APPLICATION_ADAPTER, WEBSOCKET_OPTIONS_INTERNAL)], [], 0, void 0, NodeWebSocketGatewayLifecycleService).c;
134
135
  }
135
136
  attachments = [];
136
137
  heartbeatTimer;
@@ -148,6 +149,7 @@ class NodeWebSocketGatewayLifecycleService {
148
149
  upgradeListener;
149
150
  upgradeServer;
150
151
  constructor(runtimeContainer, compiledModules, logger, adapter, moduleOptions) {
152
+ super();
151
153
  this.runtimeContainer = runtimeContainer;
152
154
  this.compiledModules = compiledModules;
153
155
  this.logger = logger;
@@ -327,6 +329,14 @@ class NodeWebSocketGatewayLifecycleService {
327
329
  rejectUpgradeRequestWithStatus(socket, rejection);
328
330
  return;
329
331
  }
332
+ if (this.isShuttingDown) {
333
+ this.releaseUpgradeReservation();
334
+ rejectUpgradeRequestWithStatus(socket, {
335
+ body: 'WebSocket server is shutting down.',
336
+ status: 503
337
+ });
338
+ return;
339
+ }
330
340
  try {
331
341
  attachment.server.handleUpgrade(request, socket, head, websocket => {
332
342
  attachment.server.emit('connection', websocket, request);
@@ -483,12 +493,15 @@ class NodeWebSocketGatewayLifecycleService {
483
493
  if (nextMessage === undefined) {
484
494
  continue;
485
495
  }
486
- await this.handleMessage(state.resolved, socket, request, nextMessage);
496
+ await this.handleMessage(state.resolved, socket, request, nextMessage, state.socketId);
487
497
  }
488
498
  this.clearQueuedMessages(state);
489
499
  }
490
- async handleMessage(resolved, socket, request, data) {
491
- await dispatchGatewayMessage(resolved, socket, request, data, this.logger, 'WebSocketGatewayLifecycleService');
500
+ async handleMessage(resolved, socket, request, data, socketId) {
501
+ await dispatchGatewayMessage(resolved, socket, request, data, socketId, this.moduleOptions.replies?.mode, message => {
502
+ socket.send(message);
503
+ return true;
504
+ }, this.logger, 'WebSocketGatewayLifecycleService');
492
505
  }
493
506
  enqueueDisconnectDispatch(state, socket, disconnectEvent) {
494
507
  state.handlerQueue = state.handlerQueue.then(async () => {
@@ -926,12 +939,17 @@ class NodeWebSocketGatewayLifecycleService {
926
939
  }
927
940
 
928
941
  /**
929
- * Adds one socket to an in-memory room membership set.
942
+ * Adds one currently open, runtime-registered socket to an in-memory room membership set.
943
+ * Unknown or already closed socket identifiers are ignored.
930
944
  *
931
945
  * @param socketId Socket identifier to add.
932
946
  * @param room Room identifier to join.
933
947
  */
934
948
  joinRoom(socketId, room) {
949
+ const socket = this.socketRegistry.get(socketId);
950
+ if (!socket || socket.readyState !== WebSocket.OPEN) {
951
+ return;
952
+ }
935
953
  let rooms = this.socketRooms.get(socketId);
936
954
  if (!rooms) {
937
955
  rooms = new Set();
@@ -1075,7 +1093,7 @@ class NodeWebSocketGatewayLifecycleService {
1075
1093
  _initClass();
1076
1094
  }
1077
1095
  }
1078
- export { _NodeWebSocketGateway as NodeWebSocketGatewayLifecycleService };
1096
+ export { _NodeWebSocketGateway as NodeWebSocketGatewayLifecycleServiceImplementation };
1079
1097
  function createOwnedGatewayServer() {
1080
1098
  return createHttpServer((_request, response) => {
1081
1099
  response.statusCode = 404;
@@ -1,10 +1,10 @@
1
1
  import type { IncomingMessage } from 'node:http';
2
2
  import type { WebSocket } from 'ws';
3
- import type { WebSocketModuleOptions as SharedWebSocketModuleOptions, WebSocketUpgradeContext, WebSocketUpgradeGuard as SharedWebSocketUpgradeGuard, WebSocketUpgradeRejection } from '../types.js';
3
+ import type { WebSocketModuleOptions as SharedWebSocketModuleOptions, WebSocketUpgradeGuard as SharedWebSocketUpgradeGuard, WebSocketUpgradeContext, WebSocketUpgradeRejection } from '../types.js';
4
4
  /**
5
5
  * Strongly typed message handler signature for the Node websocket runtime.
6
6
  */
7
- export type TypedOnMessageHandler<TEvents extends Record<string, unknown>, K extends keyof TEvents> = (payload: TEvents[K], socket: WebSocket, request: IncomingMessage) => void | Promise<void>;
7
+ export type TypedOnMessageHandler<TEvents extends Record<string, unknown>, K extends keyof TEvents> = import('../types.js').TypedOnMessageHandler<TEvents, K, WebSocket, IncomingMessage>;
8
8
  /**
9
9
  * Request and socket context passed to Node websocket gateway handlers.
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"node-types.d.ts","sourceRoot":"","sources":["../../src/node/node-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,KAAK,EACV,sBAAsB,IAAI,4BAA4B,EACtD,uBAAuB,EACvB,qBAAqB,IAAI,2BAA2B,EACpD,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,OAAO,IAAI,CACpG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,eAAe,KACrB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,eAAe,CAAC,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,4BAA4B,CAAC,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"node-types.d.ts","sourceRoot":"","sources":["../../src/node/node-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,KAAK,EACV,sBAAsB,IAAI,4BAA4B,EACtD,qBAAqB,IAAI,2BAA2B,EACpD,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,OAAO,IAAI,OAAO,aAAa,EAAE,qBAAqB,CAC/I,OAAO,EACP,CAAC,EACD,SAAS,EACT,eAAe,CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,eAAe,CAAC,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,4BAA4B,CAAC,eAAe,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export * from './node-module.js';
2
- export * from './node-service.js';
2
+ export * from './node-service-token.js';
3
3
  export * from './node-types.js';
4
4
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node/node.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node/node.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}
package/dist/node/node.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from './node-module.js';
2
- export * from './node-service.js';
2
+ export * from './node-service-token.js';
3
3
  export * from './node-types.js';
package/dist/node.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './decorators.js';
2
2
  export * from './metadata.js';
3
3
  export * from './node/node.js';
4
+ export type { WebSocketEventEnvelope, WebSocketReplyMode } from './types.js';
4
5
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
package/dist/node.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './decorators.js';
2
2
  export * from './metadata.js';
3
- export * from './node/node.js';
3
+ export * from './node/node.js';
4
+ export {};
package/dist/service.d.ts CHANGED
@@ -1,9 +1,2 @@
1
- /**
2
- * Root export alias for the default Node.js-backed websocket lifecycle service.
3
- *
4
- * @remarks
5
- * Import this alias from `@fluojs/websockets` when you need the shared lifecycle service token without reaching
6
- * into runtime-specific subpaths.
7
- */
8
- export { NodeWebSocketGatewayLifecycleService as WebSocketGatewayLifecycleService } from './node/node-service.js';
1
+ export { NodeWebSocketGatewayLifecycleService as WebSocketGatewayLifecycleService } from './node/node-service-token.js';
9
2
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,oCAAoC,IAAI,gCAAgC,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,IAAI,gCAAgC,EAAE,MAAM,8BAA8B,CAAC"}
package/dist/service.js CHANGED
@@ -1,8 +1 @@
1
- /**
2
- * Root export alias for the default Node.js-backed websocket lifecycle service.
3
- *
4
- * @remarks
5
- * Import this alias from `@fluojs/websockets` when you need the shared lifecycle service token without reaching
6
- * into runtime-specific subpaths.
7
- */
8
- export { NodeWebSocketGatewayLifecycleService as WebSocketGatewayLifecycleService } from './node/node-service.js';
1
+ export { NodeWebSocketGatewayLifecycleService as WebSocketGatewayLifecycleService } from './node/node-service-token.js';
package/dist/types.d.ts CHANGED
@@ -3,6 +3,19 @@ import type { MetadataPropertyKey, Token } from '@fluojs/core';
3
3
  * Event-name-to-payload map used to type `@OnMessage(...)` handlers.
4
4
  */
5
5
  export type WebSocketEventMap = Record<string, unknown>;
6
+ /**
7
+ * Event envelope that a message handler can return when event-envelope replies are enabled.
8
+ */
9
+ export interface WebSocketEventEnvelope {
10
+ /** Reply payload sent as the envelope `data` field. */
11
+ data?: unknown;
12
+ /** Reply event name sent as the envelope `event` field. */
13
+ event: string;
14
+ }
15
+ /**
16
+ * Opt-in policy for processing message handler return values.
17
+ */
18
+ export type WebSocketReplyMode = 'event-envelope';
6
19
  /**
7
20
  * Runtime-neutral message handler signature resolved from one {@link WebSocketEventMap} entry.
8
21
  *
@@ -10,8 +23,13 @@ export type WebSocketEventMap = Record<string, unknown>;
10
23
  * @typeParam K Event key handled by this callback.
11
24
  * @typeParam TSocket Socket shape surfaced by the selected runtime subpath.
12
25
  * @typeParam TRequest Request shape surfaced by the selected runtime subpath.
26
+ * @param payload Parsed payload for the decorated event.
27
+ * @param socket Accepted runtime socket.
28
+ * @param request Upgrade request associated with the connection.
29
+ * @param socketId Stable connection identity used by room operations.
30
+ * @returns An optional event envelope. Returns are ignored unless `replies.mode` is `event-envelope`.
13
31
  */
14
- export type TypedOnMessageHandler<TEvents extends WebSocketEventMap, K extends keyof TEvents, TSocket = unknown, TRequest = Request> = (payload: TEvents[K], socket: TSocket, request: TRequest) => void | Promise<void>;
32
+ export type TypedOnMessageHandler<TEvents extends WebSocketEventMap, K extends keyof TEvents, TSocket = unknown, TRequest = Request> = (payload: TEvents[K], socket: TSocket, request: TRequest, socketId: string) => Promise<WebSocketEventEnvelope | void> | WebSocketEventEnvelope | void;
15
33
  /**
16
34
  * Dedicated listener configuration for runtimes that can host a standalone WebSocket server.
17
35
  */
@@ -131,7 +149,8 @@ export type WebSocketUpgradeGuard<TRequest = Request> = (request: TRequest, cont
131
149
  */
132
150
  export interface WebSocketRoomService {
133
151
  /**
134
- * Adds one socket to a room.
152
+ * Adds one currently open, runtime-registered socket to a room.
153
+ * Unknown or already closed socket identifiers are ignored.
135
154
  *
136
155
  * @param socketId Socket identifier to add.
137
156
  * @param room Room identifier to join.
@@ -191,6 +210,11 @@ export interface WebSocketModuleOptions<TRequest = Request> {
191
210
  intervalMs?: number;
192
211
  timeoutMs?: number;
193
212
  };
213
+ /** Opt-in processing for message handler return values. Returns are ignored when omitted. */
214
+ replies?: {
215
+ /** Sends valid `{ event, data? }` handler returns through the accepted socket. */
216
+ mode: WebSocketReplyMode;
217
+ };
194
218
  shutdown?: {
195
219
  timeoutMs?: number;
196
220
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}