UNPKG

@greg-md/ng-facebook

Version:
286 lines (285 loc) 23.6 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} */ const 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 const /** @type {?} */ FACEBOOK_DEFAULTS = { xfbml: false, version: 'v3.0' }; export class FacebookService { /** * @param {?} ngZone * @param {?} platformId */ constructor(ngZone, platformId) { this.ngZone = ngZone; this.platformId = platformId; this.sdk = new ReplaySubject(1); } /** * @param {?=} locale * @return {?} */ load(locale = 'en_US') { return Observable.create(subscriber => { if (isPlatformServer(this.platformId)) { return; } this.ngZone.runOutsideAngular(() => { delete window.FB; let /** @type {?} */ jsSdk, /** @type {?} */ fbRoot; if (jsSdk = document.getElementById('facebook-jssdk')) { jsSdk.parentNode.removeChild(jsSdk); } if (fbRoot = document.getElementById('fb-root')) { fbRoot.parentNode.removeChild(fbRoot); } const /** @type {?} */ script = document.createElement('script'); script.id = 'facebook-jssdk'; script.src = '//connect.facebook.net/' + (locale || 'en_US') + '/sdk.js'; script.onload = () => { this.ngZone.run(() => { subscriber.next(FB); subscriber.complete(); }); }; script.onerror = () => { this.ngZone.run(() => { subscriber.error('Facebook SDK could not be loaded.'); subscriber.complete(); }); }; document.head.appendChild(script); }); }).pipe(map((sdk) => { this.sdk.next(sdk); return sdk; })); } /** * @param {?=} params * @param {?=} locale * @return {?} */ init(params = {}, locale = 'en_US') { return this.load(locale).pipe(tap(sdk => { params = Object.assign({}, FACEBOOK_DEFAULTS, params); sdk.init(params); this.reloadRenderedElements().subscribe(); })); } /** * @param {?=} options * @return {?} */ login(options) { return Observable.create(subscriber => { this.sdk.subscribe(sdk => { this.ngZone.runOutsideAngular(() => { sdk.login(response => { this.ngZone.run(() => { if (response.authResponse) { subscriber.next(response.authResponse); } else { subscriber.error(response); } subscriber.complete(); }); }, options); }); }); }); } /** * @param {?} path * @param {?=} method * @param {?=} params * @return {?} */ api(path, method, params) { return Observable.create(subscriber => { this.sdk.subscribe(sdk => { this.ngZone.runOutsideAngular(() => { sdk.api(path, method, params, response => { this.ngZone.run(() => { if (response && !response.error) { subscriber.next(response); } else { subscriber.error(response ? response.error : null); } subscriber.complete(); }); }); }); }); }); } /** * @param {?} element * @return {?} */ parse(element) { return Observable.create(subscriber => { this.sdk.subscribe(sdk => { this.ngZone.runOutsideAngular(() => { sdk.XFBML.parse(element, () => { this.ngZone.run(() => { subscriber.next(element); subscriber.complete(); }); }); }); }); }); } /** * @return {?} */ reloadRenderedElements() { return Observable.create(subscriber => { this.sdk.subscribe(sdk => { const /** @type {?} */ elements = document.querySelectorAll('[fb-xfbml-state="rendered"]'); let /** @type {?} */ processing = elements.length; Array.from(elements).forEach(node => { this.ngZone.runOutsideAngular(() => { sdk.XFBML.parse(node.parentElement, () => { this.ngZone.run(() => { --processing; subscriber.next(node.parentElement); if (processing <= 0) { subscriber.complete(); } }); }); }); }); }); }); } } FacebookService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] }, ]; /** @nocollapse */ FacebookService.ctorParameters = () => [ { 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" }); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZWJvb2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BncmVnLW1kL25nLWZhY2Vib29rLyIsInNvdXJjZXMiOlsibGliL2ZhY2Vib29rLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBa0NsQyxLQUFLO1VBQ0osTUFBTTtZQUNKLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJuQixNQUFNLENBQUMsdUJBQU0saUJBQWlCLEdBQXVCO0lBQ25ELEtBQUssRUFBRSxLQUFLO0lBQ1osT0FBTyxFQUFFLE1BQU07Q0FDaEIsQ0FBQztBQVdGLE1BQU07Ozs7O0lBR0osWUFDVSxRQUNxQjtRQURyQixXQUFNLEdBQU4sTUFBTTtRQUNlLGVBQVUsR0FBVixVQUFVO21CQUpuQyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUM7S0FNbkM7Ozs7O0lBRUQsSUFBSSxDQUFDLFNBQWlCLE9BQU87UUFDM0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDO2FBQ1I7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcs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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dDQUVwQyxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDcEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lDQUN2Qjs2QkFDRixDQUFDLENBQUM7eUJBQ0osQ0FBQyxDQUFDO3FCQUNKLENBQUMsQ0FBQztpQkFDSixDQUFDLENBQUM7YUFDSixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7S0FDSjs7O1lBeEpGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQWpGNEIsTUFBTTs0Q0F1RjlCLE1BQU0sU0FBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rSW5pdFBhcmFtcyB7XG4gIGFwcElkPzogc3RyaW5nO1xuICBzdGF0dXM/OiBib29sZWFuO1xuICB4ZmJtbD86IGJvb2xlYW47XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tBdXRoIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIHNpZ25lZFJlcXVlc3Q6IHN0cmluZztcbiAgdXNlcklEOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tMb2dpblJlc3BvbnNlIHtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGF1dGhSZXNwb25zZTogRmFjZWJvb2tBdXRoO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhY2Vib29rTG9naW5PcHRpb25zIHtcbiAgYXV0aF90eXBlPzogJ3JlcmVxdWVzdCc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICByZXR1cm5fc2NvcGVzPzogYm9vbGVhbjtcbiAgZW5hYmxlX3Byb2ZpbGVfc2VsZWN0b3I/OiBib29sZWFuO1xuICBwcm9maWxlX3NlbGVjdG9yX2lkcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0FwaUVycm9yIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBGYWNlYm9va0FwaU1ldGhvZCB7XG4gIEdldCA9ICdnZXQnLFxuICBQb3N0ID0gJ3Bvc3QnLFxuICBEZWxldGUgPSAnZGVsZXRlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0FwaVBhcmFtcyB7XG4gIFtwcm9wTmFtZTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBGYWNlYm9va0FwaUNhbGxiYWNrID0gKHJlc3BvbnNlPzoge1xuICAgIGVycm9yPzogRmFjZWJvb2tBcGlFcnJvcjtcbiAgICBbcHJvcE5hbWU6IHN0cmluZ106IGFueTtcbiAgfSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9vayB7XG4gIFhGQk1MOiB7XG4gICAgcGFyc2U6IChlbGVtZW50OiBIVE1MRWxlbWVudCwgY2I/OiAoKSA9PiB2b2lkKSA9PiB2b2lkO1xuICB9O1xuXG4gIGluaXQ6IChwYXJhbXM6IEZhY2Vib29rSW5pdFBhcmFtcykgPT4gdm9pZDtcblxuICBsb2dpbjogKGNhbGxiYWNrPzogKHJlc3BvbnNlOiBGYWNlYm9va0xvZ2luUmVzcG9uc2UpID0+IHZvaWQsIG9wdGlvbnM/OiBGYWNlYm9va0xvZ2luT3B0aW9ucykgPT4gdm9pZDtcblxuICBhcGk6IChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbWV0aG9kPzogRmFjZWJvb2tBcGlNZXRob2QgfCBGYWNlYm9va0FwaVBhcmFtcyB8IEZhY2Vib29rQXBpQ2FsbGJhY2ssXG4gICAgcGFyYW1zPzogRmFjZWJvb2tBcGlQYXJhbXMgfCBGYWNlYm9va0FwaUNhbGxiYWNrLFxuICAgIGNhbGxiYWNrPzogRmFjZWJvb2tBcGlDYWxsYmFja1xuICApID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBGQUNFQk9PS19ERUZBVUxUUzogRmFjZWJvb2tJbml0UGFyYW1zID0ge1xuICB4ZmJtbDogZmFsc2UsXG4gIHZlcnNpb246ICd2My4wJ1xufTtcblxuZGVjbGFyZSBjb25zdCBGQjogRmFjZWJvb2s7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiB7XG4gIEZCOiBGYWNlYm9vaztcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZhY2Vib29rU2VydmljZSB7XG4gIHNkayA9IG5ldyBSZXBsYXlTdWJqZWN0PEZhY2Vib29rPigxKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICApIHtcbiAgfVxuXG4gIGxvYWQobG9jYWxlOiBzdHJpbmcgPSAnZW5fVVMnKTogT2JzZXJ2YWJsZTxGYWNlYm9vaz4ge1xuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShzdWJzY3JpYmVyID0+IHtcbiAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB3aW5kb3cuRkI7XG5cbiAgICAgICAgbGV0IGpzU2RrOiBIVE1MRWxlbWVudCwgZmJSb290OiBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAoanNTZGsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFjZWJvb2stanNzZGsnKSkge1xuICAgICAgICAgIGpzU2RrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoanNTZGspO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZiUm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYi1yb290JykpIHtcbiAgICAgICAgICBmYlJvb3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmYlJvb3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cbiAgICAgICAgc2NyaXB0LmlkID0gJ2ZhY2Vib29rLWpzc2RrJztcblxuICAgICAgICBzY3JpcHQuc3JjID0gJy8vY29ubmVjdC5mYWNlYm9vay5uZXQvJyArIChsb2NhbGUgfHwgJ2VuX1VTJykgKyAnL3Nkay5qcyc7XG5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KEZCKTtcblxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKCdGYWNlYm9vayBTREsgY291bGQgbm90IGJlIGxvYWRlZC4nKTtcblxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgIH0pO1xuICAgIH0pLnBpcGUobWFwKChzZGs6IEZhY2Vib29rKSA9PiB7XG4gICAgICB0aGlzLnNkay5uZXh0KHNkayk7XG5cbiAgICAgIHJldHVybiBzZGs7XG4gICAgfSkpO1xuICB9XG5cbiAgaW5pdChwYXJhbXM6IEZhY2Vib29rSW5pdFBhcmFtcyA9IHt9LCBsb2NhbGU6IHN0cmluZyA9ICdlbl9VUycpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKGxvY2FsZSkucGlwZTxGYWNlYm9vaz4odGFwPEZhY2Vib29rPihzZGsgPT4ge1xuICAgICAgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgRkFDRUJPT0tfREVGQVVMVFMsIHBhcmFtcyk7XG5cbiAgICAgIHNkay5pbml0KHBhcmFtcyk7XG5cbiAgICAgIHRoaXMucmVsb2FkUmVuZGVyZWRFbGVtZW50cygpLnN1YnNjcmliZSgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxvZ2luKG9wdGlvbnM/OiBGYWNlYm9va0xvZ2luT3B0aW9ucyk6IE9ic2VydmFibGU8RmFjZWJvb2tBdXRoPiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgdGhpcy5zZGsuc3Vic2NyaWJlKHNkayA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICBzZGsubG9naW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmF1dGhSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXNwb25zZS5hdXRoUmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IocmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhcGkocGF0aDogc3RyaW5nLCBtZXRob2Q/OiBGYWNlYm9va0FwaU1ldGhvZCB8IEZhY2Vib29rQXBpUGFyYW1zLCBwYXJhbXM/OiBGYWNlYm9va0FwaVBhcmFtcyk6IE9ic2VydmFibGU8T2JqZWN0PiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgdGhpcy5zZGsuc3Vic2NyaWJlKHNkayA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICBzZGsuYXBpKHBhdGgsIG1ldGhvZCwgcGFyYW1zLCByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHJlc3BvbnNlID8gcmVzcG9uc2UuZXJyb3IgOiBudWxsKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2UoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPEhUTUxFbGVtZW50PiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgdGhpcy5zZGsuc3Vic2NyaWJlKHNkayA9PiB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICBzZGsuWEZCTUwucGFyc2UoZWxlbWVudCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVsb2FkUmVuZGVyZWRFbGVtZW50cygpOiBPYnNlcnZhYmxlPEhUTUxFbGVtZW50PiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgdGhpcy5zZGsuc3Vic2NyaWJlKHNkayA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2ZiLXhmYm1sLXN0YXRlPVwicmVuZGVyZWRcIl0nKTtcblxuICAgICAgICBsZXQgcHJvY2Vzc2luZyA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBBcnJheS5mcm9tKGVsZW1lbnRzKS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNkay5YRkJNTC5wYXJzZShub2RlLnBhcmVudEVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAtLXByb2Nlc3Npbmc7XG5cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobm9kZS5wYXJlbnRFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==