UNPKG

@spartacus/checkout

Version:

Checkout feature library for Spartacus

164 lines 19 kB
import { Injectable } from '@angular/core'; import { select } from '@ngrx/store'; import { OCC_USER_ID_ANONYMOUS, ProcessSelectors, } from '@spartacus/core'; import { take } from 'rxjs/operators'; import { CheckoutActions } from '../store/actions/index'; import { PLACED_ORDER_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 CheckoutService { constructor(checkoutStore, processStateStore, activeCartService, userIdService) { this.checkoutStore = checkoutStore; this.processStateStore = processStateStore; this.activeCartService = activeCartService; this.userIdService = userIdService; } /** * Places an order */ placeOrder(termsChecked) { 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.PlaceOrder({ userId, cartId, termsChecked, })); } } } /** * Schedule a replenishment order */ scheduleReplenishmentOrder(scheduleReplenishmentForm, termsChecked) { let cartId; this.activeCartService .getActiveCartId() .pipe(take(1)) .subscribe((activeCartId) => (cartId = activeCartId)); this.userIdService.takeUserId(true).subscribe((userId) => { if (Boolean(cartId) && Boolean(userId)) { this.checkoutStore.dispatch(new CheckoutActions.ScheduleReplenishmentOrder({ cartId, scheduleReplenishmentForm, termsChecked, userId, })); } }, () => { // TODO: for future releases, refactor this part to thrown errors }); } /** * Returns the place or schedule replenishment order's loading flag */ getPlaceOrderLoading() { return this.processStateStore.pipe(select(ProcessSelectors.getProcessLoadingFactory(PLACED_ORDER_PROCESS_ID))); } /** * Returns the place or schedule replenishment order's success flag */ getPlaceOrderSuccess() { return this.processStateStore.pipe(select(ProcessSelectors.getProcessSuccessFactory(PLACED_ORDER_PROCESS_ID))); } /** * Returns the place or schedule replenishment order's error flag */ getPlaceOrderError() { return this.processStateStore.pipe(select(ProcessSelectors.getProcessErrorFactory(PLACED_ORDER_PROCESS_ID))); } /** * Resets the place or schedule replenishment order's processing state */ clearPlaceOrderState() { this.checkoutStore.dispatch(new CheckoutActions.ClearPlaceOrder()); } /** * Clear checkout data */ clearCheckoutData() { this.checkoutStore.dispatch(new CheckoutActions.ClearCheckoutData()); } /** * Clear checkout step * @param stepNumber : the step number to be cleared */ clearCheckoutStep(stepNumber) { this.checkoutStore.dispatch(new CheckoutActions.ClearCheckoutStep(stepNumber)); } /** * Load checkout details data * @param cartId : string Cart ID of loaded cart */ loadCheckoutDetails(cartId) { let userId; this.userIdService .getUserId() .subscribe((occUserId) => (userId = occUserId)) .unsubscribe(); if (userId) { this.checkoutStore.dispatch(new CheckoutActions.LoadCheckoutDetails({ userId, cartId, })); } } /** * Get status of checkout details loaded */ getCheckoutDetailsLoaded() { return this.checkoutStore.pipe(select(CheckoutSelectors.getCheckoutDetailsLoaded)); } /** * Check if checkout details are stable (no longer loading) */ isLoading() { return this.checkoutStore.pipe(select(CheckoutSelectors.getCheckoutLoading)); } /** * Get order details */ getOrderDetails() { return this.checkoutStore.pipe(select(CheckoutSelectors.getCheckoutOrderDetails)); } /** * Set checkout order type * @param orderType : an enum of types of order we are placing */ setOrderType(orderType) { this.checkoutStore.dispatch(new CheckoutActions.SetOrderType(orderType)); } /** * Get current checkout order type */ getCurrentOrderType() { return this.checkoutStore.pipe(select(CheckoutSelectors.getSelectedOrderType)); } actionAllowed() { let userId; this.userIdService .getUserId() .subscribe((occUserId) => (userId = occUserId)) .unsubscribe(); return ((userId && userId !== OCC_USER_ID_ANONYMOUS) || this.activeCartService.isGuestCart()); } } CheckoutService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutService, deps: [{ token: i1.Store }, { token: i1.Store }, { token: i2.ActiveCartService }, { token: i2.UserIdService }], target: i0.ɵɵFactoryTarget.Injectable }); CheckoutService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.Store }, { type: i1.Store }, { type: i2.ActiveCartService }, { type: i2.UserIdService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2ZlYXR1cmUtbGlicy9jaGVja291dC9jb3JlL2ZhY2FkZS9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBRUwscUJBQXFCLEVBR3JCLGdCQUFnQixHQUtqQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUNMLHVCQUF1QixHQUV4QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBRzdELE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ1ksYUFBdUMsRUFDdkMsaUJBQWdELEVBQ2hELGlCQUFvQyxFQUNwQyxhQUE0QjtRQUg1QixrQkFBYSxHQUFiLGFBQWEsQ0FBMEI7UUFDdkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUErQjtRQUNoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ3JDLENBQUM7SUFFSjs7T0FFRztJQUNILFVBQVUsQ0FBQyxZQUFxQjtRQUM5QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN4QixJQUFJLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxhQUFhO2lCQUNmLFNBQVMsRUFBRTtpQkFDWCxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO2lCQUM5QyxXQUFXLEVB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R0FBRyxTQUFTLENBQUMsQ0FBQzthQUM5QyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQ0wsQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLHFCQUFxQixDQUFDO1lBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FDckMsQ0FBQztJQUNKLENBQUM7OzRHQW5NVSxlQUFlO2dIQUFmLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDaGVja291dEZhY2FkZSB9IGZyb20gJ0BzcGFydGFjdXMvY2hlY2tvdXQvcm9vdCc7XG5pbXBvcnQge1xuICBBY3RpdmVDYXJ0U2VydmljZSxcbiAgT0NDX1VTRVJfSURfQU5PTllNT1VTLFxuICBPcmRlcixcbiAgT1JERVJfVFlQRSxcbiAgUHJvY2Vzc1NlbGVjdG9ycyxcbiAgUmVwbGVuaXNobWVudE9yZGVyLFxuICBTY2hlZHVsZVJlcGxlbmlzaG1lbnRGb3JtLFxuICBTdGF0ZVdpdGhQcm9jZXNzLFxuICBVc2VySWRTZXJ2aWNlLFxufSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoZWNrb3V0QWN0aW9ucyB9IGZyb20gJy4uL3N0b3JlL2FjdGlvbnMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgUExBQ0VEX09SREVSX1BST0NFU1NfSUQsXG4gIFN0YXRlV2l0aENoZWNrb3V0LFxufSBmcm9tICcuLi9zdG9yZS9jaGVja291dC1zdGF0ZSc7XG5pbXBvcnQgeyBDaGVja291dFNlbGVjdG9ycyB9IGZyb20gJy4uL3N0b3JlL3NlbGVjdG9ycy9pbmRleCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDaGVja291dFNlcnZpY2UgaW1wbGVtZW50cyBDaGVja291dEZhY2FkZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjaGVja291dFN0b3JlOiBTdG9yZTxTdGF0ZVdpdGhDaGVja291dD4sXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NTdGF0ZVN0b3JlOiBTdG9yZTxTdGF0ZVdpdGhQcm9jZXNzPHZvaWQ+PixcbiAgICBwcm90ZWN0ZWQgYWN0aXZlQ2FydFNlcnZpY2U6IEFjdGl2ZUNhcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VySWRTZXJ2aWNlOiBVc2VySWRTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogUGxhY2VzIGFuIG9yZGVyXG4gICAqL1xuICBwbGFjZU9yZGVyKHRlcm1zQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGlvbkFsbG93ZWQoKSkge1xuICAgICAgbGV0IHVzZXJJZDtcbiAgICAgIHRoaXMudXNlcklkU2VydmljZVxuICAgICAgICAuZ2V0VXNlcklkKClcbiAgICAgICAgLnN1YnNjcmliZSgob2NjVXNlcklkKSA9PiAodXNlcklkID0gb2NjVXNlcklkKSlcbiAgICAgICAgLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIGxldCBjYXJ0SWQ7XG4gICAgICB0aGlzLmFjdGl2ZUNhcnRTZXJ2aWNlXG4gICAgICAgIC5nZXRBY3RpdmVDYXJ0SWQoKVxuICAgICAgICAuc3Vic2NyaWJlKChhY3RpdmVDYXJ0SWQpID0+IChjYXJ0SWQgPSBhY3RpdmVDYXJ0SWQpKVxuICAgICAgICAudW5zdWJzY3JpYmUoKTtcblxuICAgICAgaWYgKHVzZXJJZCAmJiBjYXJ0SWQpIHtcbiAgICAgICAgdGhpcy5jaGVja291dFN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIG5ldyBDaGVja291dEFjdGlvbnMuUGxhY2VPcmRlcih7XG4gICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICBjYXJ0SWQsXG4gICAgICAgICAgICB0ZXJtc0NoZWNrZWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2NoZWR1bGUgYSByZXBsZW5pc2htZW50IG9yZGVyXG4gICAqL1xuICBzY2hlZHVsZVJlcGxlbmlzaG1lbnRPcmRlcihcbiAgICBzY2hlZHVsZVJlcGxlbmlzaG1lbnRGb3JtOiBTY2hlZHVsZVJlcGxlbmlzaG1lbnRGb3JtLFxuICAgIHRlcm1zQ2hlY2tlZDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBsZXQgY2FydElkOiBzdHJpbmc7XG5cbiAgICB0aGlzLmFjdGl2ZUNhcnRTZXJ2aWNlXG4gICAgICAuZ2V0QWN0aXZlQ2FydElkKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChhY3RpdmVDYXJ0SWQpID0+IChjYXJ0SWQgPSBhY3RpdmVDYXJ0SWQpKTtcblxuICAgIHRoaXMudXNlcklkU2VydmljZS50YWtlVXNlcklkKHRydWUpLnN1YnNjcmliZShcbiAgICAgICh1c2VySWQpID0+IHtcbiAgICAgICAgaWYgKEJvb2xlYW4oY2FydElkKSAmJiBCb29sZWFuKHVzZXJJZCkpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBuZXcgQ2hlY2tvdXRBY3Rpb25zLlNjaGVkdWxlUmVwbGVuaXNobWVudE9yZGVyKHtcbiAgICAgICAgICAgICAgY2FydElkLFxuICAgICAgICAgICAgICBzY2hlZHVsZVJlcGxlbmlzaG1lbnRGb3JtLFxuICAgICAgICAgICAgICB0ZXJtc0NoZWNrZWQsXG4gICAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gVE9ETzogZm9yIGZ1dHVyZSByZWxlYXNlcywgcmVmYWN0b3IgdGhpcyBwYXJ0IHRvIHRocm93biBlcnJvcnNcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBsYWNlIG9yIHNjaGVkdWxlIHJlcGxlbmlzaG1lbnQgb3JkZXIncyBsb2FkaW5nIGZsYWdcbiAgICovXG4gIGdldFBsYWNlT3JkZXJMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGF0ZVN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoUHJvY2Vzc1NlbGVjdG9ycy5nZXRQcm9jZXNzTG9hZGluZ0ZhY3RvcnkoUExBQ0VEX09SREVSX1BST0NFU1NfSUQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGxhY2Ugb3Igc2NoZWR1bGUgcmVwbGVuaXNobWVudCBvcmRlcidzIHN1Y2Nlc3MgZmxhZ1xuICAgKi9cbiAgZ2V0UGxhY2VPcmRlclN1Y2Nlc3MoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXRlU3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChQcm9jZXNzU2VsZWN0b3JzLmdldFByb2Nlc3NTdWNjZXNzRmFjdG9yeShQTEFDRURfT1JERVJfUFJPQ0VTU19JRCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwbGFjZSBvciBzY2hlZHVsZSByZXBsZW5pc2htZW50IG9yZGVyJ3MgZXJyb3IgZmxhZ1xuICAgKi9cbiAgZ2V0UGxhY2VPcmRlckVycm9yKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGF0ZVN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoUHJvY2Vzc1NlbGVjdG9ycy5nZXRQcm9jZXNzRXJyb3JGYWN0b3J5KFBMQUNFRF9PUkRFUl9QUk9DRVNTX0lEKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgcGxhY2Ugb3Igc2NoZWR1bGUgcmVwbGVuaXNobWVudCBvcmRlcidzIHByb2Nlc3Npbmcgc3RhdGVcbiAgICovXG4gIGNsZWFyUGxhY2VPcmRlclN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tvdXRTdG9yZS5kaXNwYXRjaChuZXcgQ2hlY2tvdXRBY3Rpb25zLkNsZWFyUGxhY2VPcmRlcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBjaGVja291dCBkYXRhXG4gICAqL1xuICBjbGVhckNoZWNrb3V0RGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2gobmV3IENoZWNrb3V0QWN0aW9ucy5DbGVhckNoZWNrb3V0RGF0YSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBjaGVja291dCBzdGVwXG4gICAqIEBwYXJhbSBzdGVwTnVtYmVyIDogdGhlIHN0ZXAgbnVtYmVyIHRvIGJlIGNsZWFyZWRcbiAgICovXG4gIGNsZWFyQ2hlY2tvdXRTdGVwKHN0ZXBOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tvdXRTdG9yZS5kaXNwYXRjaChcbiAgICAgIG5ldyBDaGVja291dEFjdGlvbnMuQ2xlYXJDaGVja291dFN0ZXAoc3RlcE51bWJlcilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY2hlY2tvdXQgZGV0YWlscyBkYXRhXG4gICAqIEBwYXJhbSBjYXJ0SWQgOiBzdHJpbmcgQ2FydCBJRCBvZiBsb2FkZWQgY2FydFxuICAgKi9cbiAgbG9hZENoZWNrb3V0RGV0YWlscyhjYXJ0SWQ6IHN0cmluZykge1xuICAgIGxldCB1c2VySWQ7XG4gICAgdGhpcy51c2VySWRTZXJ2aWNlXG4gICAgICAuZ2V0VXNlcklkKClcbiAgICAgIC5zdWJzY3JpYmUoKG9jY1VzZXJJZCkgPT4gKHVzZXJJZCA9IG9jY1VzZXJJZCkpXG4gICAgICAudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodXNlcklkKSB7XG4gICAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIG5ldyBDaGVja291dEFjdGlvbnMuTG9hZENoZWNrb3V0RGV0YWlscyh7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIGNhcnRJZCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGF0dXMgb2YgY2hlY2tvdXQgZGV0YWlscyBsb2FkZWRcbiAgICovXG4gIGdldENoZWNrb3V0RGV0YWlsc0xvYWRlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoQ2hlY2tvdXRTZWxlY3RvcnMuZ2V0Q2hlY2tvdXREZXRhaWxzTG9hZGVkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY2hlY2tvdXQgZGV0YWlscyBhcmUgc3RhYmxlIChubyBsb25nZXIgbG9hZGluZylcbiAgICovXG4gIGlzTG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoQ2hlY2tvdXRTZWxlY3RvcnMuZ2V0Q2hlY2tvdXRMb2FkaW5nKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yZGVyIGRldGFpbHNcbiAgICovXG4gIGdldE9yZGVyRGV0YWlscygpOiBPYnNlcnZhYmxlPE9yZGVyIHwgUmVwbGVuaXNobWVudE9yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KENoZWNrb3V0U2VsZWN0b3JzLmdldENoZWNrb3V0T3JkZXJEZXRhaWxzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNoZWNrb3V0IG9yZGVyIHR5cGVcbiAgICogQHBhcmFtIG9yZGVyVHlwZSA6IGFuIGVudW0gb2YgdHlwZXMgb2Ygb3JkZXIgd2UgYXJlIHBsYWNpbmdcbiAgICovXG4gIHNldE9yZGVyVHlwZShvcmRlclR5cGU6IE9SREVSX1RZUEUpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrb3V0U3RvcmUuZGlzcGF0Y2gobmV3IENoZWNrb3V0QWN0aW9ucy5TZXRPcmRlclR5cGUob3JkZXJUeXBlKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgY2hlY2tvdXQgb3JkZXIgdHlwZVxuICAgKi9cbiAgZ2V0Q3VycmVudE9yZGVyVHlwZSgpOiBPYnNlcnZhYmxlPE9SREVSX1RZUEU+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoQ2hlY2tvdXRTZWxlY3RvcnMuZ2V0U2VsZWN0ZWRPcmRlclR5cGUpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY3Rpb25BbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGxldCB1c2VySWQ7XG4gICAgdGhpcy51c2VySWRTZXJ2aWNlXG4gICAgICAuZ2V0VXNlcklkKClcbiAgICAgIC5zdWJzY3JpYmUoKG9jY1VzZXJJZCkgPT4gKHVzZXJJZCA9IG9jY1VzZXJJZCkpXG4gICAgICAudW5zdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gKFxuICAgICAgKHVzZXJJZCAmJiB1c2VySWQgIT09IE9DQ19VU0VSX0lEX0FOT05ZTU9VUykgfHxcbiAgICAgIHRoaXMuYWN0aXZlQ2FydFNlcnZpY2UuaXNHdWVzdENhcnQoKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==