@fluojs/websockets
Advanced tools
+2
-1
@@ -5,3 +5,4 @@ export * from './decorators.js'; | ||
| export * from './service.js'; | ||
| export * from './types.js'; | ||
| export type { WebSocketEventMap, WebSocketGatewayDescriptor, WebSocketGatewayHandlerDescriptor, WebSocketGatewayHandlerMetadata, WebSocketGatewayHandlerType, WebSocketGatewayMetadata, WebSocketGatewayOptions, WebSocketGatewayServerBackedOptions, WebSocketRoomService, WebSocketUpgradeContext, WebSocketUpgradeRejection, } from './types.js'; | ||
| export type { TypedOnMessageHandler, WebSocketGatewayContext, WebSocketModuleOptions, WebSocketUpgradeGuard, } from './node/node-types.js'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,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,cAAc,YAAY,CAAC"} | ||
| {"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
-1
@@ -5,2 +5,2 @@ export * from './decorators.js'; | ||
| export * from './service.js'; | ||
| export * from './types.js'; | ||
| export {}; |
+1
-1
| import type { ModuleType } from '@fluojs/runtime'; | ||
| import type { WebSocketModuleOptions } from './types.js'; | ||
| import type { WebSocketModuleOptions } from './node/node-types.js'; | ||
| /** | ||
@@ -4,0 +4,0 @@ * Root module entry point that defaults to the Node.js WebSocket adapter. |
@@ -1,1 +0,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,YAAY,CAAC;AAEzD;;GAEG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,sBAA2B,GAAG,UAAU;CAGjE"} | ||
| {"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"} |
@@ -19,7 +19,7 @@ import type { IncomingMessage } from 'node:http'; | ||
| */ | ||
| export type WebSocketUpgradeGuard = SharedWebSocketUpgradeGuard<IncomingMessage | Request>; | ||
| export type WebSocketUpgradeGuard = SharedWebSocketUpgradeGuard<IncomingMessage>; | ||
| /** | ||
| * Runtime options shared by the Node websocket lifecycle service. | ||
| */ | ||
| export type WebSocketModuleOptions = SharedWebSocketModuleOptions<IncomingMessage | Request>; | ||
| export type WebSocketModuleOptions = SharedWebSocketModuleOptions<IncomingMessage>; | ||
| //# sourceMappingURL=node-types.d.ts.map |
@@ -1,1 +0,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,GAAG,OAAO,CAAC,CAAC;AAE3F;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,4BAA4B,CAAC,eAAe,GAAG,OAAO,CAAC,CAAC"} | ||
| {"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"} |
+18
-7
@@ -1,4 +0,2 @@ | ||
| import type { IncomingMessage } from 'node:http'; | ||
| import type { MetadataPropertyKey, Token } from '@fluojs/core'; | ||
| import type { TypedOnMessageHandler as NodeTypedOnMessageHandler, WebSocketGatewayContext as NodeWebSocketGatewayContext } from './node/node-types.js'; | ||
| /** | ||
@@ -9,5 +7,10 @@ * Event-name-to-payload map used to type `@OnMessage(...)` handlers. | ||
| /** | ||
| * Strongly typed message handler signature resolved from one {@link WebSocketEventMap} entry. | ||
| * Runtime-neutral message handler signature resolved from one {@link WebSocketEventMap} entry. | ||
| * | ||
| * @typeParam TEvents Event-name-to-payload map used by the gateway. | ||
| * @typeParam K Event key handled by this callback. | ||
| * @typeParam TSocket Socket shape surfaced by the selected runtime subpath. | ||
| * @typeParam TRequest Request shape surfaced by the selected runtime subpath. | ||
| */ | ||
| export type TypedOnMessageHandler<TEvents extends WebSocketEventMap, K extends keyof TEvents> = NodeTypedOnMessageHandler<TEvents, K>; | ||
| export type TypedOnMessageHandler<TEvents extends WebSocketEventMap, K extends keyof TEvents, TSocket = unknown, TRequest = Request> = (payload: TEvents[K], socket: TSocket, request: TRequest) => void | Promise<void>; | ||
| /** | ||
@@ -90,5 +93,13 @@ * Dedicated listener configuration for runtimes that can host a standalone WebSocket server. | ||
| /** | ||
| * Runtime context passed to gateway handlers on the default Node.js adapter surface. | ||
| * Runtime-neutral context passed to gateway handlers. | ||
| * | ||
| * @typeParam TSocket Socket shape surfaced by the selected runtime subpath. | ||
| * @typeParam TRequest Request shape surfaced by the selected runtime subpath. | ||
| */ | ||
| export type WebSocketGatewayContext = NodeWebSocketGatewayContext; | ||
| export interface WebSocketGatewayContext<TSocket = unknown, TRequest = Request> { | ||
| /** Request object associated with the accepted websocket upgrade. */ | ||
| request: TRequest; | ||
| /** Socket object accepted by the selected runtime. */ | ||
| socket: TSocket; | ||
| } | ||
| /** | ||
@@ -159,3 +170,3 @@ * Upgrade-time context shared with pre-upgrade websocket guards. | ||
| */ | ||
| export interface WebSocketModuleOptions<TRequest = IncomingMessage | Request> { | ||
| export interface WebSocketModuleOptions<TRequest = Request> { | ||
| /** Limits that bound connection count and inbound payload size across runtime adapters. */ | ||
@@ -162,0 +173,0 @@ limits?: { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} |
+6
-6
@@ -12,3 +12,3 @@ { | ||
| ], | ||
| "version": "1.0.6", | ||
| "version": "1.0.7", | ||
| "private": false, | ||
@@ -75,4 +75,4 @@ "license": "MIT", | ||
| "@fluojs/di": "^1.1.0", | ||
| "@fluojs/http": "^1.1.1", | ||
| "@fluojs/runtime": "^1.1.7" | ||
| "@fluojs/http": "^1.1.2", | ||
| "@fluojs/runtime": "^1.1.8" | ||
| }, | ||
@@ -82,6 +82,6 @@ "devDependencies": { | ||
| "vitest": "^3.2.4", | ||
| "@fluojs/platform-bun": "^1.0.6", | ||
| "@fluojs/platform-express": "^1.0.6", | ||
| "@fluojs/platform-fastify": "^1.0.7", | ||
| "@fluojs/testing": "^1.0.5" | ||
| "@fluojs/platform-bun": "^1.0.7", | ||
| "@fluojs/platform-fastify": "^1.0.8", | ||
| "@fluojs/testing": "^1.0.6" | ||
| }, | ||
@@ -88,0 +88,0 @@ "scripts": { |
+24
-5
@@ -21,5 +21,7 @@ # @fluojs/websockets | ||
| ```bash | ||
| npm install @fluojs/websockets ws | ||
| npm install @fluojs/websockets | ||
| ``` | ||
| Root Node.js entrypoint는 패키지가 직접 소유한 `ws` dependency를 사용합니다. 애플리케이션 코드에서 `ws`를 직접 사용하지 않는 한 별도 설치가 필요하지 않습니다. | ||
| ## 사용 시점 | ||
@@ -94,5 +96,3 @@ | ||
| guard(request) { | ||
| const authorization = request instanceof Request | ||
| ? request.headers.get('authorization') | ||
| : request.headers.authorization; | ||
| const authorization = request.headers.authorization; | ||
@@ -107,4 +107,21 @@ if (authorization !== 'Bearer demo-token') { | ||
| 옵션을 생략하면 `@fluojs/websockets`는 동시 연결 수, inbound payload 크기, pending message buffer, shutdown cleanup에 bounded default를 적용합니다. 기본값은 `maxConnections: 1000`, `maxPayloadBytes: 1 MiB`, `buffer.maxPendingMessagesPerSocket: 256`, `shutdown.timeoutMs: 5000`, Node heartbeat interval `30s`, Node backpressure `maxBufferedAmountBytes: 1 MiB`와 drop behavior입니다. 또한 server-backed Node listener는 `heartbeat.enabled`를 명시적으로 `false`로 두지 않는 한 heartbeat timer를 활성화합니다. Node shutdown은 shutdown이 시작된 뒤 in-flight async upgrade를 거절하고, 애플리케이션 shutdown 시 추적 중인 websocket 클라이언트를 닫고, `shutdown.timeoutMs` 범위 안에서 `@OnDisconnect()` cleanup이 마무리될 수 있도록 bounded 기회를 제공합니다. 공식 fetch-style runtime module(`@fluojs/websockets/bun`, `@fluojs/websockets/deno`, `@fluojs/websockets/cloudflare-workers`)은 `Request` typed upgrade guard를 노출하며, 애플리케이션 shutdown 중 동일한 bounded close와 disconnect cleanup 동작을 제공합니다. | ||
| 옵션을 생략하면 `@fluojs/websockets`는 동시 연결 수, inbound payload 크기, pending message buffer, shutdown cleanup에 bounded default를 적용합니다. 기본값은 `maxConnections: 1000`, `maxPayloadBytes: 1 MiB`, `buffer.maxPendingMessagesPerSocket: 256`, `shutdown.timeoutMs: 5000`, Node heartbeat interval `30s`, Node backpressure `maxBufferedAmountBytes: 1 MiB`와 drop behavior입니다. 또한 server-backed Node listener는 `heartbeat.enabled`를 명시적으로 `false`로 두지 않는 한 heartbeat timer를 활성화합니다. Node shutdown은 shutdown이 시작된 뒤 in-flight async upgrade를 거절하고, 애플리케이션 shutdown 시 추적 중인 websocket 클라이언트를 닫고, `shutdown.timeoutMs` 범위 안에서 `@OnDisconnect()` cleanup이 마무리될 수 있도록 bounded 기회를 제공합니다. 해결되지 않은 cleanup은 shutdown을 무기한 막지 않고 해당 timeout 안에서 로그로 남습니다. 공식 fetch-style runtime module(`@fluojs/websockets/bun`, `@fluojs/websockets/deno`, `@fluojs/websockets/cloudflare-workers`)은 `Request` typed upgrade guard를 노출하며, 애플리케이션 shutdown 중 동일한 bounded close와 disconnect cleanup 동작을 제공합니다. | ||
| Root `@fluojs/websockets` / `@fluojs/websockets/node` guard는 Node의 `IncomingMessage`를 받습니다. Fetch-style subpath는 Web standard `Request`를 받으므로, 재사용 가능한 옵션 객체를 작성할 때는 subpath별 `WebSocketModuleOptions` 타입을 선택하세요. | ||
| ### Room | ||
| `WebSocketRoomService`를 사용하면 gateway 또는 application service가 adapter 내부에 접근하지 않고도 가벼운 room membership state를 유지할 수 있습니다. Runtime lifecycle service는 `joinRoom(socketId, room)`, `leaveRoom(socketId, room)`, `broadcastToRoom(room, event, data)`, `getRooms(socketId)`를 구현합니다. `broadcastToRoom(...)`은 현재 room에 있는 열린 socket에 `{ event, data }` 형태의 JSON frame을 보내며, 전송 전에 설정된 backpressure policy를 적용합니다. | ||
| ```typescript | ||
| import { WebSocketRoomService } from '@fluojs/websockets'; | ||
| class OrderStatusPublisher { | ||
| constructor(private readonly rooms: WebSocketRoomService) {} | ||
| publish(orderId: string, status: string) { | ||
| this.rooms.broadcastToRoom(`order:${orderId}`, 'order.status', { status }); | ||
| } | ||
| } | ||
| ``` | ||
| ## 바이너리 페이로드 | ||
@@ -130,2 +147,4 @@ | ||
| Package manifest의 `engines.node >=20.0.0` 선언은 published package와 기본 Node.js entrypoint 기준입니다. Bun, Deno, Cloudflare Workers 지원은 아래 전용 fetch-style subpath를 통해 노출되며, 해당 subpath는 request/handler type을 web-standard로 유지하고 application code가 root Node.js lifecycle-service alias에 의존하지 않게 합니다. | ||
| 각 서브패스는 해당 `*WebSocketModule.forRoot(...)` 진입점, 일치하는 런타임 lifecycle service export, 그리고 공유 gateway authoring primitive인 `WebSocketGateway`, `OnConnect`, `OnMessage`, `OnDisconnect`, `defineWebSocketGatewayMetadata`, `getWebSocketGatewayMetadata`, `defineWebSocketHandlerMetadata`, `getWebSocketHandlerMetadata`, `getWebSocketHandlerMetadataEntries`, `webSocketGatewayMetadataSymbol`, `webSocketHandlerMetadataSymbol`을 제공합니다. | ||
@@ -132,0 +151,0 @@ |
+24
-5
@@ -21,5 +21,7 @@ # @fluojs/websockets | ||
| ```bash | ||
| npm install @fluojs/websockets ws | ||
| npm install @fluojs/websockets | ||
| ``` | ||
| The root Node.js entrypoint uses the package-owned `ws` dependency. Applications do not need to install `ws` separately unless they use it directly in their own code. | ||
| ## When to Use | ||
@@ -94,5 +96,3 @@ | ||
| guard(request) { | ||
| const authorization = request instanceof Request | ||
| ? request.headers.get('authorization') | ||
| : request.headers.authorization; | ||
| const authorization = request.headers.authorization; | ||
@@ -107,4 +107,21 @@ if (authorization !== 'Bearer demo-token') { | ||
| When omitted, `@fluojs/websockets` applies bounded defaults for concurrent connections, inbound payload size, pending message buffers, and shutdown cleanup. Default settings are `maxConnections: 1000`, `maxPayloadBytes: 1 MiB`, `buffer.maxPendingMessagesPerSocket: 256`, `shutdown.timeoutMs: 5000`, Node heartbeat interval `30s`, and Node backpressure `maxBufferedAmountBytes: 1 MiB` with drop behavior. Server-backed Node listeners enable heartbeat timers unless you explicitly set `heartbeat.enabled` to `false`. Node shutdown rejects in-flight async upgrades once shutdown begins, will close tracked websocket clients during application shutdown, and gives `@OnDisconnect()` cleanup a bounded chance to finish within `shutdown.timeoutMs`. The official fetch-style runtime modules (`@fluojs/websockets/bun`, `@fluojs/websockets/deno`, and `@fluojs/websockets/cloudflare-workers`) expose `Request`-typed upgrade guards and provide the same bounded close and disconnect cleanup behavior during application shutdown. | ||
| When omitted, `@fluojs/websockets` applies bounded defaults for concurrent connections, inbound payload size, pending message buffers, and shutdown cleanup. Default settings are `maxConnections: 1000`, `maxPayloadBytes: 1 MiB`, `buffer.maxPendingMessagesPerSocket: 256`, `shutdown.timeoutMs: 5000`, Node heartbeat interval `30s`, and Node backpressure `maxBufferedAmountBytes: 1 MiB` with drop behavior. Server-backed Node listeners enable heartbeat timers unless you explicitly set `heartbeat.enabled` to `false`. Node shutdown rejects in-flight async upgrades once shutdown begins, will close tracked websocket clients during application shutdown, and gives `@OnDisconnect()` cleanup a bounded chance to finish within `shutdown.timeoutMs`; unresolved cleanup is logged and bounded by that timeout instead of blocking shutdown indefinitely. The official fetch-style runtime modules (`@fluojs/websockets/bun`, `@fluojs/websockets/deno`, and `@fluojs/websockets/cloudflare-workers`) expose `Request`-typed upgrade guards and provide the same bounded close and disconnect cleanup behavior during application shutdown. | ||
| The root `@fluojs/websockets` / `@fluojs/websockets/node` guard receives Node's `IncomingMessage`. Fetch-style subpaths receive a Web-standard `Request`, so choose the subpath-specific `WebSocketModuleOptions` type when authoring reusable option objects. | ||
| ### Rooms | ||
| `WebSocketRoomService` lets gateway or application services keep lightweight room membership state without reaching into adapter internals. Runtime lifecycle services implement `joinRoom(socketId, room)`, `leaveRoom(socketId, room)`, `broadcastToRoom(room, event, data)`, and `getRooms(socketId)`. `broadcastToRoom(...)` sends a JSON frame shaped as `{ event, data }` to currently open sockets in the room and applies the configured backpressure policy before sending. | ||
| ```typescript | ||
| import { WebSocketRoomService } from '@fluojs/websockets'; | ||
| class OrderStatusPublisher { | ||
| constructor(private readonly rooms: WebSocketRoomService) {} | ||
| publish(orderId: string, status: string) { | ||
| this.rooms.broadcastToRoom(`order:${orderId}`, 'order.status', { status }); | ||
| } | ||
| } | ||
| ``` | ||
| ## Binary Payloads | ||
@@ -130,2 +147,4 @@ | ||
| The package manifest declares `engines.node >=20.0.0` for the published package and default Node.js entrypoint. Bun, Deno, and Cloudflare Workers support is exposed through the dedicated fetch-style subpaths listed below; those subpaths keep request/handler types web-standard and avoid the root Node.js lifecycle-service alias in application code. | ||
| Each subpath exposes its `*WebSocketModule.forRoot(...)` entrypoint, the matching runtime lifecycle service export, and the shared gateway authoring primitives: `WebSocketGateway`, `OnConnect`, `OnMessage`, `OnDisconnect`, `defineWebSocketGatewayMetadata`, `getWebSocketGatewayMetadata`, `defineWebSocketHandlerMetadata`, `getWebSocketHandlerMetadata`, `getWebSocketHandlerMetadataEntries`, `webSocketGatewayMetadataSymbol`, and `webSocketHandlerMetadataSymbol`. | ||
@@ -132,0 +151,0 @@ |
256210
1.8%5087
0.26%167
12.84%Updated
Updated