UNPKG

@financialforcedev/orizuru-transport-rabbitmq

Version:
99 lines 13.4 kB
"use strict"; /** * 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 amqplib_1 = require("amqplib"); const optionsValidator_1 = require("./index/optionsValidator"); const publish_1 = require("./index/publish"); const secure_1 = require("./index/secure"); const subscribe_1 = require("./index/subscribe"); class Transport { constructor(options) { optionsValidator_1.validate(options); this.options = options.forceSecure ? secure_1.forceSecure(options) : options; } /** * Closes the connection. */ async close() { if (this.publishChannel) { await this.publishChannel.close(); } if (this.subscribeChannel) { await this.subscribeChannel.close(); } if (this.connection) { await this.connection.close(); } } /** * Connects to AMQP and creates a publish and subscribe channel. */ async connect() { // Create a single connection if (!this.connection) { this.connection = await amqplib_1.connect(this.options.url, this.options.socketOptions); } // Create a single publish channel if (!this.publishChannel) { this.publishChannel = await this.connection.createChannel(); } // Create a single subscribe channel if (!this.subscribeChannel) { this.subscribeChannel = await this.connection.createChannel(); // Set prefetch if (this.options.prefetch) { this.subscribeChannel.prefetch(this.options.prefetch); } } } /** * Publishes a message via AMQP. */ async publish(buffer, options) { if (!this.publishChannel) { throw new Error('Transport has not been initialised.'); } const publisher = new publish_1.Publisher(this.publishChannel); await publisher.init(options); return publisher.publish(buffer); } /** * Handles a message from AMQP. */ async subscribe(handler, options) { if (!this.subscribeChannel) { throw new Error('Transport has not been initialised.'); } const subscriber = new subscribe_1.Subscriber(this.subscribeChannel); await subscriber.init(options); return subscriber.subscribe(handler); } } exports.Transport = Transport; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7O0FBS0gscUNBQXNFO0FBRXRFLCtEQUFvRDtBQUNwRCw2Q0FBNEM7QUFDNUMsMkNBQTZDO0FBQzdDLGlEQUErQztBQThDL0MsTUFBYSxTQUFTO0lBUXJCLFlBQVksT0FBZ0I7UUFDM0IsMkJBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXO1lBQ2pDLENBQUMsQ0FBQyxvQkFBVyxDQUFDLE9BQU8sQ0FBQztZQUN0QixDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ1osQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDakIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNsQztRQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM5QjtJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBRW5CLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0saUJBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2xGO1FBRUQsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVEO1FBRUQsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUU5RCxlQUFlO1lBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3REO1NBQ0Q7SUFFRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQWMsRUFBRSxPQUFtQztRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLG1CQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFzRSxFQUFFLE9BQXFDO1FBQ25JLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxzQkFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUVEO0FBbkZELDhCQW1GQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTkgRmluYW5jaWFsRm9yY2UuY29tLCBpbmNcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbiAqICAgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEZpbmFuY2lhbEZvcmNlLmNvbSwgaW5jIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9yc1xuICogICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuICogICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG4gKiAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xuICogIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMXG4gKiAgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gKiAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTXG4gKiAgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiAgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpXG4gKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuaW1wb3J0IHsgTmV0Q29ubmVjdE9wdHMgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICd0bHMnO1xuXG5pbXBvcnQgeyBDaGFubmVsLCBjb25uZWN0IGFzIGFtcXBDb25uZWN0LCBDb25uZWN0aW9uIH0gZnJvbSAnYW1xcGxpYic7XG5cbmltcG9ydCB7IHZhbGlkYXRlIH0gZnJvbSAnLi9pbmRleC9vcHRpb25zVmFsaWRhdG9yJztcbmltcG9ydCB7IFB1Ymxpc2hlciB9IGZyb20gJy4vaW5kZXgvcHVibGlzaCc7XG5pbXBvcnQgeyBmb3JjZVNlY3VyZSB9IGZyb20gJy4vaW5kZXgvc2VjdXJlJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuL2luZGV4L3N1YnNjcmliZSc7XG5cbmV4cG9ydCB0eXBlIEV4Y2hhbmdlVHlwZSA9ICdmYW5vdXQnIHwgJ3RvcGljJztcblxuZGVjbGFyZSBnbG9iYWwge1xuXG5cdG5hbWVzcGFjZSBPcml6dXJ1IHtcblxuXHRcdGludGVyZmFjZSBJSGFuZGxlclJlc3BvbnNlIHtcblx0XHRcdHJldHJ5OiBib29sZWFuO1xuXHRcdH1cblxuXHRcdG5hbWVzcGFjZSBUcmFuc3BvcnQge1xuXG5cdFx0XHRpbnRlcmZhY2UgSVB1Ymxpc2gge1xuXHRcdFx0XHRldmVudE5hbWU6IHN0cmluZztcblx0XHRcdFx0ZXhjaGFuZ2U/OiB7XG5cdFx0XHRcdFx0a2V5Pzogc3RyaW5nO1xuXHRcdFx0XHRcdGtleUZ1bmN0aW9uPzogKChvcHRpb25zOiBPcml6dXJ1LlRyYW5zcG9ydC5JUHVibGlzaCkgPT4gc3RyaW5nKTtcblx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0dHlwZTogRXhjaGFuZ2VUeXBlO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRpbnRlcmZhY2UgSVN1YnNjcmliZSB7XG5cdFx0XHRcdGV2ZW50TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRleGNoYW5nZT86IHtcblx0XHRcdFx0XHRrZXk/OiBzdHJpbmc7XG5cdFx0XHRcdFx0a2V5RnVuY3Rpb24/OiAoKG9wdGlvbnM6IE9yaXp1cnUuVHJhbnNwb3J0LklTdWJzY3JpYmUpID0+IHN0cmluZyk7XG5cdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdHR5cGU6IEV4Y2hhbmdlVHlwZTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0fVxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG5cdHByZWZldGNoPzogbnVtYmVyO1xuXHR1cmw6IHN0cmluZztcblx0Zm9yY2VTZWN1cmU/OiBib29sZWFuO1xuXHRzb2NrZXRPcHRpb25zPzogUGFydGlhbDxOZXRDb25uZWN0T3B0cyAmIENvbm5lY3Rpb25PcHRpb25zPjtcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zcG9ydCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPcHRpb25zO1xuXG5cdHByaXZhdGUgY29ubmVjdGlvbj86IENvbm5lY3Rpb247XG5cdHByaXZhdGUgcHVibGlzaENoYW5uZWw/OiBDaGFubmVsO1xuXHRwcml2YXRlIHN1YnNjcmliZUNoYW5uZWw/OiBDaGFubmVsO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcblx0XHR2YWxpZGF0ZShvcHRpb25zKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zLmZvcmNlU2VjdXJlXG5cdFx0XHQ/IGZvcmNlU2VjdXJlKG9wdGlvbnMpXG5cdFx0XHQ6IG9wdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIGNsb3NlKCkge1xuXHRcdGlmICh0aGlzLnB1Ymxpc2hDaGFubmVsKSB7XG5cdFx0XHRhd2FpdCB0aGlzLnB1Ymxpc2hDaGFubmVsLmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc3Vic2NyaWJlQ2hhbm5lbCkge1xuXHRcdFx0YXdhaXQgdGhpcy5zdWJzY3JpYmVDaGFubmVsLmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuY29ubmVjdGlvbikge1xuXHRcdFx0YXdhaXQgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbm5lY3RzIHRvIEFNUVAgYW5kIGNyZWF0ZXMgYSBwdWJsaXNoIGFuZCBzdWJzY3JpYmUgY2hhbm5lbC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBjb25uZWN0KCkge1xuXG5cdFx0Ly8gQ3JlYXRlIGEgc2luZ2xlIGNvbm5lY3Rpb25cblx0XHRpZiAoIXRoaXMuY29ubmVjdGlvbikge1xuXHRcdFx0dGhpcy5jb25uZWN0aW9uID0gYXdhaXQgYW1xcENvbm5lY3QodGhpcy5vcHRpb25zLnVybCwgdGhpcy5vcHRpb25zLnNvY2tldE9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIHNpbmdsZSBwdWJsaXNoIGNoYW5uZWxcblx0XHRpZiAoIXRoaXMucHVibGlzaENoYW5uZWwpIHtcblx0XHRcdHRoaXMucHVibGlzaENoYW5uZWwgPSBhd2FpdCB0aGlzLmNvbm5lY3Rpb24uY3JlYXRlQ2hhbm5lbCgpO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIHNpbmdsZSBzdWJzY3JpYmUgY2hhbm5lbFxuXHRcdGlmICghdGhpcy5zdWJzY3JpYmVDaGFubmVsKSB7XG5cdFx0XHR0aGlzLnN1YnNjcmliZUNoYW5uZWwgPSBhd2FpdCB0aGlzLmNvbm5lY3Rpb24uY3JlYXRlQ2hhbm5lbCgpO1xuXG5cdFx0XHQvLyBTZXQgcHJlZmV0Y2hcblx0XHRcdGlmICh0aGlzLm9wdGlvbnMucHJlZmV0Y2gpIHtcblx0XHRcdFx0dGhpcy5zdWJzY3JpYmVDaGFubmVsLnByZWZldGNoKHRoaXMub3B0aW9ucy5wcmVmZXRjaCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogUHVibGlzaGVzIGEgbWVzc2FnZSB2aWEgQU1RUC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBwdWJsaXNoKGJ1ZmZlcjogQnVmZmVyLCBvcHRpb25zOiBPcml6dXJ1LlRyYW5zcG9ydC5JUHVibGlzaCkge1xuXHRcdGlmICghdGhpcy5wdWJsaXNoQ2hhbm5lbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpc2VkLicpO1xuXHRcdH1cblx0XHRjb25zdCBwdWJsaXNoZXIgPSBuZXcgUHVibGlzaGVyKHRoaXMucHVibGlzaENoYW5uZWwpO1xuXHRcdGF3YWl0IHB1Ymxpc2hlci5pbml0KG9wdGlvbnMpO1xuXHRcdHJldHVybiBwdWJsaXNoZXIucHVibGlzaChidWZmZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgYSBtZXNzYWdlIGZyb20gQU1RUC5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBzdWJzY3JpYmUoaGFuZGxlcjogKGNvbnRlbnQ6IEJ1ZmZlcikgPT4gUHJvbWlzZTx2b2lkIHwgT3JpenVydS5JSGFuZGxlclJlc3BvbnNlPiwgb3B0aW9uczogT3JpenVydS5UcmFuc3BvcnQuSVN1YnNjcmliZSkge1xuXHRcdGlmICghdGhpcy5zdWJzY3JpYmVDaGFubmVsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBoYXMgbm90IGJlZW4gaW5pdGlhbGlzZWQuJyk7XG5cdFx0fVxuXHRcdGNvbnN0IHN1YnNjcmliZXIgPSBuZXcgU3Vic2NyaWJlcih0aGlzLnN1YnNjcmliZUNoYW5uZWwpO1xuXHRcdGF3YWl0IHN1YnNjcmliZXIuaW5pdChvcHRpb25zKTtcblx0XHRyZXR1cm4gc3Vic2NyaWJlci5zdWJzY3JpYmUoaGFuZGxlcik7XG5cdH1cblxufVxuIl19