UNPKG

@pact-foundation/pact

Version:
82 lines 3.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createProxy = exports.waitForServerReady = void 0; var express_1 = __importDefault(require("express")); var http_proxy_1 = __importDefault(require("http-proxy")); var body_parser_1 = __importDefault(require("body-parser")); var http_1 = __importDefault(require("http")); var logger_1 = __importDefault(require("../../../common/logger")); var stateHandler_1 = require("./stateHandler/stateHandler"); var hooks_1 = require("./hooks"); var tracer_1 = require("./tracer"); var messages_1 = require("./messages"); var proxyRequest_1 = require("./proxyRequest"); // Listens for the server start event var waitForServerReady = function (server) { return new Promise(function (resolve, reject) { server.on('listening', function () { return resolve(server); }); server.on('error', function () { return reject(new Error('Unable to start verification proxy server')); }); }); }; exports.waitForServerReady = waitForServerReady; // Get the Proxy we'll pass to the CLI for verification var createProxy = function (config, stateSetupPath, messageTransportPath) { var app = (0, express_1.default)(); var proxy = new http_proxy_1.default(); logger_1.default.trace("Setting up state proxy with path: ".concat(stateSetupPath)); // NOTE: if you change any of these global middleware that consumes the body // review the "proxyReq" event reader below app.use(body_parser_1.default.json({ type: [ 'application/json', 'application/json; charset=utf-8', 'application/json; charset=utf8', ], })); app.use(body_parser_1.default.urlencoded({ extended: true })); app.use('/*', body_parser_1.default.raw({ type: '*/*' })); // Hooks var hooksState = { setupCounter: 0, }; app.use(stateSetupPath, (0, hooks_1.registerHookStateTracking)(hooksState)); if (config.beforeEach) { logger_1.default.trace("registered 'beforeEach' hook"); app.use(stateSetupPath, (0, hooks_1.registerBeforeHook)(config.beforeEach, hooksState)); } if (config.afterEach) { logger_1.default.trace("registered 'afterEach' hook"); app.use(stateSetupPath, (0, hooks_1.registerAfterHook)(config.afterEach, hooksState)); } // Trace req/res logging if (config.logLevel === 'debug' || config.logLevel === 'trace') { logger_1.default.info('debug request/response logging enabled'); app.use((0, tracer_1.createRequestTracer)()); app.use((0, tracer_1.createResponseTracer)()); } // Allow for request filtering if (config.requestFilter !== undefined) { app.use(config.requestFilter); } // Setup provider state handler app.post(stateSetupPath, (0, stateHandler_1.createProxyStateHandler)(config)); // Register message handler and transport // TODO: ensure proxy does not interfere with this app.post(messageTransportPath, (0, messages_1.createProxyMessageHandler)(config)); // Proxy server will respond to Verifier process app.all('/*', function (req, res) { logger_1.default.debug("Proxying ".concat(req.method, ": ").concat(req.path)); proxy.web(req, res, (0, proxyRequest_1.toServerOptions)(config, req)); }); // TODO: node is now using ipv6 as a default. This should be customised return http_1.default .createServer(app) .listen(undefined, config.proxyHost || '127.0.0.1'); }; exports.createProxy = createProxy; //# sourceMappingURL=proxy.js.map