UNPKG

@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
/** * @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=