PHP WebShell
Текущая директория: /opt/BitGoJS/modules/express/dist/src
Просмотр файла: config.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.config = exports.forceSecureUrl = exports.DefaultConfig = exports.EnvConfig = exports.ArgConfig = void 0;
const lodash_1 = require("lodash");
require("dotenv/config");
const args_1 = require("./args");
function readEnvVar(name, ...deprecatedAliases) {
if (process.env[name] !== undefined && process.env[name] !== '') {
return process.env[name];
}
for (const deprecatedAlias of deprecatedAliases) {
if (process.env[deprecatedAlias] !== undefined) {
console.warn(`warning: using deprecated environment variable '${deprecatedAlias}'. Please use the '${name}' environment variable instead.`);
return process.env[deprecatedAlias];
}
}
}
const ArgConfig = (args) => ({
port: args.port,
bind: args.bind,
ipc: args.ipc,
env: args.env,
debugNamespace: args.debugnamespace,
keyPath: args.keypath,
crtPath: args.crtpath,
sslKey: args.sslkey,
sslCert: args.sslcert,
logFile: args.logfile,
disableSSL: args.disablessl,
disableProxy: args.disableproxy,
disableEnvCheck: args.disableenvcheck,
timeout: args.timeout,
customRootUri: args.customrooturi,
customBitcoinNetwork: args.custombitcoinnetwork,
authVersion: args.authVersion,
externalSignerUrl: args.externalSignerUrl,
signerMode: args.signerMode,
signerFileSystemPath: args.signerFileSystemPath,
lightningSignerFileSystemPath: args.lightningSignerFileSystemPath,
keepAliveTimeout: args.keepalivetimeout,
headersTimeout: args.headerstimeout,
});
exports.ArgConfig = ArgConfig;
const EnvConfig = () => ({
port: Number(readEnvVar('BITGO_PORT')),
bind: readEnvVar('BITGO_BIND'),
ipc: readEnvVar('BITGO_IPC'),
env: readEnvVar('BITGO_ENV'),
debugNamespace: (readEnvVar('BITGO_DEBUG_NAMESPACE') || '').split(','),
keyPath: readEnvVar('BITGO_KEYPATH'),
crtPath: readEnvVar('BITGO_CRTPATH'),
sslKey: readEnvVar('BITGO_SSL_KEY'),
sslCert: readEnvVar('BITGO_SSL_CERT'),
logFile: readEnvVar('BITGO_LOGFILE'),
disableSSL: readEnvVar('BITGO_DISABLE_SSL', 'BITGO_DISABLESSL', 'DISABLESSL', 'DISABLE_SSL') ? true : undefined,
disableProxy: readEnvVar('BITGO_DISABLE_PROXY', 'DISABLE_PROXY') ? true : undefined,
disableEnvCheck: readEnvVar('BITGO_DISABLE_ENV_CHECK', 'DISABLE_ENV_CHECK') ? true : undefined,
timeout: Number(readEnvVar('BITGO_TIMEOUT')),
customRootUri: readEnvVar('BITGO_CUSTOM_ROOT_URI'),
customBitcoinNetwork: readEnvVar('BITGO_CUSTOM_BITCOIN_NETWORK'),
authVersion: Number(readEnvVar('BITGO_AUTH_VERSION')),
externalSignerUrl: readEnvVar('BITGO_EXTERNAL_SIGNER_URL'),
signerMode: readEnvVar('BITGO_SIGNER_MODE') ? true : undefined,
signerFileSystemPath: readEnvVar('BITGO_SIGNER_FILE_SYSTEM_PATH'),
lightningSignerFileSystemPath: readEnvVar('BITGO_LIGHTNING_SIGNER_FILE_SYSTEM_PATH'),
keepAliveTimeout: Number(readEnvVar('BITGO_KEEP_ALIVE_TIMEOUT')),
headersTimeout: Number(readEnvVar('BITGO_HEADERS_TIMEOUT')),
});
exports.EnvConfig = EnvConfig;
exports.DefaultConfig = {
port: 3080,
bind: 'localhost',
env: 'test',
debugNamespace: [],
logFile: '',
disableSSL: false,
disableProxy: false,
// BG-9584: temporarily disable env check while we give users time to react to change in runtime behavior
// This will require a major version bump, since this is a breaking change to default behavior.
disableEnvCheck: true,
timeout: 305 * 1000,
authVersion: 2,
};
/**
* Force https:// prefix unless ssl is disabled
* @param url
* @return {string}
*/
function forceSecureUrl(url) {
const regex = new RegExp(/(^\w+:|^)\/\//);
if (regex.test(url)) {
return url.replace(/(^\w+:|^)\/\//, 'https://');
}
return `https://${url}`;
}
exports.forceSecureUrl = forceSecureUrl;
/**
* Helper function to merge config sources into a single config object.
*
* Later configs have higher precedence over earlier configs.
*/
function mergeConfigs(...configs) {
function isNilOrNaN(val) {
return (0, lodash_1.isNil)(val) || ((0, lodash_1.isNumber)(val) && isNaN(val));
}
// helper to get the last defined value for a given config key
// from each of the config sources in a type safe manner.
function get(k) {
return configs.reduce((entry, config) => (!isNilOrNaN(config[k]) ? config[k] : entry), exports.DefaultConfig[k]);
}
const disableSSL = get('disableSSL') || false;
let customRootUri = get('customRootUri');
let externalSignerUrl = get('externalSignerUrl');
if (disableSSL !== true) {
if (customRootUri) {
customRootUri = forceSecureUrl(customRootUri);
}
if (externalSignerUrl) {
externalSignerUrl = forceSecureUrl(externalSignerUrl);
}
}
return {
port: get('port'),
bind: get('bind'),
ipc: get('ipc'),
env: get('env'),
debugNamespace: get('debugNamespace'),
keyPath: get('keyPath'),
crtPath: get('crtPath'),
sslKey: get('sslKey'),
sslCert: get('sslCert'),
logFile: get('logFile'),
disableSSL,
disableProxy: get('disableProxy'),
disableEnvCheck: get('disableEnvCheck'),
timeout: get('timeout'),
customRootUri: customRootUri || undefined,
customBitcoinNetwork: get('customBitcoinNetwork'),
authVersion: get('authVersion'),
externalSignerUrl,
signerMode: get('signerMode'),
signerFileSystemPath: get('signerFileSystemPath'),
lightningSignerFileSystemPath: get('lightningSignerFileSystemPath'),
keepAliveTimeout: get('keepAliveTimeout'),
headersTimeout: get('headersTimeout'),
};
}
const config = () => {
const arg = (0, exports.ArgConfig)((0, args_1.args)());
const env = (0, exports.EnvConfig)();
return mergeConfigs(env, arg);
};
exports.config = config;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtQ0FBeUM7QUFDekMseUJBQXVCO0FBRXZCLGlDQUE4QjtBQUU5QixTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxpQkFBaUI7SUFDNUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMvRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUI7SUFFRCxLQUFLLE1BQU0sZUFBZSxJQUFJLGlCQUFpQixFQUFFO1FBQy9DLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDOUMsT0FBTyxDQUFDLElBQUksQ0FDVixtREFBbUQsZUFBZSxzQkFBc0IsSUFBSSxpQ0FBaUMsQ0FDOUgsQ0FBQztZQUNGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNyQztLQUNGO0FBQ0gsQ0FBQztBQTRCTSxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBbUIsRUFBRSxDQUFDLENBQUM7SUFDbkQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0lBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO0lBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO0lBQ2IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO0lBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztJQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87SUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0lBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztJQUNy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UztRQUN6QyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsc0JBQXNCLENBQUM7UUFDakQsV0FBVyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDL0IsaUJBQWlCO1FBQ2pCLFVBQVUsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQzdCLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztRQUNqRCw2QkFBNkIsRUFBRSxHQUFHLENBQUMsK0JBQStCLENBQUM7UUFDbkUsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLGNBQWMsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUM7S0FDdEMsQ0FBQztBQUNKLENBQUM7QUFFTSxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7SUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBQSxpQkFBUyxFQUFDLElBQUEsV0FBSSxHQUFFLENBQUMsQ0FBQztJQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFBLGlCQUFTLEdBQUUsQ0FBQztJQUN4QixPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDO0FBSlcsUUFBQSxNQUFNLFVBSWpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnROYW1lLCBWMU5ldHdvcmsgfSBmcm9tICdiaXRnbyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkb3RlbnYvY29uZmlnJztcblxuaW1wb3J0IHsgYXJncyB9IGZyb20gJy4vYXJncyc7XG5cbmZ1bmN0aW9uIHJlYWRFbnZWYXIobmFtZSwgLi4uZGVwcmVjYXRlZEFsaWFzZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5lbnZbbmFtZV0gIT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudltuYW1lXSAhPT0gJycpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRlcHJlY2F0ZWRBbGlhcyBvZiBkZXByZWNhdGVkQWxpYXNlcykge1xuICAgIGlmIChwcm9jZXNzLmVudltkZXByZWNhdGVkQWxpYXNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYHdhcm5pbmc6IHVzaW5nIGRlcHJlY2F0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7ZGVwcmVjYXRlZEFsaWFzfScuIFBsZWFzZSB1c2UgdGhlICcke25hbWV9JyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbnN0ZWFkLmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnZbZGVwcmVjYXRlZEFsaWFzXTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICBwb3J0OiBudW1iZXI7XG4gIGJpbmQ6IHN0cmluZztcbiAgaXBjPzogc3RyaW5nO1xuICBlbnY6IEVudmlyb25tZW50TmFtZTtcbiAgZGVidWdOYW1lc3BhY2U6IHN0cmluZ1tdO1xuICBrZXlQYXRoPzogc3RyaW5nO1xuICBjcnRQYXRoPzogc3RyaW5nO1xuICBzc2xLZXk/OiBzdHJpbmc7XG4gIHNzbENlcnQ/OiBzdHJpbmc7XG4gIGxvZ0ZpbGU/OiBzdHJpbmc7XG4gIGRpc2FibGVTU0w6IGJvb2xlYW47XG4gIGRpc2FibGVQcm94eTogYm9vbGVhbjtcbiAgZGlzYWJsZUVudkNoZWNrOiBib29sZWFuO1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIGN1c3RvbVJvb3RVcmk/OiBzdHJpbmc7XG4gIGN1c3RvbUJpdGNvaW5OZXR3b3JrPzogVjFOZXR3b3JrO1xuICBhdXRoVmVyc2lvbjogbnVtYmVyO1xuICBleHRlcm5hbFNpZ25lclVybD86IHN0cmluZztcbiAgc2lnbmVyTW9kZT86IGJvb2xlYW47XG4gIHNpZ25lckZpbGVTeXN0ZW1QYXRoPzogc3RyaW5nO1xuICBsaWdodG5pbmdTaWduZXJGaWxlU3lzdGVtUGF0aD86IHN0cmluZztcbiAga2VlcEFsaXZlVGltZW91dD86IG51bWJlcjtcbiAgaGVhZGVyc1RpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBBcmdDb25maWcgPSAoYXJncyk6IFBhcnRpYWw8Q29uZmlnPiA9PiAoe1xuICBwb3J0OiBhcmdzLnBvcnQsXG4gIGJpbmQ6IGFyZ3MuYmluZCxcbiAgaXBjOiBhcmdzLmlwYyxcbiAgZW52OiBhcmdzLmVudixcbiAgZGVidWdOYW1lc3BhY2U6IGFyZ3MuZGVidWduYW1lc3BhY2UsXG4gIGtleVBhdGg6IGFyZ3Mua2V5cGF0aCxcbiAgY3J0UGF0aDogYXJncy5jcnRwYXRoLFxuICBzc2xLZXk6IGFyZ3Muc3Nsa2V5LFxuICBzc2xDZXJ0OiBhcmdzLnNzbGNlcnQsXG4gIGxvZ0ZpbGU6IGFyZ3MubG9nZmlsZSxcbiAgZGlzYWJsZVNTTDogYXJncy5kaXNhYmxlc3NsLFxuICBkaXNhYmxlUHJveHk6IGFyZ3MuZGlzYWJsZXByb3h5LFxuICBkaXNhYmxlRW52Q2hlY2s6IGFyZ3MuZGlzYWJsZWVudmNoZWNrLFxuICB0aW1lb3V0OiBhcmdzLnRpbWVvdXQsXG4gIGN1c3RvbVJvb3RVcmk6IGFyZ3MuY3VzdG9tcm9vdHVyaSxcbiAgY3VzdG9tQml0Y29pbk5ldHdvcms6IGFyZ3MuY3VzdG9tYml0Y29pbm5ldHdvcmssXG4gIGF1dGhWZXJzaW9uOiBhcmdzLmF1dGhWZXJzaW9uLFxuICBleHRlcm5hbFNpZ25lclVybDogYXJncy5leHRlcm5hbFNpZ25lclVybCxcbiAgc2lnbmVyTW9kZTogYXJncy5zaWduZXJNb2RlLFxuICBzaWduZXJGaWxlU3lzdGVtUGF0aDogYXJncy5zaWduZXJGaWxlU3lzdGVtUGF0aCxcbiAgbGlnaHRuaW5nU2lnbmVyRmlsZVN5c3RlbVBhdGg6IGFyZ3MubGlnaHRuaW5nU2lnbmVyRmlsZVN5c3RlbVBhdGgsXG4gIGtlZXBBbGl2ZVRpbWVvdXQ6IGFyZ3Mua2VlcGFsaXZldGltZW91dCxcbiAgaGVhZGVyc1RpbWVvdXQ6IGFyZ3MuaGVhZGVyc3RpbWVvdXQsXG59KTtcblxuZXhwb3J0IGNvbnN0IEVudkNvbmZpZyA9ICgpOiBQYXJ0aWFsPENvbmZpZz4gPT4gKHtcbiAgcG9ydDogTnVtYmVyKHJlYWRFbnZWYXIoJ0JJVEdPX1BPUlQnKSksXG4gIGJpbmQ6IHJlYWRFbnZWYXIoJ0JJVEdPX0JJTkQnKSxcbiAgaXBjOiByZWFkRW52VmFyKCdCSVRHT19JUEMnKSxcbiAgZW52OiByZWFkRW52VmFyKCdCSVRHT19FTlYnKSBhcyBFbnZpcm9ubWVudE5hbWUsXG4gIGRlYnVnTmFtZXNwYWNlOiAocmVhZEVudlZhcignQklUR09fREVCVUdfTkFNRVNQQUNFJykgfHwgJycpLnNwbGl0KCcsJyksXG4gIGtleVBhdGg6IHJlYWRFbnZWYXIoJ0JJVEdPX0tFWVBBVEgnKSxcbiAgY3J0UGF0aDogcmVhZEVudlZhcignQklUR09fQ1JUUEFUSCcpLFxuICBzc2xLZXk6IHJlYWRFbnZWYXIoJ0JJVEdPX1NTTF9LRVknKSxcbiAgc3NsQ2VydDogcmVhZEVudlZhcignQklUR09fU1NMX0NFUlQnKSxcbiAgbG9nRmlsZTogcmVhZEVudlZhcignQklUR09fTE9HRklMRScpLFxuICBkaXNhYmxlU1NMOiByZWFkRW52VmFyKCdCSVRHT19ESVNBQkxFX1NTTCcsICdCSVRHT19ESVNBQkxFU1NMJywgJ0RJU0FCTEVTU0wnLCAnRElTQUJMRV9TU0wnKSA/IHRydWUgOiB1bmRlZmluZWQsXG4gIGRpc2FibGVQcm94eTogcmVhZEVudlZhcignQklUR09fRElTQUJMRV9QUk9YWScsICdESVNBQkxFX1BST1hZJykgPyB0cnVlIDogdW5kZWZpbmVkLFxuICBkaXNhYmxlRW52Q2hlY2s6IHJlYWRFbnZWYXIoJ0JJVEdPX0RJU0FCTEVfRU5WX0NIRUNLJywgJ0RJU0FCTEVfRU5WX0NIRUNLJykgPyB0cnVlIDogdW5kZWZpbmVkLFxuICB0aW1lb3V0OiBOdW1iZXIocmVhZEVudlZhcignQklUR09fVElNRU9VVCcpKSxcbiAgY3VzdG9tUm9vdFVyaTogcmVhZEVudlZhcignQklUR09fQ1VTVE9NX1JPT1RfVVJJJyksXG4gIGN1c3RvbUJpdGNvaW5OZXR3b3JrOiByZWFkRW52VmFyKCdCSVRHT19DVVNUT01fQklUQ09JTl9ORVRXT1JLJykgYXMgVjFOZXR3b3JrLFxuICBhdXRoVmVyc2lvbjogTnVtYmVyKHJlYWRFbnZWYXIoJ0JJVEdPX0FVVEhfVkVSU0lPTicpKSxcbiAgZXh0ZXJuYWxTaWduZXJVcmw6IHJlYWRFbnZWYXIoJ0JJVEdPX0VYVEVSTkFMX1NJR05FUl9VUkwnKSxcbiAgc2lnbmVyTW9kZTogcmVhZEVudlZhcignQklUR09fU0lHTkVSX01PREUnKSA/IHRydWUgOiB1bmRlZmluZWQsXG4gIHNpZ25lckZpbGVTeXN0ZW1QYXRoOiByZWFkRW52VmFyKCdCSVRHT19TSUdORVJfRklMRV9TWVNURU1fUEFUSCcpLFxuICBsaWdodG5pbmdTaWduZXJGaWxlU3lzdGVtUGF0aDogcmVhZEVudlZhcignQklUR09fTElHSFROSU5HX1NJR05FUl9GSUxFX1NZU1RFTV9QQVRIJyksXG4gIGtlZXBBbGl2ZVRpbWVvdXQ6IE51bWJlcihyZWFkRW52VmFyKCdCSVRHT19LRUVQX0FMSVZFX1RJTUVPVVQnKSksXG4gIGhlYWRlcnNUaW1lb3V0OiBOdW1iZXIocmVhZEVudlZhcignQklUR09fSEVBREVSU19USU1FT1VUJykpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0Q29uZmlnOiBDb25maWcgPSB7XG4gIHBvcnQ6IDMwODAsXG4gIGJpbmQ6ICdsb2NhbGhvc3QnLFxuICBlbnY6ICd0ZXN0JyxcbiAgZGVidWdOYW1lc3BhY2U6IFtdLFxuICBsb2dGaWxlOiAnJyxcbiAgZGlzYWJsZVNTTDogZmFsc2UsXG4gIGRpc2FibGVQcm94eTogZmFsc2UsXG4gIC8vIEJHLTk1ODQ6IHRlbXBvcmFyaWx5IGRpc2FibGUgZW52IGNoZWNrIHdoaWxlIHdlIGdpdmUgdXNlcnMgdGltZSB0byByZWFjdCB0byBjaGFuZ2UgaW4gcnVudGltZSBiZWhhdmlvclxuICAvLyBUaGlzIHdpbGwgcmVxdWlyZSBhIG1ham9yIHZlcnNpb24gYnVtcCwgc2luY2UgdGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSB0byBkZWZhdWx0IGJlaGF2aW9yLlxuICBkaXNhYmxlRW52Q2hlY2s6IHRydWUsXG4gIHRpbWVvdXQ6IDMwNSAqIDEwMDAsXG4gIGF1dGhWZXJzaW9uOiAyLFxufTtcblxuLyoqXG4gKiBGb3JjZSBodHRwczovLyBwcmVmaXggdW5sZXNzIHNzbCBpcyBkaXNhYmxlZFxuICogQHBhcmFtIHVybFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9yY2VTZWN1cmVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoLyheXFx3Kzp8XilcXC9cXC8vKTtcbiAgaWYgKHJlZ2V4LnRlc3QodXJsKSkge1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvKF5cXHcrOnxeKVxcL1xcLy8sICdodHRwczovLycpO1xuICB9XG4gIHJldHVybiBgaHR0cHM6Ly8ke3VybH1gO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBtZXJnZSBjb25maWcgc291cmNlcyBpbnRvIGEgc2luZ2xlIGNvbmZpZyBvYmplY3QuXG4gKlxuICogTGF0ZXIgY29uZmlncyBoYXZlIGhpZ2hlciBwcmVjZWRlbmNlIG92ZXIgZWFybGllciBjb25maWdzLlxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3MoLi4uY29uZmlnczogUGFydGlhbDxDb25maWc+W10pOiBDb25maWcge1xuICBmdW5jdGlvbiBpc05pbE9yTmFOKHZhbDogdW5rbm93bik6IHZhbCBpcyBudWxsIHwgdW5kZWZpbmVkIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gaXNOaWwodmFsKSB8fCAoaXNOdW1iZXIodmFsKSAmJiBpc05hTih2YWwpKTtcbiAgfVxuXG4gIC8vIGhlbHBlciB0byBnZXQgdGhlIGxhc3QgZGVmaW5lZCB2YWx1ZSBmb3IgYSBnaXZlbiBjb25maWcga2V5XG4gIC8vIGZyb20gZWFjaCBvZiB0aGUgY29uZmlnIHNvdXJjZXMgaW4gYSB0eXBlIHNhZmUgbWFubmVyLlxuICBmdW5jdGlvbiBnZXQ8VCBleHRlbmRzIGtleW9mIENvbmZpZz4oazogVCk6IENvbmZpZ1tUXSB7XG4gICAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKFxuICAgICAgKGVudHJ5OiBDb25maWdbVF0sIGNvbmZpZykgPT4gKCFpc05pbE9yTmFOKGNvbmZpZ1trXSkgPyAoY29uZmlnW2tdIGFzIENvbmZpZ1tUXSkgOiBlbnRyeSksXG4gICAgICBEZWZhdWx0Q29uZmlnW2tdXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRpc2FibGVTU0wgPSBnZXQoJ2Rpc2FibGVTU0wnKSB8fCBmYWxzZTtcbiAgbGV0IGN1c3RvbVJvb3RVcmkgPSBnZXQoJ2N1c3RvbVJvb3RVcmknKTtcbiAgbGV0IGV4dGVybmFsU2lnbmVyVXJsID0gZ2V0KCdleHRlcm5hbFNpZ25lclVybCcpO1xuXG4gIGlmIChkaXNhYmxlU1NMICE9PSB0cnVlKSB7XG4gICAgaWYgKGN1c3RvbVJvb3RVcmkpIHtcbiAgICAgIGN1c3RvbVJvb3RVcmkgPSBmb3JjZVNlY3VyZVVybChjdXN0b21Sb290VXJpKTtcbiAgICB9XG4gICAgaWYgKGV4dGVybmFsU2lnbmVyVXJsKSB7XG4gICAgICBleHRlcm5hbFNpZ25lclVybCA9IGZvcmNlU2VjdXJlVXJsKGV4dGVybmFsU2lnbmVyVXJsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBvcnQ6IGdldCgncG9ydCcpLFxuICAgIGJpbmQ6IGdldCgnYmluZCcpLFxuICAgIGlwYzogZ2V0KCdpcGMnKSxcbiAgICBlbnY6IGdldCgnZW52JyksXG4gICAgZGVidWdOYW1lc3BhY2U6IGdldCgnZGVidWdOYW1lc3BhY2UnKSxcbiAgICBrZXlQYXRoOiBnZXQoJ2tleVBhdGgnKSxcbiAgICBjcnRQYXRoOiBnZXQoJ2NydFBhdGgnKSxcbiAgICBzc2xLZXk6IGdldCgnc3NsS2V5JyksXG4gICAgc3NsQ2VydDogZ2V0KCdzc2xDZXJ0JyksXG4gICAgbG9nRmlsZTogZ2V0KCdsb2dGaWxlJyksXG4gICAgZGlzYWJsZVNTTCxcbiAgICBkaXNhYmxlUHJveHk6IGdldCgnZGlzYWJsZVByb3h5JyksXG4gICAgZGlzYWJsZUVudkNoZWNrOiBnZXQoJ2Rpc2FibGVFbnZDaGVjaycpLFxuICAgIHRpbWVvdXQ6IGdldCgndGltZW91dCcpLFxuICAgIGN1c3RvbVJvb3RVcmk6IGN1c3RvbVJvb3RVcmkgfHwgdW5kZWZpbmVkLFxuICAgIGN1c3RvbUJpdGNvaW5OZXR3b3JrOiBnZXQoJ2N1c3RvbUJpdGNvaW5OZXR3b3JrJyksXG4gICAgYXV0aFZlcnNpb246IGdldCgnYXV0aFZlcnNpb24nKSxcbiAgICBleHRlcm5hbFNpZ25lclVybCxcbiAgICBzaWduZXJNb2RlOiBnZXQoJ3NpZ25lck1vZGUnKSxcbiAgICBzaWduZXJGaWxlU3lzdGVtUGF0aDogZ2V0KCdzaWduZXJGaWxlU3lzdGVtUGF0aCcpLFxuICAgIGxpZ2h0bmluZ1NpZ25lckZpbGVTeXN0ZW1QYXRoOiBnZXQoJ2xpZ2h0bmluZ1NpZ25lckZpbGVTeXN0ZW1QYXRoJyksXG4gICAga2VlcEFsaXZlVGltZW91dDogZ2V0KCdrZWVwQWxpdmVUaW1lb3V0JyksXG4gICAgaGVhZGVyc1RpbWVvdXQ6IGdldCgnaGVhZGVyc1RpbWVvdXQnKSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9ICgpID0+IHtcbiAgY29uc3QgYXJnID0gQXJnQ29uZmlnKGFyZ3MoKSk7XG4gIGNvbnN0IGVudiA9IEVudkNvbmZpZygpO1xuICByZXR1cm4gbWVyZ2VDb25maWdzKGVudiwgYXJnKTtcbn07XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!