@pact-foundation/pact
Version:
Pact for all things Javascript
51 lines • 2.2 kB
JavaScript
;
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