@cause-911/social-network
Version:
Run `npm install @cause-911/social-network --save` to add this library to your project
327 lines (325 loc) • 21.3 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) { };
}
export class TwitterService {
/**
* @param {?} httpClient
* @param {?} loadScript
*/
constructor(httpClient, loadScript) {
this.httpClient = httpClient;
this.isLoaded = false;
this.isInitialize = false;
loadScript.get('https://platform.twitter.com/widgets.js').subscribe((/**
* @param {?} response
* @return {?}
*/
response => {
this.isLoaded = true;
}), (/**
* @param {?} error
* @return {?}
*/
error => {
this.error = error;
}));
}
/**
* @param {?} appId
* @return {?}
*/
initialize(appId) {
this.appId = appId;
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
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 {?}
*/
() => this.initializeSDK())), retryWhen((/**
* @param {?} error
* @return {?}
*/
error => error.pipe(delay(200), take(25)))), catchError((/**
* @param {?} error
* @return {?}
*/
error => of(error))));
}
/**
* @return {?}
*/
findManageablePage() {
/** @type {?} */
const loadError = this.validateSDK();
if (loadError) {
return of(loadError);
}
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
observer => {
this.getAuthentification().subscribe((/**
* @param {?} response
* @return {?}
*/
response => {
if (response && response.userID) {
this.listAccessiblePage(response.userID).subscribe((/**
* @param {?} pages
* @return {?}
*/
pages => {
observer.next(pages);
observer.complete();
}), (/**
* @param {?} error
* @return {?}
*/
error => {
observer.error(error);
}));
}
else {
observer.error(new Error('No user are connected to Facebook'));
}
}), (/**
* @param {?} error
* @return {?}
*/
error => {
observer.error(error);
}));
}));
}
/**
* @return {?}
*/
askToManagePage() {
/** @type {?} */
const loadError = this.validateSDK();
if (loadError) {
return of(loadError);
}
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
observer => {
this.getAuthentification().subscribe((/**
* @return {?}
*/
() => {
this.askTokenWithScope('manage_pages, publish_pages').subscribe((/**
* @param {?} response
* @return {?}
*/
response => {
this.listAccessiblePage(response.userID).subscribe((/**
* @param {?} pages
* @return {?}
*/
pages => {
observer.next(pages);
observer.complete();
}), (/**
* @param {?} error
* @return {?}
*/
error => {
observer.error(error);
}));
}), (/**
* @param {?} error
* @return {?}
*/
error => {
observer.error(error);
}));
}), (/**
* @param {?} error
* @return {?}
*/
error => {
observer.error(error);
}));
}));
}
/**
* @param {?} pageId
* @param {?} accessToken
* @param {?} message
* @return {?}
*/
publishToPage(pageId, accessToken, message) {
return this.httpClient.post(`https://graph.facebook.com/${pageId}/feed`, {
message: message,
access_token: accessToken,
});
}
/**
* @private
* @param {?} userId
* @return {?}
*/
listAccessiblePage(userId) {
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
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 {?}
*/
askTokenWithScope(scope) {
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
observer => {
/*FB.login((response: any) => {
observer.next(response.authResponse);
observer.complete();
}, {
scope: scope,
});*/
}));
}
/**
* @private
* @return {?}
*/
getAuthentification() {
return Observable.create((/**
* @param {?} observer
* @return {?}
*/
observer => {
/*FB.getLoginStatus((response: any) => {
if (response.authResponse) {
observer.next(response.authResponse);
} else {
observer.error(new Error('No facebook connection'));
}
observer.complete();
});*/
}));
}
/**
* @private
* @return {?}
*/
initializeSDK() {
twttr.ready((/**
* @return {?}
*/
() => {
this.isInitialize = true;
}));
}
/**
* @private
* @return {?}
*/
validateSDK() {
if (!this.isInitialize) {
return new Error('You need to initialize the service');
}
return false;
}
}
TwitterService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
TwitterService.ctorParameters = () => [
{ 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" });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpdHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNhdXNlLTkxMS9zb2NpYWwtbmV0d29yay8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvc2VydmljZXMvdHdpdHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBSXZFLHNCQVlDOzs7SUFYRyx5QkFBWTs7Ozs7SUFFWixrREFBMkI7Ozs7O0lBRTNCLCtDQUF3Qjs7Ozs7O0lBRXhCLCtEQUE2Qzs7Ozs7SUFFN0MsMERBQW1DOzs7OztJQUVuQyx5REFBa0M7O0FBTXRDLE1BQU0sT0FBTyxjQUFjOzs7OztJQU12QixZQUNZLFVBQXNCLEVBQzlCLFVBQTZCO1FBRHJCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFKbEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQU1qQixVQUFVLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsU0FBUzs7OztRQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7Ozs7UUFBRSxLQUFLLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Ozs7SUFFRCxVQUFV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QWE7UUFDakIsS0FBSyxDQUFDLEtBQUs7OztRQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Ozs7SUFFTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1NBQzFEO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7O1lBckpKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7OztZQXRCTyxVQUFVO1lBRFYsaUJBQWlCOzs7OztJQXlCckIsK0JBQVc7O0lBQ1gsK0JBQWM7O0lBQ2Qsa0NBQWlCOztJQUNqQixzQ0FBcUI7Ozs7O0lBR2pCLG9DQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvYWRTY3JpcHRTZXJ2aWNlfSBmcm9tICcuL2xvYWQtc2NyaXB0LnNlcnZpY2UnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZGVsYXksIG1hcCwgcmV0cnlXaGVuLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmRlY2xhcmUgdmFyIHR3dHRyOiBUd2l0dGVyO1xuXG5pbnRlcmZhY2UgVHdpdHRlciB7XG4gICAgZXZlbnRzOiBhbnk7XG5cbiAgICByZWFkeShjYWxsYmFjazogYW55KTogdm9pZDtcblxuICAgIGluaXQoY29uZmlnOiBhbnkpOiB2b2lkO1xuXG4gICAgbG9naW4oY2FsbGJhY2s6IGFueSwgcGVybWlzc2lvbnM6IGFueSk6IHZvaWQ7XG5cbiAgICBnZXRBdXRoUmVzcG9uc2UoY29uZmlnOiBhbnkpOiB2b2lkO1xuXG4gICAgZ2V0TG9naW5TdGF0dXMoY29uZmlnOiBhbnkpOiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFR3aXR0ZXJTZXJ2aWNlIHtcbiAgICBlcnJvcjogYW55O1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcbiAgICBpc0luaXRpYWxpemUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgIGxvYWRTY3JpcHQ6IExvYWRTY3JpcHRTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBsb2FkU2NyaXB0LmdldCgnaHR0cHM6Ly9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpzJykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoYXBwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmFwcElkID0gYXBwSWQ7XG5cbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IodGhpcy5lcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEVycm9yKCdUd2l0dGVyIFNESyBpcyBub3QgbG9hZGVkJykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuaW5pdGlhbGl6ZVNESygpKSxcbiAgICAgICAgICAgIHJldHJ5V2hlbihlcnJvciA9PiBlcnJvci5waXBlKFxuICAgICAgICAgICAgICAgIGRlbGF5KDIwMCksXG4gICAgICAgICAgICAgICAgdGFrZSgyNSksXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2YoZXJyb3IpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZpbmRNYW5hZ2VhYmxlUGFnZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBsb2FkRXJyb3IgPSB0aGlzLnZhbGlkYXRlU0RLKCk7XG4gICAgICAgIGlmIChsb2FkRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihsb2FkRXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXV0aGVudGlmaWNhdGlvbigpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnVzZXJJRCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RBY2Nlc3NpYmxlUGFnZShyZXNwb25zZS51c2VySUQpLnN1YnNjcmliZShwYWdlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHBhZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEVycm9yKCdObyB1c2VyIGFyZSBjb25uZWN0ZWQgdG8gRmFjZWJvb2snKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc2tUb01hbmFnZVBhZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgbG9hZEVycm9yID0gdGhpcy52YWxpZGF0ZVNESygpO1xuICAgICAgICBpZiAobG9hZEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobG9hZEVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEF1dGhlbnRpZmljYXRpb24oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNrVG9rZW5XaXRoU2NvcGUoJ21hbmFnZV9wYWdlcywgcHVibGlzaF9wYWdlcycpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdEFjY2Vzc2libGVQYWdlKHJlc3BvbnNlLnVzZXJJRCkuc3Vic2NyaWJlKHBhZ2VzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocGFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGlzaFRvUGFnZShwYWdlSWQ6IHN0cmluZywgYWNjZXNzVG9rZW46IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KGBodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8ke3BhZ2VJZH0vZmVlZGAsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxpc3RBY2Nlc3NpYmxlUGFnZSh1c2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAvKkZCLmFwaShgLyR7dXNlcklkfS9hY2NvdW50c2AsIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc2tUb2tlbldpdGhTY29wZShzY29wZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIC8qRkIubG9naW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3BvbnNlLmF1dGhSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBzY29wZTogc2NvcGUsXG4gICAgICAgICAgICB9KTsqL1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEF1dGhlbnRpZmljYXRpb24oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIC8qRkIuZ2V0TG9naW5TdGF0dXMoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYXV0aFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UuYXV0aFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ05vIGZhY2Vib29rIGNvbm5lY3Rpb24nKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pOyovXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVNESygpIHtcbiAgICAgICAgdHd0dHIucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlU0RLKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdZb3UgbmVlZCB0byBpbml0aWFsaXplIHRoZSBzZXJ2aWNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19