import { IncomingMessage, RequestListener, Server, ServerResponse, } from 'http'; import type { SetCookieMessage } from '../../messages'; import { ServerController } from '../ServerController'; export function setCookieRequestHandler(httpServer: Server, controller: ServerController) { const requestListeners = httpServer.listeners('request') as RequestListener[]; const first = requestListeners.shift(); httpServer.removeAllListeners('request'); requestListeners.unshift((req: IncomingMessage, res: ServerResponse) => { if (req.method === 'POST' && req.url && req.url.slice(-12) === '/set-cookie/') { const shuttleServer = controller?.getServer(); if (shuttleServer) { const srcData: string[] = []; req.on('data', (chunk: string) => srcData.push(chunk)); req.on('end', async () => { try { const { actionName, ticket } = JSON.parse(srcData.join()) as SetCookieMessage; const ab = shuttleServer.getActionBox(actionName); await ab.callHandler('set-cookies-http-handler', req, res, ticket); } catch (e: any) { console.error(e); } }); } } else { first?.(req, res); } }); requestListeners.forEach((listener) => httpServer.addListener('request', listener)); }