@financialforcedev/orizuru
Version:
Streamlined communication between Heroku dynos / other worker processes
64 lines • 8.61 kB
JavaScript
;
/*
* Copyright (c) 2017-2019, FinancialForce.com, inc
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the FinancialForce.com, inc nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const message_1 = require("../validator/message");
/**
* Creates a route for the Orizuru Server.
* @param server The Orizuru server instance.
* @param routeConfiguration The configuration for this route.
*/
function create(server, routeConfiguration) {
const messageValidator = new message_1.MessageValidator();
const writeResponse = routeConfiguration.responseWriter(server);
return async (request, response) => {
const { publishOptions, schema, synchronous } = routeConfiguration;
try {
// For a synchronous call, validate the message and then call the response writer.
// Otherwise, we are async and need to publish the message before calling the response writer.
if (synchronous) {
messageValidator.validate(schema, request.body);
}
else {
const options = {
message: {
context: request.orizuru || {},
message: request.body
},
publishOptions,
schema
};
await server.publisher.publish(options);
}
writeResponse(undefined, request, response);
}
catch (error) {
writeResponse(error, request, response);
}
};
}
exports.create = create;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5kZXgvc2VydmVyL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHOztBQVFILGtEQUF3RDtBQUd4RDs7OztHQUlHO0FBQ0gsU0FBZ0IsTUFBTSxDQUFDLE1BQXVCLEVBQUUsa0JBQXNDO0lBRXJGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQkFBZ0IsRUFBRSxDQUFDO0lBQ2hELE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoRSxPQUFPLEtBQUssRUFBRSxPQUFnQixFQUFFLFFBQWtCLEVBQUUsRUFBRTtRQUVyRCxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztRQUVuRSxJQUFJO1lBRUgsa0ZBQWtGO1lBQ2xGLDhGQUE4RjtZQUM5RixJQUFJLFdBQVcsRUFBRTtnQkFDaEIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEQ7aUJBQU07Z0JBRU4sTUFBTSxPQUFPLEdBQStEO29CQUMzRSxPQUFPLEVBQUU7d0JBQ1IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRTt3QkFDOUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJO3FCQUNyQjtvQkFDRCxjQUFjO29CQUNkLE1BQU07aUJBQ04sQ0FBQztnQkFFRixNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBRXhDO1lBRUQsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FFNUM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNmLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO0lBRUYsQ0FBQyxDQUFDO0FBRUgsQ0FBQztBQXRDRCx3QkFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIEZpbmFuY2lhbEZvcmNlLmNvbSwgaW5jXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG4gKiAgIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBGaW5hbmNpYWxGb3JjZS5jb20sIGluYyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnNcbiAqICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcbiAqICAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcbiAqICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTFxuICogIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICogIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EU1xuICogIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuICogIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKVxuICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbi8qKlxuICogQG1vZHVsZSBzZXJ2ZXIvcm91dGVcbiAqL1xuXG5pbXBvcnQgeyBPcHRpb25zLCBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJy4uLy4uJztcblxuaW1wb3J0IHsgTWVzc2FnZVZhbGlkYXRvciB9IGZyb20gJy4uL3ZhbGlkYXRvci9tZXNzYWdlJztcbmltcG9ydCB7IFJvdXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3ZhbGlkYXRvci9yb3V0ZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlIGZvciB0aGUgT3JpenVydSBTZXJ2ZXIuXG4gKiBAcGFyYW0gc2VydmVyIFRoZSBPcml6dXJ1IHNlcnZlciBpbnN0YW5jZS5cbiAqIEBwYXJhbSByb3V0ZUNvbmZpZ3VyYXRpb24gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcm91dGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoc2VydmVyOiBPcml6dXJ1LklTZXJ2ZXIsIHJvdXRlQ29uZmlndXJhdGlvbjogUm91dGVDb25maWd1cmF0aW9uKSB7XG5cblx0Y29uc3QgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBNZXNzYWdlVmFsaWRhdG9yKCk7XG5cdGNvbnN0IHdyaXRlUmVzcG9uc2UgPSByb3V0ZUNvbmZpZ3VyYXRpb24ucmVzcG9uc2VXcml0ZXIoc2VydmVyKTtcblxuXHRyZXR1cm4gYXN5bmMgKHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuXG5cdFx0Y29uc3QgeyBwdWJsaXNoT3B0aW9ucywgc2NoZW1hLCBzeW5jaHJvbm91cyB9ID0gcm91dGVDb25maWd1cmF0aW9uO1xuXG5cdFx0dHJ5IHtcblxuXHRcdFx0Ly8gRm9yIGEgc3luY2hyb25vdXMgY2FsbCwgdmFsaWRhdGUgdGhlIG1lc3NhZ2UgYW5kIHRoZW4gY2FsbCB0aGUgcmVzcG9uc2Ugd3JpdGVyLlxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB3ZSBhcmUgYXN5bmMgYW5kIG5lZWQgdG8gcHVibGlzaCB0aGUgbWVzc2FnZSBiZWZvcmUgY2FsbGluZyB0aGUgcmVzcG9uc2Ugd3JpdGVyLlxuXHRcdFx0aWYgKHN5bmNocm9ub3VzKSB7XG5cdFx0XHRcdG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGUoc2NoZW1hLCByZXF1ZXN0LmJvZHkpO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRjb25zdCBvcHRpb25zOiBPcHRpb25zLklQdWJsaXNoRnVuY3Rpb248T3JpenVydS5Db250ZXh0LCBPcml6dXJ1Lk1lc3NhZ2U+ID0ge1xuXHRcdFx0XHRcdG1lc3NhZ2U6IHtcblx0XHRcdFx0XHRcdGNvbnRleHQ6IHJlcXVlc3Qub3JpenVydSB8fCB7fSxcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IHJlcXVlc3QuYm9keVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cHVibGlzaE9wdGlvbnMsXG5cdFx0XHRcdFx0c2NoZW1hXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0YXdhaXQgc2VydmVyLnB1Ymxpc2hlci5wdWJsaXNoKG9wdGlvbnMpO1xuXG5cdFx0XHR9XG5cblx0XHRcdHdyaXRlUmVzcG9uc2UodW5kZWZpbmVkLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0d3JpdGVSZXNwb25zZShlcnJvciwgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXHRcdH1cblxuXHR9O1xuXG59XG4iXX0=