@greg-md/ng-facebook
Version:
Using Facebook SDK with Angular.
319 lines (318 loc) • 24.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';
import { isPlatformServer } from '@angular/common';
import { Observable, ReplaySubject } from 'rxjs';
import { tap, map } from 'rxjs/operators';
import * as i0 from "@angular/core";
/**
* @record
*/
export function FacebookInitParams() { }
function FacebookInitParams_tsickle_Closure_declarations() {
/** @type {?|undefined} */
FacebookInitParams.prototype.appId;
/** @type {?|undefined} */
FacebookInitParams.prototype.status;
/** @type {?|undefined} */
FacebookInitParams.prototype.xfbml;
/** @type {?|undefined} */
FacebookInitParams.prototype.version;
}
/**
* @record
*/
export function FacebookAuth() { }
function FacebookAuth_tsickle_Closure_declarations() {
/** @type {?} */
FacebookAuth.prototype.accessToken;
/** @type {?} */
FacebookAuth.prototype.expiresIn;
/** @type {?} */
FacebookAuth.prototype.signedRequest;
/** @type {?} */
FacebookAuth.prototype.userID;
}
/**
* @record
*/
export function FacebookLoginResponse() { }
function FacebookLoginResponse_tsickle_Closure_declarations() {
/** @type {?} */
FacebookLoginResponse.prototype.status;
/** @type {?} */
FacebookLoginResponse.prototype.authResponse;
}
/**
* @record
*/
export function FacebookLoginOptions() { }
function FacebookLoginOptions_tsickle_Closure_declarations() {
/** @type {?|undefined} */
FacebookLoginOptions.prototype.auth_type;
/** @type {?|undefined} */
FacebookLoginOptions.prototype.scope;
/** @type {?|undefined} */
FacebookLoginOptions.prototype.return_scopes;
/** @type {?|undefined} */
FacebookLoginOptions.prototype.enable_profile_selector;
/** @type {?|undefined} */
FacebookLoginOptions.prototype.profile_selector_ids;
}
/**
* @record
*/
export function FacebookApiError() { }
function FacebookApiError_tsickle_Closure_declarations() {
/** @type {?} */
FacebookApiError.prototype.message;
}
/** @enum {string} */
var FacebookApiMethod = {
Get: 'get',
Post: 'post',
Delete: 'delete',
};
export { FacebookApiMethod };
/**
* @record
*/
export function FacebookApiParams() { }
function FacebookApiParams_tsickle_Closure_declarations() {
/* TODO: handle strange member:
[propName: string]: any;
*/
}
/**
* @record
*/
export function Facebook() { }
function Facebook_tsickle_Closure_declarations() {
/** @type {?} */
Facebook.prototype.XFBML;
/** @type {?} */
Facebook.prototype.init;
/** @type {?} */
Facebook.prototype.login;
/** @type {?} */
Facebook.prototype.api;
}
export var /** @type {?} */ FACEBOOK_DEFAULTS = {
xfbml: false,
version: 'v3.0'
};
var FacebookService = /** @class */ (function () {
function FacebookService(ngZone, platformId) {
this.ngZone = ngZone;
this.platformId = platformId;
this.sdk = new ReplaySubject(1);
}
/**
* @param {?=} locale
* @return {?}
*/
FacebookService.prototype.load = /**
* @param {?=} locale
* @return {?}
*/
function (locale) {
var _this = this;
if (locale === void 0) { locale = 'en_US'; }
return Observable.create(function (subscriber) {
if (isPlatformServer(_this.platformId)) {
return;
}
_this.ngZone.runOutsideAngular(function () {
delete window.FB;
var /** @type {?} */ jsSdk, /** @type {?} */ fbRoot;
if (jsSdk = document.getElementById('facebook-jssdk')) {
jsSdk.parentNode.removeChild(jsSdk);
}
if (fbRoot = document.getElementById('fb-root')) {
fbRoot.parentNode.removeChild(fbRoot);
}
var /** @type {?} */ script = document.createElement('script');
script.id = 'facebook-jssdk';
script.src = '//connect.facebook.net/' + (locale || 'en_US') + '/sdk.js';
script.onload = function () {
_this.ngZone.run(function () {
subscriber.next(FB);
subscriber.complete();
});
};
script.onerror = function () {
_this.ngZone.run(function () {
subscriber.error('Facebook SDK could not be loaded.');
subscriber.complete();
});
};
document.head.appendChild(script);
});
}).pipe(map(function (sdk) {
_this.sdk.next(sdk);
return sdk;
}));
};
/**
* @param {?=} params
* @param {?=} locale
* @return {?}
*/
FacebookService.prototype.init = /**
* @param {?=} params
* @param {?=} locale
* @return {?}
*/
function (params, locale) {
var _this = this;
if (params === void 0) { params = {}; }
if (locale === void 0) { locale = 'en_US'; }
return this.load(locale).pipe(tap(function (sdk) {
params = Object.assign({}, FACEBOOK_DEFAULTS, params);
sdk.init(params);
_this.reloadRenderedElements().subscribe();
}));
};
/**
* @param {?=} options
* @return {?}
*/
FacebookService.prototype.login = /**
* @param {?=} options
* @return {?}
*/
function (options) {
var _this = this;
return Observable.create(function (subscriber) {
_this.sdk.subscribe(function (sdk) {
_this.ngZone.runOutsideAngular(function () {
sdk.login(function (response) {
_this.ngZone.run(function () {
if (response.authResponse) {
subscriber.next(response.authResponse);
}
else {
subscriber.error(response);
}
subscriber.complete();
});
}, options);
});
});
});
};
/**
* @param {?} path
* @param {?=} method
* @param {?=} params
* @return {?}
*/
FacebookService.prototype.api = /**
* @param {?} path
* @param {?=} method
* @param {?=} params
* @return {?}
*/
function (path, method, params) {
var _this = this;
return Observable.create(function (subscriber) {
_this.sdk.subscribe(function (sdk) {
_this.ngZone.runOutsideAngular(function () {
sdk.api(path, method, params, function (response) {
_this.ngZone.run(function () {
if (response && !response.error) {
subscriber.next(response);
}
else {
subscriber.error(response ? response.error : null);
}
subscriber.complete();
});
});
});
});
});
};
/**
* @param {?} element
* @return {?}
*/
FacebookService.prototype.parse = /**
* @param {?} element
* @return {?}
*/
function (element) {
var _this = this;
return Observable.create(function (subscriber) {
_this.sdk.subscribe(function (sdk) {
_this.ngZone.runOutsideAngular(function () {
sdk.XFBML.parse(element, function () {
_this.ngZone.run(function () {
subscriber.next(element);
subscriber.complete();
});
});
});
});
});
};
/**
* @return {?}
*/
FacebookService.prototype.reloadRenderedElements = /**
* @return {?}
*/
function () {
var _this = this;
return Observable.create(function (subscriber) {
_this.sdk.subscribe(function (sdk) {
var /** @type {?} */ elements = document.querySelectorAll('[fb-xfbml-state="rendered"]');
var /** @type {?} */ processing = elements.length;
Array.from(elements).forEach(function (node) {
_this.ngZone.runOutsideAngular(function () {
sdk.XFBML.parse(node.parentElement, function () {
_this.ngZone.run(function () {
--processing;
subscriber.next(node.parentElement);
if (processing <= 0) {
subscriber.complete();
}
});
});
});
});
});
});
};
FacebookService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */
FacebookService.ctorParameters = function () { return [
{ type: NgZone, },
{ type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] },] },
]; };
/** @nocollapse */ FacebookService.ngInjectableDef = i0.defineInjectable({ factory: function FacebookService_Factory() { return new FacebookService(i0.inject(i0.NgZone), i0.inject(i0.PLATFORM_ID)); }, token: FacebookService, providedIn: "root" });
return FacebookService;
}());
export { FacebookService };
function FacebookService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
FacebookService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
FacebookService.ctorParameters;
/** @type {?} */
FacebookService.prototype.sdk;
/** @type {?} */
FacebookService.prototype.ngZone;
/** @type {?} */
FacebookService.prototype.platformId;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZWJvb2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BncmVnLW1kL25nLWZhY2Vib29rLyIsInNvdXJjZXMiOlsibGliL2ZhY2Vib29rLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBa0NsQyxLQUFLO1VBQ0osTUFBTTtZQUNKLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJuQixNQUFNLENBQUMscUJBQU0saUJBQWlCLEdBQXVCO0lBQ25ELEtBQUssRUFBRSxLQUFLO0lBQ1osT0FBTyxFQUFFLE1BQU07Q0FDaEIsQ0FBQzs7SUFjQSx5QkFDVSxRQUNxQjtRQURyQixXQUFNLEdBQU4sTUFBTTtRQUNlLGVBQVUsR0FBVixVQUFVO21CQUpuQyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUM7S0FNbkM7Ozs7O0lBRUQsOEJBQUk7Ozs7SUFBSixVQUFLLE1BQXdCO1FBQTdCLGlCQWdEQztRQWhESSx1QkFBQSxFQUFBLGdCQUF3QjtRQUMzQixNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFBLFVBQVU7WUFDakMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDO2FBQ1I7WUFFRCxLQUFJLENBQUMsTUFB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LFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUNwQixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7aUNBQ3ZCOzZCQUNGLENBQUMsQ0FBQzt5QkFDSixDQUFDLENBQUM7cUJBQ0osQ0FBQyxDQUFDO2lCQUNKLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztLQUNKOztnQkF4SkYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFqRjRCLE1BQU07Z0RBdUY5QixNQUFNLFNBQUMsV0FBVzs7OzBCQXZGdkI7O1NBa0ZhLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tJbml0UGFyYW1zIHtcbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIHN0YXR1cz86IGJvb2xlYW47XG4gIHhmYm1sPzogYm9vbGVhbjtcbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0F1dGgge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBleHBpcmVzSW46IG51bWJlcjtcbiAgc2lnbmVkUmVxdWVzdDogc3RyaW5nO1xuICB1c2VySUQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0xvZ2luUmVzcG9uc2Uge1xuICBzdGF0dXM6IHN0cmluZztcbiAgYXV0aFJlc3BvbnNlOiBGYWNlYm9va0F1dGg7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tMb2dpbk9wdGlvbnMge1xuICBhdXRoX3R5cGU/OiAncmVyZXF1ZXN0JztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHJldHVybl9zY29wZXM/OiBib29sZWFuO1xuICBlbmFibGVfcHJvZmlsZV9zZWxlY3Rvcj86IGJvb2xlYW47XG4gIHByb2ZpbGVfc2VsZWN0b3JfaWRzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rQXBpRXJyb3Ige1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEZhY2Vib29rQXBpTWV0aG9kIHtcbiAgR2V0ID0gJ2dldCcsXG4gIFBvc3QgPSAncG9zdCcsXG4gIERlbGV0ZSA9ICdkZWxldGUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rQXBpUGFyYW1zIHtcbiAgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIEZhY2Vib29rQXBpQ2FsbGJhY2sgPSAocmVzcG9uc2U/OiB7XG4gICAgZXJyb3I/OiBGYWNlYm9va0FwaUVycm9yO1xuICAgIFtwcm9wTmFtZTogc3RyaW5nXTogYW55O1xuICB9KSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rIHtcbiAgWEZCTUw6IHtcbiAgICBwYXJzZTogKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjYj86ICgpID0+IHZvaWQpID0+IHZvaWQ7XG4gIH07XG5cbiAgaW5pdDogKHBhcmFtczogRmFjZWJvb2tJbml0UGFyYW1zKSA9PiB2b2lkO1xuXG4gIGxvZ2luOiAoY2FsbGJhY2s/OiAocmVzcG9uc2U6IEZhY2Vib29rTG9naW5SZXNwb25zZSkgPT4gdm9pZCwgb3B0aW9ucz86IEZhY2Vib29rTG9naW5PcHRpb25zKSA9PiB2b2lkO1xuXG4gIGFwaTogKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtZXRob2Q/OiBGYWNlYm9va0FwaU1ldGhvZCB8IEZhY2Vib29rQXBpUGFyYW1zIHwgRmFjZWJvb2tBcGlDYWxsYmFjayxcbiAgICBwYXJhbXM/OiBGYWNlYm9va0FwaVBhcmFtcyB8IEZhY2Vib29rQXBpQ2FsbGJhY2ssXG4gICAgY2FsbGJhY2s/OiBGYWNlYm9va0FwaUNhbGxiYWNrXG4gICkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEZBQ0VCT09LX0RFRkFVTFRTOiBGYWNlYm9va0luaXRQYXJhbXMgPSB7XG4gIHhmYm1sOiBmYWxzZSxcbiAgdmVyc2lvbjogJ3YzLjAnXG59O1xuXG5kZWNsYXJlIGNvbnN0IEZCOiBGYWNlYm9vaztcblxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IHtcbiAgRkI6IEZhY2Vib29rO1xufTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmFjZWJvb2tTZXJ2aWNlIHtcbiAgc2RrID0gbmV3IFJlcGxheVN1YmplY3Q8RmFjZWJvb2s+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgbG9hZChsb2NhbGU6IHN0cmluZyA9ICdlbl9VUycpOiBPYnNlcnZhYmxlPEZhY2Vib29rPiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIHdpbmRvdy5GQjtcblxuICAgICAgICBsZXQganNTZGs6IEhUTUxFbGVtZW50LCBmYlJvb3Q6IEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChqc1NkayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWNlYm9vay1qc3NkaycpKSB7XG4gICAgICAgICAganNTZGsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChqc1Nkayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmJSb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZiLXJvb3QnKSkge1xuICAgICAgICAgIGZiUm9vdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZiUm9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblxuICAgICAgICBzY3JpcHQuaWQgPSAnZmFjZWJvb2stanNzZGsnO1xuXG4gICAgICAgIHNjcmlwdC5zcmMgPSAnLy9jb25uZWN0LmZhY2Vib29rLm5ldC8nICsgKGxvY2FsZSB8fCAnZW5fVVMnKSArICcvc2RrLmpzJztcblxuICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoRkIpO1xuXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoJ0ZhY2Vib29rIFNESyBjb3VsZCBub3QgYmUgbG9hZGVkLicpO1xuXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgfSk7XG4gICAgfSkucGlwZShtYXAoKHNkazogRmFjZWJvb2spID0+IHtcbiAgICAgIHRoaXMuc2RrLm5leHQoc2RrKTtcblxuICAgICAgcmV0dXJuIHNkaztcbiAgICB9KSk7XG4gIH1cblxuICBpbml0KHBhcmFtczogRmFjZWJvb2tJbml0UGFyYW1zID0ge30sIGxvY2FsZTogc3RyaW5nID0gJ2VuX1VTJykge1xuICAgIHJldHVybiB0aGlzLmxvYWQobG9jYWxlKS5waXBlPEZhY2Vib29rPih0YXA8RmFjZWJvb2s+KHNkayA9PiB7XG4gICAgICBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBGQUNFQk9PS19ERUZBVUxUUywgcGFyYW1zKTtcblxuICAgICAgc2RrLmluaXQocGFyYW1zKTtcblxuICAgICAgdGhpcy5yZWxvYWRSZW5kZXJlZEVsZW1lbnRzKCkuc3Vic2NyaWJlKCk7XG4gICAgfSkpO1xuICB9XG5cbiAgbG9naW4ob3B0aW9ucz86IEZhY2Vib29rTG9naW5PcHRpb25zKTogT2JzZXJ2YWJsZTxGYWNlYm9va0F1dGg+IHtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICB0aGlzLnNkay5zdWJzY3JpYmUoc2RrID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHNkay5sb2dpbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYXV0aFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3BvbnNlLmF1dGhSZXNwb25zZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwaShwYXRoOiBzdHJpbmcsIG1ldGhvZD86IEZhY2Vib29rQXBpTWV0aG9kIHwgRmFjZWJvb2tBcGlQYXJhbXMsIHBhcmFtcz86IEZhY2Vib29rQXBpUGFyYW1zKTogT2JzZXJ2YWJsZTxPYmplY3Q+IHtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICB0aGlzLnNkay5zdWJzY3JpYmUoc2RrID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHNkay5hcGkocGF0aCwgbWV0aG9kLCBwYXJhbXMsIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IocmVzcG9uc2UgPyByZXNwb25zZS5lcnJvciA6IG51bGwpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8SFRNTEVsZW1lbnQ+IHtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICB0aGlzLnNkay5zdWJzY3JpYmUoc2RrID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHNkay5YRkJNTC5wYXJzZShlbGVtZW50LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZWxvYWRSZW5kZXJlZEVsZW1lbnRzKCk6IE9ic2VydmFibGU8SFRNTEVsZW1lbnQ+IHtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICB0aGlzLnNkay5zdWJzY3JpYmUoc2RrID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZmIteGZibWwtc3RhdGU9XCJyZW5kZXJlZFwiXScpO1xuXG4gICAgICAgIGxldCBwcm9jZXNzaW5nID0gZWxlbWVudHMubGVuZ3RoO1xuXG4gICAgICAgIEFycmF5LmZyb20oZWxlbWVudHMpLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgc2RrLlhGQk1MLnBhcnNlKG5vZGUucGFyZW50RWxlbWVudCwgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC0tcHJvY2Vzc2luZztcblxuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChub2RlLnBhcmVudEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NpbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19