com.phloxui
Version:
PhloxUI Ng2+ Framework
254 lines (253 loc) • 21.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable } from '@angular/core';
import { ObservableManager } from './ObservableManager.service';
import { PhloxAppInfoService } from './PhloxAppInfoService.service';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2UvVXNlclNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVwRSxxQkFBTSxhQUFhLEdBQVcsOEJBQThCLENBQUM7QUFDN0QscUJBQU0sV0FBVyxHQUFXLDRCQUE0QixDQUFDOztJQWF2RCxxQkFBWSxNQUF5QixFQUFFLG1CQUF3QztRQUEvRSxpQkFVQztRQVJDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBTTtnQkFDM0MsS0FBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7YUFDNUIsQ0FBQyxDQUFDO1NBQ0o7S0FFRjs7OztJQUVPLHVDQUFpQjs7Ozs7UUFFdkIsTUFBTSxDQUFDLElBQUksQ0FBQzs7Ozs7SUFJTiwrQ0FBeUI7Ozs7O1FBRS9CLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLEtBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsS0FBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ2xDLFVBQUMsTUFBTTtvQkFDTCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7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LElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3hELFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzs7Ozs7SUFHbkIsb0NBQWM7Ozs7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7O2dDQXpLcUIsYUFBYTs4QkFDZixXQUFXOztnQkFKekQsVUFBVTs7OztnQkFORixpQkFBaUI7Z0JBQ2pCLG1CQUFtQjs7c0JBSjVCOztTQVVhLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm8gfSBmcm9tICcuLi9jb21wb25lbnQvbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IElVc2VyU2Vzc2lvbiB9IGZyb20gJy4uL3NoYXJlL0lVc2VyU2Vzc2lvbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTWFuYWdlciB9IGZyb20gJy4vT2JzZXJ2YWJsZU1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm9TZXJ2aWNlIH0gZnJvbSAnLi9QaGxveEFwcEluZm9TZXJ2aWNlLnNlcnZpY2UnO1xuXG5jb25zdCBUSU1FT1VUX1RPUElDOiBzdHJpbmcgPSAndXNlci1zZXJ2aWNlLnNlc3Npb24udGltZW91dCc7XG5jb25zdCBFUlJPUl9UT1BJQzogc3RyaW5nID0gJ3VzZXItc2VydmljZS5zZXNzaW9uLmVycm9yJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRJTUVPVVRfVE9QSUM6IHN0cmluZyA9IFRJTUVPVVRfVE9QSUM7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRVJST1JfVE9QSUM6IHN0cmluZyA9IEVSUk9SX1RPUElDO1xuICBwcml2YXRlIGFjY2Vzc2libGVBcHBzOiBQaGxveEFwcEluZm9bXTtcbiAgcHJpdmF0ZSBvYnNNZ3I6IE9ic2VydmFibGVNYW5hZ2VyO1xuICBwcml2YXRlIHBobG94QXBwSW5mbzogUGhsb3hBcHBJbmZvO1xuICBwcml2YXRlIHVzZXJTZXNzaW9uOiBJVXNlclNlc3Npb247XG4gIHByaXZhdGUgdGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKG9ic01ncjogT2JzZXJ2YWJsZU1hbmFnZXIsIHBobG94QXBwSW5mb1NlcnZpY2U6IFBobG94QXBwSW5mb1NlcnZpY2UpIHtcblxuICAgIHRoaXMub2JzTWdyID0gb2JzTWdyO1xuXG4gICAgaWYgKHBobG94QXBwSW5mb1NlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgcGhsb3hBcHBJbmZvU2VydmljZS5nZXRBcHBJbmZvKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMucGhsb3hBcHBJbmZvID0gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGxvYWRBY2Nlc3NpYmxlQXBwKCk6IFByb21pc2U8UGhsb3hBcHBJbmZvW10+IHtcbiAgICAvLyAhIFRPRE86IEVkaXQgdGhpcyBvbiBQUk9EVUNUSU9OXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvL2ZvciBsb29wIHZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXRcbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0KCkge1xuXG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy51c2VyU2Vzc2lvbiAhPT0gbnVsbCAmJiB0aGlzLnVzZXJTZXNzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy51c2VyU2Vzc2lvbi5jaGVja1RpbWVvdXQoKS50aGVuKFxuICAgICAgICAgIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgIHRoaXMub2JzTWdyLnB1Ymxpc2goVXNlclNlcnZpY2UuVElNRU9VVF9UT1BJQywgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVDb25uZWN0aW9uVGltZW91dCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9ic01nci5wdWJsaXNoKFVzZXJTZXJ2aWNlLkVSUk9SX1RPUElDLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnBobG94QXBwSW5mby5zZXR0aW5ncy5ERUZBVUxUX1RJTUVfT1VUX0xPR0lOX1VTRVJfU0VTU0lPTik7XG5cbiAgfVxuXG4gIHB1YmxpYyBpc0xvZ2dlZE9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnVzZXJTZXNzaW9uID09PSBudWxsIHx8IHRoaXMudXNlclNlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudXNlclNlc3Npb24ubG9hZCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHRoaXMudXNlclNlc3Npb24uZ2V0U2Vzc2lvbklkKCkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnVzZXJTZXNzaW9uLmdldFNlc3Npb25JZCgpID09PSBudWxsIHx8IHRoaXMudXNlclNlc3Npb24uZ2V0U2Vzc2lvbklkKCkgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJTZXNzaW9uLmNoZWNrVGltZW91dCgpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQgPT09IG51bGwgfHwgdGhpcy50aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRBY2Nlc3NpYmxlQXBwKCk6IFByb21pc2U8UGhsb3hBcHBJbmZvW10+IHtcbiAgICB0aGlzLmFjY2Vzc2libGVBcHBzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc2libGVBcHAoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2Nlc3NpYmxlQXBwKCk6IFByb21pc2U8UGhsb3hBcHBJbmZvW10+IHtcbiAgICBpZiAodGhpcy5hY2Nlc3NpYmxlQXBwcyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5hY2Nlc3NpYmxlQXBwcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hY2Nlc3NpYmxlQXBwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwcm9tID0gdGhpcy5sb2FkQWNjZXNzaWJsZUFwcCgpO1xuICAgICAgaWYgKHByb20gIT09IG51bGwgJiYgcHJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBY2Nlc3NpYmxlQXBwKCkudGhlbigocmVzdWx0OiBQaGxveEFwcEluZm9bXSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWNjZXNzaWJsZUFwcHMgPSByZXN1bHQ7XG5cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYWNjZXNzaWJsZUFwcHMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvZ2luKHJlcXVlc3REYXRhOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKHRoaXMudXNlclNlc3Npb24gPT09IG51bGwgfHwgdGhpcy51c2VyU2Vzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXRlID0gdGhpcy51c2VyU2Vzc2lvbi5sb2dpbihyZXF1ZXN0RGF0YSk7XG5cbiAgICBzdGF0ZS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCAhPT0gbnVsbCAmJiB0aGlzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsaWRhdGVDb25uZWN0aW9uVGltZW91dCgpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0ZTtcblxuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKHRoaXMudXNlclNlc3Npb24gPT09IG51bGwgfHwgdGhpcy51c2VyU2Vzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXRlID0gdGhpcy51c2VyU2Vzc2lvbi5sb2dvdXQoKTtcblxuICAgIHN0YXRlLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBpZiAodGhpcy50aW1lb3V0ICE9PSBudWxsICYmIHRoaXMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cbiAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YXRlO1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0T2JzZXJ2YWJsZU1hbmFnZXIoKTogT2JzZXJ2YWJsZU1hbmFnZXIge1xuICAgIHJldHVybiB0aGlzLm9ic01ncjtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplKHNlc3Npb246IElVc2VyU2Vzc2lvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVvdXQgIT09IG51bGwgJiYgdGhpcy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudXNlclNlc3Npb24gPSBzZXNzaW9uO1xuICB9XG5cbiAgcHVibGljIGRlaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lb3V0ICE9PSBudWxsICYmIHRoaXMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblxuICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJTZXNzaW9uID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyU2Vzc2lvbigpOiBJVXNlclNlc3Npb24ge1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXNzaW9uO1xuICB9XG59XG4iXX0=