@pact-foundation/pact
Version:
Pact for all things Javascript
90 lines • 4.16 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupMessageProxyApplication = exports.createProxyMessageHandler = exports.providerWithMetadata = exports.findMessageHandler = void 0;
var express_1 = __importDefault(require("express"));
var body_parser_1 = __importDefault(require("body-parser"));
var js_base64_1 = require("js-base64");
var logger_1 = __importDefault(require("../../../common/logger"));
// Find a provider message handler, and invoke it
var findMessageHandler = function (message, config) {
var handler = config.messageProviders
? config.messageProviders[message.description]
: undefined;
if (!handler) {
logger_1.default.error("no handler found for message ".concat(message.description));
return Promise.reject(new Error("No handler found for message \"".concat(message.description, "\".\n Check your \"handlers\" configuration")));
}
return Promise.resolve(handler);
};
exports.findMessageHandler = findMessageHandler;
var hasMetadata = function (o) {
return Boolean(o.__pactMessageMetadata);
};
var providerWithMetadata = function (provider, metadata) {
return function (descriptor) {
return Promise.resolve(provider(descriptor)).then(function (message) {
return hasMetadata(message)
? {
__pactMessageMetadata: __assign(__assign({}, message.__pactMessageMetadata), metadata),
message: message,
}
: { __pactMessageMetadata: metadata, message: message };
});
};
};
exports.providerWithMetadata = providerWithMetadata;
// Get the API handler for the verification CLI process to invoke on POST /*
var createProxyMessageHandler = function (config) {
return function (req, res) {
var message = req.body;
// Invoke the handler, and return the JSON response body
// wrapped in a Message
(0, exports.findMessageHandler)(message, config)
.then(function (handler) { return handler(message); })
.then(function (messageFromHandler) {
if (hasMetadata(messageFromHandler)) {
var metadata = (0, js_base64_1.encode)(JSON.stringify(messageFromHandler.__pactMessageMetadata));
res.header('Pact-Message-Metadata', metadata);
res.header('PACT_MESSAGE_METADATA', metadata);
return res.json(messageFromHandler.message);
}
return res.json(messageFromHandler);
})
.catch(function (e) { return res.status(500).send(e); });
};
};
exports.createProxyMessageHandler = createProxyMessageHandler;
// Get the Express app that will run on the HTTP Proxy
var setupMessageProxyApplication = function (config) {
var app = (0, express_1.default)();
app.use(body_parser_1.default.json());
app.use(body_parser_1.default.urlencoded({ extended: true }));
app.use(function (_, res, next) {
// TODO: this seems to override the metadata for content-type
res.header('Content-Type', 'application/json; charset=utf-8');
next();
});
// Proxy server will respond to Verifier process
app.all('/*', (0, exports.createProxyMessageHandler)(config));
return app;
};
exports.setupMessageProxyApplication = setupMessageProxyApplication;
// // Get the Proxy we'll pass to the CLI for verification
// export const setupProxyServer = (
// app: (request: http.IncomingMessage, response: http.ServerResponse) => void
// ): http.Server => http.createServer(app).listen();
//# sourceMappingURL=messages.js.map