relution-sdk
Version:
Relution Software Development Kit for TypeScript and JavaScript
105 lines • 18.4 kB
JavaScript
/*
* @file core/init.ts
* Relution SDK
*
* Created by Thomas Beckmann on 28.04.2016
* Copyright 2016 M-Way Solutions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @module core
*/
/** */
;
var _ = require('lodash');
var Q = require('q');
var url = require('url');
var diag = require('./diag');
var device = require('./device');
// workaround Q promises being inherently incompatible with zone.js used by angular2
Q.nextTick = (function detectNextTick() {
// requires use of Q's nextTick(cb)
Q.stopUnhandledRejectionTracking();
// Q's nextTick(cb) is not compatible with thread-locals,
// returned function must not be bound as zone.js reassigns global variables
if (process && !('browser' in process) && process.nextTick) {
return function (cb) { return process.nextTick(cb); };
}
else if (typeof 'setImmediate' === 'function') {
return function (cb) { return setImmediate(cb); };
}
else {
return function (cb) { return setTimeout(cb, 0); };
}
})();
// initialize to go in sync with init() call
Q.longStackSupport = diag.debug.enabled;
/**
* creates a deeply independent copy of some [[ServerInitOptions]].
*
* @param serverInitOptions to clone.
* @return {ServerInitOptions} cloned object.
*/
function cloneServerInitOptions(serverInitOptions) {
var result = {
serverUrl: serverInitOptions.serverUrl,
application: serverInitOptions.application,
clientApp: serverInitOptions.clientApp,
tenantOrga: serverInitOptions.tenantOrga,
logonCallback: serverInitOptions.logonCallback,
};
if (result.serverUrl && result.serverUrl[result.serverUrl.length - 1] !== '/') {
result.serverUrl += '/';
}
if (serverInitOptions.clientCertificate) {
result.clientCertificate = _.clone(serverInitOptions.clientCertificate);
}
if (serverInitOptions.agentOptions) {
result.agentOptions = _.clone(serverInitOptions.agentOptions);
}
return result;
}
exports.cloneServerInitOptions = cloneServerInitOptions;
/**
* copy of options the SDK was initialized with using [[init]] function serving as defaults.
*
* @internal for SDK internal use only!
*/
exports.initOptions = {};
/**
* (re)initializes the SDK providing global configuration parameters.
*
* @param options of configuration, often these are hardcoded values of the mobile client app.
* @return promise resolving to Information object as soon as the device is ready.
*/
function init(options) {
if (options === void 0) { options = {}; }
if ('debug' in options) {
diag.debug.enabled = options.debug;
Q.longStackSupport = options.debug;
}
if ('serverUrl' in options) {
var myURL = url.parse(options.serverUrl);
if (!myURL.protocol && !myURL.host) {
return Q.reject(new Error(options.serverUrl + " is not an accepted Url, please add a Host and a Protocol."));
}
}
_.assignWith(exports.initOptions, cloneServerInitOptions(options), function (left, right) { return _.isUndefined(right) ? left : right; });
if ('push' in options) {
exports.initOptions.push = _.cloneDeep(options.push);
}
return device.ready;
}
exports.init = init;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNIOztHQUVHO0FBQ0gsTUFBTTs7QUFHTixJQUFZLENBQUMsV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUM1QixJQUFZLENBQUMsV0FBTSxHQUFHLENBQUMsQ0FBQTtBQUN2QixJQUFZLEdBQUcsV0FBTSxLQUFLLENBQUMsQ0FBQTtBQUMzQixJQUFZLElBQUksV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUMvQixJQUFZLE1BQU0sV0FBTSxVQUFVLENBQUMsQ0FBQTtBQUVuQyxvRkFBb0Y7QUFDOUUsQ0FBRSxDQUFDLFFBQVEsR0FBRyxDQUFDO0lBQ25CLG1DQUFtQztJQUM3QixDQUFFLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUMxQyx5REFBeUQ7SUFDekQsNEVBQTRFO0lBQzVFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxVQUFDLEVBQUUsSUFBSyxPQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQXBCLENBQW9CLENBQUM7SUFDdEMsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLGNBQWMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxVQUFDLEVBQUUsSUFBSyxPQUFBLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBaEIsQ0FBZ0IsQ0FBQztJQUNsQyxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLENBQUMsVUFBQyxFQUFFLElBQUssT0FBQSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFqQixDQUFpQixDQUFDO0lBQ25DLENB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OlsiLypcclxuICogQGZpbGUgY29yZS9pbml0LnRzXHJcbiAqIFJlbHV0aW9uIFNES1xyXG4gKlxyXG4gKiBDcmVhdGVkIGJ5IFRob21hcyBCZWNrbWFubiBvbiAyOC4wNC4yMDE2XHJcbiAqIENvcHlyaWdodCAyMDE2IE0tV2F5IFNvbHV0aW9ucyBHbWJIXHJcbiAqXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAqXHJcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKlxyXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQG1vZHVsZSBjb3JlXHJcbiAqL1xyXG4vKiogKi9cclxuXHJcbmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFEgZnJvbSAncSc7XHJcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xyXG5pbXBvcnQgKiBhcyBkaWFnIGZyb20gJy4vZGlhZyc7XHJcbmltcG9ydCAqIGFzIGRldmljZSBmcm9tICcuL2RldmljZSc7XHJcblxyXG4vLyB3b3JrYXJvdW5kIFEgcHJvbWlzZXMgYmVpbmcgaW5oZXJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCB6b25lLmpzIHVzZWQgYnkgYW5ndWxhcjJcclxuKDxhbnk+USkubmV4dFRpY2sgPSAoZnVuY3Rpb24gZGV0ZWN0TmV4dFRpY2soKTogdHlwZW9mIFEubmV4dFRpY2sge1xyXG4gIC8vIHJlcXVpcmVzIHVzZSBvZiBRJ3MgbmV4dFRpY2soY2IpXHJcbiAgKDxhbnk+USkuc3RvcFVuaGFuZGxlZFJlamVjdGlvblRyYWNraW5nKCk7XHJcbiAgLy8gUSdzIG5leHRUaWNrKGNiKSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRocmVhZC1sb2NhbHMsXHJcbiAgLy8gcmV0dXJuZWQgZnVuY3Rpb24gbXVzdCBub3QgYmUgYm91bmQgYXMgem9uZS5qcyByZWFzc2lnbnMgZ2xvYmFsIHZhcmlhYmxlc1xyXG4gIGlmIChwcm9jZXNzICYmICEoJ2Jyb3dzZXInIGluIHByb2Nlc3MpICYmIHByb2Nlc3MubmV4dFRpY2spIHtcclxuICAgIHJldHVybiAoY2IpID0+IHByb2Nlc3MubmV4dFRpY2soY2IpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mICdzZXRJbW1lZGlhdGUnID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXR1cm4gKGNiKSA9PiBzZXRJbW1lZGlhdGUoY2IpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gKGNiKSA9PiBzZXRUaW1lb3V0KGNiLCAwKTtcclxuICB9XHJcbn0pKCk7XHJcblxyXG4vLyBpbml0aWFsaXplIHRvIGdvIGluIHN5bmMgd2l0aCBpbml0KCkgY2FsbFxyXG4oPGFueT5RKS5sb25nU3RhY2tTdXBwb3J0ID0gZGlhZy5kZWJ1Zy5lbmFibGVkO1xyXG5cclxuLyoqXHJcbiAqIGFwcGxpZWQgb24gZWFjaCBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIFJlbHV0aW9uIHNlcnZlci5cclxuICpcclxuICogVGhlIGZ1bmN0aW9uIG1heSBiZSBleGVjdXRlZCBtdWx0aXBsZSB0aW1lcywgZm9yIGV4YW1wbGUgd2hlbiB0aGUgc2Vzc2lvbiB0aW1lcyBvdXQuIFRoZSBwdXJwb3NlXHJcbiAqIG9mIGl0IGlzIHRvIGNhbGwgYXBwbGljYXRpb24tc3BlY2lmaWMgbG9nb25zIHBhc3NpbmcgaW5mb3JtYXRpb24gc3VjaCBhcyBjcmVkZW50aWFscyBvZiAzcmQtdGllclxyXG4gKiBiYWNrZW5kIHNlcnZlcnMuXHJcbiAqXHJcbiAqIEl0IGlzIGNhbGxlZCBvbmx5IGFzIHBhcnQgb2Ygb25saW5lIGxvZ2luLiBBbnkgZGF0YSByZXR1cm5lZCBpcyBzdG9yZWQgaW5cclxuICogYExvZ2luUmVzcG9uc2UubG9nb25JbmZvc2AgYW5kIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgZXZlbiBvbiBvZmZsaW5lIGxvZ2luLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dvbkNhbGxiYWNrIHtcclxuICAodmFsdWU6IGFueSk6IFEuUHJvbWlzZTxhbnk+IHwgYW55O1xyXG59XHJcblxyXG4vKipcclxuICogc3BlY2lmaWVzIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIEhUVFAgYWdlbnQsIGFkdmFuY2VkIG9wZXJhdGlvbi5cclxuICpcclxuICogSW4gcmFyZSBjYXNlcyB0aGlzIGZpZWxkIG1heSBiZSB1c2VmdWwgdG8gYWx0ZXIgYmVoYXZpb3Igb2YgdGhlIHVuZGVybHlpbmcgaHR0cCBjbGllbnQuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBBZ2VudE9wdGlvbnMge1xyXG4gIGFnZW50T3B0aW9ucz86IGFueTtcclxuICBhZ2VudENsYXNzPzogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogb3B0aW9ucyBzZWxlY3RpbmcgUmVsdXRpb24gc2VydmVyIHRvIHRhbGsgdG8uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclVybE9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIGFic29sdXRlIHVybCBwYXRoIG9mIChkZWZhdWx0KSBSZWx1dGlvbiBzZXJ2ZXIuXHJcbiAgICpcclxuICAgKiBOb3RpY2UsIHRoZSBsaWJyYXJ5IHdpbGwgd29yayBjb3JyZWN0bHkgb25seSBpZiB0aGUgUmVsdXRpb24gc2VydmVyIGVuZHBvaW50cyBhcmUgZXhwb3NlZFxyXG4gICAqIGFzIGEgKHN1Yi0pZG9tYWluLiBPcGVyYXRpb24gb2YgUmVsdXRpb24gYXQgYSBzdWJwYXRoIG9mIFVSTCBzcGFjZSBpcyBub3Qgc3VwcG9ydGVkIVxyXG4gICAqL1xyXG4gIHNlcnZlclVybD86IHN0cmluZztcclxuICAvKipcclxuICAgKiBuYW1lIG9mIChiYWNrZW5kKSBhcHBsaWNhdGlvbiBhcyBzcGVjaWZpZWQgaW4gcmVsdXRpb24uanNvbi5cclxuICAgKlxyXG4gICAqIEl0IGlzIGFkdmljZWQgZm9sbG93aW5nIHRoZSBjb252ZW50aW9uIG9mIHVzaW5nIHRoaXMgbmFtZSBwcmVmaXhlZCBieSBhIHNsYXNoIGFzIHRoZVxyXG4gICAqIGBiYXNlQWxpYXNgLiBIb3dldmVyLCBpbiBjYXNlIGEgZGlmZmVyZW50IGFsaWFzIGlzIHVzZWQsIHNldCB0aGUgZmllbGQgdG8gdGhlIGFsaWFzXHJcbiAgICogaW5jbHVkaW5nIHRoZSBzbGFzaCBpbnN0ZWFkIHRvIG1ha2UgdGhlIGxpYnJhcnkgY29tbXVuaWNhdGUgdG8gdGhlIGNvcnJlY3QgZW5kcG9pbnQuXHJcbiAgICovXHJcbiAgYXBwbGljYXRpb24/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogb3B0aW9uYWwgdGVuYW50IFtbT3JnYW5pemF0aW9uXV0gdW5pcXVlIG5hbWUuXHJcbiAgICpcclxuICAgKiBGb3IgZnVsbHkgbXVsdGktdGVuYW50IGNhcGFibGUgYmFja2VuZHMgdGhpcyBmaWVsZCBzZWxlY3RzIHRoZSBiYWNrZW5kIGluc3RhbmNlIHRoZSBjbGllbnRcclxuICAgKiB0YWxrcyB0by4gVGhlIGZpZWxkIGRlZmF1bHRzIHRvIHVzaW5nIHRoZSBbW09yZ2FuaXphdGlvbl1dIG9mIHRoZSBsb2dvbiBbW1VzZXJdXSB3aGljaFxyXG4gICAqIHN1ZmZpY2VzIGZvciBtb3N0IHVzZSBjYXNlcy5cclxuICAgKlxyXG4gICAqIFdoZW4gc2V0IHRvIHRoZSB1bmlxdWUgbmFtZSBvZiBhbiBbW09yZ2FuaXphdGlvbl1dLCB1c2VycyBvZiBvZiBvbmUgW1tPcmdhbml6YXRpb25dXSBtYXlcclxuICAgKiBsb2cgaW50byB0aGUgKGJhY2tlbmQpIFtbYXBwbGljYXRpb25dXSBpbnN0YW5jZSBvZiBhbm90aGVyIFtbT3JnYW5pemF0aW9uXV0gc2VydmluZyBhc1xyXG4gICAqIHRoZSB0ZW5hbnQuIE5vdGljZSwgaW4gb3JkZXIgdG8gdXNlIHRoaXMgZmVhdHVyZSB0aGUgdGVuYW50IFtbT3JnYW5pemF0aW9uXV0gbXVzdCBoYXZlXHJcbiAgICogYXQgbGVhc3QgZXhlY3V0ZSByaWdodHMgb24gdGhlIChiYWNrZW5kKSBbW2FwcGxpY2F0aW9uXV0gYW5kIHRoZSBbW1VzZXJdXSB1c2luZyBpdCBuZWVkc1xyXG4gICAqIHRvIGhhdmUgcmVhZCBwZXJtaXNzaW9uIG9uIHRoZSB0ZW5hbnQgW1tPcmdhbml6YXRpb25dXSB1c2VkLlxyXG4gICAqL1xyXG4gIHRlbmFudE9yZ2E/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBvcHRpb25zIHBhc3NlZCB0byBbW2xvZ2luXV0gbWV0aG9kIGFzIHdlbGwgYXMgdG8gW1tpbml0XV0gc2VydmluZyBhcyBkZWZhdWx0cyBmb3IgSFRUUCBsb2dpbnMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlckluaXRPcHRpb25zIGV4dGVuZHMgU2VydmVyVXJsT3B0aW9ucywgSHR0cEFnZW50T3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogKG1vYmlsZSkgY2xpZW50IGFwcCB1c2luZyB0aGUgKGJhY2tlbmQpIFtbYXBwbGljYXRpb25dXS5cclxuICAgKlxyXG4gICAqIFdoZW4gc2V0LCB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBzZW5kIHRvIHRoZSBSZWx1dGlvbiBzZXJ2ZXIgZm9yIGlkZW50aWZpY2F0aW9uXHJcbiAgICogb2YgdGhlIGFwcCB1c2luZyBpdC4gVHlwaWNhbGx5LCB0aGlzIGlzIHRoZSBuYW1lIG9yIHV1aWQgb2YgdGhlIGFwcCBpbiB0aGUgYXBwc3RvcmUuXHJcbiAgICovXHJcbiAgY2xpZW50QXBwPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBvcHRpb25hbCBsb2dvbiBhcHBsaWVkIGFmdGVyIGVhY2ggbG9naW4uXHJcbiAgICpcclxuICAgKiBUeXBpY2FsbHkgdGhlIGNhbGxiYWNrIHN1cHBsaWVkIHVzZXMgY29ubmVjdG9yLmNvbmZpZ3VyZVNlc3Npb24oKSB0byB0cmFuc2ZlciByZXF1aXJlZFxyXG4gICAqIGNyZWRlbnRpYWxzIG9mIDNyZC10aWVyIGJhY2tlbmQgc2VydmVycyBhZnRlciBsb2dvbi5cclxuICAgKlxyXG4gICAqIE5vdGljZSwgbG9nb24gbWF5IGJlIGNhbGxlZCBtdXRpcGxlIHRpbWVzIGFmdGVyIFtbbG9naW5dXSBhcyBkdWUgdG8gaW5hY3Rpdml0eSB0aGUgc2VydmVyXHJcbiAgICogc2lkZSBzZXNzaW9uIG1heSBiZSBsb3N0IGFuZCBuZWVkcyB0byBiZSByZWFjcXVpcmVkIGV2ZW50dWFsbHkuXHJcbiAgICovXHJcbiAgbG9nb25DYWxsYmFjaz86IExvZ29uQ2FsbGJhY2s7XHJcblxyXG4gIC8qKlxyXG4gICAqIHdoZW4gc2V0LCB0aGlzIGlzIHVzZWQgYXMgYHBmeGAgZm9yIHRoZSByZXF1ZXN0cyB0byB0aGUgc2VydmVyLlxyXG4gICAqL1xyXG4gIGNsaWVudENlcnRpZmljYXRlPzogdGxzLlNlY3VyZUNvbnRleHRPcHRpb25zO1xyXG59XHJcblxyXG4vKipcclxuICogY3JlYXRlcyBhIGRlZXBseSBpbmRlcGVuZGVudCBjb3B5IG9mIHNvbWUgW1tTZXJ2ZXJJbml0T3B0aW9uc11dLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VydmVySW5pdE9wdGlvbnMgdG8gY2xvbmUuXHJcbiAqIEByZXR1cm4ge1NlcnZlckluaXRPcHRpb25zfSBjbG9uZWQgb2JqZWN0LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lU2VydmVySW5pdE9wdGlvbnMoc2VydmVySW5pdE9wdGlvbnM6IFNlcnZlckluaXRPcHRpb25zKTogU2VydmVySW5pdE9wdGlvbnMge1xyXG4gIGxldCByZXN1bHQ6IFNlcnZlckluaXRPcHRpb25zID0ge1xyXG4gICAgc2VydmVyVXJsOiBzZXJ2ZXJJbml0T3B0aW9ucy5zZXJ2ZXJVcmwsXHJcbiAgICBhcHBsaWNhdGlvbjogc2VydmVySW5pdE9wdGlvbnMuYXBwbGljYXRpb24sXHJcbiAgICBjbGllbnRBcHA6IHNlcnZlckluaXRPcHRpb25zLmNsaWVudEFwcCxcclxuICAgIHRlbmFudE9yZ2E6IHNlcnZlckluaXRPcHRpb25zLnRlbmFudE9yZ2EsXHJcbiAgICBsb2dvbkNhbGxiYWNrOiBzZXJ2ZXJJbml0T3B0aW9ucy5sb2dvbkNhbGxiYWNrLFxyXG4gIH07XHJcbiAgaWYgKHJlc3VsdC5zZXJ2ZXJVcmwgJiYgcmVzdWx0LnNlcnZlclVybFtyZXN1bHQuc2VydmVyVXJsLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgIHJlc3VsdC5zZXJ2ZXJVcmwgKz0gJy8nO1xyXG4gIH1cclxuICBpZiAoc2VydmVySW5pdE9wdGlvbnMuY2xpZW50Q2VydGlmaWNhdGUpIHtcclxuICAgIHJlc3VsdC5jbGllbnRDZXJ0aWZpY2F0ZSA9IF8uY2xvbmUoc2VydmVySW5pdE9wdGlvbnMuY2xpZW50Q2VydGlmaWNhdGUpO1xyXG4gIH1cclxuICBpZiAoc2VydmVySW5pdE9wdGlvbnMuYWdlbnRPcHRpb25zKSB7XHJcbiAgICByZXN1bHQuYWdlbnRPcHRpb25zID0gXy5jbG9uZShzZXJ2ZXJJbml0T3B0aW9ucy5hZ2VudE9wdGlvbnMpO1xyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vKipcclxuICogb3B0aW9uYWwgb3B0aW9ucyBwYXNzZWQgdG8gW1tpbml0XV0uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEluaXRPcHRpb25zIGV4dGVuZHMgU2VydmVyVXJsT3B0aW9ucywgU2VydmVySW5pdE9wdGlvbnMge1xyXG5cclxuICAvKipcclxuICAgKiB3aGVuIHNldCwgcmVjb25maWd1cmVzIGNvbnNvbGUgZGVidWdnaW5nIGFuZCBhc3NlcnRpb24gdGVzdGluZyBvZiB0aGUgbGlicmFyeS5cclxuICAgKlxyXG4gICAqIERlZmF1bHQgc2V0dGluZyBvZiB0aGUgbGlicmFyeSBpcyBkZWJ1ZyBlbmFibGVkLlxyXG4gICAqL1xyXG4gIGRlYnVnPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogcHVzaCBjb25maWd1cmF0aW9uIG9mIHRoZSBhcHAuXHJcbiAgICpcclxuICAgKiBVc3VhbGx5LCBgaW5pdCgpYCBpcyBwYXNzZWQgc29tZSBkZXBsb3ltZW50IGFydGlmYWN0IHN1Y2ggYXMgdGhlIGVudmlyb25tZW50IGNvbnN0YW50cyBpbiBhblxyXG4gICAqIGlvbmljIGFwcC4gV2hlbiBkb2luZyBzbywgdGhlIHB1c2ggY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGFzIHBhcnQgb2YgaXQuXHJcbiAgICovXHJcbiAgcHVzaD86IFBob25lZ2FwUGx1Z2luUHVzaC5Jbml0T3B0aW9ucztcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb3B5IG9mIG9wdGlvbnMgdGhlIFNESyB3YXMgaW5pdGlhbGl6ZWQgd2l0aCB1c2luZyBbW2luaXRdXSBmdW5jdGlvbiBzZXJ2aW5nIGFzIGRlZmF1bHRzLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWwgZm9yIFNESyBpbnRlcm5hbCB1c2Ugb25seSFcclxuICovXHJcbmV4cG9ydCBsZXQgaW5pdE9wdGlvbnM6IEluaXRPcHRpb25zID0ge307XHJcblxyXG4vKipcclxuICogKHJlKWluaXRpYWxpemVzIHRoZSBTREsgcHJvdmlkaW5nIGdsb2JhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zIG9mIGNvbmZpZ3VyYXRpb24sIG9mdGVuIHRoZXNlIGFyZSBoYXJkY29kZWQgdmFsdWVzIG9mIHRoZSBtb2JpbGUgY2xpZW50IGFwcC5cclxuICogQHJldHVybiBwcm9taXNlIHJlc29sdmluZyB0byBJbmZvcm1hdGlvbiBvYmplY3QgYXMgc29vbiBhcyB0aGUgZGV2aWNlIGlzIHJlYWR5LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXQob3B0aW9uczogSW5pdE9wdGlvbnMgPSB7fSkge1xyXG5cclxuICBpZiAoJ2RlYnVnJyBpbiBvcHRpb25zKSB7XHJcbiAgICBkaWFnLmRlYnVnLmVuYWJsZWQgPSBvcHRpb25zLmRlYnVnO1xyXG4gICAgKDxhbnk+USkubG9uZ1N0YWNrU3VwcG9ydCA9IG9wdGlvbnMuZGVidWc7XHJcbiAgfVxyXG5cclxuICBpZiAoJ3NlcnZlclVybCcgaW4gb3B0aW9ucykge1xyXG4gICAgY29uc3QgbXlVUkwgPSB1cmwucGFyc2Uob3B0aW9ucy5zZXJ2ZXJVcmwpO1xyXG4gICAgaWYgKCFteVVSTC5wcm90b2NvbCAmJiAhbXlVUkwuaG9zdCkge1xyXG4gICAgICByZXR1cm4gUS5yZWplY3Q8ZGV2aWNlLkluZm9ybWF0aW9uPihuZXcgRXJyb3IoYCR7b3B0aW9ucy5zZXJ2ZXJVcmx9IGlzIG5vdCBhbiBhY2NlcHRlZCBVcmwsIHBsZWFzZSBhZGQgYSBIb3N0IGFuZCBhIFByb3RvY29sLmApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF8uYXNzaWduV2l0aChpbml0T3B0aW9ucywgY2xvbmVTZXJ2ZXJJbml0T3B0aW9ucyhvcHRpb25zKSxcclxuICAgIChsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpID0+IF8uaXNVbmRlZmluZWQocmlnaHQpID8gbGVmdCA6IHJpZ2h0KTtcclxuXHJcbiAgaWYgKCdwdXNoJyBpbiBvcHRpb25zKSB7XHJcbiAgICBpbml0T3B0aW9ucy5wdXNoID0gXy5jbG9uZURlZXAob3B0aW9ucy5wdXNoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBkZXZpY2UucmVhZHk7XHJcbn1cclxuIl19