@softonic/http-log-format
Version:
Functions to transform native Node.js HTTP requests and responses to the Softonic HTTP log format
121 lines (112 loc) • 2.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.buildOutgoingRequest = buildOutgoingRequest;
exports.buildIncomingRequest = buildIncomingRequest;
exports.buildIncomingResponse = buildIncomingResponse;
exports.buildOutgoingResponse = buildOutgoingResponse;
var _http = _interopRequireDefault(require("http"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function buildOutgoingRequest({
method,
host,
port,
path,
headers = {},
timestamp,
localAddress,
localPort,
remoteAddress,
remotePort
}) {
const request = new _http.default.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;
}
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.default.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;
}
function buildIncomingResponse({
statusCode,
headers,
responseTime,
timestamp
}) {
const socket = {};
const response = new _http.default.IncomingMessage(socket);
Object.assign(response, {
headers,
statusCode,
timestamp,
responseTime
});
response.statusCode = statusCode;
return response;
}
function buildOutgoingResponse({
statusCode,
headers,
responseTime,
timestamp
}) {
const req = {};
const response = new _http.default.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;
}
//# sourceMappingURL=HttpBuilders.js.map