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