UNPKG

@pact-foundation/pact

Version:
59 lines 2.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createRequestTracer = exports.createResponseTracer = void 0; const lodash_1 = require("lodash"); const logger_1 = __importDefault(require("../../../common/logger")); const removeEmptyResponseProperties = (body, res) => (0, lodash_1.pickBy)({ body, headers: (0, lodash_1.reduce)(res.getHeaders(), (acc, val, index) => { acc[index] = val; return acc; }, {}), status: res.statusCode, }, lodash_1.identity); const removeEmptyRequestProperties = (req) => (0, lodash_1.pickBy)({ body: req.body, headers: req.headers, method: req.method, path: req.path, }, lodash_1.identity); const createResponseTracer = () => (_, res, next) => { const oldWrite = res.write.bind(res); const oldEnd = res.end.bind(res); const chunks = []; res.write = ((chunk, encodingOrCb, callback) => { chunks.push(Buffer.from(chunk)); if (typeof encodingOrCb === 'function') { return oldWrite(chunk, encodingOrCb); } return oldWrite(chunk, encodingOrCb, callback); }); res.end = ((chunkOrCb, encodingOrCb, cb) => { const chunk = typeof chunkOrCb === 'function' ? undefined : chunkOrCb; if (chunk) { chunks.push(Buffer.from(chunk)); } const body = Buffer.concat(chunks).toString('utf8'); logger_1.default.debug(`outgoing response: ${JSON.stringify(removeEmptyResponseProperties(body, res))}`); if (typeof chunkOrCb === 'function') { return oldEnd(chunkOrCb); } if (typeof encodingOrCb === 'function') { return oldEnd(chunkOrCb, encodingOrCb); } return oldEnd(chunkOrCb, encodingOrCb, cb); }); if (typeof next === 'function') { next(); } }; exports.createResponseTracer = createResponseTracer; const createRequestTracer = () => (req, _, next) => { logger_1.default.debug(`incoming request: ${JSON.stringify(removeEmptyRequestProperties(req))}`); next(); }; exports.createRequestTracer = createRequestTracer; //# sourceMappingURL=tracer.js.map