UNPKG

@greg-md/ng-facebook

Version:
319 lines (318 loc) 24.8 kB
/** * @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