UNPKG

io.parrots

Version:

Parrots.io App

254 lines (253 loc) 21.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable } from '@angular/core'; import { ObservableManager } from 'com.phloxui'; import { PhloxAppInfoService } from 'com.phloxui'; var /** @type {?} */ TIMEOUT_TOPIC = 'user-service.session.timeout'; var /** @type {?} */ ERROR_TOPIC = 'user-service.session.error'; var UserService = /** @class */ (function () { function UserService(obsMgr, phloxAppInfoService) { var _this = this; this.obsMgr = obsMgr; if (phloxAppInfoService != null) { phloxAppInfoService.getAppInfo().then(function (result) { _this.phloxAppInfo = result; }); } } /** * @return {?} */ UserService.prototype.loadAccessibleApp = /** * @return {?} */ function () { // ! TODO: Edit this on PRODUCTION return null; }; /** * @return {?} */ UserService.prototype.validateConnectionTimeout = /** * @return {?} */ function () { var _this = this; this.timeout = setTimeout(function () { if (_this.userSession !== null && _this.userSession !== undefined) { _this.userSession.checkTimeout().then(function (result) { if (!result) { _this.obsMgr.publish(UserService.TIMEOUT_TOPIC, result); } _this.validateConnectionTimeout(); }).catch(function (error) { _this.obsMgr.publish(UserService.ERROR_TOPIC, error); _this.validateConnectionTimeout(); }); } }, this.phloxAppInfo.settings.DEFAULT_TIME_OUT_LOGIN_USER_SESSION); }; /** * @return {?} */ UserService.prototype.isLoggedOn = /** * @return {?} */ function () { var _this = this; if (this.userSession === null || this.userSession === undefined) { return Promise.resolve(false); } return this.userSession.load().then(function (result) { if (_this.userSession.getSessionId() === undefined || _this.userSession.getSessionId() === null || _this.userSession.getSessionId() === '') { return false; } else { return _this.userSession.checkTimeout().then(function (res) { if (res) { if (_this.timeout === null || _this.timeout === undefined) { _this.validateConnectionTimeout(); } return true; } else { return false; } }); } }); }; /** * @return {?} */ UserService.prototype.reloadAccessibleApp = /** * @return {?} */ function () { this.accessibleApps = null; return this.getAccessibleApp(); }; /** * @return {?} */ UserService.prototype.getAccessibleApp = /** * @return {?} */ function () { var _this = this; if (this.accessibleApps !== null && typeof this.accessibleApps !== 'undefined') { return Promise.resolve(this.accessibleApps); } else { var /** @type {?} */ prom = this.loadAccessibleApp(); if (prom !== null && prom !== undefined) { return this.loadAccessibleApp().then(function (result) { _this.accessibleApps = result; return Promise.resolve(_this.accessibleApps); }); } else { return Promise.resolve(null); } } }; /** * @param {?} requestData * @return {?} */ UserService.prototype.login = /** * @param {?} requestData * @return {?} */ function (requestData) { var _this = this; if (this.userSession === null || this.userSession === undefined) { return Promise.reject(null); } var /** @type {?} */ state = this.userSession.login(requestData); state.then(function (response) { if (response.status === 200) { if (_this.timeout !== null && _this.timeout !== undefined) { clearTimeout(_this.timeout); _this.timeout = null; } _this.validateConnectionTimeout(); return Promise.resolve(response); } else { return Promise.reject(response); } }); return state; }; /** * @return {?} */ UserService.prototype.logout = /** * @return {?} */ function () { var _this = this; if (this.userSession === null || this.userSession === undefined) { return Promise.reject(null); } var /** @type {?} */ state = this.userSession.logout(); state.then(function (response) { if (response.status === 200) { if (_this.timeout !== null && _this.timeout !== undefined) { clearTimeout(_this.timeout); _this.timeout = null; } return Promise.resolve(response); } else { return Promise.reject(response); } }); return state; }; /** * @return {?} */ UserService.prototype.getObservableManager = /** * @return {?} */ function () { return this.obsMgr; }; /** * @param {?} session * @return {?} */ UserService.prototype.initialize = /** * @param {?} session * @return {?} */ function (session) { if (this.timeout !== null && this.timeout !== undefined) { clearTimeout(this.timeout); this.timeout = null; } this.userSession = session; }; /** * @return {?} */ UserService.prototype.deinitialize = /** * @return {?} */ function () { if (this.timeout !== null && this.timeout !== undefined) { clearTimeout(this.timeout); this.timeout = null; } this.userSession = null; }; /** * @return {?} */ UserService.prototype.getUserSession = /** * @return {?} */ function () { return this.userSession; }; UserService.TIMEOUT_TOPIC = TIMEOUT_TOPIC; UserService.ERROR_TOPIC = ERROR_TOPIC; UserService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ UserService.ctorParameters = function () { return [ { type: ObservableManager, }, { type: PhloxAppInfoService, }, ]; }; return UserService; }()); export { UserService }; function UserService_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ UserService.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ UserService.ctorParameters; /** @type {?} */ UserService.TIMEOUT_TOPIC; /** @type {?} */ UserService.ERROR_TOPIC; /** @type {?} */ UserService.prototype.accessibleApps; /** @type {?} */ UserService.prototype.obsMgr; /** @type {?} */ UserService.prototype.phloxAppInfo; /** @type {?} */ UserService.prototype.userSession; /** @type {?} */ UserService.prototype.timeout; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lvLnBhcnJvdHMvIiwic291cmNlcyI6WyJsaWIvc2VydmljZS9Vc2VyU2VydmljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbEQscUJBQU0sYUFBYSxHQUFXLDhCQUE4QixDQUFDO0FBQzdELHFCQUFNLFdBQVcsR0FBVyw0QkFBNEIsQ0FBQzs7SUFpQnZELHFCQUFZLE1BQXlCLEVBQUUsbUJBQXdDO1FBQS9FLGlCQVVDO1FBUkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsRUFBRSxDQUFDLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUFNO2dCQUMzQyxLQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQzthQUM1QixDQUFDLENBQUM7U0FDSjtLQUVGOzs7O0lBS08sdUNBQWlCOzs7OztRQUV2QixNQUFNLENBQUMsSUFBSSxDQUFDOzs7OztJQUlOLCtDQUF5Qjs7Ozs7UUFFL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7WUFDeEIsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksS0FBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxLQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDbEMsVUFBQyxNQUFNO29CQUNMLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFD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SSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDOzs7OztJQUduQixvQ0FBYzs7OztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7Z0NBNUtxQixhQUFhOzhCQUNmLFdBQVc7O2dCQUp6RCxVQUFVOzs7O2dCQVhGLGlCQUFpQjtnQkFDakIsbUJBQW1COztzQkFINUI7O1NBY2EsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBobG94QXBwSW5mbyB9IGZyb20gJ2NvbS5waGxveHVpJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZU1hbmFnZXIgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm9TZXJ2aWNlIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgSVVzZXJTZXNzaW9uIH0gZnJvbSAnLi4vc2hhcmUvSVVzZXJTZXNzaW9uJztcblxuY29uc3QgVElNRU9VVF9UT1BJQzogc3RyaW5nID0gJ3VzZXItc2VydmljZS5zZXNzaW9uLnRpbWVvdXQnO1xuY29uc3QgRVJST1JfVE9QSUM6IHN0cmluZyA9ICd1c2VyLXNlcnZpY2Uuc2Vzc2lvbi5lcnJvcic7XG5cbi8qXG4qICMjIFVzZXJTZXJ2aWNlIGlzIHRoZSBzZXJ2aWNlIHRoYXQgcHJvdmlkZSBzZXJ2aWNlIG9mIHVzZXIgc3VjaCBhcyBsb2dpbiwgbG9nb3V0LCBsb2FkIGFjY2Vzc2libGVBcHBzXG4qICMjIGZyb20gdXNlclNlc3Npb25cbiovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVElNRU9VVF9UT1BJQzogc3RyaW5nID0gVElNRU9VVF9UT1BJQztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFUlJPUl9UT1BJQzogc3RyaW5nID0gRVJST1JfVE9QSUM7XG4gIHByaXZhdGUgYWNjZXNzaWJsZUFwcHM6IFBobG94QXBwSW5mb1tdO1xuICBwcml2YXRlIG9ic01ncjogT2JzZXJ2YWJsZU1hbmFnZXI7XG4gIHByaXZhdGUgcGhsb3hBcHBJbmZvOiBQaGxveEFwcEluZm87XG4gIHByaXZhdGUgdXNlclNlc3Npb246IElVc2VyU2Vzc2lvbjtcbiAgcHJpdmF0ZSB0aW1lb3V0OiBhbnk7XG5cbiAgY29uc3RydWN0b3Iob2JzTWdyOiBPYnNlcnZhYmxlTWFuYWdlciwgcGhsb3hBcHBJbmZvU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuXG4gICAgdGhpcy5vYnNNZ3IgPSBvYnNNZ3I7XG5cbiAgICBpZiAocGhsb3hBcHBJbmZvU2VydmljZSAhPSBudWxsKSB7XG4gICAgICBwaGxveEFwcEluZm9TZXJ2aWNlLmdldEFwcEluZm8oKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5waGxveEFwcEluZm8gPSByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qXG4gICogIyMgcmV0dXJuIFByb21pc2Ugd2hpY2ggcmVzb2x2ZSBBY2Nlc3NpYmxlIFBobG94QXBwSW5mb1xuICAqL1xuICBwcml2YXRlIGxvYWRBY2Nlc3NpYmxlQXBwKCk6IFByb21pc2U8UGhsb3hBcHBJbmZvW10+IHtcbiAgICAvLyAhIFRPRE86IEVkaXQgdGhpcyBvbiBQUk9EVUNUSU9OXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvL2ZvciBsb29wIHZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXRcbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0KCkge1xuXG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy51c2VyU2Vzc2lvbiAhPT0gbnVsbCAmJiB0aGlzLnVzZXJTZXNzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy51c2VyU2Vzc2lvbi5jaGVja1RpbWVvdXQoKS50aGVuKFxuICAgICAgICAgIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgIHRoaXMub2JzTWdyLnB1Ymxpc2goVXNlclNlcnZpY2UuVElNRU9VVF9UT1BJQywgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVDb25uZWN0aW9uVGltZW91dCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9ic01nci5wdWJsaXNoKFVzZXJTZXJ2aWNlLkVSUk9SX1RPUElDLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnBobG94QXBwSW5mby5zZXR0aW5ncy5ERUZBVUxUX1RJTUVfT1VUX0xPR0lOX1VTRVJfU0VTU0lPTik7XG5cbiAgfVxuXG4gIHB1YmxpYyBpc0xvZ2dlZE9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnVzZXJTZXNzaW9uID09PSBudWxsIHx8IHRoaXMudXNlclNlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudXNlclNlc3Npb24ubG9hZCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHRoaXMudXNlclNlc3Npb24uZ2V0U2Vzc2lvbklkKCkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnVzZXJTZXNzaW9uLmdldFNlc3Npb25JZCgpID09PSBudWxsIHx8IHRoaXMudXNlclNlc3Npb24uZ2V0U2Vzc2lvbklkKCkgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJTZXNzaW9uLmNoZWNrVGltZW91dCgpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQgPT09IG51bGwgfHwgdGhpcy50aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRBY2Nlc3NpYmxlQXBwKCk6IFByb21pc2U8UGhsb3hBcHBJbmZvW10+IHtcbiAgICB0aGlzLmFjY2Vzc2libGVBcHBzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc2libGVBcHAoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2Nlc3NpYmxlQXBwKCk6IFByb21pc2U8UGhsb3hBcHBJbmZvW10+IHtcbiAgICBpZiAodGhpcy5hY2Nlc3NpYmxlQXBwcyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5hY2Nlc3NpYmxlQXBwcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hY2Nlc3NpYmxlQXBwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwcm9tID0gdGhpcy5sb2FkQWNjZXNzaWJsZUFwcCgpO1xuICAgICAgaWYgKHByb20gIT09IG51bGwgJiYgcHJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBY2Nlc3NpYmxlQXBwKCkudGhlbigocmVzdWx0OiBQaGxveEFwcEluZm9bXSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWNjZXNzaWJsZUFwcHMgPSByZXN1bHQ7XG5cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYWNjZXNzaWJsZUFwcHMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvZ2luKHJlcXVlc3REYXRhOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKHRoaXMudXNlclNlc3Npb24gPT09IG51bGwgfHwgdGhpcy51c2VyU2Vzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXRlID0gdGhpcy51c2VyU2Vzc2lvbi5sb2dpbihyZXF1ZXN0RGF0YSk7XG5cbiAgICBzdGF0ZS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCAhPT0gbnVsbCAmJiB0aGlzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsaWRhdGVDb25uZWN0aW9uVGltZW91dCgpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0ZTtcblxuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKHRoaXMudXNlclNlc3Npb24gPT09IG51bGwgfHwgdGhpcy51c2VyU2Vzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXRlID0gdGhpcy51c2VyU2Vzc2lvbi5sb2dvdXQoKTtcblxuICAgIHN0YXRlLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBpZiAodGhpcy50aW1lb3V0ICE9PSBudWxsICYmIHRoaXMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cbiAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YXRlO1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0T2JzZXJ2YWJsZU1hbmFnZXIoKTogT2JzZXJ2YWJsZU1hbmFnZXIge1xuICAgIHJldHVybiB0aGlzLm9ic01ncjtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplKHNlc3Npb246IElVc2VyU2Vzc2lvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVvdXQgIT09IG51bGwgJiYgdGhpcy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudXNlclNlc3Npb24gPSBzZXNzaW9uO1xuICB9XG5cbiAgcHVibGljIGRlaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lb3V0ICE9PSBudWxsICYmIHRoaXMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblxuICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJTZXNzaW9uID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyU2Vzc2lvbigpOiBJVXNlclNlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXNzaW9uO1xuICB9XG59XG4iXX0=