UNPKG

jsforce

Version:

Salesforce API Library for JavaScript

351 lines (334 loc) 32.9 kB
import "core-js/modules/es.array.push.js"; 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 _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 _Reflect$construct from "@babel/runtime-corejs3/core-js-stable/reflect/construct"; import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator"; import _possibleConstructorReturn from "@babel/runtime-corejs3/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime-corejs3/helpers/getPrototypeOf"; import _inherits from "@babel/runtime-corejs3/helpers/inherits"; import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty"; import _classCallCheck from "@babel/runtime-corejs3/helpers/classCallCheck"; import _createClass from "@babel/runtime-corejs3/helpers/createClass"; import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator"; function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map"; import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys"; import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat"; import _indexOfInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/index-of"; import _JSON$stringify from "@babel/runtime-corejs3/core-js-stable/json/stringify"; import _startsWithInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/starts-with"; import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each"; import _Promise from "@babel/runtime-corejs3/core-js-stable/promise"; import "core-js/modules/es.array.join.js"; import "core-js/modules/es.regexp.exec.js"; import "core-js/modules/es.regexp.test.js"; 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 _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context5 = ownKeys(Object(t), !0)).call(_context5, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context6 = ownKeys(Object(t))).call(_context6, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /** * @file Manages Salesforce Chatter REST API calls * @author Shinichi Tomita <shinichi.tomita@gmail.com> */ import { registerModule } from '../jsforce'; import { isObject } from '../util/function'; /** * */ /*--------------------------------------------*/ /** * A class representing chatter API request */ var Request = /*#__PURE__*/function () { function Request(chatter, request) { _classCallCheck(this, Request); this._chatter = chatter; this._request = request; } /** * Retrieve parameters in batch request form */ return _createClass(Request, [{ key: "batchParams", value: function batchParams() { var _this$_request = this._request, method = _this$_request.method, url = _this$_request.url, body = _this$_request.body; return _objectSpread({ method: method, url: this._chatter._normalizeUrl(url) }, typeof body !== 'undefined' ? { richInput: body } : {}); } /** * Retrieve parameters in batch request form * * @method Chatter~Request#promise * @returns {Promise.<Chatter~RequestResult>} */ }, { key: "promise", value: function promise() { return this._promise || (this._promise = this._chatter._request(this._request)); } /** * Returns Node.js Stream object for request * * @method Chatter~Request#stream * @returns {stream.Stream} */ }, { key: "stream", value: function stream() { return this._chatter._request(this._request).stream(); } /** * Promise/A+ interface * http://promises-aplus.github.io/promises-spec/ * * Delegate to deferred promise, return promise instance for batch result */ }, { key: "then", value: function then(onResolve, onReject) { return this.promise().then(onResolve, onReject); } }]); }(); function apppendQueryParamsToUrl(url, queryParams) { if (queryParams) { var _context; var qstring = _mapInstanceProperty(_context = _Object$keys(queryParams)).call(_context, function (name) { var _context2, _queryParams$name; return _concatInstanceProperty(_context2 = "".concat(name, "=")).call(_context2, encodeURIComponent(String((_queryParams$name = queryParams[name]) !== null && _queryParams$name !== void 0 ? _queryParams$name : ''))); }).join('&'); url += (_indexOfInstanceProperty(url).call(url, '?') > 0 ? '&' : '?') + qstring; } return url; } /*------------------------------*/ export var Resource = /*#__PURE__*/function (_Request) { /** * */ function Resource(chatter, url, queryParams) { var _this; _classCallCheck(this, Resource); _this = _callSuper(this, Resource, [chatter, { method: 'GET', url: apppendQueryParamsToUrl(url, queryParams) }]); /** * Synonym of Resource#destroy() */ _defineProperty(_this, "delete", _this.destroy); /** * Synonym of Resource#destroy() */ _defineProperty(_this, "del", _this.destroy); _this._url = _this._request.url; return _this; } /** * Create a new resource */ _inherits(Resource, _Request); return _createClass(Resource, [{ key: "create", value: function create(data) { return this._chatter.request({ method: 'POST', url: this._url, body: data }); } /** * Retrieve resource content */ }, { key: "retrieve", value: function retrieve() { return this._chatter.request({ method: 'GET', url: this._url }); } /** * Update specified resource */ }, { key: "update", value: function update(data) { return this._chatter.request({ method: 'POST', url: this._url, body: data }); } /** * Delete specified resource */ }, { key: "destroy", value: function destroy() { return this._chatter.request({ method: 'DELETE', url: this._url }); } }]); }(Request); /*------------------------------*/ /** * API class for Chatter REST API call */ export var Chatter = /*#__PURE__*/function () { /** * */ function Chatter(conn) { _classCallCheck(this, Chatter); this._conn = conn; } /** * Sending request to API endpoint * @private */ return _createClass(Chatter, [{ key: "_request", value: function _request(req_) { var method = req_.method, url_ = req_.url, headers_ = req_.headers, body_ = req_.body; var headers = headers_ !== null && headers_ !== void 0 ? headers_ : {}; var body; if (/^(put|post|patch)$/i.test(method)) { if (isObject(body_)) { headers = _objectSpread(_objectSpread({}, headers_), {}, { 'Content-Type': 'application/json' }); body = _JSON$stringify(body_); } else { body = body_; } } var url = this._normalizeUrl(url_); return this._conn.request({ method: method, url: url, headers: headers, body: body }); } /** * Convert path to site root relative url * @private */ }, { key: "_normalizeUrl", value: function _normalizeUrl(url) { if (_startsWithInstanceProperty(url).call(url, '/chatter/') || _startsWithInstanceProperty(url).call(url, '/connect/')) { return '/services/data/v' + this._conn.version + url; } else if (/^\/v[\d]+\.[\d]+\//.test(url)) { return '/services/data' + url; } else if (!_startsWithInstanceProperty(url).call(url, '/services/') && _startsWithInstanceProperty(url).call(url, '/')) { return '/services/data/v' + this._conn.version + '/chatter' + url; } else { return url; } } /** * Make a request for chatter API resource */ }, { key: "request", value: function request(req) { return new Request(this, req); } /** * Make a resource request to chatter API */ }, { key: "resource", value: function resource(url, queryParams) { return new Resource(this, url, queryParams); } /** * Make a batch request to chatter API */ }, { key: "batch", value: (function () { var _batch = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(requests) { var _context3; var deferreds, res; return _regeneratorRuntime.wrap(function _callee$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: deferreds = _mapInstanceProperty(requests).call(requests, function (request) { var deferred = defer(); request._promise = deferred.promise; return deferred; }); _context4.next = 3; return this.request({ method: 'POST', url: this._normalizeUrl('/connect/batch'), body: { batchRequests: _mapInstanceProperty(requests).call(requests, function (request) { return request.batchParams(); }) } }); case 3: res = _context4.sent; _forEachInstanceProperty(_context3 = res.results).call(_context3, function (result, i) { var deferred = deferreds[i]; if (result.statusCode >= 400) { deferred.reject(result.result); } else { deferred.resolve(result.result); } }); return _context4.abrupt("return", res); case 6: case "end": return _context4.stop(); } }, _callee, this); })); function batch(_x) { return _batch.apply(this, arguments); } return batch; }()) }]); }(); function defer() { var resolve_ = function resolve_() {}; var reject_ = function reject_() {}; var promise = new _Promise(function (resolve, reject) { resolve_ = resolve; reject_ = reject; }); return { promise: promise, resolve: resolve_, reject: reject_ }; } /*--------------------------------------------*/ /* * Register hook in connection instantiation for dynamically adding this API module features */ registerModule('chatter', function (conn) { return new Chatter(conn); }); export default Chatter; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3Rlck1vZHVsZSIsImlzT2JqZWN0IiwiUmVxdWVzdCIsImNoYXR0ZXIiLCJyZXF1ZXN0IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NoYXR0ZXIiLCJfcmVxdWVzdCIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiYmF0Y2hQYXJhbXMiLCJfdGhpcyRfcmVxdWVzdCIsIm1ldGhvZCIsInVybCIsImJvZHkiLCJfb2JqZWN0U3ByZWFkIiwiX25vcm1hbGl6ZVVybCIsInJpY2hJbnB1dCIsInByb21pc2UiLCJfcHJvbWlzZSIsInN0cmVhbSIsInRoZW4iLCJvblJlc29sdmUiLCJvblJlamVjdCIsImFwcHBlbmRRdWVyeVBhcmFtc1RvVXJsIiwicXVlcnlQYXJhbXMiLCJfY29udGV4dCIsInFzdHJpbmciLCJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsIl9PYmplY3Qka2V5cyIsImNhbGwiLCJuYW1lIiwiX2NvbnRleHQyIiwiX3F1ZXJ5UGFyYW1zJG5hbWUiLCJfY29uY2F0SW5zdGFuY2VQcm9wZXJ0eSIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIlN0cmluZyIsImpvaW4iLCJfaW5kZXhPZkluc3RhbmNlUHJvcGVydHkiLCJSZXNvdXJjZSIsIl9SZXF1ZXN0IiwiX3RoaXMiLCJfY2FsbFN1cGVyIiwiX2RlZmluZVByb3BlcnR5IiwiZGVzdHJveSIsIl91cmwiLCJfaW5oZXJpdHMiLCJjcmVhdGUiLCJkYXRhIiwicmV0cmlldmUiLCJ1cGRhdGUiLCJDaGF0dGVyIiwiY29ubiIsIl9jb25uIiwicmVxXyIsInVybF8iLCJoZWFkZXJzXyIsImhlYWRlcnMiLCJib2R5XyIsInRlc3QiLCJfSlNPTiRzdHJpbmdpZnkiLCJfc3RhcnRzV2l0aEluc3RhbmNlUHJvcGVydHkiLCJ2ZXJzaW9uIiwicmVxIiwicmVzb3VyY2UiLCJfYmF0Y2giLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlcXVlc3RzIiwiX2NvbnRleHQzIiwiZGVmZXJyZWRzIiwicmVzIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQ0IiwicHJldiIsIm5leHQiLCJkZWZlcnJlZCIsImRlZmVyIiwiYmF0Y2hSZXF1ZXN0cyIsInNlbnQiLCJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCJyZXN1bHRzIiwicmVzdWx0IiwiaSIsInN0YXR1c0NvZGUiLCJyZWplY3QiLCJyZXNvbHZlIiwiYWJydXB0Iiwic3RvcCIsImJhdGNoIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsInJlc29sdmVfIiwicmVqZWN0XyIsIl9Qcm9taXNlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9jaGF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUgTWFuYWdlcyBTYWxlc2ZvcmNlIENoYXR0ZXIgUkVTVCBBUEkgY2FsbHNcbiAqIEBhdXRob3IgU2hpbmljaGkgVG9taXRhIDxzaGluaWNoaS50b21pdGFAZ21haWwuY29tPlxuICovXG5pbXBvcnQgeyByZWdpc3Rlck1vZHVsZSB9IGZyb20gJy4uL2pzZm9yY2UnO1xuaW1wb3J0IENvbm5lY3Rpb24gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgeyBIdHRwUmVxdWVzdCwgU2NoZW1hIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi91dGlsL2Z1bmN0aW9uJztcblxuLyoqXG4gKlxuICovXG5leHBvcnQgdHlwZSBDaGF0dGVyUmVxdWVzdFBhcmFtcyA9IE9taXQ8SHR0cFJlcXVlc3QsICdib2R5Jz4gJiB7XG4gIGJvZHk/OiBzdHJpbmcgfCBvYmplY3QgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgQmF0Y2hSZXF1ZXN0UGFyYW1zID0ge1xuICBtZXRob2Q6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIHJpY2hJbnB1dD86IGFueTtcbn07XG5cbnR5cGUgQmF0Y2hSZXF1ZXN0VHVwcGxlPFMgZXh0ZW5kcyBTY2hlbWEsIFJUIGV4dGVuZHMgYW55W10+ID0ge1xuICBbSyBpbiBrZXlvZiBSVF06IFJlcXVlc3Q8UywgUlRbS10+O1xufTtcblxudHlwZSBCYXRjaFJlc3VsdFR1cHBsZTxSVCBleHRlbmRzIGFueVtdPiA9IHtcbiAgW0sgaW4ga2V5b2YgUlRdOiB7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIHJlc3VsdDogUlRbS107XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBCYXRjaFJlc3BvbnNlPFJUIGV4dGVuZHMgYW55W10+ID0ge1xuICBoYXNFcnJvcnM6IGJvb2xlYW47XG4gIHJlc3VsdHM6IEJhdGNoUmVzdWx0VHVwcGxlPFJUPjtcbn07XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBBIGNsYXNzIHJlcHJlc2VudGluZyBjaGF0dGVyIEFQSSByZXF1ZXN0XG4gKi9cbmNsYXNzIFJlcXVlc3Q8UyBleHRlbmRzIFNjaGVtYSwgUj4ge1xuICBfY2hhdHRlcjogQ2hhdHRlcjxTPjtcbiAgX3JlcXVlc3Q6IENoYXR0ZXJSZXF1ZXN0UGFyYW1zO1xuICBfcHJvbWlzZTogUHJvbWlzZTxSPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihjaGF0dGVyOiBDaGF0dGVyPFM+LCByZXF1ZXN0OiBDaGF0dGVyUmVxdWVzdFBhcmFtcykge1xuICAgIHRoaXMuX2NoYXR0ZXIgPSBjaGF0dGVyO1xuICAgIHRoaXMuX3JlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHBhcmFtZXRlcnMgaW4gYmF0Y2ggcmVxdWVzdCBmb3JtXG4gICAqL1xuICBiYXRjaFBhcmFtcygpIHtcbiAgICBjb25zdCB7IG1ldGhvZCwgdXJsLCBib2R5IH0gPSB0aGlzLl9yZXF1ZXN0O1xuICAgIHJldHVybiB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmw6IHRoaXMuX2NoYXR0ZXIuX25vcm1hbGl6ZVVybCh1cmwpLFxuICAgICAgLi4uKHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IHsgcmljaElucHV0OiBib2R5IH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBwYXJhbWV0ZXJzIGluIGJhdGNoIHJlcXVlc3QgZm9ybVxuICAgKlxuICAgKiBAbWV0aG9kIENoYXR0ZXJ+UmVxdWVzdCNwcm9taXNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlLjxDaGF0dGVyflJlcXVlc3RSZXN1bHQ+fVxuICAgKi9cbiAgcHJvbWlzZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fcHJvbWlzZSB8fCAodGhpcy5fcHJvbWlzZSA9IHRoaXMuX2NoYXR0ZXIuX3JlcXVlc3QodGhpcy5fcmVxdWVzdCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE5vZGUuanMgU3RyZWFtIG9iamVjdCBmb3IgcmVxdWVzdFxuICAgKlxuICAgKiBAbWV0aG9kIENoYXR0ZXJ+UmVxdWVzdCNzdHJlYW1cbiAgICogQHJldHVybnMge3N0cmVhbS5TdHJlYW19XG4gICAqL1xuICBzdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYXR0ZXIuX3JlcXVlc3Q8Uj4odGhpcy5fcmVxdWVzdCkuc3RyZWFtKCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvbWlzZS9BKyBpbnRlcmZhY2VcbiAgICogaHR0cDovL3Byb21pc2VzLWFwbHVzLmdpdGh1Yi5pby9wcm9taXNlcy1zcGVjL1xuICAgKlxuICAgKiBEZWxlZ2F0ZSB0byBkZWZlcnJlZCBwcm9taXNlLCByZXR1cm4gcHJvbWlzZSBpbnN0YW5jZSBmb3IgYmF0Y2ggcmVzdWx0XG4gICAqL1xuICB0aGVuPFU+KFxuICAgIG9uUmVzb2x2ZT86ICh2YWx1ZTogUikgPT4gVSB8IFByb21pc2VMaWtlPFU+LFxuICAgIG9uUmVqZWN0PzogKGU6IGFueSkgPT4gVSB8IFByb21pc2VMaWtlPFU+LFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlKCkudGhlbihvblJlc29sdmUsIG9uUmVqZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBwZW5kUXVlcnlQYXJhbXNUb1VybChcbiAgdXJsOiBzdHJpbmcsXG4gIHF1ZXJ5UGFyYW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfSB8IG51bGwsXG4pIHtcbiAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgY29uc3QgcXN0cmluZyA9IE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKVxuICAgICAgLm1hcChcbiAgICAgICAgKG5hbWUpID0+XG4gICAgICAgICAgYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHF1ZXJ5UGFyYW1zW25hbWVdID8/ICcnKSl9YCxcbiAgICAgIClcbiAgICAgIC5qb2luKCcmJyk7XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gMCA/ICcmJyA6ICc/JykgKyBxc3RyaW5nO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZTxTIGV4dGVuZHMgU2NoZW1hLCBSPiBleHRlbmRzIFJlcXVlc3Q8UywgUj4ge1xuICBfdXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBjaGF0dGVyOiBDaGF0dGVyPFM+LFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfSB8IG51bGwsXG4gICkge1xuICAgIHN1cGVyKGNoYXR0ZXIsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB1cmw6IGFwcHBlbmRRdWVyeVBhcmFtc1RvVXJsKHVybCwgcXVlcnlQYXJhbXMpLFxuICAgIH0pO1xuICAgIHRoaXMuX3VybCA9IHRoaXMuX3JlcXVlc3QudXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyByZXNvdXJjZVxuICAgKi9cbiAgY3JlYXRlPFIxID0gYW55PihkYXRhOiBzdHJpbmcgfCBvYmplY3QgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYXR0ZXIucmVxdWVzdDxSMT4oe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmw6IHRoaXMuX3VybCxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgcmVzb3VyY2UgY29udGVudFxuICAgKi9cbiAgcmV0cmlldmU8UjEgPSBSPigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhdHRlci5yZXF1ZXN0PFIxPih7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgdXJsOiB0aGlzLl91cmwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNwZWNpZmllZCByZXNvdXJjZVxuICAgKi9cbiAgdXBkYXRlPFIxID0gYW55PihkYXRhOiBvYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhdHRlci5yZXF1ZXN0PFIxPih7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogdGhpcy5fdXJsLFxuICAgICAgYm9keTogZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgc3BlY2lmaWVkIHJlc291cmNlXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHJldHVybiB0aGlzLl9jaGF0dGVyLnJlcXVlc3Q8dm9pZD4oe1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHVybDogdGhpcy5fdXJsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bm9ueW0gb2YgUmVzb3VyY2UjZGVzdHJveSgpXG4gICAqL1xuICBkZWxldGUgPSB0aGlzLmRlc3Ryb3k7XG5cbiAgLyoqXG4gICAqIFN5bm9ueW0gb2YgUmVzb3VyY2UjZGVzdHJveSgpXG4gICAqL1xuICBkZWwgPSB0aGlzLmRlc3Ryb3k7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogQVBJIGNsYXNzIGZvciBDaGF0dGVyIFJFU1QgQVBJIGNhbGxcbiAqL1xuZXhwb3J0IGNsYXNzIENoYXR0ZXI8UyBleHRlbmRzIFNjaGVtYT4ge1xuICBfY29ubjogQ29ubmVjdGlvbjxTPjtcblxuICAvKipcbiAgICpcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbm46IENvbm5lY3Rpb248Uz4pIHtcbiAgICB0aGlzLl9jb25uID0gY29ubjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kaW5nIHJlcXVlc3QgdG8gQVBJIGVuZHBvaW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVxdWVzdDxSPihyZXFfOiBDaGF0dGVyUmVxdWVzdFBhcmFtcykge1xuICAgIGNvbnN0IHsgbWV0aG9kLCB1cmw6IHVybF8sIGhlYWRlcnM6IGhlYWRlcnNfLCBib2R5OiBib2R5XyB9ID0gcmVxXztcbiAgICBsZXQgaGVhZGVycyA9IGhlYWRlcnNfID8/IHt9O1xuICAgIGxldCBib2R5O1xuICAgIGlmICgvXihwdXR8cG9zdHxwYXRjaCkkL2kudGVzdChtZXRob2QpKSB7XG4gICAgICBpZiAoaXNPYmplY3QoYm9keV8pKSB7XG4gICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgLi4uaGVhZGVyc18sXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfTtcbiAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHlfKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHkgPSBib2R5XztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdXJsID0gdGhpcy5fbm9ybWFsaXplVXJsKHVybF8pO1xuICAgIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3Q8Uj4oe1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBwYXRoIHRvIHNpdGUgcm9vdCByZWxhdGl2ZSB1cmxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ub3JtYWxpemVVcmwodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy9jaGF0dGVyLycpIHx8IHVybC5zdGFydHNXaXRoKCcvY29ubmVjdC8nKSkge1xuICAgICAgcmV0dXJuICcvc2VydmljZXMvZGF0YS92JyArIHRoaXMuX2Nvbm4udmVyc2lvbiArIHVybDtcbiAgICB9IGVsc2UgaWYgKC9eXFwvdltcXGRdK1xcLltcXGRdK1xcLy8udGVzdCh1cmwpKSB7XG4gICAgICByZXR1cm4gJy9zZXJ2aWNlcy9kYXRhJyArIHVybDtcbiAgICB9IGVsc2UgaWYgKCF1cmwuc3RhcnRzV2l0aCgnL3NlcnZpY2VzLycpICYmIHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiAnL3NlcnZpY2VzL2RhdGEvdicgKyB0aGlzLl9jb25uLnZlcnNpb24gKyAnL2NoYXR0ZXInICsgdXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgcmVxdWVzdCBmb3IgY2hhdHRlciBBUEkgcmVzb3VyY2VcbiAgICovXG4gIHJlcXVlc3Q8UiA9IHVua25vd24+KHJlcTogQ2hhdHRlclJlcXVlc3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3Q8UywgUj4odGhpcywgcmVxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgcmVzb3VyY2UgcmVxdWVzdCB0byBjaGF0dGVyIEFQSVxuICAgKi9cbiAgcmVzb3VyY2U8UiA9IHVua25vd24+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfSB8IG51bGwsXG4gICkge1xuICAgIHJldHVybiBuZXcgUmVzb3VyY2U8UywgUj4odGhpcywgdXJsLCBxdWVyeVBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIGJhdGNoIHJlcXVlc3QgdG8gY2hhdHRlciBBUElcbiAgICovXG4gIGFzeW5jIGJhdGNoPFJUIGV4dGVuZHMgYW55W10+KFxuICAgIHJlcXVlc3RzOiBCYXRjaFJlcXVlc3RUdXBwbGU8UywgUlQ+LFxuICApOiBQcm9taXNlPEJhdGNoUmVzcG9uc2U8UlQ+PiB7XG4gICAgY29uc3QgZGVmZXJyZWRzID0gcmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiB7XG4gICAgICBjb25zdCBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICByZXF1ZXN0Ll9wcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8QmF0Y2hSZXNwb25zZTxSVD4+KHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiB0aGlzLl9ub3JtYWxpemVVcmwoJy9jb25uZWN0L2JhdGNoJyksXG4gICAgICBib2R5OiB7XG4gICAgICAgIGJhdGNoUmVxdWVzdHM6IHJlcXVlc3RzLm1hcCgocmVxdWVzdCkgPT4gcmVxdWVzdC5iYXRjaFBhcmFtcygpKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmVzLnJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpKSA9PiB7XG4gICAgICBjb25zdCBkZWZlcnJlZCA9IGRlZmVycmVkc1tpXTtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgZGVmZXJyZWQucmVqZWN0KHJlc3VsdC5yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShyZXN1bHQucmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmVyPFQ+KCkge1xuICBsZXQgcmVzb2x2ZV86IChyOiBUIHwgUHJvbWlzZUxpa2U8VD4pID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgbGV0IHJlamVjdF86IChlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXNvbHZlXyA9IHJlc29sdmU7XG4gICAgcmVqZWN0XyA9IHJlamVjdDtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcHJvbWlzZSxcbiAgICByZXNvbHZlOiByZXNvbHZlXyxcbiAgICByZWplY3Q6IHJlamVjdF8sXG4gIH07XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLypcbiAqIFJlZ2lzdGVyIGhvb2sgaW4gY29ubmVjdGlvbiBpbnN0YW50aWF0aW9uIGZvciBkeW5hbWljYWxseSBhZGRpbmcgdGhpcyBBUEkgbW9kdWxlIGZlYXR1cmVzXG4gKi9cbnJlZ2lzdGVyTW9kdWxlKCdjaGF0dGVyJywgKGNvbm4pID0+IG5ldyBDaGF0dGVyKGNvbm4pKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hhdHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsY0FBYyxRQUFRLFlBQVk7QUFHM0MsU0FBU0MsUUFBUSxRQUFRLGtCQUFrQjs7QUFFM0M7QUFDQTtBQUNBO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBRkEsSUFHTUMsT0FBTztFQUtYLFNBQUFBLFFBQVlDLE9BQW1CLEVBQUVDLE9BQTZCLEVBQUU7SUFBQUMsZUFBQSxPQUFBSCxPQUFBO0lBQzlELElBQUksQ0FBQ0ksUUFBUSxHQUFHSCxPQUFPO0lBQ3ZCLElBQUksQ0FBQ0ksUUFBUSxHQUFHSCxPQUFPO0VBQ3pCOztFQUVBO0FBQ0Y7QUFDQTtFQUZFLE9BQUFJLFlBQUEsQ0FBQU4sT0FBQTtJQUFB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