@spartacus/checkout
Version:
Checkout feature library for Spartacus
164 lines • 19 kB
JavaScript
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==