import { Logger } from '@cirrusct/logging'; import { IncomingMessage, ServerResponse, MiddlewareCallback, Polka } from '../../types'; import { WebServerContext } from '../context'; import { Router } from '../../routing'; import { createRouter } from '../../routing/factory'; import { augmentRequest } from './request'; import { augmentResponse } from './response'; export class RootHandler { private _context: WebServerContext; private _router: Router; constructor(private polka: Polka, private logger: Logger) { polka.use(this.handleRequest); this._context = new WebServerContext(logger); this._router = createRouter(polka, this._context); } private handleRequest = async (req: IncomingMessage, res: ServerResponse, next: MiddlewareCallback) => { augmentRequest(req, this); augmentResponse(res, this); this._context.req = req; this._context.res = res; this._context.logger = this.logger.child({ req, }); this._context.logger.info({ req }, 'start reqeust'); next(); }; public get router(): Router { return this._router; } public get context(): WebServerContext { return this._context; } }