UNPKG

@softonic/http-log-format

Version:

Functions to transform native Node.js HTTP requests and responses to the Softonic HTTP log format

122 lines (105 loc) 2.04 kB
import http from 'http'; export function buildOutgoingRequest({ method, host, port, path, headers = {}, timestamp, localAddress, localPort, remoteAddress, remotePort, }) { const request = new http.ClientRequest({ method, protocol: 'http:', host, port, path, headers, // Prevent a real request agent: null, createConnection: () => { }, }); // Custom property that we use to track the response time request.timestamp = timestamp; request.socket = { localAddress, localPort, remoteAddress, remotePort, }; return request; } export function buildIncomingRequest({ httpVersion, method, host, port, path, headers = {}, timestamp, localAddress, localPort, remoteAddress, remotePort, }) { const socket = { localAddress, localPort, remoteAddress, remotePort, }; const realHeaders = { ...headers, host: `${host}:${port}`, }; const request = new http.IncomingMessage(socket); Object.assign(request, { method, url: path, httpVersion, headers: realHeaders, }); // Custom property that we use to track the response time request.timestamp = timestamp; return request; } export function buildIncomingResponse({ statusCode, headers, responseTime, timestamp, }) { const socket = {}; const response = new http.IncomingMessage(socket); Object.assign(response, { headers, statusCode, timestamp, responseTime, }); response.statusCode = statusCode; return response; } export function buildOutgoingResponse({ statusCode, headers, responseTime, timestamp, }) { const req = {}; const response = new http.ServerResponse(req); Object.keys(headers).forEach((headerName) => { response.setHeader(headerName, headers[headerName]); }); response.flushHeaders(); Object.assign(response, { statusCode, // Custom properties that we use to track the response time timestamp, responseTime, }); return response; }