UNPKG

jsforce

Version:

Salesforce API Library for JavaScript

380 lines (357 loc) 35.5 kB
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys"; 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 _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty"; import _classCallCheck from "@babel/runtime-corejs3/helpers/classCallCheck"; import _createClass from "@babel/runtime-corejs3/helpers/createClass"; 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 _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } import _JSON$stringify from "@babel/runtime-corejs3/core-js-stable/json/stringify"; import _Array$isArray from "@babel/runtime-corejs3/core-js-stable/array/is-array"; import "core-js/modules/es.array.join.js"; import "core-js/modules/es.array.push.js"; /** * @file Manages Salesforce Analytics API * @author Shinichi Tomita <shinichi.tomita@gmail.com> */ import { registerModule } from '../jsforce'; /*----------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------*/ /** * Report object class in Analytics API */ export var ReportInstance = /*#__PURE__*/function () { /** * */ function ReportInstance(report, id) { _classCallCheck(this, ReportInstance); this._report = report; this._conn = report._conn; this.id = id; } /** * Retrieve report result asynchronously executed */ return _createClass(ReportInstance, [{ key: "retrieve", value: function retrieve() { var url = [this._conn._baseUrl(), 'analytics', 'reports', this._report.id, 'instances', this.id].join('/'); return this._conn.request(url); } }]); }(); /*----------------------------------------------------------------------------------*/ /** * Report object class in Analytics API */ export var Report = /*#__PURE__*/function () { /** * */ function Report(conn, id) { _classCallCheck(this, Report); /** * Synonym of Analytics~Report#destroy() */ _defineProperty(this, "delete", this.destroy); /** * Synonym of Analytics~Report#destroy() */ _defineProperty(this, "del", this.destroy); /** * Synonym of Analytics~Report#execute() */ _defineProperty(this, "run", this.execute); /** * Synonym of Analytics~Report#execute() */ _defineProperty(this, "exec", this.execute); this._conn = conn; this.id = id; } /** * Describe report metadata */ return _createClass(Report, [{ key: "describe", value: function describe() { var url = [this._conn._baseUrl(), 'analytics', 'reports', this.id, 'describe'].join('/'); return this._conn.request(url); } /** * Destroy a report */ }, { key: "destroy", value: function destroy() { var url = [this._conn._baseUrl(), 'analytics', 'reports', this.id].join('/'); return this._conn.request({ method: 'DELETE', url: url }); } }, { key: "clone", value: /** * Clones a given report */ function clone(name) { var url = [this._conn._baseUrl(), 'analytics', 'reports'].join('/') + '?cloneId=' + this.id; var config = { reportMetadata: { name: name } }; return this._conn.request({ method: 'POST', url: url, headers: { 'Content-Type': 'application/json' }, body: _JSON$stringify(config) }); } /** * Explain plan for executing report */ }, { key: "explain", value: function explain() { var url = '/query/?explain=' + this.id; return this._conn.request(url); } /** * Run report synchronously */ }, { key: "execute", value: function execute() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var url = [this._conn._baseUrl(), 'analytics', 'reports', this.id].join('/') + '?includeDetails=' + (options.details ? 'true' : 'false'); return this._conn.request(_objectSpread({ url: url }, options.metadata ? { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: _JSON$stringify(options.metadata) } : { method: 'GET' })); } }, { key: "executeAsync", value: /** * Run report asynchronously */ function executeAsync() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var url = [this._conn._baseUrl(), 'analytics', 'reports', this.id, 'instances'].join('/') + (options.details ? '?includeDetails=true' : ''); return this._conn.request(_objectSpread({ method: 'POST', url: url }, options.metadata ? { headers: { 'Content-Type': 'application/json' }, body: _JSON$stringify(options.metadata) } : { body: '' })); } /** * Get report instance for specified instance ID */ }, { key: "instance", value: function instance(id) { return new ReportInstance(this, id); } /** * List report instances which had been executed asynchronously */ }, { key: "instances", value: function instances() { var url = [this._conn._baseUrl(), 'analytics', 'reports', this.id, 'instances'].join('/'); return this._conn.request(url); } }]); }(); /*----------------------------------------------------------------------------------*/ /** * Dashboard object class in the Analytics API */ export var Dashboard = /*#__PURE__*/function () { /** * */ function Dashboard(conn, id) { _classCallCheck(this, Dashboard); /** * Synonym of Analytics~Dashboard#destroy() */ _defineProperty(this, "delete", this.destroy); /** * Synonym of Analytics~Dashboard#destroy() */ _defineProperty(this, "del", this.destroy); this._conn = conn; this.id = id; } /** * Describe dashboard metadata * * @method Analytics~Dashboard#describe * @param {Callback.<Analytics-DashboardMetadata>} [callback] - Callback function * @returns {Promise.<Analytics-DashboardMetadata>} */ return _createClass(Dashboard, [{ key: "describe", value: function describe() { var url = [this._conn._baseUrl(), 'analytics', 'dashboards', this.id, 'describe'].join('/'); return this._conn.request(url); } /** * Get details about dashboard components */ }, { key: "components", value: function components(componentIds) { var url = [this._conn._baseUrl(), 'analytics', 'dashboards', this.id].join('/'); var config = { componentIds: _Array$isArray(componentIds) ? componentIds : typeof componentIds === 'string' ? [componentIds] : undefined }; return this._conn.request({ method: 'POST', url: url, headers: { 'Content-Type': 'application/json' }, body: _JSON$stringify(config) }); } /** * Get dashboard status */ }, { key: "status", value: function status() { var url = [this._conn._baseUrl(), 'analytics', 'dashboards', this.id, 'status'].join('/'); return this._conn.request(url); } /** * Refresh a dashboard */ }, { key: "refresh", value: function refresh() { var url = [this._conn._baseUrl(), 'analytics', 'dashboards', this.id].join('/'); return this._conn.request({ method: 'PUT', url: url, body: '' }); } /** * Clone a dashboard */ }, { key: "clone", value: function clone(config, folderId) { var url = [this._conn._baseUrl(), 'analytics', 'dashboards'].join('/') + '?cloneId=' + this.id; if (typeof config === 'string') { config = { name: config, folderId: folderId }; } return this._conn.request({ method: 'POST', url: url, headers: { 'Content-Type': 'application/json' }, body: _JSON$stringify(config) }); } /** * Destroy a dashboard */ }, { key: "destroy", value: function destroy() { var url = [this._conn._baseUrl(), 'analytics', 'dashboards', this.id].join('/'); return this._conn.request({ method: 'DELETE', url: url }); } }]); }(); /*----------------------------------------------------------------------------------*/ /** * API class for Analytics API */ export var Analytics = /*#__PURE__*/function () { /** * */ function Analytics(conn) { _classCallCheck(this, Analytics); this._conn = conn; } /** * Get report object of Analytics API */ return _createClass(Analytics, [{ key: "report", value: function report(id) { return new Report(this._conn, id); } /** * Get recent report list */ }, { key: "reports", value: function reports() { var url = [this._conn._baseUrl(), 'analytics', 'reports'].join('/'); return this._conn.request(url); } /** * Get dashboard object of Analytics API */ }, { key: "dashboard", value: function dashboard(id) { return new Dashboard(this._conn, id); } /** * Get recent dashboard list */ }, { key: "dashboards", value: function dashboards() { var url = [this._conn._baseUrl(), 'analytics', 'dashboards'].join('/'); return this._conn.request(url); } }]); }(); /*--------------------------------------------*/ /* * Register hook in connection instantiation for dynamically adding this API module features */ registerModule('analytics', function (conn) { return new Analytics(conn); }); export default Analytics; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3Rlck1vZHVsZSIsIlJlcG9ydEluc3RhbmNlIiwicmVwb3J0IiwiaWQiLCJfY2xhc3NDYWxsQ2hlY2siLCJfcmVwb3J0IiwiX2Nvbm4iLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJ2YWx1ZSIsInJldHJpZXZlIiwidXJsIiwiX2Jhc2VVcmwiLCJqb2luIiwicmVxdWVzdCIsIlJlcG9ydCIsImNvbm4iLCJfZGVmaW5lUHJvcGVydHkiLCJkZXN0cm95IiwiZXhlY3V0ZSIsImRlc2NyaWJlIiwibWV0aG9kIiwiY2xvbmUiLCJuYW1lIiwiY29uZmlnIiwicmVwb3J0TWV0YWRhdGEiLCJoZWFkZXJzIiwiYm9keSIsIl9KU09OJHN0cmluZ2lmeSIsImV4cGxhaW4iLCJvcHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZGV0YWlscyIsIl9vYmplY3RTcHJlYWQiLCJtZXRhZGF0YSIsImV4ZWN1dGVBc3luYyIsImluc3RhbmNlIiwiaW5zdGFuY2VzIiwiRGFzaGJvYXJkIiwiY29tcG9uZW50cyIsImNvbXBvbmVudElkcyIsIl9BcnJheSRpc0FycmF5Iiwic3RhdHVzIiwicmVmcmVzaCIsImZvbGRlcklkIiwiQW5hbHl0aWNzIiwicmVwb3J0cyIsImRhc2hib2FyZCIsImRhc2hib2FyZHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2FuYWx5dGljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlIE1hbmFnZXMgU2FsZXNmb3JjZSBBbmFseXRpY3MgQVBJXG4gKiBAYXV0aG9yIFNoaW5pY2hpIFRvbWl0YSA8c2hpbmljaGkudG9taXRhQGdtYWlsLmNvbT5cbiAqL1xuaW1wb3J0IHsgcmVnaXN0ZXJNb2R1bGUgfSBmcm9tICcuLi9qc2ZvcmNlJztcbmltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4uL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgUmVwb3J0TWV0YWRhdGEsXG4gIFJlcG9ydEV4ZWN1dGVSZXN1bHQsXG4gIFJlcG9ydFJldHJpZXZlUmVzdWx0LFxuICBSZXBvcnREZXNjcmliZVJlc3VsdCxcbiAgUmVwb3J0SW5mbyxcbiAgUmVwb3J0SW5zdGFuY2VJbmZvLFxuICBEYXNoYm9hcmRNZXRhZGF0YSxcbiAgRGFzaGJvYXJkUmVzdWx0LFxuICBEYXNoYm9hcmRTdGF0dXNSZXN1bHQsXG4gIERhc2hib2FyZFJlZnJlc2hSZXN1bHQsXG4gIERhc2hib2FyZEluZm8sXG59IGZyb20gJy4vYW5hbHl0aWNzL3R5cGVzJztcbmltcG9ydCB7IFF1ZXJ5RXhwbGFpblJlc3VsdCB9IGZyb20gJy4uL3F1ZXJ5JztcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCB0eXBlIHtcbiAgUmVwb3J0TWV0YWRhdGEsXG4gIFJlcG9ydEV4ZWN1dGVSZXN1bHQsXG4gIFJlcG9ydFJldHJpZXZlUmVzdWx0LFxuICBSZXBvcnREZXNjcmliZVJlc3VsdCxcbiAgUmVwb3J0SW5mbyxcbiAgUmVwb3J0SW5zdGFuY2VJbmZvLFxuICBEYXNoYm9hcmRNZXRhZGF0YSxcbiAgRGFzaGJvYXJkUmVzdWx0LFxuICBEYXNoYm9hcmRTdGF0dXNSZXN1bHQsXG4gIERhc2hib2FyZFJlZnJlc2hSZXN1bHQsXG4gIERhc2hib2FyZEluZm8sXG59O1xuXG5leHBvcnQgdHlwZSBSZXBvcnRFeGVjdXRlT3B0aW9ucyA9IHtcbiAgZGV0YWlscz86IGJvb2xlYW47XG4gIG1ldGFkYXRhPzoge1xuICAgIHJlcG9ydE1ldGFkYXRhOiBQYXJ0aWFsPFJlcG9ydE1ldGFkYXRhPjtcbiAgfTtcbn07XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFJlcG9ydCBvYmplY3QgY2xhc3MgaW4gQW5hbHl0aWNzIEFQSVxuICovXG5leHBvcnQgY2xhc3MgUmVwb3J0SW5zdGFuY2U8UyBleHRlbmRzIFNjaGVtYT4ge1xuICBfcmVwb3J0OiBSZXBvcnQ8Uz47XG4gIF9jb25uOiBDb25uZWN0aW9uPFM+O1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IocmVwb3J0OiBSZXBvcnQ8Uz4sIGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZXBvcnQgPSByZXBvcnQ7XG4gICAgdGhpcy5fY29ubiA9IHJlcG9ydC5fY29ubjtcbiAgICB0aGlzLmlkID0gaWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgcmVwb3J0IHJlc3VsdCBhc3luY2hyb25vdXNseSBleGVjdXRlZFxuICAgKi9cbiAgcmV0cmlldmUoKTogUHJvbWlzZTxSZXBvcnRSZXRyaWV2ZVJlc3VsdD4ge1xuICAgIGNvbnN0IHVybCA9IFtcbiAgICAgIHRoaXMuX2Nvbm4uX2Jhc2VVcmwoKSxcbiAgICAgICdhbmFseXRpY3MnLFxuICAgICAgJ3JlcG9ydHMnLFxuICAgICAgdGhpcy5fcmVwb3J0LmlkLFxuICAgICAgJ2luc3RhbmNlcycsXG4gICAgICB0aGlzLmlkLFxuICAgIF0uam9pbignLycpO1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8UmVwb3J0UmV0cmlldmVSZXN1bHQ+KHVybCk7XG4gIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogUmVwb3J0IG9iamVjdCBjbGFzcyBpbiBBbmFseXRpY3MgQVBJXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXBvcnQ8UyBleHRlbmRzIFNjaGVtYT4ge1xuICBfY29ubjogQ29ubmVjdGlvbjxTPjtcbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICpcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbm46IENvbm5lY3Rpb248Uz4sIGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb25uID0gY29ubjtcbiAgICB0aGlzLmlkID0gaWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVzY3JpYmUgcmVwb3J0IG1ldGFkYXRhXG4gICAqL1xuICBkZXNjcmliZSgpOiBQcm9taXNlPFJlcG9ydERlc2NyaWJlUmVzdWx0PiB7XG4gICAgY29uc3QgdXJsID0gW1xuICAgICAgdGhpcy5fY29ubi5fYmFzZVVybCgpLFxuICAgICAgJ2FuYWx5dGljcycsXG4gICAgICAncmVwb3J0cycsXG4gICAgICB0aGlzLmlkLFxuICAgICAgJ2Rlc2NyaWJlJyxcbiAgICBdLmpvaW4oJy8nKTtcbiAgICByZXR1cm4gdGhpcy5fY29ubi5yZXF1ZXN0PFJlcG9ydERlc2NyaWJlUmVzdWx0Pih1cmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgYSByZXBvcnRcbiAgICovXG4gIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXJsID0gW3RoaXMuX2Nvbm4uX2Jhc2VVcmwoKSwgJ2FuYWx5dGljcycsICdyZXBvcnRzJywgdGhpcy5pZF0uam9pbihcbiAgICAgICcvJyxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8dm9pZD4oeyBtZXRob2Q6ICdERUxFVEUnLCB1cmwgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3lub255bSBvZiBBbmFseXRpY3N+UmVwb3J0I2Rlc3Ryb3koKVxuICAgKi9cbiAgZGVsZXRlID0gdGhpcy5kZXN0cm95O1xuXG4gIC8qKlxuICAgKiBTeW5vbnltIG9mIEFuYWx5dGljc35SZXBvcnQjZGVzdHJveSgpXG4gICAqL1xuICBkZWwgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgLyoqXG4gICAqIENsb25lcyBhIGdpdmVuIHJlcG9ydFxuICAgKi9cbiAgY2xvbmUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnREZXNjcmliZVJlc3VsdD4ge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICBbdGhpcy5fY29ubi5fYmFzZVVybCgpLCAnYW5hbHl0aWNzJywgJ3JlcG9ydHMnXS5qb2luKCcvJykgK1xuICAgICAgJz9jbG9uZUlkPScgK1xuICAgICAgdGhpcy5pZDtcbiAgICBjb25zdCBjb25maWcgPSB7IHJlcG9ydE1ldGFkYXRhOiB7IG5hbWUgfSB9O1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8UmVwb3J0RGVzY3JpYmVSZXN1bHQ+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShjb25maWcpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gcGxhbiBmb3IgZXhlY3V0aW5nIHJlcG9ydFxuICAgKi9cbiAgZXhwbGFpbigpOiBQcm9taXNlPFF1ZXJ5RXhwbGFpblJlc3VsdD4ge1xuICAgIGNvbnN0IHVybCA9ICcvcXVlcnkvP2V4cGxhaW49JyArIHRoaXMuaWQ7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4ucmVxdWVzdDxRdWVyeUV4cGxhaW5SZXN1bHQ+KHVybCk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHJlcG9ydCBzeW5jaHJvbm91c2x5XG4gICAqL1xuICBleGVjdXRlKG9wdGlvbnM6IFJlcG9ydEV4ZWN1dGVPcHRpb25zID0ge30pOiBQcm9taXNlPFJlcG9ydEV4ZWN1dGVSZXN1bHQ+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgW3RoaXMuX2Nvbm4uX2Jhc2VVcmwoKSwgJ2FuYWx5dGljcycsICdyZXBvcnRzJywgdGhpcy5pZF0uam9pbignLycpICtcbiAgICAgICc/aW5jbHVkZURldGFpbHM9JyArXG4gICAgICAob3B0aW9ucy5kZXRhaWxzID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4ucmVxdWVzdDxSZXBvcnRFeGVjdXRlUmVzdWx0Pih7XG4gICAgICB1cmwsXG4gICAgICAuLi4ob3B0aW9ucy5tZXRhZGF0YVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShvcHRpb25zLm1ldGFkYXRhKSxcbiAgICAgICAgICB9XG4gICAgICAgIDogeyBtZXRob2Q6ICdHRVQnIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bm9ueW0gb2YgQW5hbHl0aWNzflJlcG9ydCNleGVjdXRlKClcbiAgICovXG4gIHJ1biA9IHRoaXMuZXhlY3V0ZTtcblxuICAvKipcbiAgICogU3lub255bSBvZiBBbmFseXRpY3N+UmVwb3J0I2V4ZWN1dGUoKVxuICAgKi9cbiAgZXhlYyA9IHRoaXMuZXhlY3V0ZTtcblxuICAvKipcbiAgICogUnVuIHJlcG9ydCBhc3luY2hyb25vdXNseVxuICAgKi9cbiAgZXhlY3V0ZUFzeW5jKFxuICAgIG9wdGlvbnM6IFJlcG9ydEV4ZWN1dGVPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8UmVwb3J0SW5zdGFuY2VJbmZvPiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIFtcbiAgICAgICAgdGhpcy5fY29ubi5fYmFzZVVybCgpLFxuICAgICAgICAnYW5hbHl0aWNzJyxcbiAgICAgICAgJ3JlcG9ydHMnLFxuICAgICAgICB0aGlzLmlkLFxuICAgICAgICAnaW5zdGFuY2VzJyxcbiAgICAgIF0uam9pbignLycpICsgKG9wdGlvbnMuZGV0YWlscyA/ICc/aW5jbHVkZURldGFpbHM9dHJ1ZScgOiAnJyk7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4ucmVxdWVzdDxSZXBvcnRJbnN0YW5jZUluZm8+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsLFxuICAgICAgLi4uKG9wdGlvbnMubWV0YWRhdGFcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMubWV0YWRhdGEpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7IGJvZHk6ICcnIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZXBvcnQgaW5zdGFuY2UgZm9yIHNwZWNpZmllZCBpbnN0YW5jZSBJRFxuICAgKi9cbiAgaW5zdGFuY2UoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUmVwb3J0SW5zdGFuY2UodGhpcywgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgcmVwb3J0IGluc3RhbmNlcyB3aGljaCBoYWQgYmVlbiBleGVjdXRlZCBhc3luY2hyb25vdXNseVxuICAgKi9cbiAgaW5zdGFuY2VzKCk6IFByb21pc2U8UmVwb3J0SW5zdGFuY2VJbmZvW10+IHtcbiAgICBjb25zdCB1cmwgPSBbXG4gICAgICB0aGlzLl9jb25uLl9iYXNlVXJsKCksXG4gICAgICAnYW5hbHl0aWNzJyxcbiAgICAgICdyZXBvcnRzJyxcbiAgICAgIHRoaXMuaWQsXG4gICAgICAnaW5zdGFuY2VzJyxcbiAgICBdLmpvaW4oJy8nKTtcbiAgICByZXR1cm4gdGhpcy5fY29ubi5yZXF1ZXN0PFJlcG9ydEluc3RhbmNlSW5mb1tdPih1cmwpO1xuICB9XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIERhc2hib2FyZCBvYmplY3QgY2xhc3MgaW4gdGhlIEFuYWx5dGljcyBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIERhc2hib2FyZDxTIGV4dGVuZHMgU2NoZW1hPiB7XG4gIF9jb25uOiBDb25uZWN0aW9uPFM+O1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IoY29ubjogQ29ubmVjdGlvbjxTPiwgaWQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Nvbm4gPSBjb25uO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmliZSBkYXNoYm9hcmQgbWV0YWRhdGFcbiAgICpcbiAgICogQG1ldGhvZCBBbmFseXRpY3N+RGFzaGJvYXJkI2Rlc2NyaWJlXG4gICAqIEBwYXJhbSB7Q2FsbGJhY2suPEFuYWx5dGljcy1EYXNoYm9hcmRNZXRhZGF0YT59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZS48QW5hbHl0aWNzLURhc2hib2FyZE1ldGFkYXRhPn1cbiAgICovXG4gIGRlc2NyaWJlKCk6IFByb21pc2U8RGFzaGJvYXJkTWV0YWRhdGE+IHtcbiAgICBjb25zdCB1cmwgPSBbXG4gICAgICB0aGlzLl9jb25uLl9iYXNlVXJsKCksXG4gICAgICAnYW5hbHl0aWNzJyxcbiAgICAgICdkYXNoYm9hcmRzJyxcbiAgICAgIHRoaXMuaWQsXG4gICAgICAnZGVzY3JpYmUnLFxuICAgIF0uam9pbignLycpO1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8RGFzaGJvYXJkTWV0YWRhdGE+KHVybCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldGFpbHMgYWJvdXQgZGFzaGJvYXJkIGNvbXBvbmVudHNcbiAgICovXG4gIGNvbXBvbmVudHMoY29tcG9uZW50SWRzPzogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPERhc2hib2FyZFJlc3VsdD4ge1xuICAgIGNvbnN0IHVybCA9IFtcbiAgICAgIHRoaXMuX2Nvbm4uX2Jhc2VVcmwoKSxcbiAgICAgICdhbmFseXRpY3MnLFxuICAgICAgJ2Rhc2hib2FyZHMnLFxuICAgICAgdGhpcy5pZCxcbiAgICBdLmpvaW4oJy8nKTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBjb21wb25lbnRJZHM6IEFycmF5LmlzQXJyYXkoY29tcG9uZW50SWRzKVxuICAgICAgICA/IGNvbXBvbmVudElkc1xuICAgICAgICA6IHR5cGVvZiBjb21wb25lbnRJZHMgPT09ICdzdHJpbmcnXG4gICAgICAgID8gW2NvbXBvbmVudElkc11cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5fY29ubi5yZXF1ZXN0PERhc2hib2FyZFJlc3VsdD4oe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGNvbmZpZyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhc2hib2FyZCBzdGF0dXNcbiAgICovXG4gIHN0YXR1cygpOiBQcm9taXNlPERhc2hib2FyZFN0YXR1c1Jlc3VsdD4ge1xuICAgIGNvbnN0IHVybCA9IFtcbiAgICAgIHRoaXMuX2Nvbm4uX2Jhc2VVcmwoKSxcbiAgICAgICdhbmFseXRpY3MnLFxuICAgICAgJ2Rhc2hib2FyZHMnLFxuICAgICAgdGhpcy5pZCxcbiAgICAgICdzdGF0dXMnLFxuICAgIF0uam9pbignLycpO1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8RGFzaGJvYXJkU3RhdHVzUmVzdWx0Pih1cmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggYSBkYXNoYm9hcmRcbiAgICovXG4gIHJlZnJlc2goKTogUHJvbWlzZTxEYXNoYm9hcmRSZWZyZXNoUmVzdWx0PiB7XG4gICAgY29uc3QgdXJsID0gW1xuICAgICAgdGhpcy5fY29ubi5fYmFzZVVybCgpLFxuICAgICAgJ2FuYWx5dGljcycsXG4gICAgICAnZGFzaGJvYXJkcycsXG4gICAgICB0aGlzLmlkLFxuICAgIF0uam9pbignLycpO1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8RGFzaGJvYXJkUmVmcmVzaFJlc3VsdD4oe1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIHVybCxcbiAgICAgIGJvZHk6ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIGEgZGFzaGJvYXJkXG4gICAqL1xuICBjbG9uZShcbiAgICBjb25maWc6IHsgbmFtZTogc3RyaW5nOyBmb2xkZXJJZD86IHN0cmluZyB9IHwgc3RyaW5nLFxuICAgIGZvbGRlcklkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPERhc2hib2FyZE1ldGFkYXRhPiB7XG4gICAgY29uc3QgdXJsID1cbiAgICAgIFt0aGlzLl9jb25uLl9iYXNlVXJsKCksICdhbmFseXRpY3MnLCAnZGFzaGJvYXJkcyddLmpvaW4oJy8nKSArXG4gICAgICAnP2Nsb25lSWQ9JyArXG4gICAgICB0aGlzLmlkO1xuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0geyBuYW1lOiBjb25maWcsIGZvbGRlcklkIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8RGFzaGJvYXJkTWV0YWRhdGE+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShjb25maWcpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgYSBkYXNoYm9hcmRcbiAgICovXG4gIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdXJsID0gW1xuICAgICAgdGhpcy5fY29ubi5fYmFzZVVybCgpLFxuICAgICAgJ2FuYWx5dGljcycsXG4gICAgICAnZGFzaGJvYXJkcycsXG4gICAgICB0aGlzLmlkLFxuICAgIF0uam9pbignLycpO1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8dm9pZD4oeyBtZXRob2Q6ICdERUxFVEUnLCB1cmwgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3lub255bSBvZiBBbmFseXRpY3N+RGFzaGJvYXJkI2Rlc3Ryb3koKVxuICAgKi9cbiAgZGVsZXRlID0gdGhpcy5kZXN0cm95O1xuXG4gIC8qKlxuICAgKiBTeW5vbnltIG9mIEFuYWx5dGljc35EYXNoYm9hcmQjZGVzdHJveSgpXG4gICAqL1xuICBkZWwgPSB0aGlzLmRlc3Ryb3k7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEFQSSBjbGFzcyBmb3IgQW5hbHl0aWNzIEFQSVxuICovXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzPFMgZXh0ZW5kcyBTY2hlbWE+IHtcbiAgX2Nvbm46IENvbm5lY3Rpb248Uz47XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25uOiBDb25uZWN0aW9uPFM+KSB7XG4gICAgdGhpcy5fY29ubiA9IGNvbm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlcG9ydCBvYmplY3Qgb2YgQW5hbHl0aWNzIEFQSVxuICAgKi9cbiAgcmVwb3J0KGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFJlcG9ydCh0aGlzLl9jb25uLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlY2VudCByZXBvcnQgbGlzdFxuICAgKi9cbiAgcmVwb3J0cygpIHtcbiAgICBjb25zdCB1cmwgPSBbdGhpcy5fY29ubi5fYmFzZVVybCgpLCAnYW5hbHl0aWNzJywgJ3JlcG9ydHMnXS5qb2luKCcvJyk7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4ucmVxdWVzdDxSZXBvcnRJbmZvW10+KHVybCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhc2hib2FyZCBvYmplY3Qgb2YgQW5hbHl0aWNzIEFQSVxuICAgKi9cbiAgZGFzaGJvYXJkKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IERhc2hib2FyZCh0aGlzLl9jb25uLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlY2VudCBkYXNoYm9hcmQgbGlzdFxuICAgKi9cbiAgZGFzaGJvYXJkcygpIHtcbiAgICBjb25zdCB1cmwgPSBbdGhpcy5fY29ubi5fYmFzZVVybCgpLCAnYW5hbHl0aWNzJywgJ2Rhc2hib2FyZHMnXS5qb2luKCcvJyk7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4ucmVxdWVzdDxEYXNoYm9hcmRJbmZvW10+KHVybCk7XG4gIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKlxuICogUmVnaXN0ZXIgaG9vayBpbiBjb25uZWN0aW9uIGluc3RhbnRpYXRpb24gZm9yIGR5bmFtaWNhbGx5IGFkZGluZyB0aGlzIEFQSSBtb2R1bGUgZmVhdHVyZXNcbiAqL1xucmVnaXN0ZXJNb2R1bGUoJ2FuYWx5dGljcycsIChjb25uKSA9PiBuZXcgQW5hbHl0aWNzKGNvbm4pKTtcblxuZXhwb3J0IGRlZmF1bHQgQW5hbHl0aWNzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsY0FBYyxRQUFRLFlBQVk7O0FBa0IzQzs7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFhQyxjQUFjO0VBS3pCO0FBQ0Y7QUFDQTtFQUNFLFNBQUFBLGVBQVlDLE1BQWlCLEVBQUVDLEVBQVUsRUFBRTtJQUFBQyxlQUFBLE9BQUFILGNBQUE7SUFDekMsSUFBSSxDQUFDSSxPQUFPLEdBQUdILE1BQU07SUFDckIsSUFBSSxDQUFDSSxLQUFLLEdBQUdKLE1BQU0sQ0FBQ0ksS0FBSztJQUN6QixJQUFJLENBQUNILEVBQUUsR0FBR0EsRUFBRTtFQUNkOztFQUVBO0FBQ0Y7QUFDQTtFQUZFLE9BQUFJLFlBQUEsQ0FBQU4sY0FBQTtJQUFBTyxHQUFBO0lBQUFDLEtBQUEsRUFHQSxT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