@almatar/smart-booking-dashboard 0.0.1 → 0.0.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/action-card/action-card.component.mjs +3 -3
- package/esm2022/lib/components/add-note-dialog/add-note-dialog.component.mjs +3 -3
- package/esm2022/lib/components/almatar-aside/aside-back-button.service.mjs +24 -0
- package/esm2022/lib/components/almatar-aside/aside.component.mjs +123 -0
- package/esm2022/lib/components/booking-input/booking-input.component.mjs +4 -3
- package/esm2022/lib/components/cancel-dialog/cancel-dialog.component.mjs +53 -4
- package/esm2022/lib/components/data-search/data-search.component.mjs +3 -3
- package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +544 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.mjs +43 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +296 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +88 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +242 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.mjs +48 -0
- package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +129 -0
- package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +321 -0
- package/esm2022/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.mjs +52 -0
- package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.mjs +9 -0
- package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.mjs +7 -0
- package/esm2022/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.mjs +2 -0
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +448 -0
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.mjs +55 -0
- package/esm2022/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.mjs +48 -0
- package/esm2022/lib/components/result-panel/result-panel.component.mjs +3 -3
- package/esm2022/lib/components/shared/components/confirm-modal/confirm-modal.component.mjs +75 -0
- package/esm2022/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.mjs +46 -0
- package/esm2022/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.mjs +9 -0
- package/esm2022/lib/components/shared/interfaces/i-flight-refund-details.mjs +86 -0
- package/esm2022/lib/components/shared/models/cancel-hotel-booking.model.mjs +7 -0
- package/esm2022/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.mjs +27 -0
- package/esm2022/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.mjs +17 -0
- package/esm2022/lib/config/hotel-actions.config.mjs +21 -1
- package/esm2022/lib/models/booking.types.mjs +73 -2
- package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +25 -7
- package/esm2022/lib/services/booking.service.mjs +6 -2
- package/esm2022/lib/shared/components/currency-code-icon/currency-code-icon.component.mjs +35 -0
- package/esm2022/lib/shared/enums/brand-enums.enum.mjs +7 -0
- package/esm2022/lib/shared/environments/environment.mjs +10 -0
- package/esm2022/lib/shared/models/index.mjs +6 -0
- package/esm2022/lib/shared/modules/almatar-icon/almatar-icon.module.mjs +36 -0
- package/esm2022/lib/shared/modules/loader/loader.module.mjs +43 -0
- package/esm2022/lib/shared/pipes/exchange.pipe.mjs +49 -0
- package/esm2022/lib/shared/services/api.service.mjs +42 -0
- package/esm2022/lib/shared/services/shared.service.mjs +34 -0
- package/esm2022/lib/shared/services/translation.service.mjs +61 -0
- package/esm2022/lib/shared/services/webengage-tracking.service.mjs +28 -0
- package/esm2022/lib/shared/store/selectors/currency.selectors.mjs +9 -0
- package/fesm2022/almatar-smart-booking-dashboard.mjs +3278 -180
- package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
- package/lib/components/almatar-aside/aside-back-button.service.d.ts +11 -0
- package/lib/components/almatar-aside/aside.component.d.ts +47 -0
- package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +7 -0
- package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +97 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.d.ts +25 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +91 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.d.ts +39 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.d.ts +44 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.d.ts +19 -0
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +38 -0
- package/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.d.ts +142 -0
- package/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.d.ts +23 -0
- package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.d.ts +7 -0
- package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.d.ts +5 -0
- package/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.d.ts +252 -0
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +82 -0
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.d.ts +21 -0
- package/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.d.ts +16 -0
- package/lib/components/shared/components/confirm-modal/confirm-modal.component.d.ts +17 -0
- package/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.d.ts +10 -0
- package/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.d.ts +7 -0
- package/lib/components/shared/interfaces/i-flight-refund-details.d.ts +73 -0
- package/lib/components/shared/models/cancel-hotel-booking.model.d.ts +6 -0
- package/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.d.ts +11 -0
- package/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.d.ts +7 -0
- package/lib/models/booking.types.d.ts +28 -0
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +1 -0
- package/lib/shared/components/currency-code-icon/currency-code-icon.component.d.ts +13 -0
- package/lib/shared/enums/brand-enums.enum.d.ts +5 -0
- package/lib/shared/environments/environment.d.ts +7 -0
- package/lib/shared/models/index.d.ts +11 -0
- package/lib/shared/modules/almatar-icon/almatar-icon.module.d.ts +13 -0
- package/lib/shared/modules/loader/loader.module.d.ts +13 -0
- package/lib/shared/pipes/exchange.pipe.d.ts +17 -0
- package/lib/shared/services/api.service.d.ts +43 -0
- package/lib/shared/services/shared.service.d.ts +12 -0
- package/lib/shared/services/translation.service.d.ts +17 -0
- package/lib/shared/services/webengage-tracking.service.d.ts +8 -0
- package/lib/shared/store/selectors/currency.selectors.d.ts +2 -0
- package/package.json +2 -19
- package/LICENSE +0 -21
- package/README.md +0 -132
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
import { Injectable, inject, signal, computed } from '@angular/core';
|
|
2
|
+
import { map, catchError, throwError } from 'rxjs';
|
|
3
|
+
import { ApiService } from '../../../shared/services/api.service';
|
|
4
|
+
import { ActivatedRoute } from '@angular/router';
|
|
5
|
+
import { environments } from '../../../shared/environments/environment';
|
|
6
|
+
import { HotelManageBookingService } from '../../shared/services/hotel-manage-booking/hotel-manage-booking.service';
|
|
7
|
+
import { AlmatarHotelAutoCancellationEndpointsEnum } from '../enums/almatar-hotel-auto-cancellation-endpoints.enum';
|
|
8
|
+
import { resolveMyTripsViewedEntrySourceFromQueryParams } from '../../../shared/services/webengage-tracking.service';
|
|
9
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export class AlmatarHotelAutoCancellationEndpointsService {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.api = inject(ApiService);
|
|
14
|
+
this.route = inject(ActivatedRoute);
|
|
15
|
+
this.hotelManageBookingService = inject(HotelManageBookingService);
|
|
16
|
+
this._almatarBookingId = signal('');
|
|
17
|
+
this._confirmationNumber = signal('');
|
|
18
|
+
this._isNusukFlow = signal(environments.isTenant || false);
|
|
19
|
+
this._selectedPackageIds = signal([]);
|
|
20
|
+
this.almatarBookingId = computed(() => this._almatarBookingId());
|
|
21
|
+
this.confirmationNumber = computed(() => this._confirmationNumber());
|
|
22
|
+
this.isNusukFlow = computed(() => this._isNusukFlow());
|
|
23
|
+
this.initializeBookingData();
|
|
24
|
+
}
|
|
25
|
+
initializeBookingData() {
|
|
26
|
+
this.hotelManageBookingService.selectedHotelBooking
|
|
27
|
+
.pipe(takeUntilDestroyed())
|
|
28
|
+
.subscribe((selectedHotelBooking) => {
|
|
29
|
+
// console.log('Selected Hotel Booking:', selectedHotelBooking);
|
|
30
|
+
if (selectedHotelBooking) {
|
|
31
|
+
this._almatarBookingId.set(selectedHotelBooking.bookingId || '');
|
|
32
|
+
this._confirmationNumber.set(selectedHotelBooking.bookingId || '');
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
getRefundDetails(packageIds = []) {
|
|
37
|
+
const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.getRefundDetails;
|
|
38
|
+
const payload = {
|
|
39
|
+
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
40
|
+
''}`,
|
|
41
|
+
product: 'hotels',
|
|
42
|
+
packageIds: [...new Set(packageIds)] // Ensure unique package IDs
|
|
43
|
+
};
|
|
44
|
+
// return of({
|
|
45
|
+
// data: {
|
|
46
|
+
// bookingId: 144368,
|
|
47
|
+
// currency: 'SAR',
|
|
48
|
+
// status: 'Partially refunded',
|
|
49
|
+
// message: 'Refund details calculated successfully',
|
|
50
|
+
// flags: {
|
|
51
|
+
// refundable: true,
|
|
52
|
+
// partial: false,
|
|
53
|
+
// goldenGift: false
|
|
54
|
+
// },
|
|
55
|
+
// selection: {
|
|
56
|
+
// packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95']
|
|
57
|
+
// },
|
|
58
|
+
// totals: {
|
|
59
|
+
// paid: 6866,
|
|
60
|
+
// beforeCoupon: 6865.61,
|
|
61
|
+
// roomsBooked: 4,
|
|
62
|
+
// coupon: 0,
|
|
63
|
+
// gifts: 0,
|
|
64
|
+
// serviceFee: 0,
|
|
65
|
+
// wallet: 0,
|
|
66
|
+
// card: 0,
|
|
67
|
+
// tabby: 0,
|
|
68
|
+
// tamara: 220,
|
|
69
|
+
// mokafa: 0,
|
|
70
|
+
// qitaf: 0,
|
|
71
|
+
// wala: 0,
|
|
72
|
+
// hassad: 0,
|
|
73
|
+
// anb: 0,
|
|
74
|
+
// ygg: 0
|
|
75
|
+
// },
|
|
76
|
+
// previous: [
|
|
77
|
+
// {
|
|
78
|
+
// packageId: '5eb33d59-2607-4057-9d26-4f7be745f67f',
|
|
79
|
+
// roomName: 'Standard Room',
|
|
80
|
+
// cancelledAt: '2026-09-02T13:42:54.848Z',
|
|
81
|
+
// amount: 2990.79,
|
|
82
|
+
// fee: 0,
|
|
83
|
+
// refunded: 2990.79
|
|
84
|
+
// }
|
|
85
|
+
// ],
|
|
86
|
+
// current: {
|
|
87
|
+
// rooms: [
|
|
88
|
+
// {
|
|
89
|
+
// packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',
|
|
90
|
+
// roomId: '0229e622-a89a-469d-adb8-8615deb971ca',
|
|
91
|
+
// roomName: 'Scene Room Twin',
|
|
92
|
+
// basis: 'Room only RO',
|
|
93
|
+
// pax: {
|
|
94
|
+
// adults: 2,
|
|
95
|
+
// children: 0,
|
|
96
|
+
// total: 2
|
|
97
|
+
// },
|
|
98
|
+
// nights: 4,
|
|
99
|
+
// amount: 1887.61,
|
|
100
|
+
// fee: 0,
|
|
101
|
+
// serviceFee: 50,
|
|
102
|
+
// refund: 1887.61,
|
|
103
|
+
// refundable: true,
|
|
104
|
+
// route: 'AUTO'
|
|
105
|
+
// },
|
|
106
|
+
// {
|
|
107
|
+
// packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',
|
|
108
|
+
// roomId: 'b8aed26e-d91a-4234-ae37-94b2c6232dbd',
|
|
109
|
+
// roomName: 'Scene Room Twin',
|
|
110
|
+
// basis: 'Room only RO',
|
|
111
|
+
// pax: {
|
|
112
|
+
// adults: 2,
|
|
113
|
+
// children: 0,
|
|
114
|
+
// total: 2
|
|
115
|
+
// },
|
|
116
|
+
// nights: 4,
|
|
117
|
+
// amount: 1887.6,
|
|
118
|
+
// fee: 0,
|
|
119
|
+
// serviceFee: 50,
|
|
120
|
+
// refund: 1887.6,
|
|
121
|
+
// refundable: true,
|
|
122
|
+
// route: 'AUTO'
|
|
123
|
+
// }
|
|
124
|
+
// ],
|
|
125
|
+
// amount: 3775.21,
|
|
126
|
+
// fee: 0,
|
|
127
|
+
// surcharge: 0,
|
|
128
|
+
// refund: 3775.21
|
|
129
|
+
// },
|
|
130
|
+
// payout: {
|
|
131
|
+
// alreadyRefunded: 2990.79,
|
|
132
|
+
// current: 1600,
|
|
133
|
+
// afterThis: 6766,
|
|
134
|
+
// feesTotal: 0,
|
|
135
|
+
// wallet: 0,
|
|
136
|
+
// card: 0,
|
|
137
|
+
// tabby: 0,
|
|
138
|
+
// tamara: 200,
|
|
139
|
+
// amwal: 0,
|
|
140
|
+
// mis: 0,
|
|
141
|
+
// bnplManual: 0,
|
|
142
|
+
// loyaltyToWallet: 600,
|
|
143
|
+
// note: null
|
|
144
|
+
// },
|
|
145
|
+
// summaries: [
|
|
146
|
+
// {
|
|
147
|
+
// code: 'CARD',
|
|
148
|
+
// label: 'Card',
|
|
149
|
+
// paid: 6866,
|
|
150
|
+
// refund: 3775.21,
|
|
151
|
+
// refundable: true,
|
|
152
|
+
// gateway: 'CH'
|
|
153
|
+
// },
|
|
154
|
+
// {
|
|
155
|
+
// code: 'SERVICE_FEE',
|
|
156
|
+
// label: 'Service Fee',
|
|
157
|
+
// paid: 100,
|
|
158
|
+
// refund: 0,
|
|
159
|
+
// refundable: false
|
|
160
|
+
// }
|
|
161
|
+
// ],
|
|
162
|
+
// gifts: []
|
|
163
|
+
// },
|
|
164
|
+
// status: 200,
|
|
165
|
+
// errors: null
|
|
166
|
+
// });
|
|
167
|
+
return this.api
|
|
168
|
+
.post({
|
|
169
|
+
endpoint,
|
|
170
|
+
...payload
|
|
171
|
+
})
|
|
172
|
+
.pipe(catchError((error) => this.handleError(error, 'Failed to get refund details')));
|
|
173
|
+
}
|
|
174
|
+
mapApiResponseToRooms(data) {
|
|
175
|
+
return this.getAllRooms(data);
|
|
176
|
+
}
|
|
177
|
+
mapApiResponseToRefundSummary(data) {
|
|
178
|
+
return {
|
|
179
|
+
totalPaid: data.totals?.paid || 0,
|
|
180
|
+
totalRefund: data.current?.refund || data.current?.refund || 0,
|
|
181
|
+
totalFees: data.current?.fee || 0,
|
|
182
|
+
rooms: this.getAllRooms(data),
|
|
183
|
+
packages: this.getAllPackages(data),
|
|
184
|
+
summaries: data.summaries,
|
|
185
|
+
payout: data.payout,
|
|
186
|
+
totals: data.totals,
|
|
187
|
+
// Additional breakdown fields
|
|
188
|
+
coupon: data.totals?.coupon || 0,
|
|
189
|
+
giftsTotal: data.totals?.gifts || 0,
|
|
190
|
+
giftsDetails: data.gifts || [],
|
|
191
|
+
serviceFee: data.totals?.serviceFee || 0,
|
|
192
|
+
surcharge: data.current?.surcharge || 0,
|
|
193
|
+
goldenGift: data.flags?.goldenGift || false,
|
|
194
|
+
previousRooms: data.previous || []
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
getAllPackages(data) {
|
|
198
|
+
const packages = [];
|
|
199
|
+
const packageMap = new Map();
|
|
200
|
+
// Process previous (cancelled) rooms - group by packageId
|
|
201
|
+
if (data.previous?.length) {
|
|
202
|
+
data.previous.forEach((room) => {
|
|
203
|
+
const existingPkg = packageMap.get(room.packageId);
|
|
204
|
+
if (existingPkg) {
|
|
205
|
+
existingPkg.rooms.push({
|
|
206
|
+
roomId: room.roomId || room.packageId,
|
|
207
|
+
roomName: room.roomName,
|
|
208
|
+
basis: room.basis,
|
|
209
|
+
nights: room.nights
|
|
210
|
+
});
|
|
211
|
+
existingPkg.amount += room.amount || 0;
|
|
212
|
+
existingPkg.fee += room.fee || 0;
|
|
213
|
+
existingPkg.refund += room.refunded || 0;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
packageMap.set(room.packageId, {
|
|
217
|
+
packageId: room.packageId,
|
|
218
|
+
packageName: room.roomName,
|
|
219
|
+
rooms: [
|
|
220
|
+
{
|
|
221
|
+
roomId: room.roomId || room.packageId,
|
|
222
|
+
roomName: room.roomName,
|
|
223
|
+
basis: room.basis,
|
|
224
|
+
nights: room.nights
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
amount: room.amount || 0,
|
|
228
|
+
fee: room.fee || 0,
|
|
229
|
+
serviceFee: 0,
|
|
230
|
+
refund: room.refunded || 0,
|
|
231
|
+
refundable: false,
|
|
232
|
+
cancelledBefore: true,
|
|
233
|
+
cancellationDate: room.cancelledAt
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
// Process current rooms - group by packageId
|
|
239
|
+
if (data.current?.rooms?.length) {
|
|
240
|
+
data.current.rooms.forEach((room) => {
|
|
241
|
+
const existingPkg = packageMap.get(room.packageId);
|
|
242
|
+
if (existingPkg && !existingPkg.cancelledBefore) {
|
|
243
|
+
existingPkg.rooms.push({
|
|
244
|
+
roomId: room.roomId || room.packageId,
|
|
245
|
+
roomName: room.roomName,
|
|
246
|
+
basis: room.basis,
|
|
247
|
+
nights: room.nights,
|
|
248
|
+
pax: room.pax,
|
|
249
|
+
adults: room.pax?.adults,
|
|
250
|
+
children: room.pax?.children
|
|
251
|
+
});
|
|
252
|
+
existingPkg.amount += room.amount || 0;
|
|
253
|
+
existingPkg.fee += room.fee || 0;
|
|
254
|
+
existingPkg.serviceFee += room.serviceFee || 0;
|
|
255
|
+
existingPkg.refund += room.refund || 0;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
packageMap.set(room.packageId, {
|
|
259
|
+
packageId: room.packageId,
|
|
260
|
+
packageName: room.roomName,
|
|
261
|
+
rooms: [
|
|
262
|
+
{
|
|
263
|
+
roomId: room.roomId || room.packageId,
|
|
264
|
+
roomName: room.roomName,
|
|
265
|
+
basis: room.basis,
|
|
266
|
+
nights: room.nights,
|
|
267
|
+
pax: room.pax,
|
|
268
|
+
adults: room.pax?.adults,
|
|
269
|
+
children: room.pax?.children
|
|
270
|
+
}
|
|
271
|
+
],
|
|
272
|
+
amount: room.amount || 0,
|
|
273
|
+
fee: room.fee || 0,
|
|
274
|
+
serviceFee: room.serviceFee || 0,
|
|
275
|
+
refund: room.refund || 0,
|
|
276
|
+
refundable: room.refundable,
|
|
277
|
+
route: room.route,
|
|
278
|
+
cancelledBefore: false,
|
|
279
|
+
cancellationDate: new Date().toISOString()
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
packageMap.forEach((pkg) => packages.push(pkg));
|
|
285
|
+
return packages;
|
|
286
|
+
}
|
|
287
|
+
getAllRooms(data) {
|
|
288
|
+
const allRooms = [];
|
|
289
|
+
if (data.previous?.length) {
|
|
290
|
+
data.previous.forEach((room) => {
|
|
291
|
+
allRooms.push({
|
|
292
|
+
packageId: room.packageId,
|
|
293
|
+
roomId: room?.roomId,
|
|
294
|
+
roomName: room.roomName,
|
|
295
|
+
isRefundable: false,
|
|
296
|
+
isSelected: false,
|
|
297
|
+
cancelledBefore: true,
|
|
298
|
+
roomAmount: room.amount,
|
|
299
|
+
cancellationFee: room.fee,
|
|
300
|
+
refundAmount: room.refunded,
|
|
301
|
+
currentCancellation: false,
|
|
302
|
+
cancellationDate: room.cancelledAt,
|
|
303
|
+
nights: room.nights ?? 1
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
if (data.current?.rooms?.length) {
|
|
308
|
+
data.current.rooms.forEach((room) => {
|
|
309
|
+
allRooms.push({
|
|
310
|
+
packageId: room.packageId,
|
|
311
|
+
roomId: room?.roomId,
|
|
312
|
+
roomName: room.roomName,
|
|
313
|
+
isRefundable: room.refundable,
|
|
314
|
+
isSelected: false,
|
|
315
|
+
roomAmount: room.amount,
|
|
316
|
+
cancellationFee: room.fee,
|
|
317
|
+
cancelledBefore: false,
|
|
318
|
+
refundAmount: room.refund,
|
|
319
|
+
route: room.route,
|
|
320
|
+
currentCancellation: true,
|
|
321
|
+
cancellationDate: `${new Date()}`,
|
|
322
|
+
nights: room.nights ?? 1
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
return allRooms;
|
|
327
|
+
}
|
|
328
|
+
processAutoCancellation(packageIds, refundOption = 'originalPaymentMethod') {
|
|
329
|
+
const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;
|
|
330
|
+
const uniquePackageIds = [...new Set(packageIds)]; // Ensure unique package IDs
|
|
331
|
+
const payload = {
|
|
332
|
+
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
333
|
+
''}`,
|
|
334
|
+
product: 'hotels',
|
|
335
|
+
packageIds: uniquePackageIds,
|
|
336
|
+
preferredPaymentMethod: refundOption
|
|
337
|
+
};
|
|
338
|
+
this._selectedPackageIds.set(uniquePackageIds);
|
|
339
|
+
// return of({
|
|
340
|
+
// data: {
|
|
341
|
+
// error: '1',
|
|
342
|
+
// message:
|
|
343
|
+
// 'Cancel requested — supplier cancellation failed; ticket created',
|
|
344
|
+
// bookingId: 144368,
|
|
345
|
+
// preferredPaymentMethod: 'wallet',
|
|
346
|
+
// cancel: {
|
|
347
|
+
// status: 'failed',
|
|
348
|
+
// packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95'],
|
|
349
|
+
// },
|
|
350
|
+
// refund: {
|
|
351
|
+
// status: 'skipped',
|
|
352
|
+
// bookingStatus: 'Cancelled',
|
|
353
|
+
// amount: 1050,
|
|
354
|
+
// currency: 'SAR',
|
|
355
|
+
// breakdown: {
|
|
356
|
+
// wallet: 750,
|
|
357
|
+
// mokafa: 200,
|
|
358
|
+
// qitaf: 100,
|
|
359
|
+
// card: 0,
|
|
360
|
+
// tabby: 0,
|
|
361
|
+
// tamara: 0,
|
|
362
|
+
// },
|
|
363
|
+
// },
|
|
364
|
+
// },
|
|
365
|
+
// status: 200,
|
|
366
|
+
// errors: null,
|
|
367
|
+
// });
|
|
368
|
+
return this.api
|
|
369
|
+
.post({
|
|
370
|
+
endpoint,
|
|
371
|
+
...payload
|
|
372
|
+
})
|
|
373
|
+
.pipe(map((response) => {
|
|
374
|
+
this._selectedPackageIds.set([]);
|
|
375
|
+
return response;
|
|
376
|
+
}), catchError((error) => this.handleError(error, 'Failed to process cancellation')));
|
|
377
|
+
}
|
|
378
|
+
processNonRefundableCancellation(packageId, attachmentUrl, language = 'en') {
|
|
379
|
+
const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;
|
|
380
|
+
const payload = {
|
|
381
|
+
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
382
|
+
''}`,
|
|
383
|
+
product: 'hotels',
|
|
384
|
+
packageIds: [packageId],
|
|
385
|
+
preferredPaymentMethod: 'originalPaymentMethod',
|
|
386
|
+
processedMode: 'auto',
|
|
387
|
+
language,
|
|
388
|
+
attachmentUrl
|
|
389
|
+
};
|
|
390
|
+
return this.api
|
|
391
|
+
.post({
|
|
392
|
+
endpoint,
|
|
393
|
+
...payload
|
|
394
|
+
})
|
|
395
|
+
.pipe(catchError((error) => this.handleError(error, 'Failed to process non-refundable cancellation')));
|
|
396
|
+
}
|
|
397
|
+
calculateLocalRefundSummary(rooms) {
|
|
398
|
+
const selectedRooms = rooms.filter((room) => room.isSelected);
|
|
399
|
+
const totalPaid = rooms.reduce((sum, room) => sum + room.roomAmount, 0);
|
|
400
|
+
const totalRefund = selectedRooms.reduce((sum, room) => sum + room.refundAmount, 0);
|
|
401
|
+
return {
|
|
402
|
+
totalPaid,
|
|
403
|
+
totalRefund,
|
|
404
|
+
rooms: selectedRooms.map((room) => ({
|
|
405
|
+
...room,
|
|
406
|
+
currentCancellation: true,
|
|
407
|
+
cancellationDate: new Date().toISOString()
|
|
408
|
+
}))
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
getSelectedPackageIds() {
|
|
412
|
+
return this._selectedPackageIds();
|
|
413
|
+
}
|
|
414
|
+
clearSelectedPackageIds() {
|
|
415
|
+
this._selectedPackageIds.set([]);
|
|
416
|
+
}
|
|
417
|
+
getEntrySourceDeviceBrand() {
|
|
418
|
+
return {
|
|
419
|
+
entrySource: this.getEntrySource(),
|
|
420
|
+
device: this.getDevice()
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
getEntrySource() {
|
|
424
|
+
return resolveMyTripsViewedEntrySourceFromQueryParams(this.route.snapshot.queryParams);
|
|
425
|
+
}
|
|
426
|
+
getDevice() {
|
|
427
|
+
let device = 'web';
|
|
428
|
+
if (this.route.snapshot.queryParams['mobileAuth']) {
|
|
429
|
+
device = this.route.snapshot.queryParams['device'] || 'mobile';
|
|
430
|
+
}
|
|
431
|
+
localStorage.setItem('deviceType', device);
|
|
432
|
+
return device;
|
|
433
|
+
}
|
|
434
|
+
handleError(error, message) {
|
|
435
|
+
// console.log(message, error);
|
|
436
|
+
const errorMessage = error?.error?.message || error?.message || message;
|
|
437
|
+
return throwError(() => new Error(errorMessage));
|
|
438
|
+
}
|
|
439
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
440
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, providedIn: 'root' }); }
|
|
441
|
+
}
|
|
442
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, decorators: [{
|
|
443
|
+
type: Injectable,
|
|
444
|
+
args: [{
|
|
445
|
+
providedIn: 'root'
|
|
446
|
+
}]
|
|
447
|
+
}], ctorParameters: () => [] });
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBTSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUNwSCxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQVFwSCxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNySCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUErRGhFLE1BQU0sT0FBTyw0Q0FBNEM7SUFtQnZEO1FBbEJpQixRQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsOEJBQXlCLEdBQUcsTUFBTSxDQUNqRCx5QkFBeUIsQ0FDMUIsQ0FBQztRQUVlLHNCQUFpQixHQUFHLE1BQU0s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LE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0FsZ0JVLDRDQUE0QzttSEFBNUMsNENBQTRDLGNBRjNDLE1BQU07OzRGQUVQLDRDQUE0QztrQkFIeEQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2hvdGVsLW1hbmFnZS1ib29raW5nL2hvdGVsLW1hbmFnZS1ib29raW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0gfSBmcm9tICcuLi9lbnVtcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5lbnVtJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFBhY2thZ2UsXG4gIElSZWZ1bmREZXRhaWxzQXBpUmVzcG9uc2UsXG4gIElSZWZ1bmREZXRhaWxzRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVzb2x2ZU15VHJpcHNWaWV3ZWRFbnRyeVNvdXJjZUZyb21RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy93ZWJlbmdhZ2UtdHJhY2tpbmcuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnVuZERldGFpbHNSZXF1ZXN0IHtcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG4gIHByb2R1Y3Q6ICdob3RlbHMnO1xuICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHJvY2Vzc0NhbmNlbGxhdGlvblJlcXVlc3Qge1xuICBib29raW5nSWQ6IHN0cmluZztcbiAgcHJvZHVjdDogJ2hvdGVscyc7XG4gIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRQYXltZW50TWV0aG9kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9jZXNzTm9uUmVmdW5kYWJsZUNhbmNlbGxhdGlvblJlcXVlc3Qge1xuICBib29raW5nSWQ6IHN0cmluZztcbiAgcHJvZHVjdDogJ2hvdGVscyc7XG4gIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gIHByb2Nlc3NlZE1vZGU6ICdhdXRvJztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgYXR0YWNobWVudFVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIGRhdGE6IHtcbiAgICBlcnJvcjogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBib29raW5nSWQ6IG51bWJlcjtcbiAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gICAgaXNXaGF0c0FwcD86IGJvb2xlYW47XG4gICAgY2FuY2VsOiB7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVmdW5kOiB7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgIGJvb2tpbmdTdGF0dXM6IHN0cmluZztcbiAgICAgIGFtb3VudDogbnVtYmVyO1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGJyZWFrZG93bjoge1xuICAgICAgICB3YWxsZXQ6IG51bWJlcjtcbiAgICAgICAgbW9rYWZhOiBudW1iZXI7XG4gICAgICAgIHFpdGFmOiBudW1iZXI7XG4gICAgICAgIGNhcmQ6IG51bWJlcjtcbiAgICAgICAgdGFiYnk6IG51bWJlcjtcbiAgICAgICAgdGFtYXJhOiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG4gIGVycm9yczogYW55O1xufVxuXG5pbnRlcmZhY2UgSUVudHJ5U291cmNlRGV2aWNlQnJhbmQge1xuICBlbnRyeVNvdXJjZTogc3RyaW5nO1xuICBkZXZpY2U6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaSA9IGluamVjdChBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxtYXRhckJvb2tpbmdJZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uTnVtYmVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc051c3VrRmxvdyA9IHNpZ25hbDxib29sZWFuPihcbiAgICBlbnZpcm9ubWVudHMuaXNUZW5hbnQgfHwgZmFsc2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZFBhY2thZ2VJZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICByZWFkb25seSBhbG1hdGFyQm9va2luZ0lkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxtYXRhckJvb2tpbmdJZCgpKTtcbiAgcmVhZG9ubHkgY29uZmlybWF0aW9uTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fY29uZmlybWF0aW9uTnVtYmVyKCkpO1xuICByZWFkb25seSBpc051c3VrRmxvdyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2lzTnVzdWtGbG93KCkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUJvb2tpbmdEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVCb29raW5nRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmdcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRIb3RlbEJvb2tpbmc6IGFueSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnU2VsZWN0ZWQgSG90ZWwgQm9va2luZzonLCBzZWxlY3RlZEhvdGVsQm9va2luZyk7XG4gICAgICAgIGlmIChzZWxlY3RlZEhvdGVsQm9va2luZykge1xuICAgICAgICAgIHRoaXMuX2FsbWF0YXJCb29raW5nSWQuc2V0KHNlbGVjdGVkSG90ZWxCb29raW5nLmJvb2tpbmdJZCB8fCAnJyk7XG4gICAgICAgICAgdGhpcy5fY29uZmlybWF0aW9uTnVtYmVyLnNldChzZWxlY3RlZEhvdGVsQm9va2luZy5ib29raW5nSWQgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFJlZnVuZERldGFpbHMoXG4gICAgcGFja2FnZUlkczogc3RyaW5nW10gPSBbXVxuICApOiBPYnNlcnZhYmxlPElSZWZ1bmREZXRhaWxzQXBpUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLmdldFJlZnVuZERldGFpbHM7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBJUmVmdW5kRGV0YWlsc1JlcXVlc3QgPSB7XG4gICAgICBib29raW5nSWQ6IGAke1xuICAgICAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmcudmFsdWU/LmJvb2tpbmdJZCB8fFxuICAgICAgICAnJ1xuICAgICAgfWAsXG4gICAgICBwcm9kdWN0OiAnaG90ZWxzJyxcbiAgICAgIHBhY2thZ2VJZHM6IFsuLi5uZXcgU2V0KHBhY2thZ2VJZHMpXSAvLyBFbnN1cmUgdW5pcXVlIHBhY2thZ2UgSURzXG4gICAgfTtcblxuICAgIC8vIHJldHVybiBvZih7XG4gICAgLy8gICBkYXRhOiB7XG4gICAgLy8gICAgIGJvb2tpbmdJZDogMTQ0MzY4LFxuICAgIC8vICAgICBjdXJyZW5jeTogJ1NBUicsXG4gICAgLy8gICAgIHN0YXR1czogJ1BhcnRpYWxseSByZWZ1bmRlZCcsXG4gICAgLy8gICAgIG1lc3NhZ2U6ICdSZWZ1bmQgZGV0YWlscyBjYWxjdWxhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgLy8gICAgIGZsYWdzOiB7XG4gICAgLy8gICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAvLyAgICAgICBnb2xkZW5HaWZ0OiBmYWxzZVxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzZWxlY3Rpb246IHtcbiAgICAvLyAgICAgICBwYWNrYWdlSWRzOiBbJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NSddXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHRvdGFsczoge1xuICAgIC8vICAgICAgIHBhaWQ6IDY4NjYsXG4gICAgLy8gICAgICAgYmVmb3JlQ291cG9uOiA2ODY1LjYxLFxuICAgIC8vICAgICAgIHJvb21zQm9va2VkOiA0LFxuICAgIC8vICAgICAgIGNvdXBvbjogMCxcbiAgICAvLyAgICAgICBnaWZ0czogMCxcbiAgICAvLyAgICAgICBzZXJ2aWNlRmVlOiAwLFxuICAgIC8vICAgICAgIHdhbGxldDogMCxcbiAgICAvLyAgICAgICBjYXJkOiAwLFxuICAgIC8vICAgICAgIHRhYmJ5OiAwLFxuICAgIC8vICAgICAgIHRhbWFyYTogMjIwLFxuICAgIC8vICAgICAgIG1va2FmYTogMCxcbiAgICAvLyAgICAgICBxaXRhZjogMCxcbiAgICAvLyAgICAgICB3YWxhOiAwLFxuICAgIC8vICAgICAgIGhhc3NhZDogMCxcbiAgICAvLyAgICAgICBhbmI6IDAsXG4gICAgLy8gICAgICAgeWdnOiAwXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHByZXZpb3VzOiBbXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgcGFja2FnZUlkOiAnNWViMzNkNTktMjYwNy00MDU3LTlkMjYtNGY3YmU3NDVmNjdmJyxcbiAgICAvLyAgICAgICAgIHJvb21OYW1lOiAnU3RhbmRhcmQgUm9vbScsXG4gICAgLy8gICAgICAgICBjYW5jZWxsZWRBdDogJzIwMjYtMDktMDJUMTM6NDI6NTQuODQ4WicsXG4gICAgLy8gICAgICAgICBhbW91bnQ6IDI5OTAuNzksXG4gICAgLy8gICAgICAgICBmZWU6IDAsXG4gICAgLy8gICAgICAgICByZWZ1bmRlZDogMjk5MC43OVxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgXSxcbiAgICAvLyAgICAgY3VycmVudDoge1xuICAgIC8vICAgICAgIHJvb21zOiBbXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHBhY2thZ2VJZDogJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NScsXG4gICAgLy8gICAgICAgICAgIHJvb21JZDogJzAyMjllNjIyLWE4OWEtNDY5ZC1hZGI4LTg2MTVkZWI5NzFjYScsXG4gICAgLy8gICAgICAgICAgIHJvb21OYW1lOiAnU2NlbmUgUm9vbSBUd2luJyxcbiAgICAvLyAgICAgICAgICAgYmFzaXM6ICdSb29tIG9ubHkgUk8nLFxuICAgIC8vICAgICAgICAgICBwYXg6IHtcbiAgICAvLyAgICAgICAgICAgICBhZHVsdHM6IDIsXG4gICAgLy8gICAgICAgICAgICAgY2hpbGRyZW46IDAsXG4gICAgLy8gICAgICAgICAgICAgdG90YWw6IDJcbiAgICAvLyAgICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgICAgbmlnaHRzOiA0LFxuICAgIC8vICAgICAgICAgICBhbW91bnQ6IDE4ODcuNjEsXG4gICAgLy8gICAgICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICAgICAgc2VydmljZUZlZTogNTAsXG4gICAgLy8gICAgICAgICAgIHJlZnVuZDogMTg4Ny42MSxcbiAgICAvLyAgICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgICAgcm91dGU6ICdBVVRPJ1xuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgcGFja2FnZUlkOiAnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1JyxcbiAgICAvLyAgICAgICAgICAgcm9vbUlkOiAnYjhhZWQyNmUtZDkxYS00MjM0LWFlMzctOTRiMmM2MjMyZGJkJyxcbiAgICAvLyAgICAgICAgICAgcm9vbU5hbWU6ICdTY2VuZSBSb29tIFR3aW4nLFxuICAgIC8vICAgICAgICAgICBiYXNpczogJ1Jvb20gb25seSBSTycsXG4gICAgLy8gICAgICAgICAgIHBheDoge1xuICAgIC8vICAgICAgICAgICAgIGFkdWx0czogMixcbiAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogMCxcbiAgICAvLyAgICAgICAgICAgICB0b3RhbDogMlxuICAgIC8vICAgICAgICAgICB9LFxuICAgIC8vICAgICAgICAgICBuaWdodHM6IDQsXG4gICAgLy8gICAgICAgICAgIGFtb3VudDogMTg4Ny42LFxuICAgIC8vICAgICAgICAgICBmZWU6IDAsXG4gICAgLy8gICAgICAgICAgIHNlcnZpY2VGZWU6IDUwLFxuICAgIC8vICAgICAgICAgICByZWZ1bmQ6IDE4ODcuNixcbiAgICAvLyAgICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgICAgcm91dGU6ICdBVVRPJ1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIF0sXG4gICAgLy8gICAgICAgYW1vdW50OiAzNzc1LjIxLFxuICAgIC8vICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICBzdXJjaGFyZ2U6IDAsXG4gICAgLy8gICAgICAgcmVmdW5kOiAzNzc1LjIxXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHBheW91dDoge1xuICAgIC8vICAgICAgIGFscmVhZHlSZWZ1bmRlZDogMjk5MC43OSxcbiAgICAvLyAgICAgICBjdXJyZW50OiAxNjAwLFxuICAgIC8vICAgICAgIGFmdGVyVGhpczogNjc2NixcbiAgICAvLyAgICAgICBmZWVzVG90YWw6IDAsXG4gICAgLy8gICAgICAgd2FsbGV0OiAwLFxuICAgIC8vICAgICAgIGNhcmQ6IDAsXG4gICAgLy8gICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgdGFtYXJhOiAyMDAsXG4gICAgLy8gICAgICAgYW13YWw6IDAsXG4gICAgLy8gICAgICAgbWlzOiAwLFxuICAgIC8vICAgICAgIGJucGxNYW51YWw6IDAsXG4gICAgLy8gICAgICAgbG95YWx0eVRvV2FsbGV0OiA2MDAsXG4gICAgLy8gICAgICAgbm90ZTogbnVsbFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdW1tYXJpZXM6IFtcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBjb2RlOiAnQ0FSRCcsXG4gICAgLy8gICAgICAgICBsYWJlbDogJ0NhcmQnLFxuICAgIC8vICAgICAgICAgcGFpZDogNjg2NixcbiAgICAvLyAgICAgICAgIHJlZnVuZDogMzc3NS4yMSxcbiAgICAvLyAgICAgICAgIHJlZnVuZGFibGU6IHRydWUsXG4gICAgLy8gICAgICAgICBnYXRld2F5OiAnQ0gnXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBjb2RlOiAnU0VSVklDRV9GRUUnLFxuICAgIC8vICAgICAgICAgbGFiZWw6ICdTZXJ2aWNlIEZlZScsXG4gICAgLy8gICAgICAgICBwYWlkOiAxMDAsXG4gICAgLy8gICAgICAgICByZWZ1bmQ6IDAsXG4gICAgLy8gICAgICAgICByZWZ1bmRhYmxlOiBmYWxzZVxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgXSxcbiAgICAvLyAgICAgZ2lmdHM6IFtdXG4gICAgLy8gICB9LFxuICAgIC8vICAgc3RhdHVzOiAyMDAsXG4gICAgLy8gICBlcnJvcnM6IG51bGxcbiAgICAvLyB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SVJlZnVuZERldGFpbHNBcGlSZXNwb25zZT4oe1xuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgLi4ucGF5bG9hZFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCAnRmFpbGVkIHRvIGdldCByZWZ1bmQgZGV0YWlscycpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBtYXBBcGlSZXNwb25zZVRvUm9vbXMoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxSb29tcyhkYXRhKTtcbiAgfVxuXG4gIG1hcEFwaVJlc3BvbnNlVG9SZWZ1bmRTdW1tYXJ5KFxuICAgIGRhdGE6IElSZWZ1bmREZXRhaWxzRGF0YVxuICApOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFN1bW1hcnkge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFBhaWQ6IGRhdGEudG90YWxzPy5wYWlkIHx8IDAsXG4gICAgICB0b3RhbFJlZnVuZDogZGF0YS5jdXJyZW50Py5yZWZ1bmQgfHwgZGF0YS5jdXJyZW50Py5yZWZ1bmQgfHwgMCxcbiAgICAgIHRvdGFsRmVlczogZGF0YS5jdXJyZW50Py5mZWUgfHwgMCxcbiAgICAgIHJvb21zOiB0aGlzLmdldEFsbFJvb21zKGRhdGEpLFxuICAgICAgcGFja2FnZXM6IHRoaXMuZ2V0QWxsUGFja2FnZXMoZGF0YSksXG4gICAgICBzdW1tYXJpZXM6IGRhdGEuc3VtbWFyaWVzLFxuICAgICAgcGF5b3V0OiBkYXRhLnBheW91dCxcbiAgICAgIHRvdGFsczogZGF0YS50b3RhbHMsXG4gICAgICAvLyBBZGRpdGlvbmFsIGJyZWFrZG93biBmaWVsZHNcbiAgICAgIGNvdXBvbjogZGF0YS50b3RhbHM/LmNvdXBvbiB8fCAwLFxuICAgICAgZ2lmdHNUb3RhbDogZGF0YS50b3RhbHM/LmdpZnRzIHx8IDAsXG4gICAgICBnaWZ0c0RldGFpbHM6IGRhdGEuZ2lmdHMgfHwgW10sXG4gICAgICBzZXJ2aWNlRmVlOiBkYXRhLnRvdGFscz8uc2VydmljZUZlZSB8fCAwLFxuICAgICAgc3VyY2hhcmdlOiBkYXRhLmN1cnJlbnQ/LnN1cmNoYXJnZSB8fCAwLFxuICAgICAgZ29sZGVuR2lmdDogZGF0YS5mbGFncz8uZ29sZGVuR2lmdCB8fCBmYWxzZSxcbiAgICAgIHByZXZpb3VzUm9vbXM6IGRhdGEucHJldmlvdXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0QWxsUGFja2FnZXMoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kUGFja2FnZVtdIHtcbiAgICBjb25zdCBwYWNrYWdlczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlW10gPSBbXTtcbiAgICBjb25zdCBwYWNrYWdlTWFwID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kUGFja2FnZVxuICAgID4oKTtcblxuICAgIC8vIFByb2Nlc3MgcHJldmlvdXMgKGNhbmNlbGxlZCkgcm9vbXMgLSBncm91cCBieSBwYWNrYWdlSWRcbiAgICBpZiAoZGF0YS5wcmV2aW91cz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLnByZXZpb3VzLmZvckVhY2goKHJvb206IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ1BrZyA9IHBhY2thZ2VNYXAuZ2V0KHJvb20ucGFja2FnZUlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGtnKSB7XG4gICAgICAgICAgZXhpc3RpbmdQa2cucm9vbXMucHVzaCh7XG4gICAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkIHx8IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBleGlzdGluZ1BrZy5hbW91bnQgKz0gcm9vbS5hbW91bnQgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5mZWUgKz0gcm9vbS5mZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yZWZ1bmQgKz0gcm9vbS5yZWZ1bmRlZCB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhY2thZ2VNYXAuc2V0KHJvb20ucGFja2FnZUlkLCB7XG4gICAgICAgICAgICBwYWNrYWdlSWQ6IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICByb29tczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCB8fCByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbW91bnQ6IHJvb20uYW1vdW50IHx8IDAsXG4gICAgICAgICAgICBmZWU6IHJvb20uZmVlIHx8IDAsXG4gICAgICAgICAgICBzZXJ2aWNlRmVlOiAwLFxuICAgICAgICAgICAgcmVmdW5kOiByb29tLnJlZnVuZGVkIHx8IDAsXG4gICAgICAgICAgICByZWZ1bmRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IHJvb20uY2FuY2VsbGVkQXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBjdXJyZW50IHJvb21zIC0gZ3JvdXAgYnkgcGFja2FnZUlkXG4gICAgaWYgKGRhdGEuY3VycmVudD8ucm9vbXM/Lmxlbmd0aCkge1xuICAgICAgZGF0YS5jdXJyZW50LnJvb21zLmZvckVhY2goKHJvb206IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ1BrZyA9IHBhY2thZ2VNYXAuZ2V0KHJvb20ucGFja2FnZUlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGtnICYmICFleGlzdGluZ1BrZy5jYW5jZWxsZWRCZWZvcmUpIHtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yb29tcy5wdXNoKHtcbiAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyxcbiAgICAgICAgICAgIHBheDogcm9vbS5wYXgsXG4gICAgICAgICAgICBhZHVsdHM6IHJvb20ucGF4Py5hZHVsdHMsXG4gICAgICAgICAgICBjaGlsZHJlbjogcm9vbS5wYXg/LmNoaWxkcmVuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuYW1vdW50ICs9IHJvb20uYW1vdW50IHx8IDA7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuZmVlICs9IHJvb20uZmVlIHx8IDA7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuc2VydmljZUZlZSArPSByb29tLnNlcnZpY2VGZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yZWZ1bmQgKz0gcm9vbS5yZWZ1bmQgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWNrYWdlTWFwLnNldChyb29tLnBhY2thZ2VJZCwge1xuICAgICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgICAgcm9vbXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICAgICAgYmFzaXM6IHJvb20uYmFzaXMsXG4gICAgICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyxcbiAgICAgICAgICAgICAgICBwYXg6IHJvb20ucGF4LFxuICAgICAgICAgICAgICAgIGFkdWx0czogcm9vbS5wYXg/LmFkdWx0cyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcm9vbS5wYXg/LmNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbW91bnQ6IHJvb20uYW1vdW50IHx8IDAsXG4gICAgICAgICAgICBmZWU6IHJvb20uZmVlIHx8IDAsXG4gICAgICAgICAgICBzZXJ2aWNlRmVlOiByb29tLnNlcnZpY2VGZWUgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZDogcm9vbS5yZWZ1bmQgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZGFibGU6IHJvb20ucmVmdW5kYWJsZSxcbiAgICAgICAgICAgIHJvdXRlOiByb29tLnJvdXRlLFxuICAgICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwYWNrYWdlTWFwLmZvckVhY2goKHBrZykgPT4gcGFja2FnZXMucHVzaChwa2cpKTtcbiAgICByZXR1cm4gcGFja2FnZXM7XG4gIH1cblxuICBnZXRBbGxSb29tcyhkYXRhOiBJUmVmdW5kRGV0YWlsc0RhdGEpOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXSB7XG4gICAgY29uc3QgYWxsUm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdID0gW107XG5cbiAgICBpZiAoZGF0YS5wcmV2aW91cz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLnByZXZpb3VzLmZvckVhY2goKHJvb20pID0+IHtcbiAgICAgICAgYWxsUm9vbXMucHVzaCh7XG4gICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20/LnJvb21JZCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogdHJ1ZSxcbiAgICAgICAgICByb29tQW1vdW50OiByb29tLmFtb3VudCxcbiAgICAgICAgICBjYW5jZWxsYXRpb25GZWU6IHJvb20uZmVlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcm9vbS5yZWZ1bmRlZCxcbiAgICAgICAgICBjdXJyZW50Q2FuY2VsbGF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBjYW5jZWxsYXRpb25EYXRlOiByb29tLmNhbmNlbGxlZEF0LFxuICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHMgPz8gMVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmN1cnJlbnQ/LnJvb21zPy5sZW5ndGgpIHtcbiAgICAgIGRhdGEuY3VycmVudC5yb29tcy5mb3JFYWNoKChyb29tKSA9PiB7XG4gICAgICAgIGFsbFJvb21zLnB1c2goe1xuICAgICAgICAgIHBhY2thZ2VJZDogcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgcm9vbUlkOiByb29tPy5yb29tSWQsXG4gICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgaXNSZWZ1bmRhYmxlOiByb29tLnJlZnVuZGFibGUsXG4gICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgcm9vbUFtb3VudDogcm9vbS5hbW91bnQsXG4gICAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiByb29tLmZlZSxcbiAgICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcm9vbS5yZWZ1bmQsXG4gICAgICAgICAgcm91dGU6IHJvb20ucm91dGUsXG4gICAgICAgICAgY3VycmVudENhbmNlbGxhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxsYXRpb25EYXRlOiBgJHtuZXcgRGF0ZSgpfWAsXG4gICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyA/PyAxXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFJvb21zO1xuICB9XG5cbiAgcHJvY2Vzc0F1dG9DYW5jZWxsYXRpb24oXG4gICAgcGFja2FnZUlkczogc3RyaW5nW10sXG4gICAgcmVmdW5kT3B0aW9uID0gJ29yaWdpbmFsUGF5bWVudE1ldGhvZCdcbiAgKTogT2JzZXJ2YWJsZTxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gXG4gICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb247XG5cbiAgICBjb25zdCB1bmlxdWVQYWNrYWdlSWRzID0gWy4uLm5ldyBTZXQocGFja2FnZUlkcyldOyAvLyBFbnN1cmUgdW5pcXVlIHBhY2thZ2UgSURzXG4gICAgY29uc3QgcGF5bG9hZDogSVByb2Nlc3NDYW5jZWxsYXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYm9va2luZ0lkOiBgJHtcbiAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLnZhbHVlPy5ib29raW5nSWQgfHxcbiAgICAgICAgJydcbiAgICAgIH1gLFxuICAgICAgcHJvZHVjdDogJ2hvdGVscycsXG4gICAgICBwYWNrYWdlSWRzOiB1bmlxdWVQYWNrYWdlSWRzLFxuICAgICAgcHJlZmVycmVkUGF5bWVudE1ldGhvZDogcmVmdW5kT3B0aW9uXG4gICAgfTtcblxuICAgIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcy5zZXQodW5pcXVlUGFja2FnZUlkcyk7XG5cbiAgICAvLyByZXR1cm4gb2Yoe1xuICAgIC8vICAgZGF0YToge1xuICAgIC8vICAgICBlcnJvcjogJzEnLFxuICAgIC8vICAgICBtZXNzYWdlOlxuICAgIC8vICAgICAgICdDYW5jZWwgcmVxdWVzdGVkIOKAlCBzdXBwbGllciBjYW5jZWxsYXRpb24gZmFpbGVkOyB0aWNrZXQgY3JlYXRlZCcsXG4gICAgLy8gICAgIGJvb2tpbmdJZDogMTQ0MzY4LFxuICAgIC8vICAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiAnd2FsbGV0JyxcbiAgICAvLyAgICAgY2FuY2VsOiB7XG4gICAgLy8gICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAvLyAgICAgICBwYWNrYWdlSWRzOiBbJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NSddLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICByZWZ1bmQ6IHtcbiAgICAvLyAgICAgICBzdGF0dXM6ICdza2lwcGVkJyxcbiAgICAvLyAgICAgICBib29raW5nU3RhdHVzOiAnQ2FuY2VsbGVkJyxcbiAgICAvLyAgICAgICBhbW91bnQ6IDEwNTAsXG4gICAgLy8gICAgICAgY3VycmVuY3k6ICdTQVInLFxuICAgIC8vICAgICAgIGJyZWFrZG93bjoge1xuICAgIC8vICAgICAgICAgd2FsbGV0OiA3NTAsXG4gICAgLy8gICAgICAgICBtb2thZmE6IDIwMCxcbiAgICAvLyAgICAgICAgIHFpdGFmOiAxMDAsXG4gICAgLy8gICAgICAgICBjYXJkOiAwLFxuICAgIC8vICAgICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgICB0YW1hcmE6IDAsXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0dXM6IDIwMCxcbiAgICAvLyAgIGVycm9yczogbnVsbCxcbiAgICAvLyB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+KHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIC4uLnBheWxvYWRcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcy5zZXQoW10pO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gcHJvY2VzcyBjYW5jZWxsYXRpb24nKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgcHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb24oXG4gICAgcGFja2FnZUlkOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudFVybDogc3RyaW5nLFxuICAgIGxhbmd1YWdlID0gJ2VuJ1xuICApOiBPYnNlcnZhYmxlPElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb247XG5cbiAgICBjb25zdCBwYXlsb2FkOiBJUHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYm9va2luZ0lkOiBgJHtcbiAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLnZhbHVlPy5ib29raW5nSWQgfHxcbiAgICAgICAgJydcbiAgICAgIH1gLFxuICAgICAgcHJvZHVjdDogJ2hvdGVscycsXG4gICAgICBwYWNrYWdlSWRzOiBbcGFja2FnZUlkXSxcbiAgICAgIHByZWZlcnJlZFBheW1lbnRNZXRob2Q6ICdvcmlnaW5hbFBheW1lbnRNZXRob2QnLFxuICAgICAgcHJvY2Vzc2VkTW9kZTogJ2F1dG8nLFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBhdHRhY2htZW50VXJsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+KHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIC4uLnBheWxvYWRcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgJ0ZhaWxlZCB0byBwcm9jZXNzIG5vbi1yZWZ1bmRhYmxlIGNhbmNlbGxhdGlvbidcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVMb2NhbFJlZnVuZFN1bW1hcnkoXG4gICAgcm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb29tcyA9IHJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0b3RhbFBhaWQgPSByb29tcy5yZWR1Y2UoKHN1bSwgcm9vbSkgPT4gc3VtICsgcm9vbS5yb29tQW1vdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbFJlZnVuZCA9IHNlbGVjdGVkUm9vbXMucmVkdWNlKFxuICAgICAgKHN1bSwgcm9vbSkgPT4gc3VtICsgcm9vbS5yZWZ1bmRBbW91bnQsXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFBhaWQsXG4gICAgICB0b3RhbFJlZnVuZCxcbiAgICAgIHJvb21zOiBzZWxlY3RlZFJvb21zLm1hcCgocm9vbSkgPT4gKHtcbiAgICAgICAgLi4ucm9vbSxcbiAgICAgICAgY3VycmVudENhbmNlbGxhdGlvbjogdHJ1ZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQYWNrYWdlSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzKCk7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkUGFja2FnZUlkcygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFBhY2thZ2VJZHMuc2V0KFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW50cnlTb3VyY2VEZXZpY2VCcmFuZCgpOiBJRW50cnlTb3VyY2VEZXZpY2VCcmFuZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5U291cmNlOiB0aGlzLmdldEVudHJ5U291cmNlKCksXG4gICAgICBkZXZpY2U6IHRoaXMuZ2V0RGV2aWNlKClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnRyeVNvdXJjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTXlUcmlwc1ZpZXdlZEVudHJ5U291cmNlRnJvbVF1ZXJ5UGFyYW1zKFxuICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldERldmljZSgpOiBzdHJpbmcge1xuICAgIGxldCBkZXZpY2UgPSAnd2ViJztcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snbW9iaWxlQXV0aCddKSB7XG4gICAgICBkZXZpY2UgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydkZXZpY2UnXSB8fCAnbW9iaWxlJztcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RldmljZVR5cGUnLCBkZXZpY2UpO1xuICAgIHJldHVybiBkZXZpY2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlLCBlcnJvcik7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgIGVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnJvcj8ubWVzc2FnZSB8fCBtZXNzYWdlO1xuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKTtcbiAgfVxufVxuIl19
|
package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.mjs
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Injectable, signal, computed } from '@angular/core';
|
|
2
|
+
import { AlmatarHotelAutoCancellationStepEnum } from '../enums/almatar-hotel-auto-cancellation-step.enum';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class AlmatarHotelAutoCancellationService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.currentStep = signal(AlmatarHotelAutoCancellationStepEnum.selectRooms);
|
|
7
|
+
this.selectedRooms = signal([]);
|
|
8
|
+
this.hotelInfo = signal(null);
|
|
9
|
+
this.refundSummary = signal(null);
|
|
10
|
+
this.selectedRoomsCount = computed(() => this.selectedRooms().filter((room) => room.isSelected).length);
|
|
11
|
+
this.hasSelectedRooms = computed(() => this.selectedRoomsCount() > 0);
|
|
12
|
+
this.totalRefundAmount = computed(() => {
|
|
13
|
+
const summary = this.refundSummary();
|
|
14
|
+
return summary?.totalRefund ?? 0;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
setCurrentStep(step) {
|
|
18
|
+
this.currentStep.set(step);
|
|
19
|
+
}
|
|
20
|
+
setSelectedRooms(rooms) {
|
|
21
|
+
this.selectedRooms.set(rooms);
|
|
22
|
+
}
|
|
23
|
+
setHotelInfo(info) {
|
|
24
|
+
this.hotelInfo.set(info);
|
|
25
|
+
}
|
|
26
|
+
setRefundSummary(summary) {
|
|
27
|
+
this.refundSummary.set(summary);
|
|
28
|
+
}
|
|
29
|
+
toggleRoomSelection(packageId) {
|
|
30
|
+
this.selectedRooms.update((rooms) => rooms.map((room) => room.packageId === packageId
|
|
31
|
+
? { ...room, isSelected: !room.isSelected }
|
|
32
|
+
: room));
|
|
33
|
+
}
|
|
34
|
+
calculateRefundSummary(rooms, totalPaid) {
|
|
35
|
+
const selected = rooms.filter((room) => room.isSelected);
|
|
36
|
+
const totalRefund = selected.reduce((sum, room) => sum + room.refundAmount, 0);
|
|
37
|
+
return {
|
|
38
|
+
totalPaid,
|
|
39
|
+
totalRefund,
|
|
40
|
+
rooms: selected,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
reset() {
|
|
44
|
+
this.currentStep.set(AlmatarHotelAutoCancellationStepEnum.selectRooms);
|
|
45
|
+
this.selectedRooms.set([]);
|
|
46
|
+
this.hotelInfo.set(null);
|
|
47
|
+
this.refundSummary.set(null);
|
|
48
|
+
}
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
50
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService, decorators: [{
|
|
53
|
+
type: Injectable
|
|
54
|
+
}] });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOztBQVExRyxNQUFNLE9BQU8sbUNBQW1DO0lBRGhEO1FBRVcsZ0JBQVcsR0FBRyxNQUFNLENBQzNCLG9DQUFvQyxDQUFDLFdBQVcsQ0FDakQsQ0FBQztRQUVPLGtCQUFhLEdBQUcsTUFBTSxDQUFzQyxFQUFFLENBQUMsQ0FBQztRQUNoRSxjQUFTLEdBQUcsTUFBTSxDQUN6QixJQUFJLENBQ0wsQ0FBQztRQUVPLGtCQUFhLEdBQ3BCLE1BQU0sQ0FBb0QsSUFBSSxDQUFDLENBQUM7UUFFekQsdUJBQWtCLEdBQUcsUUFBUSxDQUNwQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUNwRSxDQUFDO1FBRU8scUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpFLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7S0FtREo7SUFqREMsY0FBYyxDQUFDLElBQTBDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUEwQztRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQTRDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFtRDtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNsQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDakIsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQzFCLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCLENBQ3BCLEtBQTBDLEVBQzFDLFNBQWlCO1FBRWpCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUN0QyxDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU87WUFDTCxTQUFTO1lBQ1QsV0FBVztZQUNYLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBeEVVLG1DQUFtQzttSEFBbkMsbUNBQW1DOzs0RkFBbkMsbUNBQW1DO2tCQUQvQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtIH0gZnJvbSAnLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zdGVwLmVudW0nO1xuaW1wb3J0IHtcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tLFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uge1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IHNpZ25hbDxBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0+KFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5zZWxlY3RSb29tcyxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZFJvb21zID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KFxuICAgIG51bGwsXG4gICk7XG5cbiAgcmVhZG9ubHkgcmVmdW5kU3VtbWFyeSA9XG4gICAgc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkUm9vbXNDb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VsZWN0ZWRSb29tcygpLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKS5sZW5ndGgsXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzU2VsZWN0ZWRSb29tcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRSb29tc0NvdW50KCkgPiAwKTtcblxuICByZWFkb25seSB0b3RhbFJlZnVuZEFtb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5yZWZ1bmRTdW1tYXJ5KCk7XG4gICAgcmV0dXJuIHN1bW1hcnk/LnRvdGFsUmVmdW5kID8/IDA7XG4gIH0pO1xuXG4gIHNldEN1cnJlbnRTdGVwKHN0ZXA6IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFN0ZXAuc2V0KHN0ZXApO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRSb29tcyhyb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMuc2V0KHJvb21zKTtcbiAgfVxuXG4gIHNldEhvdGVsSW5mbyhpbmZvOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyk6IHZvaWQge1xuICAgIHRoaXMuaG90ZWxJbmZvLnNldChpbmZvKTtcbiAgfVxuXG4gIHNldFJlZnVuZFN1bW1hcnkoc3VtbWFyeTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5KTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1bmRTdW1tYXJ5LnNldChzdW1tYXJ5KTtcbiAgfVxuXG4gIHRvZ2dsZVJvb21TZWxlY3Rpb24ocGFja2FnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMudXBkYXRlKChyb29tcykgPT5cbiAgICAgIHJvb21zLm1hcCgocm9vbSkgPT5cbiAgICAgICAgcm9vbS5wYWNrYWdlSWQgPT09IHBhY2thZ2VJZFxuICAgICAgICAgID8geyAuLi5yb29tLCBpc1NlbGVjdGVkOiAhcm9vbS5pc1NlbGVjdGVkIH1cbiAgICAgICAgICA6IHJvb20sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVSZWZ1bmRTdW1tYXJ5KFxuICAgIHJvb21zOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXSxcbiAgICB0b3RhbFBhaWQ6IG51bWJlcixcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0b3RhbFJlZnVuZCA9IHNlbGVjdGVkLnJlZHVjZShcbiAgICAgIChzdW0sIHJvb20pID0+IHN1bSArIHJvb20ucmVmdW5kQW1vdW50LFxuICAgICAgMCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsUGFpZCxcbiAgICAgIHRvdGFsUmVmdW5kLFxuICAgICAgcm9vbXM6IHNlbGVjdGVkLFxuICAgIH07XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwLnNldChBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0uc2VsZWN0Um9vbXMpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb29tcy5zZXQoW10pO1xuICAgIHRoaXMuaG90ZWxJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnJlZnVuZFN1bW1hcnkuc2V0KG51bGwpO1xuICB9XG59XG4iXX0=
|