mts-booking-library 1.2.11 → 1.2.12

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.
@@ -48,6 +48,7 @@ export declare abstract class Booking {
48
48
  renewAccessToken(access_token: string): void;
49
49
  callGetApi(url: string): Promise<ErrorResponse | any>;
50
50
  callPostApi(url: string, body: any): Promise<any>;
51
+ callDeleteApi(url: string): Promise<ErrorResponse | any>;
51
52
  getBookingStepsToStatus(): Map<string, boolean[]>;
52
53
  changeCurrency(currency: Booking.Currencies): void;
53
54
  changeLanguage(language: string): void;
@@ -62,27 +63,11 @@ export declare abstract class Booking {
62
63
  abstract getBuyerPassengersDetails(): Promise<ErrorResponse | GetBuyerPassengersDetailsResponse>;
63
64
  abstract getBuyerFromLinkavelCard(linkavelCardNumber?: string, linkavelCardPhoneNumber?: string): Promise<ErrorResponse | Person>;
64
65
  abstract updateBuyerPassengersDetails(request: any): Promise<ErrorResponse | boolean>;
65
- /**
66
- * @description This method allows to add a reduction to the whole cart or to a single trip in the cart.
67
- * @param {AddReductionRequest} request The information about the reduction to add
68
- * @returns An {@link ErrorResponse} object in case of error, true otherwise.
69
- */
70
- addReduction(request: AddReductionRequest): Promise<ErrorResponse | boolean>;
71
- /**
72
- * @description This method allows the user to use the balance in his wallet to pay the cart. If the balance of
73
- * the wallet is enough to pay the cart, the cart will be paid fully. Otherwise, the user will be asked to pay the
74
- * remaining amount with another payment method.
75
- * @returns An {@link ErrorResponse} object in case of error, true otherwise.
76
- */
77
- useWallet(): Promise<ErrorResponse | boolean>;
78
- /**
79
- * @description This method allows the user to use a voucher to pay the cart.
80
- * If the balance of the value of the voucher is enough to pay the cart, the cart will be paid fully.
81
- * Otherwise, the user will be asked to pay the remaining amount with another payment method.
82
- * @param {string} voucherCode The code of the voucher to use
83
- * @returns An {@link ErrorResponse} object in case of error, true otherwise.
84
- */
85
- useVoucher(voucherCode: string): Promise<ErrorResponse | boolean>;
66
+ abstract addReduction(request: AddReductionRequest): Promise<ErrorResponse | boolean>;
67
+ abstract removeReduction(tripId: number): Promise<ErrorResponse | boolean>;
68
+ abstract useWallet(): Promise<ErrorResponse | boolean>;
69
+ abstract removeWalletReduction(): Promise<ErrorResponse | boolean>;
70
+ abstract useVoucher(voucherCode: string): Promise<ErrorResponse | boolean>;
86
71
  /**
87
72
  * @description This method shall be used to get the available payment methods for the cart. They depend on the seller configuration.
88
73
  * @returns An {@link ErrorResponse} object in case of error, a {@link GetSellerGatewaysResponse} object otherwise.
@@ -114,6 +114,13 @@ var Booking = /** @class */ (function () {
114
114
  var completeBody = __assign(__assign(__assign(__assign({}, body), (this.sellerId && { sellerId: this.sellerId.toString() })), (this.resellerId && { resellerId: this.resellerId.toString() })), { language: this.language });
115
115
  return (0, apiCall_1.makePost)(url, completeBody);
116
116
  };
117
+ Booking.prototype.callDeleteApi = function (url) {
118
+ // Add sellerId, resellerId and language to the query string.
119
+ // If the last character of the url is a question mark (meaning that the query string is empty), don't add the "&" character.
120
+ // Otherwise, add it (as we are adding some parameters to the query string)
121
+ var completeUrl = "".concat(url).concat(url.slice(-1) === "?" ? "" : "&").concat(new URLSearchParams(__assign(__assign(__assign({}, (this.sellerId && { sellerId: this.sellerId.toString() })), (this.resellerId && { resellerId: this.resellerId.toString() })), { language: this.language })));
122
+ return (0, apiCall_1.makeDelete)(completeUrl);
123
+ };
117
124
  Booking.prototype.getBookingStepsToStatus = function () {
118
125
  return this.bookingStepsToStatus;
119
126
  };
@@ -177,194 +184,6 @@ var Booking = /** @class */ (function () {
177
184
  });
178
185
  };
179
186
  //#endregion
180
- //#region Reductions APIs
181
- /**
182
- * @description This method allows to add a reduction to the whole cart or to a single trip in the cart.
183
- * @param {AddReductionRequest} request The information about the reduction to add
184
- * @returns An {@link ErrorResponse} object in case of error, true otherwise.
185
- */
186
- Booking.prototype.addReduction = function (request) {
187
- var _a;
188
- return __awaiter(this, void 0, void 0, function () {
189
- var discountsStep, _b, _c, _d, _i, step, url;
190
- var _this = this;
191
- return __generator(this, function (_e) {
192
- switch (_e.label) {
193
- case 0:
194
- // First check that it is possible to call this API
195
- if (!this.cartId || this.cartId === 0) {
196
- throw Error("Cart is not initialized yet");
197
- }
198
- discountsStep = this.bookingStepsToStatus.get(Booking.BookingSteps.DISCOUNTS);
199
- if (!discountsStep)
200
- throw Error("Booking step not found!");
201
- if (!!discountsStep[0]) return [3 /*break*/, 5];
202
- _b = [Booking.BookingSteps.SEATS_SELECTION, Booking.BookingSteps.EXTRAS];
203
- _c = [];
204
- for (_d in _b)
205
- _c.push(_d);
206
- _i = 0;
207
- _e.label = 1;
208
- case 1:
209
- if (!(_i < _c.length)) return [3 /*break*/, 4];
210
- _d = _c[_i];
211
- if (!(_d in _b)) return [3 /*break*/, 3];
212
- step = _d;
213
- if (!!((_a = this.bookingStepsToStatus.get(step)) !== null && _a !== void 0 ? _a : [false])[0]) return [3 /*break*/, 3];
214
- return [4 /*yield*/, this.markBookingStepCompleted(step)];
215
- case 2:
216
- _e.sent();
217
- _e.label = 3;
218
- case 3:
219
- _i++;
220
- return [3 /*break*/, 1];
221
- case 4:
222
- // Check again if the discounts step is accessible
223
- discountsStep = this.bookingStepsToStatus.get(Booking.BookingSteps.DISCOUNTS);
224
- if (!discountsStep || !discountsStep[0]) {
225
- throw Error("The status of the cart does not allow to call this API");
226
- }
227
- _e.label = 5;
228
- case 5:
229
- url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/reduction");
230
- return [2 /*return*/, this.callPostApi(url, request).then(function (response) {
231
- if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
232
- return response;
233
- }
234
- // Update the booking process status
235
- _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.stepsToStatus);
236
- return true;
237
- })];
238
- }
239
- });
240
- });
241
- };
242
- /**
243
- * @description This method allows the user to use the balance in his wallet to pay the cart. If the balance of
244
- * the wallet is enough to pay the cart, the cart will be paid fully. Otherwise, the user will be asked to pay the
245
- * remaining amount with another payment method.
246
- * @returns An {@link ErrorResponse} object in case of error, true otherwise.
247
- */
248
- Booking.prototype.useWallet = function () {
249
- var _a;
250
- return __awaiter(this, void 0, void 0, function () {
251
- var discountsStep, _b, _c, _d, _i, step, url;
252
- var _this = this;
253
- return __generator(this, function (_e) {
254
- switch (_e.label) {
255
- case 0:
256
- // First check that it is possible to call this API
257
- if (!this.cartId || this.cartId === 0) {
258
- throw Error("Cart is not initialized yet");
259
- }
260
- discountsStep = this.bookingStepsToStatus.get(Booking.BookingSteps.DISCOUNTS);
261
- if (!discountsStep)
262
- throw Error("Booking step not found!");
263
- if (!!discountsStep[0]) return [3 /*break*/, 5];
264
- _b = [Booking.BookingSteps.SEATS_SELECTION, Booking.BookingSteps.EXTRAS];
265
- _c = [];
266
- for (_d in _b)
267
- _c.push(_d);
268
- _i = 0;
269
- _e.label = 1;
270
- case 1:
271
- if (!(_i < _c.length)) return [3 /*break*/, 4];
272
- _d = _c[_i];
273
- if (!(_d in _b)) return [3 /*break*/, 3];
274
- step = _d;
275
- if (!!((_a = this.bookingStepsToStatus.get(step)) !== null && _a !== void 0 ? _a : [false])[0]) return [3 /*break*/, 3];
276
- return [4 /*yield*/, this.markBookingStepCompleted(step)];
277
- case 2:
278
- _e.sent();
279
- _e.label = 3;
280
- case 3:
281
- _i++;
282
- return [3 /*break*/, 1];
283
- case 4:
284
- // Check again if the discounts step is accessible
285
- discountsStep = this.bookingStepsToStatus.get(Booking.BookingSteps.DISCOUNTS);
286
- if (!discountsStep || !discountsStep[0]) {
287
- throw Error("The status of the cart does not allow to call this API");
288
- }
289
- _e.label = 5;
290
- case 5:
291
- url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment/wallet");
292
- return [2 /*return*/, this.callPostApi(url, {}).then(function (response) {
293
- if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
294
- return response;
295
- }
296
- // Update the booking process status
297
- _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.stepsToStatus);
298
- return true;
299
- })];
300
- }
301
- });
302
- });
303
- };
304
- /**
305
- * @description This method allows the user to use a voucher to pay the cart.
306
- * If the balance of the value of the voucher is enough to pay the cart, the cart will be paid fully.
307
- * Otherwise, the user will be asked to pay the remaining amount with another payment method.
308
- * @param {string} voucherCode The code of the voucher to use
309
- * @returns An {@link ErrorResponse} object in case of error, true otherwise.
310
- */
311
- Booking.prototype.useVoucher = function (voucherCode) {
312
- var _a;
313
- return __awaiter(this, void 0, void 0, function () {
314
- var discountsStep, _b, _c, _d, _i, step, url;
315
- var _this = this;
316
- return __generator(this, function (_e) {
317
- switch (_e.label) {
318
- case 0:
319
- // First check that it is possible to call this API
320
- if (!this.cartId || this.cartId === 0) {
321
- throw Error("Cart is not initialized yet");
322
- }
323
- discountsStep = this.bookingStepsToStatus.get(Booking.BookingSteps.DISCOUNTS);
324
- if (!discountsStep)
325
- throw Error("Booking step not found!");
326
- if (!!discountsStep[0]) return [3 /*break*/, 5];
327
- _b = [Booking.BookingSteps.SEATS_SELECTION, Booking.BookingSteps.EXTRAS];
328
- _c = [];
329
- for (_d in _b)
330
- _c.push(_d);
331
- _i = 0;
332
- _e.label = 1;
333
- case 1:
334
- if (!(_i < _c.length)) return [3 /*break*/, 4];
335
- _d = _c[_i];
336
- if (!(_d in _b)) return [3 /*break*/, 3];
337
- step = _d;
338
- if (!!((_a = this.bookingStepsToStatus.get(step)) !== null && _a !== void 0 ? _a : [false])[0]) return [3 /*break*/, 3];
339
- return [4 /*yield*/, this.markBookingStepCompleted(step)];
340
- case 2:
341
- _e.sent();
342
- _e.label = 3;
343
- case 3:
344
- _i++;
345
- return [3 /*break*/, 1];
346
- case 4:
347
- // Check again if the discounts step is accessible
348
- discountsStep = this.bookingStepsToStatus.get(Booking.BookingSteps.DISCOUNTS);
349
- if (!discountsStep || !discountsStep[0]) {
350
- throw Error("The status of the cart does not allow to call this API");
351
- }
352
- _e.label = 5;
353
- case 5:
354
- url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment/voucher");
355
- return [2 /*return*/, this.callPostApi(url, { voucherCode: voucherCode }).then(function (response) {
356
- if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
357
- return response;
358
- }
359
- // Update the booking process status
360
- _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.stepsToStatus);
361
- return true;
362
- })];
363
- }
364
- });
365
- });
366
- };
367
- //#endregion
368
187
  //#region Payment APIs
369
188
  /**
370
189
  * @description This method shall be used to get the available payment methods for the cart. They depend on the seller configuration.
@@ -429,7 +248,7 @@ var Booking = /** @class */ (function () {
429
248
  */
430
249
  Booking.prototype.getPaymentInformationFromGateway = function (gatewayId, returnUrl) {
431
250
  return __awaiter(this, void 0, void 0, function () {
432
- var issueStep, url, body;
251
+ var issueStep, searchParams, url;
433
252
  return __generator(this, function (_a) {
434
253
  // First check that it is possible to call this API
435
254
  if (!this.cartId || this.cartId === 0) {
@@ -439,9 +258,9 @@ var Booking = /** @class */ (function () {
439
258
  if (!issueStep || !issueStep[0]) {
440
259
  throw Error("The status of the cart does not allow to call this API");
441
260
  }
442
- url = "".concat(this.config.API_ENDPOINT, "/getPaymentInformationFromGateway");
443
- body = __assign({ cartId: this.cartId, gatewayId: gatewayId }, (returnUrl && { returnUrl: returnUrl }));
444
- return [2 /*return*/, this.callPostApi(url, body).then(function (response) {
261
+ searchParams = new URLSearchParams(__assign({ gatewayId: gatewayId.toString() }, (returnUrl && { returnUrl: returnUrl })));
262
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment?").concat(searchParams);
263
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
445
264
  return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response;
446
265
  })];
447
266
  });
@@ -510,7 +329,7 @@ var Booking = /** @class */ (function () {
510
329
  }
511
330
  _e.label = 7;
512
331
  case 7:
513
- url = "".concat(this.config.API_ENDPOINT, "/issueTickets");
332
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/issue");
514
333
  body = {
515
334
  cartId: this.cartId,
516
335
  paymentMethod: paymentMethodToSet === Payment_1.PaymentMethods.PAY_LATER ? null : paymentMethodToSet,
@@ -1,6 +1,7 @@
1
1
  import { MTSEnvs } from "../config";
2
2
  import { ErrorResponse } from "../types/ErrorResponse";
3
3
  import { EditPassengersDetailsRequest, GetBuyerPassengersDetailsResponse, Person } from "../types/common/Person";
4
+ import { AddReductionRequest } from "../types/common/Reduction";
4
5
  import { BusMatrix } from "../types/journeys/BusMatrix";
5
6
  import { CreateJourneyCartRequest, JourneyCart } from "../types/journeys/JourneyCart";
6
7
  import { JourneySearchRequest, JourneySearchResult } from "../types/journeys/JourneySearch";
@@ -101,6 +102,40 @@ export declare class JourneyBooking extends Booking {
101
102
  * @returns An {@link ErrorResponse} object in case of error, a list of {@link ReductionTrip} otherwise, representing the trips in the cart.
102
103
  */
103
104
  getCartTrips(): Promise<ErrorResponse | ReductionTrip[]>;
105
+ /**
106
+ * @description This method allows to add a reduction to the whole cart or to a single trip in the cart.
107
+ * @param {AddReductionRequest} request The information about the reduction to add
108
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise. Also, the cart is updated.
109
+ */
110
+ addReduction(request: AddReductionRequest): Promise<ErrorResponse | boolean>;
111
+ /**
112
+ * @description This method allows to remove a reduction from the whole cart or from a single trip in the cart.
113
+ * @param tripId The id of the trip from which the reduction should be removed. If the tripId is 0, then the reduction
114
+ * will be removed from the whole cart.
115
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise. Also, the cart is updated.
116
+ */
117
+ removeReduction(tripId: number): Promise<ErrorResponse | boolean>;
118
+ /**
119
+ * @description This method allows the user to use the balance in his wallet to pay the cart. If the balance of
120
+ * the wallet is enough to pay the cart, the cart will be paid fully. Otherwise, the user will be asked to pay the
121
+ * remaining amount with another payment method.
122
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise.
123
+ */
124
+ useWallet(): Promise<ErrorResponse | boolean>;
125
+ /**
126
+ * @description This method allows to remove a waller reduction from the cart.
127
+ *
128
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise. Also, the cart is updated.
129
+ */
130
+ removeWalletReduction(): Promise<ErrorResponse | boolean>;
131
+ /**
132
+ * @description This method allows the user to use a voucher to pay the cart.
133
+ * If the balance of the value of the voucher is enough to pay the cart, the cart will be paid fully.
134
+ * Otherwise, the user will be asked to pay the remaining amount with another payment method.
135
+ * @param {string} voucherCode The code of the voucher to use
136
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise.
137
+ */
138
+ useVoucher(voucherCode: string): Promise<ErrorResponse | boolean>;
104
139
  }
105
140
  export declare namespace JourneyBooking {
106
141
  const createBooking: (env: MTSEnvs, sub_key: string, onCartExpiration: () => void, debug: boolean, language: string, access_token?: string, sellerId?: number, resellerId?: number) => Promise<JourneyBooking>;
@@ -61,9 +61,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
61
61
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
62
  }
63
63
  };
64
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
65
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
66
+ if (ar || !(i in from)) {
67
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
68
+ ar[i] = from[i];
69
+ }
70
+ }
71
+ return to.concat(ar || Array.prototype.slice.call(from));
72
+ };
64
73
  Object.defineProperty(exports, "__esModule", { value: true });
65
74
  exports.JourneyBooking = void 0;
66
75
  var ErrorResponse_1 = require("../types/ErrorResponse");
76
+ var Reduction_1 = require("../types/common/Reduction");
67
77
  var processBookingSteps_1 = require("../utils/processBookingSteps");
68
78
  var booking_1 = require("./booking");
69
79
  var JourneyBooking = /** @class */ (function (_super) {
@@ -478,6 +488,7 @@ var JourneyBooking = /** @class */ (function (_super) {
478
488
  });
479
489
  });
480
490
  };
491
+ //#region Reductions APIs
481
492
  /**
482
493
  * @description This method shall be called when the user wants to retrieve the trips in the cart, for adding a available reduction
483
494
  * to a specific trip (rather than to the whole cart).
@@ -499,6 +510,272 @@ var JourneyBooking = /** @class */ (function (_super) {
499
510
  });
500
511
  });
501
512
  };
513
+ /**
514
+ * @description This method allows to add a reduction to the whole cart or to a single trip in the cart.
515
+ * @param {AddReductionRequest} request The information about the reduction to add
516
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise. Also, the cart is updated.
517
+ */
518
+ JourneyBooking.prototype.addReduction = function (request) {
519
+ var _a;
520
+ return __awaiter(this, void 0, void 0, function () {
521
+ var discountsStep, _b, _c, _d, _i, step, url;
522
+ var _this = this;
523
+ return __generator(this, function (_e) {
524
+ switch (_e.label) {
525
+ case 0:
526
+ // First check that it is possible to call this API
527
+ if (!this.cartId || this.cartId === 0) {
528
+ throw Error("Cart is not initialized yet");
529
+ }
530
+ discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
531
+ if (!discountsStep)
532
+ throw Error("Booking step not found!");
533
+ if (!!discountsStep[0]) return [3 /*break*/, 5];
534
+ _b = [booking_1.Booking.BookingSteps.SEATS_SELECTION, booking_1.Booking.BookingSteps.EXTRAS];
535
+ _c = [];
536
+ for (_d in _b)
537
+ _c.push(_d);
538
+ _i = 0;
539
+ _e.label = 1;
540
+ case 1:
541
+ if (!(_i < _c.length)) return [3 /*break*/, 4];
542
+ _d = _c[_i];
543
+ if (!(_d in _b)) return [3 /*break*/, 3];
544
+ step = _d;
545
+ if (!!((_a = this.bookingStepsToStatus.get(step)) !== null && _a !== void 0 ? _a : [false])[0]) return [3 /*break*/, 3];
546
+ return [4 /*yield*/, this.markBookingStepCompleted(step)];
547
+ case 2:
548
+ _e.sent();
549
+ _e.label = 3;
550
+ case 3:
551
+ _i++;
552
+ return [3 /*break*/, 1];
553
+ case 4:
554
+ // Check again if the discounts step is accessible
555
+ discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
556
+ if (!discountsStep || !discountsStep[0]) {
557
+ throw Error("The status of the cart does not allow to call this API");
558
+ }
559
+ _e.label = 5;
560
+ case 5:
561
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment/reduction");
562
+ return [2 /*return*/, this.callPostApi(url, request).then(function (response) {
563
+ var _a, _b;
564
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
565
+ return response;
566
+ }
567
+ var reductionResponse = response;
568
+ // Update the booking process status
569
+ _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(reductionResponse.stepsToStatus);
570
+ // Update the cart
571
+ _this.cart = __assign(__assign({}, _this.cart), { totalAmountToPay: reductionResponse.totalAmountToPay, reductions: __spreadArray(__spreadArray([], ((_b = (_a = _this.cart) === null || _a === void 0 ? void 0 : _a.reductions) !== null && _b !== void 0 ? _b : []), true), [reductionResponse.reduction], false) });
572
+ return true;
573
+ })];
574
+ }
575
+ });
576
+ });
577
+ };
578
+ /**
579
+ * @description This method allows to remove a reduction from the whole cart or from a single trip in the cart.
580
+ * @param tripId The id of the trip from which the reduction should be removed. If the tripId is 0, then the reduction
581
+ * will be removed from the whole cart.
582
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise. Also, the cart is updated.
583
+ */
584
+ JourneyBooking.prototype.removeReduction = function (tripId) {
585
+ return __awaiter(this, void 0, void 0, function () {
586
+ var discountsStep, queryParams, url;
587
+ var _this = this;
588
+ return __generator(this, function (_a) {
589
+ // First check that it is possible to call this API
590
+ if (!this.cartId || this.cartId === 0) {
591
+ throw Error("Cart is not initialized yet");
592
+ }
593
+ discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
594
+ if (!discountsStep || !discountsStep[0]) {
595
+ throw Error("The status of the cart does not allow to call this API");
596
+ }
597
+ queryParams = new URLSearchParams({ tripId: tripId.toString() });
598
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment/reduction?").concat(queryParams);
599
+ return [2 /*return*/, this.callDeleteApi(url).then(function (response) {
600
+ var _a, _b, _c;
601
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
602
+ return response;
603
+ }
604
+ var reductionResponse = response;
605
+ // Update the booking process status
606
+ _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(reductionResponse.stepsToStatus);
607
+ // Update the cart
608
+ _this.cart = __assign(__assign({}, _this.cart), { totalAmountToPay: reductionResponse.totalAmountToPay, reductions: (_c = (_b = (_a = _this.cart) === null || _a === void 0 ? void 0 : _a.reductions) === null || _b === void 0 ? void 0 : _b.filter(function (reduction) { return reduction.type === Reduction_1.ReductionType.WALLET ||
609
+ reduction.type === Reduction_1.ReductionType.VOUCHER ||
610
+ (reduction.type === Reduction_1.ReductionType.CASH && reduction.tripId !== tripId); })) !== null && _c !== void 0 ? _c : [] });
611
+ return true;
612
+ })];
613
+ });
614
+ });
615
+ };
616
+ /**
617
+ * @description This method allows the user to use the balance in his wallet to pay the cart. If the balance of
618
+ * the wallet is enough to pay the cart, the cart will be paid fully. Otherwise, the user will be asked to pay the
619
+ * remaining amount with another payment method.
620
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise.
621
+ */
622
+ JourneyBooking.prototype.useWallet = function () {
623
+ var _a;
624
+ return __awaiter(this, void 0, void 0, function () {
625
+ var discountsStep, _b, _c, _d, _i, step, url;
626
+ var _this = this;
627
+ return __generator(this, function (_e) {
628
+ switch (_e.label) {
629
+ case 0:
630
+ // First check that it is possible to call this API
631
+ if (!this.cartId || this.cartId === 0) {
632
+ throw Error("Cart is not initialized yet");
633
+ }
634
+ discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
635
+ if (!discountsStep)
636
+ throw Error("Booking step not found!");
637
+ if (!!discountsStep[0]) return [3 /*break*/, 5];
638
+ _b = [booking_1.Booking.BookingSteps.SEATS_SELECTION, booking_1.Booking.BookingSteps.EXTRAS];
639
+ _c = [];
640
+ for (_d in _b)
641
+ _c.push(_d);
642
+ _i = 0;
643
+ _e.label = 1;
644
+ case 1:
645
+ if (!(_i < _c.length)) return [3 /*break*/, 4];
646
+ _d = _c[_i];
647
+ if (!(_d in _b)) return [3 /*break*/, 3];
648
+ step = _d;
649
+ if (!!((_a = this.bookingStepsToStatus.get(step)) !== null && _a !== void 0 ? _a : [false])[0]) return [3 /*break*/, 3];
650
+ return [4 /*yield*/, this.markBookingStepCompleted(step)];
651
+ case 2:
652
+ _e.sent();
653
+ _e.label = 3;
654
+ case 3:
655
+ _i++;
656
+ return [3 /*break*/, 1];
657
+ case 4:
658
+ // Check again if the discounts step is accessible
659
+ discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
660
+ if (!discountsStep || !discountsStep[0]) {
661
+ throw Error("The status of the cart does not allow to call this API");
662
+ }
663
+ _e.label = 5;
664
+ case 5:
665
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment/wallet");
666
+ return [2 /*return*/, this.callPostApi(url, {}).then(function (response) {
667
+ var _a, _b;
668
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
669
+ return response;
670
+ }
671
+ var reductionResponse = response;
672
+ // Update the booking process status
673
+ _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(reductionResponse.stepsToStatus);
674
+ // Update the cart
675
+ _this.cart = __assign(__assign({}, _this.cart), { totalAmountToPay: reductionResponse.totalAmountToPay, reductions: __spreadArray(__spreadArray([], ((_b = (_a = _this.cart) === null || _a === void 0 ? void 0 : _a.reductions) !== null && _b !== void 0 ? _b : []), true), [reductionResponse.reduction], false) });
676
+ return true;
677
+ })];
678
+ }
679
+ });
680
+ });
681
+ };
682
+ /**
683
+ * @description This method allows to remove a waller reduction from the cart.
684
+ *
685
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise. Also, the cart is updated.
686
+ */
687
+ JourneyBooking.prototype.removeWalletReduction = function () {
688
+ return __awaiter(this, void 0, void 0, function () {
689
+ var url;
690
+ var _this = this;
691
+ return __generator(this, function (_a) {
692
+ // First check that it is possible to call this API
693
+ if (!this.cartId || this.cartId === 0) {
694
+ throw Error("Cart is not initialized yet");
695
+ }
696
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment/wallet");
697
+ return [2 /*return*/, this.callDeleteApi(url).then(function (response) {
698
+ var _a, _b, _c;
699
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
700
+ return response;
701
+ }
702
+ var reductionResponse = response;
703
+ // Update the booking process status
704
+ _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(reductionResponse.stepsToStatus);
705
+ // Update the cart
706
+ _this.cart = __assign(__assign({}, _this.cart), { totalAmountToPay: reductionResponse.totalAmountToPay, reductions: (_c = (_b = (_a = _this.cart) === null || _a === void 0 ? void 0 : _a.reductions) === null || _b === void 0 ? void 0 : _b.filter(function (reduction) { return reduction.type !== Reduction_1.ReductionType.WALLET; })) !== null && _c !== void 0 ? _c : [] });
707
+ return true;
708
+ })];
709
+ });
710
+ });
711
+ };
712
+ /**
713
+ * @description This method allows the user to use a voucher to pay the cart.
714
+ * If the balance of the value of the voucher is enough to pay the cart, the cart will be paid fully.
715
+ * Otherwise, the user will be asked to pay the remaining amount with another payment method.
716
+ * @param {string} voucherCode The code of the voucher to use
717
+ * @returns An {@link ErrorResponse} object in case of error, true otherwise.
718
+ */
719
+ JourneyBooking.prototype.useVoucher = function (voucherCode) {
720
+ var _a;
721
+ return __awaiter(this, void 0, void 0, function () {
722
+ var discountsStep, _b, _c, _d, _i, step, url;
723
+ var _this = this;
724
+ return __generator(this, function (_e) {
725
+ switch (_e.label) {
726
+ case 0:
727
+ // First check that it is possible to call this API
728
+ if (!this.cartId || this.cartId === 0) {
729
+ throw Error("Cart is not initialized yet");
730
+ }
731
+ discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
732
+ if (!discountsStep)
733
+ throw Error("Booking step not found!");
734
+ if (!!discountsStep[0]) return [3 /*break*/, 5];
735
+ _b = [booking_1.Booking.BookingSteps.SEATS_SELECTION, booking_1.Booking.BookingSteps.EXTRAS];
736
+ _c = [];
737
+ for (_d in _b)
738
+ _c.push(_d);
739
+ _i = 0;
740
+ _e.label = 1;
741
+ case 1:
742
+ if (!(_i < _c.length)) return [3 /*break*/, 4];
743
+ _d = _c[_i];
744
+ if (!(_d in _b)) return [3 /*break*/, 3];
745
+ step = _d;
746
+ if (!!((_a = this.bookingStepsToStatus.get(step)) !== null && _a !== void 0 ? _a : [false])[0]) return [3 /*break*/, 3];
747
+ return [4 /*yield*/, this.markBookingStepCompleted(step)];
748
+ case 2:
749
+ _e.sent();
750
+ _e.label = 3;
751
+ case 3:
752
+ _i++;
753
+ return [3 /*break*/, 1];
754
+ case 4:
755
+ // Check again if the discounts step is accessible
756
+ discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
757
+ if (!discountsStep || !discountsStep[0]) {
758
+ throw Error("The status of the cart does not allow to call this API");
759
+ }
760
+ _e.label = 5;
761
+ case 5:
762
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cartId, "/payment/voucher");
763
+ return [2 /*return*/, this.callPostApi(url, { voucherCode: voucherCode }).then(function (response) {
764
+ var _a, _b;
765
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
766
+ return response;
767
+ }
768
+ var reductionResponse = response;
769
+ // Update the booking process status
770
+ _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(reductionResponse.stepsToStatus);
771
+ // Update the cart
772
+ _this.cart = __assign(__assign({}, _this.cart), { totalAmountToPay: reductionResponse.totalAmountToPay, reductions: __spreadArray(__spreadArray([], ((_b = (_a = _this.cart) === null || _a === void 0 ? void 0 : _a.reductions) !== null && _b !== void 0 ? _b : []), true), [reductionResponse.reduction], false) });
773
+ return true;
774
+ })];
775
+ }
776
+ });
777
+ });
778
+ };
502
779
  return JourneyBooking;
503
780
  }(booking_1.Booking));
504
781
  exports.JourneyBooking = JourneyBooking;