UNPKG

@pact-foundation/pact

Version:
51 lines 2.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.traceHttpInteractions = void 0; const node_http_1 = __importDefault(require("node:http")); const logger_1 = __importDefault(require("../common/logger")); const traceHttpInteractions = () => { const originalRequest = node_http_1.default.request; node_http_1.default.request = (options, cb) => { if (typeof options === 'string' || options instanceof URL) { throw new Error('invoking traced requests with a string or a URL first argument is not supported'); } if (typeof cb !== 'function') { throw new Error('invoking traced requests with a non-function second argument is not supported'); } const requestBodyChunks = []; const responseBodyChunks = []; const hijackedCallback = (res) => { logger_1.default.trace(`outgoing request: ${JSON.stringify({ ...options, body: Buffer.concat(requestBodyChunks).toString('utf8'), })}`); if (cb) { cb(res); } }; const clientRequest = originalRequest(options, hijackedCallback); const oldWrite = clientRequest.end.bind(clientRequest); clientRequest.end = (chunk) => { requestBodyChunks.push(Buffer.from(chunk)); return oldWrite(chunk); }; clientRequest.on('response', (incoming) => { incoming.on('readable', () => { responseBodyChunks.push(Buffer.from(incoming.read())); }); incoming.on('end', () => { logger_1.default.trace(`response: ${JSON.stringify({ body: Buffer.concat(responseBodyChunks).toString('utf8'), headers: incoming.headers, statusCode: incoming.statusCode, })}`); }); }); return clientRequest; }; }; exports.traceHttpInteractions = traceHttpInteractions; //# sourceMappingURL=tracing.js.map