import {HTTPKernel} from '../HTTPKernel' import {Request} from '../../lifecycle/Request' import {ActivatedRoute} from '../../routing/ActivatedRoute' import {withErrorContext} from '../../../util' import {AbstractResolvedRouteHandlerHTTPModule} from './AbstractResolvedRouteHandlerHTTPModule' import {ExecuteResolvedRoutePreflightHTTPModule} from './ExecuteResolvedRoutePreflightHTTPModule' import {WebSocketBus} from '../../../support/bus' /** * HTTP kernel module that runs the web socket handler for the socket connection's route. */ export class ExecuteResolvedWebSocketHandlerHTTPModule extends AbstractResolvedRouteHandlerHTTPModule { public static register(kernel: HTTPKernel): void { kernel.register(this).after(ExecuteResolvedRoutePreflightHTTPModule) } public async apply(request: Request): Promise { const route = > request.make(ActivatedRoute) const params = route.resolvedParameters if ( !params ) { throw new Error('Attempted to call route handler without resolved parameters.') } await withErrorContext(async () => { const ws = request.make(WebSocketBus) await route.handler .tap(handler => handler(ws, ...params)) .apply(request) }, { route, }) return request } }