UNPKG

jsforce

Version:

Salesforce API Library for JavaScript

878 lines (874 loc) 84.9 kB
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"; import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter"; import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"; import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each"; import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"; import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties"; import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property"; import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice"; import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from"; import _Symbol from "@babel/runtime-corejs3/core-js-stable/symbol"; import _getIteratorMethod from "@babel/runtime-corejs3/core-js/get-iterator-method"; import _Array$isArray from "@babel/runtime-corejs3/core-js-stable/array/is-array"; import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator"; import _classCallCheck from "@babel/runtime-corejs3/helpers/classCallCheck"; import _createClass from "@babel/runtime-corejs3/helpers/createClass"; import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty"; function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof _Symbol && _getIteratorMethod(r) || r["@@iterator"]; if (!t) { if (_Array$isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { var _context22; if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = _sliceInstanceProperty(_context22 = {}.toString.call(r)).call(_context22, 8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context20, _context21; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context20 = ownKeys(Object(t), !0)).call(_context20, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context21 = ownKeys(Object(t))).call(_context21, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } import "core-js/modules/es.error.cause.js"; import "core-js/modules/es.array.push.js"; import "core-js/modules/es.function.name.js"; import "core-js/modules/es.number.constructor.js"; import "core-js/modules/es.object.keys.js"; import "core-js/modules/es.object.to-string.js"; import "core-js/modules/es.regexp.exec.js"; import "core-js/modules/es.regexp.test.js"; import "core-js/modules/es.regexp.to-string.js"; import _startsWithInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/starts-with"; import _Promise from "@babel/runtime-corejs3/core-js-stable/promise"; import _reduceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reduce"; import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys"; import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat"; import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator"; /** * @file Command line interface for JSforce * @author Shinichi Tomita <shinichi.tomita@gmail.com> */ import http from 'http'; import url from 'url'; import crypto from 'crypto'; import _openUrl from 'open'; import { Command } from 'commander'; import inquirer from 'inquirer'; import request from '../request'; import base64url from 'base64url'; import Repl from './repl'; import jsforce, { Connection, OAuth2 } from '..'; import version from '../VERSION'; var registry = jsforce.registry; /** * */ export var Cli = /*#__PURE__*/function () { function Cli() { _classCallCheck(this, Cli); _defineProperty(this, "_repl", new Repl(this)); _defineProperty(this, "_conn", new Connection()); _defineProperty(this, "_connName", undefined); _defineProperty(this, "_outputEnabled", true); _defineProperty(this, "_defaultLoginUrl", undefined); } return _createClass(Cli, [{ key: "readCommand", value: /** * */ function readCommand() { return new Command().option('-u, --username [username]', 'Salesforce username').option('-p, --password [password]', 'Salesforce password (and security token, if available)').option('-c, --connection [connection]', 'Connection name stored in connection registry').option('-l, --loginUrl [loginUrl]', 'Salesforce login url').option('--sandbox', 'Login to Salesforce sandbox').option('-e, --evalScript [evalScript]', 'Script to evaluate').version(version).parse(process.argv); } }, { key: "start", value: function () { var _start = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() { var program; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: program = this.readCommand(); this._outputEnabled = !program.evalScript; _context.prev = 2; _context.next = 5; return this.connect(program); case 5: if (program.evalScript) { this._repl.start({ interactive: false, evalScript: program.evalScript }); } else { this._repl.start(); } _context.next = 12; break; case 8: _context.prev = 8; _context.t0 = _context["catch"](2); console.error(_context.t0); process.exit(); case 12: case "end": return _context.stop(); } }, _callee, this, [[2, 8]]); })); function start() { return _start.apply(this, arguments); } return start; }() }, { key: "getCurrentConnection", value: function getCurrentConnection() { return this._conn; } }, { key: "print", value: function print() { if (this._outputEnabled) { var _console; (_console = console).log.apply(_console, arguments); } } }, { key: "saveCurrentConnection", value: function saveCurrentConnection() { if (this._connName) { var conn = this._conn; var connName = this._connName; var connConfig = { oauth2: conn.oauth2 ? { clientId: conn.oauth2.clientId || undefined, clientSecret: conn.oauth2.clientSecret || undefined, redirectUri: conn.oauth2.redirectUri || undefined, loginUrl: conn.oauth2.loginUrl || undefined } : undefined, accessToken: conn.accessToken || undefined, instanceUrl: conn.instanceUrl || undefined, refreshToken: conn.refreshToken || undefined }; registry.saveConnectionConfig(connName, connConfig); } } }, { key: "setLoginServer", value: function setLoginServer(loginServer) { if (!loginServer) { return; } if (loginServer === 'production') { this._defaultLoginUrl = 'https://login.salesforce.com'; } else if (loginServer === 'sandbox') { this._defaultLoginUrl = 'https://test.salesforce.com'; } else if (!_startsWithInstanceProperty(loginServer).call(loginServer, 'https://')) { this._defaultLoginUrl = 'https://' + loginServer; } else { this._defaultLoginUrl = loginServer; } this.print("Using \"".concat(this._defaultLoginUrl, "\" as default login URL.")); } /** * */ }, { key: "connect", value: (function () { var _connect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(options) { var _this = this; var loginServer, connConfig, username, password, identity; return _regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: loginServer = options.loginUrl ? options.loginUrl : options.sandbox ? 'sandbox' : null; this.setLoginServer(loginServer); this._connName = options.connection; _context2.next = 5; return registry.getConnectionConfig(options.connection); case 5: connConfig = _context2.sent; username = options.username; if (!connConfig) { connConfig = {}; if (this._defaultLoginUrl) { connConfig.loginUrl = this._defaultLoginUrl; } username = username || options.connection; } this._conn = new Connection(connConfig); password = options.password; if (!username) { _context2.next = 16; break; } _context2.next = 13; return this.startPasswordAuth(username, password); case 13: this.saveCurrentConnection(); _context2.next = 34; break; case 16: if (!(this._connName && this._conn.accessToken)) { _context2.next = 34; break; } this._conn.on('refresh', function () { _this.print('Refreshing access token ... '); _this.saveCurrentConnection(); }); _context2.prev = 18; _context2.next = 21; return this._conn.identity(); case 21: identity = _context2.sent; this.print("Logged in as : ".concat(identity.username)); _context2.next = 34; break; case 25: _context2.prev = 25; _context2.t0 = _context2["catch"](18); if (_context2.t0 instanceof Error) { this.print(_context2.t0.message); } if (!this._conn.oauth2) { _context2.next = 32; break; } throw new Error('Please re-authorize connection.'); case 32: _context2.next = 34; return this.startPasswordAuth(this._connName); case 34: case "end": return _context2.stop(); } }, _callee2, this, [[18, 25]]); })); function connect(_x) { return _connect.apply(this, arguments); } return connect; }() /** * */ ) }, { key: "startPasswordAuth", value: (function () { var _startPasswordAuth = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(username, password) { return _regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _context3.prev = 0; _context3.next = 3; return this.loginByPassword(username, password, 2); case 3: _context3.next = 12; break; case 5: _context3.prev = 5; _context3.t0 = _context3["catch"](0); if (!(_context3.t0 instanceof Error && _context3.t0.message === 'canceled')) { _context3.next = 11; break; } console.error('Password authentication canceled: Not logged in'); _context3.next = 12; break; case 11: throw _context3.t0; case 12: case "end": return _context3.stop(); } }, _callee3, this, [[0, 5]]); })); function startPasswordAuth(_x2, _x3) { return _startPasswordAuth.apply(this, arguments); } return startPasswordAuth; }() /** * */ ) }, { key: "loginByPassword", value: (function () { var _loginByPassword = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(username, password, retryCount) { var pass, result; return _regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: if (!(password === '')) { _context4.next = 2; break; } throw new Error('canceled'); case 2: if (!(password == null)) { _context4.next = 7; break; } _context4.next = 5; return this.promptPassword('Password: '); case 5: pass = _context4.sent; return _context4.abrupt("return", this.loginByPassword(username, pass, retryCount)); case 7: _context4.prev = 7; _context4.next = 10; return this._conn.login(username, password); case 10: result = _context4.sent; this.print("Logged in as : ".concat(username)); return _context4.abrupt("return", result); case 15: _context4.prev = 15; _context4.t0 = _context4["catch"](7); if (_context4.t0 instanceof Error) { console.error(_context4.t0.message); } if (!(retryCount > 0)) { _context4.next = 22; break; } return _context4.abrupt("return", this.loginByPassword(username, undefined, retryCount - 1)); case 22: throw new Error('canceled'); case 23: case "end": return _context4.stop(); } }, _callee4, this, [[7, 15]]); })); function loginByPassword(_x4, _x5, _x6) { return _loginByPassword.apply(this, arguments); } return loginByPassword; }() /** * */ ) }, { key: "disconnect", value: (function () { var _disconnect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(connName) { var name; return _regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: name = connName || this._connName; _context5.t0 = name; if (!_context5.t0) { _context5.next = 6; break; } _context5.next = 5; return registry.getConnectionConfig(name); case 5: _context5.t0 = _context5.sent; case 6: if (!_context5.t0) { _context5.next = 10; break; } _context5.next = 9; return registry.removeConnectionConfig(name); case 9: this.print("Disconnect connection '".concat(name, "'")); case 10: this._connName = undefined; this._conn = new Connection(); case 12: case "end": return _context5.stop(); } }, _callee5, this); })); function disconnect(_x7) { return _disconnect.apply(this, arguments); } return disconnect; }() /** * */ ) }, { key: "authorize", value: (function () { var _authorize = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(clientName) { var name, oauth2Config, oauth2, verifier, challenge, state, authzUrl, params, identity; return _regeneratorRuntime.wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: name = clientName || 'default'; _context6.next = 3; return registry.getClientConfig(name); case 3: oauth2Config = _context6.sent; if (oauth2Config !== null && oauth2Config !== void 0 && oauth2Config.clientId) { _context6.next = 9; break; } if (!(name === 'default' || name === 'sandbox')) { _context6.next = 8; break; } this.print('No client information registered. Downloading JSforce default client information...'); return _context6.abrupt("return", this.downloadDefaultClientInfo(name)); case 8: throw new Error("No OAuth2 client information registered : '".concat(name, "'. Please register client info first.")); case 9: oauth2 = new OAuth2(oauth2Config); verifier = base64url.encode(crypto.randomBytes(32)); challenge = base64url.encode(crypto.createHash('sha256').update(verifier).digest()); state = base64url.encode(crypto.randomBytes(32)); authzUrl = oauth2.getAuthorizationUrl({ code_challenge: challenge, state: state }); this.print('Opening authorization page in browser...'); this.print("URL: ".concat(authzUrl)); this.openUrl(authzUrl); _context6.next = 19; return this.waitCallback(oauth2Config.redirectUri, state); case 19: params = _context6.sent; if (params.code) { _context6.next = 22; break; } throw new Error('No authorization code returned.'); case 22: if (!(params.state !== state)) { _context6.next = 24; break; } throw new Error('Invalid state parameter returned.'); case 24: this._conn = new Connection({ oauth2: oauth2 }); this.print('Received authorization code. Please close the opened browser window.'); _context6.next = 28; return this._conn.authorize(params.code, { code_verifier: verifier }); case 28: this.print('Authorized. Fetching user info...'); _context6.next = 31; return this._conn.identity(); case 31: identity = _context6.sent; this.print("Logged in as : ".concat(identity.username)); this._connName = identity.username; this.saveCurrentConnection(); case 35: case "end": return _context6.stop(); } }, _callee6, this); })); function authorize(_x8) { return _authorize.apply(this, arguments); } return authorize; }() /** * */ ) }, { key: "downloadDefaultClientInfo", value: (function () { var _downloadDefaultClientInfo = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(clientName) { var configUrl, res, clientConfig; return _regeneratorRuntime.wrap(function _callee7$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: configUrl = 'https://jsforce.github.io/client-config/default.json'; _context7.next = 3; return new _Promise(function (resolve, reject) { request({ method: 'GET', url: configUrl }).on('complete', resolve).on('error', reject); }); case 3: res = _context7.sent; clientConfig = JSON.parse(res.body); if (clientName === 'sandbox') { clientConfig.loginUrl = 'https://test.salesforce.com'; } _context7.next = 8; return registry.registerClientConfig(clientName, clientConfig); case 8: this.print('Client information downloaded successfully.'); return _context7.abrupt("return", this.authorize(clientName)); case 10: case "end": return _context7.stop(); } }, _callee7, this); })); function downloadDefaultClientInfo(_x9) { return _downloadDefaultClientInfo.apply(this, arguments); } return downloadDefaultClientInfo; }()) }, { key: "waitCallback", value: function () { var _waitCallback = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee8(serverUrl, state) { var code; return _regeneratorRuntime.wrap(function _callee8$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: if (!(serverUrl && _startsWithInstanceProperty(serverUrl).call(serverUrl, 'http://localhost:'))) { _context8.next = 4; break; } return _context8.abrupt("return", new _Promise(function (resolve, reject) { var server = http.createServer(function (req, res) { if (!req.url) { return; } var qparams = url.parse(req.url, true).query; res.writeHead(200, { 'Content-Type': 'text/html' }); res.write('<html><script>location.href="about:blank";</script></html>'); res.end(); if (qparams.error) { reject(new Error(qparams.error)); } else { resolve(qparams); } server.close(); req.connection.end(); req.connection.destroy(); }); var port = Number(url.parse(serverUrl).port); server.listen(port, 'localhost'); })); case 4: _context8.next = 6; return this.promptMessage('Copy & paste authz code passed in redirected URL: '); case 6: code = _context8.sent; return _context8.abrupt("return", { code: decodeURIComponent(code), state: state }); case 8: case "end": return _context8.stop(); } }, _callee8, this); })); function waitCallback(_x10, _x11) { return _waitCallback.apply(this, arguments); } return waitCallback; }() /** * */ }, { key: "register", value: (function () { var _register = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee10(clientName, clientConfig) { var _context9, _this2 = this; var name, prompts, registered, msg, ok; return _regeneratorRuntime.wrap(function _callee10$(_context11) { while (1) switch (_context11.prev = _context11.next) { case 0: name = clientName || 'default'; prompts = { clientId: 'Input client ID : ', clientSecret: 'Input client secret (optional) : ', redirectUri: 'Input redirect URI : ', loginUrl: 'Input login URL (default is https://login.salesforce.com) : ' }; _context11.next = 4; return registry.getClientConfig(name); case 4: registered = _context11.sent; if (!registered) { _context11.next = 12; break; } msg = "Client '".concat(name, "' is already registered. Are you sure you want to override ? [yN] : "); _context11.next = 9; return this.promptConfirm(msg); case 9: ok = _context11.sent; if (ok) { _context11.next = 12; break; } throw new Error('Registration canceled.'); case 12: _context11.next = 14; return _reduceInstanceProperty(_context9 = _Object$keys(prompts)).call(_context9, /*#__PURE__*/function () { var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee9(promise, name) { var cconfig, promptName, message, value; return _regeneratorRuntime.wrap(function _callee9$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: _context10.next = 2; return promise; case 2: cconfig = _context10.sent; promptName = name; message = prompts[promptName]; if (cconfig[promptName]) { _context10.next = 11; break; } _context10.next = 8; return _this2.promptMessage(message); case 8: value = _context10.sent; if (!value) { _context10.next = 11; break; } return _context10.abrupt("return", _objectSpread(_objectSpread({}, cconfig), {}, _defineProperty({}, promptName, value))); case 11: return _context10.abrupt("return", cconfig); case 12: case "end": return _context10.stop(); } }, _callee9); })); return function (_x14, _x15) { return _ref.apply(this, arguments); }; }(), _Promise.resolve(clientConfig)); case 14: clientConfig = _context11.sent; _context11.next = 17; return registry.registerClientConfig(name, clientConfig); case 17: this.print('Client registered successfully.'); case 18: case "end": return _context11.stop(); } }, _callee10, this); })); function register(_x12, _x13) { return _register.apply(this, arguments); } return register; }() /** * */ ) }, { key: "listConnections", value: (function () { var _listConnections = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee11() { var names, _iterator, _step, name; return _regeneratorRuntime.wrap(function _callee11$(_context12) { while (1) switch (_context12.prev = _context12.next) { case 0: _context12.next = 2; return registry.getConnectionNames(); case 2: names = _context12.sent; _iterator = _createForOfIteratorHelper(names); try { for (_iterator.s(); !(_step = _iterator.n()).done;) { name = _step.value; this.print((name === this._connName ? '* ' : ' ') + name); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } case 5: case "end": return _context12.stop(); } }, _callee11, this); })); function listConnections() { return _listConnections.apply(this, arguments); } return listConnections; }() /** * */ ) }, { key: "getConnectionNames", value: (function () { var _getConnectionNames = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee12() { return _regeneratorRuntime.wrap(function _callee12$(_context13) { while (1) switch (_context13.prev = _context13.next) { case 0: return _context13.abrupt("return", registry.getConnectionNames()); case 1: case "end": return _context13.stop(); } }, _callee12); })); function getConnectionNames() { return _getConnectionNames.apply(this, arguments); } return getConnectionNames; }() /** * */ ) }, { key: "getClientNames", value: (function () { var _getClientNames = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee13() { return _regeneratorRuntime.wrap(function _callee13$(_context14) { while (1) switch (_context14.prev = _context14.next) { case 0: return _context14.abrupt("return", registry.getClientNames()); case 1: case "end": return _context14.stop(); } }, _callee13); })); function getClientNames() { return _getClientNames.apply(this, arguments); } return getClientNames; }() /** * */ ) }, { key: "prompt", value: (function () { var _prompt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee14(type, message) { var answer; return _regeneratorRuntime.wrap(function _callee14$(_context15) { while (1) switch (_context15.prev = _context15.next) { case 0: this._repl.pause(); _context15.next = 3; return inquirer.prompt([{ type: type, name: 'value', message: message }]); case 3: answer = _context15.sent; this._repl.resume(); return _context15.abrupt("return", answer.value); case 6: case "end": return _context15.stop(); } }, _callee14, this); })); function prompt(_x16, _x17) { return _prompt.apply(this, arguments); } return prompt; }() /** * */ ) }, { key: "promptMessage", value: (function () { var _promptMessage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee15(message) { return _regeneratorRuntime.wrap(function _callee15$(_context16) { while (1) switch (_context16.prev = _context16.next) { case 0: return _context16.abrupt("return", this.prompt('input', message)); case 1: case "end": return _context16.stop(); } }, _callee15, this); })); function promptMessage(_x18) { return _promptMessage.apply(this, arguments); } return promptMessage; }()) }, { key: "promptPassword", value: function () { var _promptPassword = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee16(message) { return _regeneratorRuntime.wrap(function _callee16$(_context17) { while (1) switch (_context17.prev = _context17.next) { case 0: return _context17.abrupt("return", this.prompt('password', message)); case 1: case "end": return _context17.stop(); } }, _callee16, this); })); function promptPassword(_x19) { return _promptPassword.apply(this, arguments); } return promptPassword; }() /** * */ }, { key: "promptConfirm", value: (function () { var _promptConfirm = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee17(message) { return _regeneratorRuntime.wrap(function _callee17$(_context18) { while (1) switch (_context18.prev = _context18.next) { case 0: return _context18.abrupt("return", this.prompt('confirm', message)); case 1: case "end": return _context18.stop(); } }, _callee17, this); })); function promptConfirm(_x20) { return _promptConfirm.apply(this, arguments); } return promptConfirm; }() /** * */ ) }, { key: "openUrl", value: function openUrl(url) { _openUrl(url); } /** * */ }, { key: "openUrlUsingSession", value: function openUrlUsingSession(url) { var _context19; var frontdoorUrl = _concatInstanceProperty(_context19 = "".concat(this._conn.instanceUrl, "/secur/frontdoor.jsp?sid=")).call(_context19, this._conn.accessToken); if (url) { frontdoorUrl += '&retURL=' + encodeURIComponent(url); } this.openUrl(frontdoorUrl); } }]); }(); /* ------------------------------------------------------------------------- */ var cli = new Cli(); export default cli; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwIiwidXJsIiwiY3J5cHRvIiwib3BlblVybCIsIkNvbW1hbmQiLCJpbnF1aXJlciIsInJlcXVlc3QiLCJiYXNlNjR1cmwiLCJSZXBsIiwianNmb3JjZSIsIkNvbm5lY3Rpb24iLCJPQXV0aDIiLCJ2ZXJzaW9uIiwicmVnaXN0cnkiLCJDbGkiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJ1bmRlZmluZWQiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJ2YWx1ZSIsInJlYWRDb21tYW5kIiwib3B0aW9uIiwicGFyc2UiLCJwcm9jZXNzIiwiYXJndiIsIl9zdGFydCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicHJvZ3JhbSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfb3V0cHV0RW5hYmxlZCIsImV2YWxTY3JpcHQiLCJjb25uZWN0IiwiX3JlcGwiLCJzdGFydCIsImludGVyYWN0aXZlIiwidDAiLCJjb25zb2xlIiwiZXJyb3IiLCJleGl0Iiwic3RvcCIsImFwcGx5IiwiYXJndW1lbnRzIiwiZ2V0Q3VycmVudENvbm5lY3Rpb24iLCJfY29ubiIsInByaW50IiwiX2NvbnNvbGUiLCJsb2ciLCJzYXZlQ3VycmVudENvbm5lY3Rpb24iLCJfY29ubk5hbWUiLCJjb25uIiwiY29ubk5hbWUiLCJjb25uQ29uZmlnIiwib2F1dGgyIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJyZWRpcmVjdFVyaSIsImxvZ2luVXJsIiwiYWNjZXNzVG9rZW4iLCJpbnN0YW5jZVVybCIsInJlZnJlc2hUb2tlbiIsInNhdmVDb25uZWN0aW9uQ29uZmlnIiwic2V0TG9naW5TZXJ2ZXIiLCJsb2dpblNlcnZlciIsIl9kZWZhdWx0TG9naW5VcmwiLCJfc3RhcnRzV2l0aEluc3RhbmNlUHJvcGVydHkiLCJjYWxsIiwiY29uY2F0IiwiX2Nvbm5lY3QiLCJfY2FsbGVlMiIsIm9wdGlvbnMiLCJfdGhpcyIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJpZGVudGl0eSIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInNhbmRib3giLCJjb25uZWN0aW9uIiwiZ2V0Q29ubmVjdGlvbkNvbmZpZyIsInNlbnQiLCJzdGFydFBhc3N3b3JkQXV0aCIsIm9uIiwiRXJyb3IiLCJtZXNzYWdlIiwiX3giLCJfc3RhcnRQYXNzd29yZEF1dGgiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImxvZ2luQnlQYXNzd29yZCIsIl94MiIsIl94MyIsIl9sb2dpbkJ5UGFzc3dvcmQiLCJfY2FsbGVlNCIsInJldHJ5Q291bnQiLCJwYXNzIiwicmVzdWx0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwicHJvbXB0UGFzc3dvcmQiLCJhYnJ1cHQiLCJsb2dpbiIsIl94NCIsIl94NSIsIl94NiIsIl9kaXNjb25uZWN0IiwiX2NhbGxlZTUiLCJuYW1lIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwicmVtb3ZlQ29ubmVjdGlvbkNvbmZpZyIsImRpc2Nvbm5lY3QiLCJfeDciLCJfYXV0aG9yaXplIiwiX2NhbGxlZTYiLCJjbGllbnROYW1lIiwib2F1dGgyQ29uZmlnIiwidmVyaWZpZXIiLCJjaGFsbGVuZ2UiLCJzdGF0ZSIsImF1dGh6VXJsIiwicGFyYW1zIiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiZ2V0Q2xpZW50Q29uZmlnIiwiZG93bmxvYWREZWZhdWx0Q2xpZW50SW5mbyIsImVuY29kZSIsInJhbmRvbUJ5dGVzIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsImdldEF1dGhvcml6YXRpb25VcmwiLCJjb2RlX2NoYWxsZW5nZSIsIndhaXRDYWxsYmFjayIsImNvZGUiLCJhdXRob3JpemUiLCJjb2RlX3ZlcmlmaWVyIiwiX3g4IiwiX2Rvd25sb2FkRGVmYXVsdENsaWVudEluZm8iLCJfY2FsbGVlNyIsImNvbmZpZ1VybCIsInJlcyIsImNsaWVudENvbmZpZyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsIl9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm1ldGhvZCIsIkpTT04iLCJib2R5IiwicmVnaXN0ZXJDbGllbnRDb25maWciLCJfeDkiLCJfd2FpdENhbGxiYWNrIiwiX2NhbGxlZTgiLCJzZXJ2ZXJVcmwiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJzZXJ2ZXIiLCJjcmVhdGVTZXJ2ZXIiLCJyZXEiLCJxcGFyYW1zIiwicXVlcnkiLCJ3cml0ZUhlYWQiLCJ3cml0ZSIsImVuZCIsImNsb3NlIiwiZGVzdHJveSIsInBvcnQiLCJOdW1iZXIiLCJsaXN0ZW4iLCJwcm9tcHRNZXNzYWdlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiX3gxMCIsIl94MTEiLCJfcmVnaXN0ZXIiLCJfY2FsbGVlMTAiLCJfY29udGV4dDkiLCJfdGhpczIiLCJwcm9tcHRzIiwicmVnaXN0ZXJlZCIsIm1zZyIsIm9rIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTEiLCJwcm9tcHRDb25maXJtIiwiX3JlZHVjZUluc3RhbmNlUHJvcGVydHkiLCJfT2JqZWN0JGtleXMiLCJfcmVmIiwiX2NhbGxlZTkiLCJwcm9taXNlIiwiY2NvbmZpZyIsInByb21wdE5hbWUiLCJfY2FsbGVlOSQiLCJfY29udGV4dDEwIiwiX29iamVjdFNwcmVhZCIsIl94MTQiLCJfeDE1IiwicmVnaXN0ZXIiLCJfeDEyIiwiX3gxMyIsIl9saXN0Q29ubmVjdGlvbnMiLCJfY2FsbGVlMTEiLCJuYW1lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTIiLCJnZXRDb25uZWN0aW9uTmFtZXMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwiZG9uZSIsImVyciIsImUiLCJmIiwibGlzdENvbm5lY3Rpb25zIiwiX2dldENvbm5lY3Rpb25OYW1lcyIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEzIiwiX2dldENsaWVudE5hbWVzIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTQiLCJnZXRDbGllbnROYW1lcyIsIl9wcm9tcHQiLCJfY2FsbGVlMTQiLCJ0eXBlIiwiYW5zd2VyIiwiX2NhbGxlZTE0JCIsIl9jb250ZXh0MTUiLCJwYXVzZSIsInByb21wdCIsInJlc3VtZSIsIl94MTYiLCJfeDE3IiwiX3Byb21wdE1lc3NhZ2UiLCJfY2FsbGVlMTUiLCJfY2FsbGVlMTUkIiwiX2NvbnRleHQxNiIsIl94MTgiLCJfcHJvbXB0UGFzc3dvcmQiLCJfY2FsbGVlMTYiLCJfY2FsbGVlMTYkIiwiX2NvbnRleHQxNyIsIl94MTkiLCJfcHJvbXB0Q29uZmlybSIsIl9jYWxsZWUxNyIsIl9jYWxsZWUxNyQiLCJfY29udGV4dDE4IiwiX3gyMCIsIm9wZW5VcmxVc2luZ1Nlc3Npb24iLCJfY29udGV4dDE5IiwiZnJvbnRkb29yVXJsIiwiX2NvbmNhdEluc3RhbmNlUHJvcGVydHkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjbGkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlIENvbW1hbmQgbGluZSBpbnRlcmZhY2UgZm9yIEpTZm9yY2VcbiAqIEBhdXRob3IgU2hpbmljaGkgVG9taXRhIDxzaGluaWNoaS50b21pdGFAZ21haWwuY29tPlxuICovXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBvcGVuVXJsIGZyb20gJ29wZW4nO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgYmFzZTY0dXJsIGZyb20gJ2Jhc2U2NHVybCc7XG5pbXBvcnQgUmVwbCBmcm9tICcuL3JlcGwnO1xuaW1wb3J0IGpzZm9yY2UsIHsgQ29ubmVjdGlvbiwgT0F1dGgyIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHZlcnNpb24gZnJvbSAnLi4vVkVSU0lPTic7XG5pbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IENsaWVudENvbmZpZyB9IGZyb20gJy4uL3JlZ2lzdHJ5L3R5cGVzJztcblxuY29uc3QgcmVnaXN0cnkgPSBqc2ZvcmNlLnJlZ2lzdHJ5O1xuXG50eXBlIENsaUNvbW1hbmQgPSB7XG4gIGNvbm5lY3Rpb24/OiBzdHJpbmc7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgbG9naW5Vcmw/OiBzdHJpbmc7XG4gIHNhbmRib3g/OiBib29sZWFuO1xuICBldmFsU2NyaXB0Pzogc3RyaW5nO1xufSAmIENvbW1hbmRcblxuLyoqXG4gKlxuICovXG5leHBvcnQgY2xhc3MgQ2xpIHtcbiAgX3JlcGw6IFJlcGwgPSBuZXcgUmVwbCh0aGlzKTtcbiAgX2Nvbm46IENvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbigpO1xuICBfY29ubk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgX291dHB1dEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBfZGVmYXVsdExvZ2luVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICByZWFkQ29tbWFuZCgpOiBDbGlDb21tYW5kIHtcbiAgICByZXR1cm4gbmV3IENvbW1hbmQoKVxuICAgICAgLm9wdGlvbignLXUsIC0tdXNlcm5hbWUgW3VzZXJuYW1lXScsICdTYWxlc2ZvcmNlIHVzZXJuYW1lJylcbiAgICAgIC5vcHRpb24oXG4gICAgICAgICctcCwgLS1wYXNzd29yZCBbcGFzc3dvcmRdJyxcbiAgICAgICAgJ1NhbGVzZm9yY2UgcGFzc3dvcmQgKGFuZCBzZWN1cml0eSB0b2tlbiwgaWYgYXZhaWxhYmxlKScsXG4gICAgICApXG4gICAgICAub3B0aW9uKFxuICAgICAgICAnLWMsIC0tY29ubmVjdGlvbiBbY29ubmVjdGlvbl0nLFxuICAgICAgICAnQ29ubmVjdGlvbiBuYW1lIHN0b3JlZCBpbiBjb25uZWN0aW9uIHJlZ2lzdHJ5JyxcbiAgICAgIClcbiAgICAgIC5vcHRpb24oJy1sLCAtLWxvZ2luVXJsIFtsb2dpblVybF0nLCAnU2FsZXNmb3JjZSBsb2dpbiB1cmwnKVxuICAgICAgLm9wdGlvbignLS1zYW5kYm94JywgJ0xvZ2luIHRvIFNhbGVzZm9yY2Ugc2FuZGJveCcpXG4gICAgICAub3B0aW9uKCctZSwgLS1ldmFsU2NyaXB0IFtldmFsU2NyaXB0XScsICdTY3JpcHQgdG8gZXZhbHVhdGUnKVxuICAgICAgLnZlcnNpb24odmVyc2lvbilcbiAgICAgIC5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMucmVhZENvbW1hbmQoKTtcbiAgICB0aGlzLl9vdXRwdXRFbmFibGVkID0gIXByb2dyYW0uZXZhbFNjcmlwdDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0KHByb2dyYW0pO1xuICAgICAgaWYgKHByb2dyYW0uZXZhbFNjcmlwdCkge1xuICAgICAgICB0aGlzLl9yZXBsLnN0YXJ0KHtcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgZXZhbFNjcmlwdDogcHJvZ3JhbS5ldmFsU2NyaXB0LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3JlcGwuc3RhcnQoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEN1cnJlbnRDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uO1xuICB9XG5cbiAgcHJpbnQoLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAodGhpcy5fb3V0cHV0RW5hYmxlZCkge1xuICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUN1cnJlbnRDb25uZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jb25uTmFtZSkge1xuICAgICAgY29uc3QgY29ubiA9IHRoaXMuX2Nvbm47XG4gICAgICBjb25zdCBjb25uTmFtZSA9IHRoaXMuX2Nvbm5OYW1lO1xuICAgICAgY29uc3QgY29ubkNvbmZpZyA9IHtcbiAgICAgICAgb2F1dGgyOiBjb25uLm9hdXRoMlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjbGllbnRJZDogY29ubi5vYXV0aDIuY2xpZW50SWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBjbGllbnRTZWNyZXQ6IGNvbm4ub2F1dGgyLmNsaWVudFNlY3JldCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHJlZGlyZWN0VXJpOiBjb25uLm9hdXRoMi5yZWRpcmVjdFVyaSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGxvZ2luVXJsOiBjb25uLm9hdXRoMi5sb2dpblVybCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFjY2Vzc1Rva2VuOiBjb25uLmFjY2Vzc1Rva2VuIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgaW5zdGFuY2VVcmw6IGNvbm4uaW5zdGFuY2VVcmwgfHwgdW5kZWZpbmVkLFxuICAgICAgICByZWZyZXNoVG9rZW46IGNvbm4ucmVmcmVzaFRva2VuIHx8IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICByZWdpc3RyeS5zYXZlQ29ubmVjdGlvbkNvbmZpZyhjb25uTmFtZSwgY29ubkNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TG9naW5TZXJ2ZXIobG9naW5TZXJ2ZXI6IE9wdGlvbmFsPHN0cmluZz4pIHtcbiAgICBpZiAoIWxvZ2luU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChsb2dpblNlcnZlciA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0TG9naW5VcmwgPSAnaHR0cHM6Ly9sb2dpbi5zYWxlc2ZvcmNlLmNvbSc7XG4gICAgfSBlbHNlIGlmIChsb2dpblNlcnZlciA9PT0gJ3NhbmRib3gnKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0TG9naW5VcmwgPSAnaHR0cHM6Ly90ZXN0LnNhbGVzZm9yY2UuY29tJztcbiAgICB9IGVsc2UgaWYgKCFsb2dpblNlcnZlci5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0TG9naW5VcmwgPSAnaHR0cHM6Ly8nICsgbG9naW5TZXJ2ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRMb2dpblVybCA9IGxvZ2luU2VydmVyO1xuICAgIH1cbiAgICB0aGlzLnByaW50KGBVc2luZyBcIiR7dGhpcy5fZGVmYXVsdExvZ2luVXJsfVwiIGFzIGRlZmF1bHQgbG9naW4gVVJMLmApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBhc3luYyBjb25uZWN0KG9wdGlvbnM6IHtcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICBjb25uZWN0aW9uPzogc3RyaW5nO1xuICAgIGxvZ2luVXJsPzogc3RyaW5nO1xuICAgIHNhbmRib3g/OiBib29sZWFuO1xuICB9KSB7XG4gICAgY29uc3QgbG9naW5TZXJ2ZXIgPSBvcHRpb25zLmxvZ2luVXJsXG4gICAgICA/IG9wdGlvbnMubG9naW5VcmxcbiAgICAgIDogb3B0aW9ucy5zYW5kYm94XG4gICAgICA/ICdzYW5kYm94J1xuICAgICAgOiBudWxsO1xuICAgIHRoaXMuc2V0TG9naW5TZXJ2ZXIobG9naW5TZXJ2ZXIpO1xuICAgIHRoaXMuX2Nvbm5OYW1lID0gb3B0aW9ucy5jb25uZWN0aW9uO1xuICAgIGxldCBjb25uQ29uZmlnID0gYXdhaXQgcmVnaXN0cnkuZ2V0Q29ubmVjdGlvbkNvbmZpZyhvcHRpb25zLmNvbm5lY3Rpb24pO1xuICAgIGxldCB1c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWU7XG4gICAgaWYgKCFjb25uQ29uZmlnKSB7XG4gICAgICBjb25uQ29uZmlnID0ge307XG4gICAgICBpZiAodGhpcy5fZGVmYXVsdExvZ2luVXJsKSB7XG4gICAgICAgIGNvbm5Db25maWcubG9naW5VcmwgPSB0aGlzLl9kZWZhdWx0TG9naW5Vcmw7XG4gICAgICB9XG4gICAgICB1c2VybmFtZSA9IHVzZXJuYW1lIHx8IG9wdGlvbnMuY29ubmVjdGlvbjtcbiAgICB9XG4gICAgdGhpcy5fY29ubiA9IG5ldyBDb25uZWN0aW9uKGNvbm5Db25maWcpO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZDtcbiAgICBpZiAodXNlcm5hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRQYXNzd29yZEF1dGgodXNlcm5hbWUsIHBhc3N3b3JkKTtcbiAgICAgIHRoaXMuc2F2ZUN1cnJlbnRDb25uZWN0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9jb25uTmFtZSAmJiB0aGlzLl9jb25uLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHRoaXMuX2Nvbm4ub24oJ3JlZnJlc2gnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcmludCgnUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gLi4uICcpO1xuICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRDb25uZWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgdGhpcy5fY29ubi5pZGVudGl0eSgpO1xuICAgICAgICAgIHRoaXMucHJpbnQoYExvZ2dlZCBpbiBhcyA6ICR7aWRlbnRpdHkudXNlcm5hbWV9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5wcmludChlcnIubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9jb25uLm9hdXRoMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcmUtYXV0aG9yaXplIGNvbm5lY3Rpb24uJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRQYXNzd29yZEF1dGgodGhpcy5fY29ubk5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgYXN5bmMgc3RhcnRQYXNzd29yZEF1dGgodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2dpbkJ5UGFzc3dvcmQodXNlcm5hbWUsIHBhc3N3b3JkLCAyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA9PT0gJ2NhbmNlbGVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQYXNzd29yZCBhdXRoZW50aWNhdGlvbiBjYW5jZWxlZDogTm90IGxvZ2dlZCBpbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgYXN5bmMgbG9naW5CeVBhc3N3b3JkKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZXRyeUNvdW50OiBudW1iZXIsXG4gICk6IFByb21pc2U8eyBpZDogc3RyaW5nIH0+IHtcbiAgICBpZiAocGFzc3dvcmQgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbmNlbGVkJyk7XG4gICAgfVxuICAgIGlmIChwYXNzd29yZCA9PSBudWxsKSB7XG4gICAgICBjb25zdCBwYXNzID0gYXdhaXQgdGhpcy5wcm9tcHRQYXNzd29yZCgnUGFzc3dvcmQ6ICcpO1xuICAgICAgcmV0dXJuIHRoaXMubG9naW5CeVBhc3N3b3JkKHVzZXJuYW1lLCBwYXNzLCByZXRyeUNvdW50KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2Nvbm4ubG9naW4odXNlcm5hbWUsIHBhc3N3b3JkKTtcbiAgICAgIHRoaXMucHJpbnQoYExvZ2dlZCBpbiBhcyA6ICR7dXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luQnlQYXNzd29yZCh1c2VybmFtZSwgdW5kZWZpbmVkLCByZXRyeUNvdW50IC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbmNlbGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBhc3luYyBkaXNjb25uZWN0KGNvbm5OYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgbmFtZSA9IGNvbm5OYW1lIHx8IHRoaXMuX2Nvbm5OYW1lO1xuICAgIGlmIChuYW1lICYmIChhd2FpdCByZWdpc3RyeS5nZXRDb25uZWN0aW9uQ29uZmlnKG5hbWUpKSkge1xuICAgICAgYXdhaXQgcmVnaXN0cnkucmVtb3ZlQ29ubmVjdGlvbkNvbmZpZyhuYW1lKTtcbiAgICAgIHRoaXMucHJpbnQoYERpc2Nvbm5lY3QgY29ubmVjdGlvbiAnJHtuYW1lfSdgKTtcbiAgICB9XG4gICAgdGhpcy5fY29ubk5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fY29ubiA9IG5ldyBDb25uZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIGFzeW5jIGF1dGhvcml6ZShjbGllbnROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuYW1lID0gY2xpZW50TmFtZSB8fCAnZGVmYXVsdCc7XG4gICAgY29uc3Qgb2F1dGgyQ29uZmlnID0gYXdhaXQgcmVnaXN0cnkuZ2V0Q2xpZW50Q29uZmlnKG5hbWUpO1xuICAgIGlmICghb2F1dGgyQ29uZmlnPy5jbGllbnRJZCkge1xuICAgICAgaWYgKG5hbWUgPT09ICdkZWZhdWx0JyB8fCBuYW1lID09PSAnc2FuZGJveCcpIHtcbiAgICAgICAgdGhpcy5wcmludChcbiAgICAgICAgICAnTm8gY2xpZW50IGluZm9ybWF0aW9uIHJlZ2lzdGVyZWQuIERvd25sb2FkaW5nIEpTZm9yY2UgZGVmYXVsdCBjbGllbnQgaW5mb3JtYXRpb24uLi4nLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5kb3dubG9hZERlZmF1bHRDbGllbnRJbmZvKG5hbWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTm8gT0F1dGgyIGNsaWVudCBpbmZvcm1hdGlvbiByZWdpc3RlcmVkIDogJyR7bmFtZX0nLiBQbGVhc2UgcmVnaXN0ZXIgY2xpZW50IGluZm8gZmlyc3QuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IG9hdXRoMiA9IG5ldyBPQXV0aDIob2F1dGgyQ29uZmlnKTtcbiAgICBjb25zdCB2ZXJpZmllciA9IGJhc2U2NHVybC5lbmNvZGUoY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKSk7XG4gICAgY29uc3QgY2hhbGxlbmdlID0gYmFzZTY0dXJsLmVuY29kZShcbiAgICAgIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUodmVyaWZpZXIpLmRpZ2VzdCgpLFxuICAgICk7XG4gICAgY29uc3Qgc3RhdGUgPSBiYXNlNjR1cmwuZW5jb2RlKGNyeXB0by5yYW5kb21CeXRlcygzMikpO1xuICAgIGNvbnN0IGF1dGh6VXJsID0gb2F1dGgyLmdldEF1dGhvcml6YXRpb25Vcmwoe1xuICAgICAgY29kZV9jaGFsbGVuZ2U6IGNoYWxsZW5nZSxcbiAgICAgIHN0YXRlLFxuICAgIH0pO1xuICAgIHRoaXMucHJpbnQoJ09wZW5pbmcgYXV0aG9yaXphdGlvbiBwYWdlIGluIGJyb3dzZXIuLi4nKTtcbiAgICB0aGlzLnByaW50KGBVUkw6ICR7YXV0aHpVcmx9YCk7XG4gICAgdGhpcy5vcGVuVXJsKGF1dGh6VXJsKTtcbiAgICBjb25zdCBwYXJhbXMgPSBhd2FpdCB0aGlzLndhaXRDYWxsYmFjayhvYXV0aDJDb25maWcucmVkaXJlY3RVcmksIHN0YXRlKTtcbiAgICBpZiAoIXBhcmFtcy5jb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZC4nKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zdGF0ZSAhPT0gc3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGF0ZSBwYXJhbWV0ZXIgcmV0dXJuZWQuJyk7XG4gICAgfVxuICAgIHRoaXMuX2Nvbm4gPSBuZXcgQ29ubmVjdGlvbih7IG9hdXRoMiB9KTtcbiAgICB0aGlzLnByaW50KFxuICAgICAgJ1JlY2VpdmVkIGF1dGhvcml6YXRpb24gY29kZS4gUGxlYXNlIGNsb3NlIHRoZSBvcGVuZWQgYnJvd3NlciB3aW5kb3cuJyxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuX2Nvbm4uYXV0aG9yaXplKHBhcmFtcy5jb2RlLCB7IGNvZGVfdmVyaWZpZXI6IHZlcmlm