UNPKG

io.parrots

Version:

Parrots.io App

523 lines (522 loc) 56 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Headers, RequestOptions } from '@angular/http'; import { AbstractServerResource } from 'com.phloxui'; var ParrotsAccountResource = /** @class */ (function (_super) { tslib_1.__extends(ParrotsAccountResource, _super); function ParrotsAccountResource(connectionMgr) { var _this = _super.call(this, connectionMgr) || this; _this.basePath = './account'; return _this; } /** * @param {?} options * @param {?} headerData * @return {?} */ ParrotsAccountResource.prototype.addingHeaderRequestOptionsArgs = /** * @param {?} options * @param {?} headerData * @return {?} */ function (options, headerData) { if (options === null || typeof options === 'undefined') { options = new RequestOptions(); } if (headerData !== null && typeof headerData !== 'undefined') { if (options.headers !== null && typeof options.headers !== 'undefined') { for (var /** @type {?} */ key in headerData) { options.headers.set(key, headerData[key]); } } else { options.headers = new Headers(headerData); } } return options; }; /** * @param {?} body * @return {?} */ ParrotsAccountResource.prototype.changePasswordWithHttpInfo = /** * @param {?} body * @return {?} */ function (body) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/recovery/setpassword"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); var /** @type {?} */ responseProm_1 = this.connectionMgr.postWithHttpInfo(url, body, requestOptionsArgs); if (responseProm_1 != null && typeof responseProm_1 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_1.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} body * @return {?} */ ParrotsAccountResource.prototype.changePassword = /** * @param {?} body * @return {?} */ function (body) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/recovery/setpassword"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); var /** @type {?} */ responseProm_2 = this.connectionMgr.post(url, body, requestOptionsArgs); if (responseProm_2 != null && typeof responseProm_2 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_2.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} email * @return {?} */ ParrotsAccountResource.prototype.sendEmailChangePasswordWithHttpInfo = /** * @param {?} email * @return {?} */ function (email) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/recovery/request"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = { email: email }; var /** @type {?} */ responseProm_3 = this.connectionMgr.postWithHttpInfo(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_3 != null && typeof responseProm_3 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_3.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} email * @return {?} */ ParrotsAccountResource.prototype.sendEmailChangePassword = /** * @param {?} email * @return {?} */ function (email) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/recovery/request"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = { email: email }; var /** @type {?} */ responseProm_4 = this.connectionMgr.post(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_4 != null && typeof responseProm_4 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_4.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} body * @return {?} */ ParrotsAccountResource.prototype.sendEmailValidationAccountWithHttpInfo = /** * @param {?} body * @return {?} */ function (body) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/sendemailvalidationaccount"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = body; var /** @type {?} */ responseProm_5 = this.connectionMgr.postWithHttpInfo(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_5 != null && typeof responseProm_5 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_5.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} body * @return {?} */ ParrotsAccountResource.prototype.sendEmailValidationAccount = /** * @param {?} body * @return {?} */ function (body) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/sendemailvalidationaccount"; //! for testing var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = body; var /** @type {?} */ responseProm_6 = this.connectionMgr.post(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_6 != null && typeof responseProm_6 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_6.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} userId * @param {?} secret * @return {?} */ ParrotsAccountResource.prototype.activateAccountWithHttpInfo = /** * @param {?} userId * @param {?} secret * @return {?} */ function (userId, secret) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/activate/confirm?userId=" + userId + "&secret=" + secret; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); var /** @type {?} */ body = { userId: userId, secret: secret }; var /** @type {?} */ responseProm_7 = this.connectionMgr.postWithHttpInfo(url, body, requestOptionsArgs); if (responseProm_7 != null && typeof responseProm_7 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_7.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} value * @return {?} */ ParrotsAccountResource.prototype.getAccountsInfo = /** * @param {?} value * @return {?} */ function (value) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + ""; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); var /** @type {?} */ responseProm_8 = this.connectionMgr.postWithHttpInfo(url, value, requestOptionsArgs); if (responseProm_8 != null && typeof responseProm_8 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_8.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} body * @return {?} */ ParrotsAccountResource.prototype.getAccountsInfos = /** * @param {?} body * @return {?} */ function (body) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/search"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); var /** @type {?} */ responseProm_9 = this.connectionMgr.postWithHttpInfo(url, body, requestOptionsArgs); if (responseProm_9 != null && typeof responseProm_9 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_9.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} username * @param {?} password * @return {?} */ ParrotsAccountResource.prototype.loginWithHttpInfo = /** * @param {?} username * @param {?} password * @return {?} */ function (username, password) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/login"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = { "userId": username, "password": password, "client": {} }; return this.connectionMgr.postWithHttpInfo(url, requestOptionsArgs.body, requestOptionsArgs); } else { Promise.reject(null); } }; /** * @param {?} createAccountDTO * @return {?} */ ParrotsAccountResource.prototype.registerWithHttpInfo = /** * @param {?} createAccountDTO * @return {?} */ function (createAccountDTO) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/register"; //! for testing var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = createAccountDTO; var /** @type {?} */ responseProm_10 = this.connectionMgr.postWithHttpInfo(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_10 != null && typeof responseProm_10 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_10.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} createAccountDTO * @return {?} */ ParrotsAccountResource.prototype.register = /** * @param {?} createAccountDTO * @return {?} */ function (createAccountDTO) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/register"; //! for testing var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = createAccountDTO; var /** @type {?} */ responseProm_11 = this.connectionMgr.post(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_11 != null && typeof responseProm_11 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_11.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} req * @return {?} */ ParrotsAccountResource.prototype.checkWithHttpInfo = /** * @param {?} req * @return {?} */ function (req) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/check"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = { "userId": req.username, "email": req.email }; var /** @type {?} */ responseProm_12 = this.connectionMgr.postWithHttpInfo(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_12 != null && typeof responseProm_12 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_12.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} req * @return {?} */ ParrotsAccountResource.prototype.check = /** * @param {?} req * @return {?} */ function (req) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/check"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); requestOptionsArgs.body = { "userId": req.username, "email": req.email }; var /** @type {?} */ responseProm_13 = this.connectionMgr.post(url, requestOptionsArgs.body, requestOptionsArgs); if (responseProm_13 != null && typeof responseProm_13 !== 'undefined') { return new Promise(function (resolve, reject) { responseProm_13.then(function (response) { resolve(response); }, function (error) { reject(error); }); }); } } return new Promise(function (resolve, reject) { resolve(null); }); }; /** * @param {?} authenProvider * @param {?} clientId * @param {?} token * @param {?=} clientName * @param {?=} clientData * @return {?} */ ParrotsAccountResource.prototype.oauthLoginWithHttpInfo = /** * @param {?} authenProvider * @param {?} clientId * @param {?} token * @param {?=} clientName * @param {?=} clientData * @return {?} */ function (authenProvider, clientId, token, clientName, clientData) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/oauth/login"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); this.addingHeaderRequestOptionsArgs(requestOptionsArgs, { "Token": token, "Authen-Provider": authenProvider, "Client-Id": clientId, "Client-Name": clientName }); requestOptionsArgs.body = (clientData !== undefined && clientData !== null) ? clientData : {}; return this.connectionMgr.postWithHttpInfo(url, requestOptionsArgs.body, requestOptionsArgs); } else { Promise.reject(null); } }; /** * @param {?} authenProvider * @param {?} clientId * @param {?} token * @param {?} registerDTO * @return {?} */ ParrotsAccountResource.prototype.createOauthWithHttpInfo = /** * @param {?} authenProvider * @param {?} clientId * @param {?} token * @param {?} registerDTO * @return {?} */ function (authenProvider, clientId, token, registerDTO) { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { var /** @type {?} */ url = this.basePath + "/oauth"; var /** @type {?} */ requestOptionsArgs = new RequestOptions(); this.addingHeaderRequestOptionsArgs(requestOptionsArgs, { "Token": token, "Authen-Provider": authenProvider, "Client-Id": clientId }); // registerDTO as "userId" // { // "userId": "string", // "password": "string", // "email": "string", // "firstName": "string", // "lastName": "string" // } requestOptionsArgs.body = (registerDTO !== undefined && registerDTO !== null) ? registerDTO : {}; return this.connectionMgr.postWithHttpInfo(url, requestOptionsArgs.body, requestOptionsArgs); } else { Promise.reject(null); } }; return ParrotsAccountResource; }(AbstractServerResource)); export { ParrotsAccountResource }; function ParrotsAccountResource_tsickle_Closure_declarations() { /** @type {?} */ ParrotsAccountResource.prototype.basePath; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFycm90c0FjY291bnRSZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lvLnBhcnJvdHMvIiwic291cmNlcyI6WyJsaWIvc2hhcmUvcmVzb3VyY2UvUGFycm90c0FjY291bnRSZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBa0IsT0FBTyxFQUFFLGNBQWMsRUFBMkUsTUFBTSxlQUFlLENBQUM7QUFHakosT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXJELElBQUE7SUFBNEMsa0RBQXNCO0lBSWhFLGdDQUFZLGFBQWlDO1FBQTdDLFlBQ0Usa0JBQU0sYUFBYSxDQUFDLFNBQ3JCO3lCQUprQixXQUFXOztLQUk3Qjs7Ozs7O0lBRU8sK0RBQThCOzs7OztjQUFDLE9BQTJCLEVBQUUsVUFBc0M7UUFDeEcsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1NBQ2hDO1FBRUQsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxHQUFHLENBQUMsQ0FBQyxxQkFBSSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUMzQzthQUNGO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFV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O1lBQ04sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0Qjs7aUNBaGJMO0VBTzRDLHNCQUFzQixFQTJhakUsQ0FBQTtBQTNhRCxrQ0EyYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwLCBSZXNwb25zZSwgSGVhZGVycywgUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RPcHRpb25zQXJncywgVVJMU2VhcmNoUGFyYW1zLCBSZXNwb25zZUNvbnRlbnRUeXBlLCBSZXF1ZXN0TWV0aG9kIH0gZnJvbSAnQGFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTWFuYWdlciB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IElDb25uZWN0aW9uTWFuYWdlciB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IEFic3RyYWN0U2VydmVyUmVzb3VyY2UgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBGYWNlYm9va0xvZ2luUHJvdmlkZXIsIEdvb2dsZUxvZ2luUHJvdmlkZXIgfSBmcm9tICdhbmd1bGFyLTYtc29jaWFsLWxvZ2luJztcbmltcG9ydCB7IENyZWF0ZUFjY291bnREVE8sIFNleCB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBQYXJyb3RzQWNjb3VudFJlc291cmNlIGV4dGVuZHMgQWJzdHJhY3RTZXJ2ZXJSZXNvdXJjZSB7XG5cbiAgcHJpdmF0ZSBiYXNlUGF0aCA9ICcuL2FjY291bnQnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb25NZ3I6IElDb25uZWN0aW9uTWFuYWdlcikge1xuICAgIHN1cGVyKGNvbm5lY3Rpb25NZ3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRpbmdIZWFkZXJSZXF1ZXN0T3B0aW9uc0FyZ3Mob3B0aW9uczogUmVxdWVzdE9wdGlvbnNBcmdzLCBoZWFkZXJEYXRhOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSk6IFJlcXVlc3RPcHRpb25zQXJncyB7XG4gICAgaWYgKG9wdGlvbnMgPT09IG51bGwgfHwgdHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlckRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGhlYWRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAob3B0aW9ucy5oZWFkZXJzICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25zLmhlYWRlcnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBoZWFkZXJEYXRhKSB7XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLnNldChrZXksIGhlYWRlckRhdGFba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRlckRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVBhc3N3b3JkV2l0aEh0dHBJbmZvKGJvZHk6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb25uZWN0aW9uTWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy5iYXNlUGF0aCArIFwiL3JlY292ZXJ5L3NldHBhc3N3b3JkXCI7XG5cbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcblxuICAgICAgbGV0IHJlc3BvbnNlUHJvbSA9IHRoaXMuY29ubmVjdGlvbk1nci5wb3N0V2l0aEh0dHBJbmZvKHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcblxuICAgICAgaWYgKHJlc3BvbnNlUHJvbSAhPSBudWxsICYmIHR5cGVvZiByZXNwb25zZVByb20gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VQcm9tLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVBhc3N3b3JkKGJvZHk6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb25uZWN0aW9uTWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy5iYXNlUGF0aCArIFwiL3JlY292ZXJ5L3NldHBhc3N3b3JkXCI7XG5cbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcblxuICAgICAgbGV0IHJlc3BvbnNlUHJvbSA9IHRoaXMuY29ubmVjdGlvbk1nci5wb3N0KHVybCwgYm9keSwgcmVxdWVzdE9wdGlvbnNBcmdzKTtcblxuICAgICAgaWYgKHJlc3BvbnNlUHJvbSAhPSBudWxsICYmIHR5cGVvZiByZXNwb25zZVByb20gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VQcm9tLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbmRFbWFpbENoYW5nZVBhc3N3b3JkV2l0aEh0dHBJbmZvKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25NZ3IgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29ubmVjdGlvbk1nciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCB1cmw6IHN0cmluZyA9IHRoaXMuYmFzZVBhdGggKyBcIi9yZWNvdmVyeS9yZXF1ZXN0XCI7XG5cbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcbiAgICAgIHJlcXVlc3RPcHRpb25zQXJncy5ib2R5ID0ge1xuICAgICAgICBlbWFpbDogZW1haWxcbiAgICAgIH07XG5cbiAgICAgIGxldCByZXNwb25zZVByb20gPSB0aGlzLmNvbm5lY3Rpb25NZ3IucG9zdFdpdGhIdHRwSW5mbyh1cmwsIHJlcXVlc3RPcHRpb25zQXJncy5ib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuXG4gICAgICBpZiAocmVzcG9uc2VQcm9tICE9IG51bGwgJiYgdHlwZW9mIHJlc3BvbnNlUHJvbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICByZXNwb25zZVByb20udGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VuZEVtYWlsQ2hhbmdlUGFzc3dvcmQoZW1haWw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb25uZWN0aW9uTWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy5iYXNlUGF0aCArIFwiL3JlY292ZXJ5L3JlcXVlc3RcIjtcblxuICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IG5ldyBSZXF1ZXN0T3B0aW9ucygpO1xuICAgICAgcmVxdWVzdE9wdGlvbnNBcmdzLmJvZHkgPSB7XG4gICAgICAgIGVtYWlsOiBlbWFpbFxuICAgICAgfTtcblxuICAgICAgbGV0IHJlc3BvbnNlUHJvbSA9IHRoaXMuY29ubmVjdGlvbk1nci5wb3N0KHVybCwgcmVxdWVzdE9wdGlvbnNBcmdzLmJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG5cbiAgICAgIGlmIChyZXNwb25zZVByb20gIT0gbnVsbCAmJiB0eXBlb2YgcmVzcG9uc2VQcm9tICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlUHJvbS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kRW1haWxWYWxpZGF0aW9uQWNjb3VudFdpdGhIdHRwSW5mbyhib2R5OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb25uZWN0aW9uTWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy5iYXNlUGF0aCArIFwiL3NlbmRlbWFpbHZhbGlkYXRpb25hY2NvdW50XCI7XG5cbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcbiAgICAgIHJlcXVlc3RPcHRpb25zQXJncy5ib2R5ID0gYm9keTtcblxuICAgICAgbGV0IHJlc3BvbnNlUHJvbSA9IHRoaXMuY29ubmVjdGlvbk1nci5wb3N0V2l0aEh0dHBJbmZvKHVybCwgcmVxdWVzdE9wdGlvbnNBcmdzLmJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG5cbiAgICAgIGlmIChyZXNwb25zZVByb20gIT0gbnVsbCAmJiB0eXBlb2YgcmVzcG9uc2VQcm9tICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlUHJvbS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kRW1haWxWYWxpZGF0aW9uQWNjb3VudChib2R5OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25NZ3IgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29ubmVjdGlvbk1nciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCB1cmw6IHN0cmluZyA9IHRoaXMuYmFzZVBhdGggKyBcIi9zZW5kZW1haWx2YWxpZGF0aW9uYWNjb3VudFwiO1xuXG4gICAgICAvLyEgZm9yIHRlc3RpbmdcbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcbiAgICAgIHJlcXVlc3RPcHRpb25zQXJncy5ib2R5ID0gYm9keTtcblxuICAgICAgbGV0IHJlc3BvbnNlUHJvbSA9IHRoaXMuY29ubmVjdGlvbk1nci5wb3N0KHVybCwgcmVxdWVzdE9wdGlvbnNBcmdzLmJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG5cbiAgICAgIGlmIChyZXNwb25zZVByb20gIT0gbnVsbCAmJiB0eXBlb2YgcmVzcG9uc2VQcm9tICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlUHJvbS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZUFjY291bnRXaXRoSHR0cEluZm8odXNlcklkOiBzdHJpbmcsIHNlY3JldDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uTWdyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbm5lY3Rpb25NZ3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgdXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VQYXRoICsgXCIvYWN0aXZhdGUvY29uZmlybT91c2VySWQ9XCIgKyB1c2VySWQgKyBcIiZzZWNyZXQ9XCIgKyBzZWNyZXQ7XG5cbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcbiAgICAgIGxldCBib2R5ID0ge1xuICAgICAgICB1c2VySWQ6IHVzZXJJZCxcbiAgICAgICAgc2VjcmV0OiBzZWNyZXRcbiAgICAgIH07XG5cbiAgICAgIGxldCByZXNwb25zZVByb20gPSB0aGlzLmNvbm5lY3Rpb25NZ3IucG9zdFdpdGhIdHRwSW5mbyh1cmwsIGJvZHksIHJlcXVlc3RPcHRpb25zQXJncyk7XG5cbiAgICAgIGlmIChyZXNwb25zZVByb20gIT0gbnVsbCAmJiB0eXBlb2YgcmVzcG9uc2VQcm9tICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlUHJvbS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvdW50c0luZm8odmFsdWU6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb25uZWN0aW9uTWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy5iYXNlUGF0aCArIFwiXCI7XG5cbiAgICAgIGxldCByZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoKTtcbiAgICAgIGxldCByZXNwb25zZVByb20gPSB0aGlzLmNvbm5lY3Rpb25NZ3IucG9zdFdpdGhIdHRwSW5mbyh1cmwsIHZhbHVlLCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuXG4gICAgICBpZiAocmVzcG9uc2VQcm9tICE9IG51bGwgJiYgdHlwZW9mIHJlc3BvbnNlUHJvbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICByZXNwb25zZVByb20udGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvdW50c0luZm9zKGJvZHk6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb25uZWN0aW9uTWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV0IHVybDogc3RyaW5nID0gdGhpcy5iYXNlUGF0aCArIFwiL3NlYXJjaFwiO1xuXG4gICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gbmV3IFJlcXVlc3RPcHRpb25zKCk7XG4gICAgICBsZXQgcmVzcG9uc2VQcm9tID0gdGhpcy5jb25uZWN0aW9uTWdyLnBvc3RXaXRoSHR0cEluZm8odXJsLCBib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuXG4gICAgICBpZiAocmVzcG9uc2VQcm9tICE9IG51bGwgJiYgdHlwZW9mIHJlc3BvbnNlUHJvbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICByZXNwb25zZVByb20udGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dpbldpdGhIdHRwSW5mbyh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uTWdyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbm5lY3Rpb25NZ3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgdXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VQYXRoICsgXCIvbG9naW5cIjtcblxuICAgICAgbGV0IHJlcXVlc3RPcHRpb25zQXJncyA9IG5ldyBSZXF1ZXN0T3B0aW9ucygpO1xuICAgICAgcmVxdWVzdE9wdGlvbnNBcmdzLmJvZHkgPSB7XG4gICAgICAgIFwidXNlcklkXCI6IHVzZXJuYW1lLFxuICAgICAgICBcInBhc3N3b3JkXCI6IHBhc3N3b3JkLFxuICAgICAgICBcImNsaWVudFwiOiB7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25NZ3IucG9zdFdpdGhIdHRwSW5mbyh1cmwsIHJlcXVlc3RPcHRpb25zQXJncy5ib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlcldpdGhIdHRwSW5mbyhjcmVhdGVBY2NvdW50RFRPOiBDcmVhdGVBY2NvdW50RFRPKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uTWdyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmNvbm5lY3Rpb25NZ3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgdXJsOiBzdHJpbmcgPSB0aGlzLmJhc2VQYXRoICsgXCIvcmVnaXN0ZXJcIjtcblxuICAgICAgLy8hIGZvciB0ZXN0aW5nXG4gICAgICBsZXQgcmVxdWVzdE9wdGlvbnNBcmdzID0gbmV3IFJlcXVlc3RPcHRpb25zKCk7XG4gICAgICByZXF1ZXN0T3B0aW9uc0FyZ3MuYm9keSA9IGNyZWF0ZUFjY291bnREVE87XG5cbiAgICAgIGxldCByZXNwb25zZVByb20gPSB0aGlzLmNvbm5lY3Rpb25NZ3IucG9zdFdpdGhIdHRwSW5mbyh1cmwsIHJlcXVlc3RPcHRpb25zQXJncy5ib2R5LCByZXF1ZXN0T3B0aW9uc0FyZ3MpO1xuXG4gICAgICBpZiAocmVzcG9uc2VQcm9tICE9IG51bGwgJiYgdHlwZW9mIHJlc3BvbnNlUHJvbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICByZXNwb25zZVByb20udGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtc