@cause-911/social-network
Version:
Run `npm install @cause-911/social-network --save` to add this library to your project
368 lines (366 loc) • 22.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { LoadScriptService } from './load-script.service';
import { HttpClient } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { catchError, delay, map, retryWhen, take } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
import * as i2 from "./load-script.service";
/**
* @record
*/
function Twitter() { }
if (false) {
/** @type {?} */
Twitter.prototype.events;
/**
* @param {?} callback
* @return {?}
*/
Twitter.prototype.ready = function (callback) { };
/**
* @param {?} config
* @return {?}
*/
Twitter.prototype.init = function (config) { };
/**
* @param {?} callback
* @param {?} permissions
* @return {?}
*/
Twitter.prototype.login = function (callback, permissions) { };
/**
* @param {?} config
* @return {?}
*/
Twitter.prototype.getAuthResponse = function (config) { };
/**
* @param {?} config
* @return {?}
*/
Twitter.prototype.getLoginStatus = function (config) { };
}
var TwitterService = /** @class */ (function () {
function TwitterService(httpClient, loadScript) {
var _this = this;
this.httpClient = httpClient;
this.isLoaded = false;
this.isInitialize = false;
loadScript.get('https://platform.twitter.com/widgets.js').subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
_this.isLoaded = true;
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.error = error;
}));
}
/**
* @param {?} appId
* @return {?}
*/
TwitterService.prototype.initialize = /**
* @param {?} appId
* @return {?}
*/
function (appId) {
var _this = this;
this.appId = appId;
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
function (observer) {
if (_this.error) {
observer.error(_this.error);
}
else if (!_this.isLoaded) {
observer.error(new Error('Twitter SDK is not loaded'));
}
else {
observer.next(true);
}
observer.complete();
})).pipe(map((/**
* @return {?}
*/
function () { return _this.initializeSDK(); })), retryWhen((/**
* @param {?} error
* @return {?}
*/
function (error) { return error.pipe(delay(200), take(25)); })), catchError((/**
* @param {?} error
* @return {?}
*/
function (error) { return of(error); })));
};
/**
* @return {?}
*/
TwitterService.prototype.findManageablePage = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var loadError = this.validateSDK();
if (loadError) {
return of(loadError);
}
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
function (observer) {
_this.getAuthentification().subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
if (response && response.userID) {
_this.listAccessiblePage(response.userID).subscribe((/**
* @param {?} pages
* @return {?}
*/
function (pages) {
observer.next(pages);
observer.complete();
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
observer.error(error);
}));
}
else {
observer.error(new Error('No user are connected to Facebook'));
}
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
observer.error(error);
}));
}));
};
/**
* @return {?}
*/
TwitterService.prototype.askToManagePage = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var loadError = this.validateSDK();
if (loadError) {
return of(loadError);
}
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
function (observer) {
_this.getAuthentification().subscribe((/**
* @return {?}
*/
function () {
_this.askTokenWithScope('manage_pages, publish_pages').subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
_this.listAccessiblePage(response.userID).subscribe((/**
* @param {?} pages
* @return {?}
*/
function (pages) {
observer.next(pages);
observer.complete();
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
observer.error(error);
}));
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
observer.error(error);
}));
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
observer.error(error);
}));
}));
};
/**
* @param {?} pageId
* @param {?} accessToken
* @param {?} message
* @return {?}
*/
TwitterService.prototype.publishToPage = /**
* @param {?} pageId
* @param {?} accessToken
* @param {?} message
* @return {?}
*/
function (pageId, accessToken, message) {
return this.httpClient.post("https://graph.facebook.com/" + pageId + "/feed", {
message: message,
access_token: accessToken,
});
};
/**
* @private
* @param {?} userId
* @return {?}
*/
TwitterService.prototype.listAccessiblePage = /**
* @private
* @param {?} userId
* @return {?}
*/
function (userId) {
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
function (observer) {
/*FB.api(`/${userId}/accounts`, (response: any) => {
if (response && !response.error) {
observer.next(response.data);
} else {
observer.error(response);
}
observer.complete();
});*/
}));
};
/**
* @private
* @param {?} scope
* @return {?}
*/
TwitterService.prototype.askTokenWithScope = /**
* @private
* @param {?} scope
* @return {?}
*/
function (scope) {
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
function (observer) {
/*FB.login((response: any) => {
observer.next(response.authResponse);
observer.complete();
}, {
scope: scope,
});*/
}));
};
/**
* @private
* @return {?}
*/
TwitterService.prototype.getAuthentification = /**
* @private
* @return {?}
*/
function () {
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
function (observer) {
/*FB.getLoginStatus((response: any) => {
if (response.authResponse) {
observer.next(response.authResponse);
} else {
observer.error(new Error('No facebook connection'));
}
observer.complete();
});*/
}));
};
/**
* @private
* @return {?}
*/
TwitterService.prototype.initializeSDK = /**
* @private
* @return {?}
*/
function () {
var _this = this;
twttr.ready((/**
* @return {?}
*/
function () {
_this.isInitialize = true;
}));
};
/**
* @private
* @return {?}
*/
TwitterService.prototype.validateSDK = /**
* @private
* @return {?}
*/
function () {
if (!this.isInitialize) {
return new Error('You need to initialize the service');
}
return false;
};
TwitterService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
TwitterService.ctorParameters = function () { return [
{ type: HttpClient },
{ type: LoadScriptService }
]; };
/** @nocollapse */ TwitterService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function TwitterService_Factory() { return new TwitterService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.LoadScriptService)); }, token: TwitterService, providedIn: "root" });
return TwitterService;
}());
export { TwitterService };
if (false) {
/** @type {?} */
TwitterService.prototype.error;
/** @type {?} */
TwitterService.prototype.appId;
/** @type {?} */
TwitterService.prototype.isLoaded;
/** @type {?} */
TwitterService.prototype.isInitialize;
/**
* @type {?}
* @private
*/
TwitterService.prototype.httpClient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpdHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNhdXNlLTkxMS9zb2NpYWwtbmV0d29yay8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvc2VydmljZXMvdHdpdHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBSXZFLHNCQVlDOzs7SUFYRyx5QkFBWTs7Ozs7SUFFWixrREFBMkI7Ozs7O0lBRTNCLCtDQUF3Qjs7Ozs7O0lBRXhCLCtEQUE2Qzs7Ozs7SUFFN0MsMERBQW1DOzs7OztJQUVuQyx5REFBa0M7O0FBR3RDO0lBU0ksd0JBQ1ksVUFBc0IsRUFDOUIsVUFBNkI7UUFGakMsaUJBU0M7UUFSVyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSmxDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFNakIsVUFBVSxDQUFDLEdBQUcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFBLFFBQVE7WUFDeEUsS0FBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7OztRQUFFLFVBQUEsS0FBSztZQUNKLEtBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Ozs7SUFFRCxtQ0FBVTs7OztJQUFWLFVBQVcsS0FB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RUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Ozs7SUFFTyxzQ0FBYTs7OztJQUFyQjtRQUFBLGlCQUlDO1FBSEcsS0FBSyxDQUFDLEtBQUs7OztRQUFDO1lBQ1IsS0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7OztJQUVPLG9DQUFXOzs7O0lBQW5CO1FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1NBQzFEO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7Z0JBckpKLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozs7Z0JBdEJPLFVBQVU7Z0JBRFYsaUJBQWlCOzs7eUJBRHpCO0NBNEtDLEFBdEpELElBc0pDO1NBbkpZLGNBQWM7OztJQUN2QiwrQkFBVzs7SUFDWCwrQkFBYzs7SUFDZCxrQ0FBaUI7O0lBQ2pCLHNDQUFxQjs7Ozs7SUFHakIsb0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9hZFNjcmlwdFNlcnZpY2V9IGZyb20gJy4vbG9hZC1zY3JpcHQuc2VydmljZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkZWxheSwgbWFwLCByZXRyeVdoZW4sIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZGVjbGFyZSB2YXIgdHd0dHI6IFR3aXR0ZXI7XG5cbmludGVyZmFjZSBUd2l0dGVyIHtcbiAgICBldmVudHM6IGFueTtcblxuICAgIHJlYWR5KGNhbGxiYWNrOiBhbnkpOiB2b2lkO1xuXG4gICAgaW5pdChjb25maWc6IGFueSk6IHZvaWQ7XG5cbiAgICBsb2dpbihjYWxsYmFjazogYW55LCBwZXJtaXNzaW9uczogYW55KTogdm9pZDtcblxuICAgIGdldEF1dGhSZXNwb25zZShjb25maWc6IGFueSk6IHZvaWQ7XG5cbiAgICBnZXRMb2dpblN0YXR1cyhjb25maWc6IGFueSk6IHZvaWQ7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHdpdHRlclNlcnZpY2Uge1xuICAgIGVycm9yOiBhbnk7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBpc0xvYWRlZCA9IGZhbHNlO1xuICAgIGlzSW5pdGlhbGl6ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgbG9hZFNjcmlwdDogTG9hZFNjcmlwdFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIGxvYWRTY3JpcHQuZ2V0KCdodHRwczovL3BsYXRmb3JtLnR3aXR0ZXIuY29tL3dpZGdldHMuanMnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZShhcHBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuYXBwSWQgPSBhcHBJZDtcblxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih0aGlzLmVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ1R3aXR0ZXIgU0RLIGlzIG5vdCBsb2FkZWQnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5pbml0aWFsaXplU0RLKCkpLFxuICAgICAgICAgICAgcmV0cnlXaGVuKGVycm9yID0+IGVycm9yLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVsYXkoMjAwKSxcbiAgICAgICAgICAgICAgICB0YWtlKDI1KSxcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihlcnJvcikpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZmluZE1hbmFnZWFibGVQYWdlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGxvYWRFcnJvciA9IHRoaXMudmFsaWRhdGVTREsoKTtcbiAgICAgICAgaWYgKGxvYWRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGxvYWRFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRBdXRoZW50aWZpY2F0aW9uKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudXNlcklEKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdEFjY2Vzc2libGVQYWdlKHJlc3BvbnNlLnVzZXJJRCkuc3Vic2NyaWJlKHBhZ2VzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocGFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ05vIHVzZXIgYXJlIGNvbm5lY3RlZCB0byBGYWNlYm9vaycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFza1RvTWFuYWdlUGFnZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBsb2FkRXJyb3IgPSB0aGlzLnZhbGlkYXRlU0RLKCk7XG4gICAgICAgIGlmIChsb2FkRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihsb2FkRXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXV0aGVudGlmaWNhdGlvbigpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc2tUb2tlbldpdGhTY29wZSgnbWFuYWdlX3BhZ2VzLCBwdWJsaXNoX3BhZ2VzJykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0QWNjZXNzaWJsZVBhZ2UocmVzcG9uc2UudXNlcklEKS5zdWJzY3JpYmUocGFnZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChwYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaXNoVG9QYWdlKHBhZ2VJZDogc3RyaW5nLCBhY2Nlc3NUb2tlbjogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoYGh0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLyR7cGFnZUlkfS9mZWVkYCwge1xuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGlzdEFjY2Vzc2libGVQYWdlKHVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIC8qRkIuYXBpKGAvJHt1c2VySWR9L2FjY291bnRzYCwgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTsqL1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFza1Rva2VuV2l0aFNjb3BlKHNjb3BlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgLypGQi5sb2dpbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UuYXV0aFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgICAgICAgIH0pOyovXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXV0aGVudGlmaWNhdGlvbigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgLypGQi5nZXRMb2dpblN0YXR1cygocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5hdXRoUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwb25zZS5hdXRoUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFcnJvcignTm8gZmFjZWJvb2sgY29ubmVjdGlvbicpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU0RLKCkge1xuICAgICAgICB0d3R0ci5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVTREsoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1lvdSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHNlcnZpY2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=