UNPKG

@spartacus/checkout

Version:

Checkout feature library for Spartacus

119 lines 14.9 kB
import { Injectable } from '@angular/core'; import { select } from '@ngrx/store'; import { getLastValueSync, OCC_USER_ID_ANONYMOUS, ProcessSelectors, } from '@spartacus/core'; import { combineLatest } from 'rxjs'; import { filter, take } from 'rxjs/operators'; import { CheckoutActions } from '../store/actions/index'; import { SET_PAYMENT_DETAILS_PROCESS_ID, } from '../store/checkout-state'; import { CheckoutSelectors } from '../store/selectors/index'; import * as i0 from "@angular/core"; import * as i1 from "@ngrx/store"; import * as i2 from "@spartacus/core"; export class CheckoutPaymentService { constructor(checkoutStore, processStateStore, activeCartService, userIdService) { this.checkoutStore = checkoutStore; this.processStateStore = processStateStore; this.activeCartService = activeCartService; this.userIdService = userIdService; } /** * Get card types */ getCardTypes() { return this.checkoutStore.pipe(select(CheckoutSelectors.getAllCardTypes)); } /** * Get payment details */ getPaymentDetails() { return this.checkoutStore.pipe(select(CheckoutSelectors.getPaymentDetails)); } /** * Get status about set Payment Details process */ getSetPaymentDetailsResultProcess() { return this.processStateStore.pipe(select(ProcessSelectors.getProcessStateFactory(SET_PAYMENT_DETAILS_PROCESS_ID))); } /** * Clear info about process of setting Payment Details */ resetSetPaymentDetailsProcess() { this.checkoutStore.dispatch(new CheckoutActions.ResetSetPaymentDetailsProcess()); } /** * Load the supported card types */ loadSupportedCardTypes() { this.checkoutStore.dispatch(new CheckoutActions.LoadCardTypes()); } /** * Create payment details using the given paymentDetails param * @param paymentDetails: the PaymentDetails to be created */ createPaymentDetails(paymentDetails) { if (this.actionAllowed()) { let userId; this.userIdService .getUserId() .subscribe((occUserId) => (userId = occUserId)) .unsubscribe(); let cartId; this.activeCartService .getActiveCartId() .subscribe((activeCartId) => (cartId = activeCartId)) .unsubscribe(); if (userId && cartId) { this.checkoutStore.dispatch(new CheckoutActions.CreatePaymentDetails({ userId, cartId, paymentDetails, })); } } } /** * Set payment details * @param paymentDetails : the PaymentDetails to be set */ setPaymentDetails(paymentDetails) { if (this.actionAllowed()) { const userId = getLastValueSync(this.userIdService.getUserId()); const cartId = getLastValueSync(this.activeCartService.getActiveCartId()); if (userId && cartId) { combineLatest([ this.activeCartService.isStable(), this.checkoutStore.pipe(select(CheckoutSelectors.getCheckoutLoading)), ]) .pipe(filter(([isStable, isLoading]) => isStable && !isLoading), take(1)) .subscribe(() => { this.checkoutStore.dispatch(new CheckoutActions.SetPaymentDetails({ userId, cartId, paymentDetails: paymentDetails, })); }); } } } /** * Sets payment loading to true without having the flicker issue (GH-3102) */ paymentProcessSuccess() { this.checkoutStore.dispatch(new CheckoutActions.PaymentProcessSuccess()); } actionAllowed() { let userId; this.userIdService .getUserId() .subscribe((occUserId) => (userId = occUserId)) .unsubscribe(); return ((userId && userId !== OCC_USER_ID_ANONYMOUS) || this.activeCartService.isGuestCart()); } } CheckoutPaymentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutPaymentService, deps: [{ token: i1.Store }, { token: i1.Store }, { token: i2.ActiveCartService }, { token: i2.UserIdService }], target: i0.ɵɵFactoryTarget.Injectable }); CheckoutPaymentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutPaymentService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutPaymentService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.Store }, { type: i1.Store }, { type: i2.ActiveCartService }, { type: i2.UserIdService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtcGF5bWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL2NoZWNrb3V0L2NvcmUvZmFjYWRlL2NoZWNrb3V0LXBheW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUdMLGdCQUFnQixFQUNoQixxQkFBcUIsRUFFckIsZ0JBQWdCLEdBSWpCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsOEJBQThCLEdBRS9CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFHN0QsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNZLGFBQXVDLEVBQ3ZDLGlCQUFnRCxFQUNoRCxpQkFBb0MsRUFDcEMsYUFBNEI7UUFINUIsa0JBQWEsR0FBYixhQUFhLENBQTBCO1FBQ3ZDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBK0I7UUFDaEQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUNyQyxDQUFDO0lBRUo7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUNBQWlDO1FBRy9CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDaEMsTUFBTSxDQUNKLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLDhCQUE4QixDQUFDLENBQ3hFLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILDZCQUE2QjtRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDekIsSUFBSSxlQUFlLENBQUMsNkJBQTZCLEVBQUUsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxjQUE4QjtRQUNqRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN4QixJQUFJLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxhQUFhO2lCQUNmLFNBQVMsRUFBRTtpQkFDWCxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO2lCQUM5QyxXQUFXLEVBQUUsQ0FBQztZQUVqQixJQUFJLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxpQkFBaUI7aUJBQ25CLGVBQWUsRUFBRTtpQkFDakIsU0FBUyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQztpQkFDcEQsV0FBVyxFQUFFLENBQUM7WUFFakIsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO2dCQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDekIsSUFBSSxlQUFlLENBQUMsb0JBQW9CLENBQUM7b0JBQ3ZDLE1BQU07b0JBQ04sTUFBTTtvQkFDTixjQUFjO2lCQUNmLENBQUMsQ0FDSCxDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxjQUE4QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN4QixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFFMUUsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO2dCQUNwQixhQUFhLENBQUM7b0JBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7aUJBQ3RFLENBQUM7cUJBQ0MsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDekQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO3FCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ3pCLElBQUksZUFBZSxDQUFDLGlCQUFpQixDQUFDO3dCQUNwQyxNQUFNO3dCQUNOLE1BQU07d0JBQ04sY0FBYyxFQUFFLGNBQWM7cUJBQy9CLENBQUMsQ0FDSCxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDRjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILHFCQUFxQjtRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVTLGFBQWE7UUFDckIsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLENBQUMsYUFBYTthQUNmLFNBQVMsRUFBRTthQUNYLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7YUFDOUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUNMLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQztZQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQ3JDLENBQUM7SUFDSixDQUFDOzttSEFqSVUsc0JBQXNCO3VIQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDaGVja291dFBheW1lbnRGYWNhZGUgfSBmcm9tICdAc3BhcnRhY3VzL2NoZWNrb3V0L3Jvb3QnO1xuaW1wb3J0IHtcbiAgQWN0aXZlQ2FydFNlcnZpY2UsXG4gIENhcmRUeXBlLFxuICBnZXRMYXN0VmFsdWVTeW5jLFxuICBPQ0NfVVNFUl9JRF9BTk9OWU1PVVMsXG4gIFBheW1lbnREZXRhaWxzLFxuICBQcm9jZXNzU2VsZWN0b3JzLFxuICBTdGF0ZVV0aWxzLFxuICBTdGF0ZVdpdGhQcm9jZXNzLFxuICBVc2VySWRTZXJ2aWNlLFxufSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hlY2tvdXRBY3Rpb25zIH0gZnJvbSAnLi4vc3RvcmUvYWN0aW9ucy9pbmRleCc7XG5pbXBvcnQge1xuICBTRVRfUEFZTUVOVF9ERVRBSUxTX1BST0NFU1NfSUQsXG4gIFN0YXRlV2l0aENoZWNrb3V0LFxufSBmcm9tICcuLi9zdG9yZS9jaGVja291dC1zdGF0ZSc7XG5pbXBvcnQgeyBDaGVja291dFNlbGVjdG9ycyB9IGZyb20gJy4uL3N0b3JlL3NlbGVjdG9ycy9pbmRleCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDaGVja291dFBheW1lbnRTZXJ2aWNlIGltcGxlbWVudHMgQ2hlY2tvdXRQYXltZW50RmFjYWRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNoZWNrb3V0U3RvcmU6IFN0b3JlPFN0YXRlV2l0aENoZWNrb3V0PixcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1N0YXRlU3RvcmU6IFN0b3JlPFN0YXRlV2l0aFByb2Nlc3M8dm9pZD4+LFxuICAgIHByb3RlY3RlZCBhY3RpdmVDYXJ0U2VydmljZTogQWN0aXZlQ2FydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJJZFNlcnZpY2U6IFVzZXJJZFNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgY2FyZCB0eXBlc1xuICAgKi9cbiAgZ2V0Q2FyZFR5cGVzKCk6IE9ic2VydmFibGU8Q2FyZFR5cGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U3RvcmUucGlwZShzZWxlY3QoQ2hlY2tvdXRTZWxlY3RvcnMuZ2V0QWxsQ2FyZFR5cGVzKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBheW1lbnQgZGV0YWlsc1xuICAgKi9cbiAgZ2V0UGF5bWVudERldGFpbHMoKTogT2JzZXJ2YWJsZTxQYXltZW50RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U3RvcmUucGlwZShzZWxlY3QoQ2hlY2tvdXRTZWxlY3RvcnMuZ2V0UGF5bWVudERldGFpbHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhdHVzIGFib3V0IHNldCBQYXltZW50IERldGFpbHMgcHJvY2Vzc1xuICAgKi9cbiAgZ2V0U2V0UGF5bWVudERldGFpbHNSZXN1bHRQcm9jZXNzKCk6IE9ic2VydmFibGU8XG4gICAgU3RhdGVVdGlscy5Mb2FkZXJTdGF0ZTx2b2lkPlxuICA+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhdGVTdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KFxuICAgICAgICBQcm9jZXNzU2VsZWN0b3JzLmdldFByb2Nlc3NTdGF0ZUZhY3RvcnkoU0VUX1BBWU1FTlRfREVUQUlMU19QUk9DRVNTX0lEKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgaW5mbyBhYm91dCBwcm9jZXNzIG9mIHNldHRpbmcgUGF5bWVudCBEZXRhaWxzXG4gICAqL1xuICByZXNldFNldFBheW1lbnREZXRhaWxzUHJvY2VzcygpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2goXG4gICAgICBuZXcgQ2hlY2tvdXRBY3Rpb25zLlJlc2V0U2V0UGF5bWVudERldGFpbHNQcm9jZXNzKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIHN1cHBvcnRlZCBjYXJkIHR5cGVzXG4gICAqL1xuICBsb2FkU3VwcG9ydGVkQ2FyZFR5cGVzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tvdXRTdG9yZS5kaXNwYXRjaChuZXcgQ2hlY2tvdXRBY3Rpb25zLkxvYWRDYXJkVHlwZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHBheW1lbnQgZGV0YWlscyB1c2luZyB0aGUgZ2l2ZW4gcGF5bWVudERldGFpbHMgcGFyYW1cbiAgICogQHBhcmFtIHBheW1lbnREZXRhaWxzOiB0aGUgUGF5bWVudERldGFpbHMgdG8gYmUgY3JlYXRlZFxuICAgKi9cbiAgY3JlYXRlUGF5bWVudERldGFpbHMocGF5bWVudERldGFpbHM6IFBheW1lbnREZXRhaWxzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aW9uQWxsb3dlZCgpKSB7XG4gICAgICBsZXQgdXNlcklkO1xuICAgICAgdGhpcy51c2VySWRTZXJ2aWNlXG4gICAgICAgIC5nZXRVc2VySWQoKVxuICAgICAgICAuc3Vic2NyaWJlKChvY2NVc2VySWQpID0+ICh1c2VySWQgPSBvY2NVc2VySWQpKVxuICAgICAgICAudW5zdWJzY3JpYmUoKTtcblxuICAgICAgbGV0IGNhcnRJZDtcbiAgICAgIHRoaXMuYWN0aXZlQ2FydFNlcnZpY2VcbiAgICAgICAgLmdldEFjdGl2ZUNhcnRJZCgpXG4gICAgICAgIC5zdWJzY3JpYmUoKGFjdGl2ZUNhcnRJZCkgPT4gKGNhcnRJZCA9IGFjdGl2ZUNhcnRJZCkpXG4gICAgICAgIC51bnN1YnNjcmliZSgpO1xuXG4gICAgICBpZiAodXNlcklkICYmIGNhcnRJZCkge1xuICAgICAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IENoZWNrb3V0QWN0aW9ucy5DcmVhdGVQYXltZW50RGV0YWlscyh7XG4gICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICBjYXJ0SWQsXG4gICAgICAgICAgICBwYXltZW50RGV0YWlscyxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcGF5bWVudCBkZXRhaWxzXG4gICAqIEBwYXJhbSBwYXltZW50RGV0YWlscyA6IHRoZSBQYXltZW50RGV0YWlscyB0byBiZSBzZXRcbiAgICovXG4gIHNldFBheW1lbnREZXRhaWxzKHBheW1lbnREZXRhaWxzOiBQYXltZW50RGV0YWlscyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGlvbkFsbG93ZWQoKSkge1xuICAgICAgY29uc3QgdXNlcklkID0gZ2V0TGFzdFZhbHVlU3luYyh0aGlzLnVzZXJJZFNlcnZpY2UuZ2V0VXNlcklkKCkpO1xuICAgICAgY29uc3QgY2FydElkID0gZ2V0TGFzdFZhbHVlU3luYyh0aGlzLmFjdGl2ZUNhcnRTZXJ2aWNlLmdldEFjdGl2ZUNhcnRJZCgpKTtcblxuICAgICAgaWYgKHVzZXJJZCAmJiBjYXJ0SWQpIHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgdGhpcy5hY3RpdmVDYXJ0U2VydmljZS5pc1N0YWJsZSgpLFxuICAgICAgICAgIHRoaXMuY2hlY2tvdXRTdG9yZS5waXBlKHNlbGVjdChDaGVja291dFNlbGVjdG9ycy5nZXRDaGVja291dExvYWRpbmcpKSxcbiAgICAgICAgXSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoW2lzU3RhYmxlLCBpc0xvYWRpbmddKSA9PiBpc1N0YWJsZSAmJiAhaXNMb2FkaW5nKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgIG5ldyBDaGVja291dEFjdGlvbnMuU2V0UGF5bWVudERldGFpbHMoe1xuICAgICAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgICAgICBjYXJ0SWQsXG4gICAgICAgICAgICAgICAgcGF5bWVudERldGFpbHM6IHBheW1lbnREZXRhaWxzLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwYXltZW50IGxvYWRpbmcgdG8gdHJ1ZSB3aXRob3V0IGhhdmluZyB0aGUgZmxpY2tlciBpc3N1ZSAoR0gtMzEwMilcbiAgICovXG4gIHBheW1lbnRQcm9jZXNzU3VjY2VzcygpIHtcbiAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2gobmV3IENoZWNrb3V0QWN0aW9ucy5QYXltZW50UHJvY2Vzc1N1Y2Nlc3MoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aW9uQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgdXNlcklkO1xuICAgIHRoaXMudXNlcklkU2VydmljZVxuICAgICAgLmdldFVzZXJJZCgpXG4gICAgICAuc3Vic2NyaWJlKChvY2NVc2VySWQpID0+ICh1c2VySWQgPSBvY2NVc2VySWQpKVxuICAgICAgLnVuc3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgICh1c2VySWQgJiYgdXNlcklkICE9PSBPQ0NfVVNFUl9JRF9BTk9OWU1PVVMpIHx8XG4gICAgICB0aGlzLmFjdGl2ZUNhcnRTZXJ2aWNlLmlzR3Vlc3RDYXJ0KClcbiAgICApO1xuICB9XG59XG4iXX0=