mts-booking-library 1.1.9 → 1.2.0

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.
@@ -52,6 +52,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
52
52
  };
53
53
  Object.defineProperty(exports, "__esModule", { value: true });
54
54
  exports.JourneyBooking = void 0;
55
+ var ErrorResponse_1 = require("../types/ErrorResponse");
55
56
  var booking_1 = require("./booking");
56
57
  var JourneyBooking = /** @class */ (function (_super) {
57
58
  __extends(JourneyBooking, _super);
@@ -90,7 +91,14 @@ var JourneyBooking = /** @class */ (function (_super) {
90
91
  if (cartDate > new Date()) {
91
92
  _this.cart = cart;
92
93
  _this.bookingDueDate = cartDate; // See Booking class
93
- _this.cartStatus = cart.status;
94
+ // Fill the booking process status
95
+ _this.bookingStepsToStatus = new Map(Object.entries(cart.stepsToStatus).map(function (_a) {
96
+ var bookingStep = _a[0], values = _a[1];
97
+ return [
98
+ bookingStep,
99
+ values
100
+ ];
101
+ }));
94
102
  _this.createCartTimer(cartDate);
95
103
  }
96
104
  });
@@ -105,7 +113,7 @@ var JourneyBooking = /** @class */ (function (_super) {
105
113
  setTimeout(function () {
106
114
  localStorage.removeItem("cartId");
107
115
  // Put actions that have to be done when timer expires here
108
- _this.cartStatus = booking_1.Booking.CartStatus.EMPTY;
116
+ _this.bookingStepsToStatus = new Map();
109
117
  _this.cart = undefined;
110
118
  _this.bookingDueDate = undefined; // See Booking class
111
119
  _this.onCartExpiration();
@@ -119,7 +127,13 @@ var JourneyBooking = /** @class */ (function (_super) {
119
127
  var url;
120
128
  return __generator(this, function (_a) {
121
129
  url = "".concat(this.config.API_ENDPOINT, "/booking/cart?").concat(new URLSearchParams({ cartId: cartId.toString() }));
122
- return [2 /*return*/, this.callGetApi(url)];
130
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
131
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
132
+ localStorage.removeItem("cartId");
133
+ throw new Error("Error ".concat(response.httpStatus, " ").concat(response.message));
134
+ }
135
+ return response.cart;
136
+ })];
123
137
  });
124
138
  });
125
139
  };
@@ -132,7 +146,9 @@ var JourneyBooking = /** @class */ (function (_super) {
132
146
  var url;
133
147
  return __generator(this, function (_a) {
134
148
  url = "".concat(this.config.API_ENDPOINT, "/booking/journeys/departures?");
135
- return [2 /*return*/, this.callGetApi(url)];
149
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
150
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.stops;
151
+ })];
136
152
  });
137
153
  });
138
154
  };
@@ -147,7 +163,9 @@ var JourneyBooking = /** @class */ (function (_super) {
147
163
  return __generator(this, function (_a) {
148
164
  searchParams = new URLSearchParams({ departureStopName: departureStopName });
149
165
  url = "".concat(this.config.API_ENDPOINT, "/booking/journeys/destinations?").concat(searchParams);
150
- return [2 /*return*/, this.callGetApi(url)];
166
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
167
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.stops;
168
+ })];
151
169
  });
152
170
  });
153
171
  };
@@ -155,107 +173,203 @@ var JourneyBooking = /** @class */ (function (_super) {
155
173
  * This method returns the journeys that match the given parameters.
156
174
  * Note that it will always return the journeys for the one-way trip.
157
175
  * If you want to get the journeys for the round trip, you have to call this method twice (make sure to swap departureStopName and destinationStopName)
158
- * @param {JourneySearch} params an object of type {@link JourneySearch} containing the parameters of the search
176
+ * @param {JourneySearch} request an object of type {@link JourneySearch} containing the parameters of the search
159
177
  * @returns {JourneySearchResult[]} The returned journeys that match the given parameters
160
178
  */
161
- JourneyBooking.prototype.getJourneys = function (params) {
179
+ JourneyBooking.prototype.getJourneys = function (request) {
162
180
  return __awaiter(this, void 0, void 0, function () {
163
181
  var searchParams, url;
164
182
  return __generator(this, function (_a) {
165
- if (params.departureStopName === undefined || params.destinationStopName === undefined) {
183
+ if (request.departureStopName === undefined || request.destinationStopName === undefined) {
166
184
  throw Error("Fields departureStopName and destinationStopName are required");
167
185
  }
168
186
  searchParams = new URLSearchParams({
169
- departureStopName: params.departureStopName,
170
- destinationStopName: params.destinationStopName,
171
- passengersNumber: params.passengersNumber.toString(),
172
- date: params.date,
173
- roundTripDate: params.roundTripDate ? params.roundTripDate : "null",
174
- currency: params.currency,
175
- isRoundtrip: params.isRoundtrip.toString()
187
+ departureStopName: request.departureStopName,
188
+ destinationStopName: request.destinationStopName,
189
+ passengersNumber: request.passengersNumber.toString(),
190
+ date: request.date,
191
+ roundTripDate: request.roundTripDate ? request.roundTripDate : "null",
192
+ currency: request.currency,
193
+ isRoundtrip: request.isRoundtrip.toString()
176
194
  });
177
195
  url = "".concat(this.config.API_ENDPOINT, "/booking/journeys?").concat(searchParams);
178
- return [2 /*return*/, this.callGetApi(url)];
196
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
197
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.journeys;
198
+ })];
179
199
  });
180
200
  });
181
201
  };
182
- JourneyBooking.prototype.createJourneyCart = function (tripCart) {
202
+ JourneyBooking.prototype.createJourneyCart = function (journeyCart) {
183
203
  return __awaiter(this, void 0, void 0, function () {
184
204
  var url;
185
205
  var _this = this;
186
206
  return __generator(this, function (_a) {
187
207
  url = "".concat(this.config.API_ENDPOINT, "/booking/journeys/cart");
188
- return [2 /*return*/, this.callPostApi(url, tripCart).then(function (cart) {
189
- _this.cart = cart.cart;
190
- _this.cartStatus = cart.cart.status;
191
- _this.bookingDueDate = new Date(cart.cart.bookingDueDate);
192
- _this.createCartTimer(new Date(cart.cart.bookingDueDate));
193
- return cart.cart;
208
+ return [2 /*return*/, this.callPostApi(url, journeyCart).then(function (response) {
209
+ // Check for errors
210
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
211
+ return response;
212
+ }
213
+ _this.cart = response.cart;
214
+ // Save the cartId in the localStorage
215
+ localStorage.setItem("cartId", response.cart.id.toString());
216
+ // Fill the booking process status
217
+ _this.bookingStepsToStatus = new Map(Object.entries(response.cart.stepsToStatus).map(function (_a) {
218
+ var bookingStep = _a[0], values = _a[1];
219
+ return [
220
+ bookingStep,
221
+ values
222
+ ];
223
+ }));
224
+ _this.bookingDueDate = new Date(response.cart.bookingDueDate);
225
+ _this.createCartTimer(new Date(response.cart.bookingDueDate));
226
+ return response.cart;
194
227
  })];
195
228
  });
196
229
  });
197
230
  };
198
- JourneyBooking.prototype.getBusMatrix = function (tripId, departureStopId, destinationStopId) {
231
+ /**
232
+ * @description This method shall be called when the user wants to retrieve information about the buyer and the passengers.
233
+ * @returns An object of type {@link GetBuyerPassengersDetailsResponse} containing the buyer and the passengers information,
234
+ * as well as a list of the available tariffs for each trip.
235
+ */
236
+ JourneyBooking.prototype.getBuyerPassengersDetails = function () {
199
237
  return __awaiter(this, void 0, void 0, function () {
200
- var searchParams, url;
238
+ var buyerPassengersDetails, url;
201
239
  return __generator(this, function (_a) {
202
- searchParams = new URLSearchParams({
203
- departureStopId: departureStopId.toString(),
204
- destinationStopId: destinationStopId.toString()
205
- });
206
- url = "".concat(this.config.API_ENDPOINT, "/booking/journeys/trips/").concat(tripId, "/seats?").concat(searchParams);
207
- return [2 /*return*/, this.callGetApi(url)];
240
+ // First check that it is possible to call this API
241
+ if (!this.cart) {
242
+ throw Error("Cart is not initialized yet");
243
+ }
244
+ buyerPassengersDetails = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.BUYER_PASSENGERS);
245
+ if (!buyerPassengersDetails || !buyerPassengersDetails[0]) {
246
+ throw Error("The status of the cart does not allow to call this API");
247
+ }
248
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/details?");
249
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
250
+ // Check for errors
251
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
252
+ return response;
253
+ }
254
+ // Parse the map for the tariffs
255
+ var tripsToTariffs = new Map(Object.entries(response.tariffs).map(function (_a) {
256
+ var tripId = _a[0], tariff = _a[1];
257
+ return [
258
+ +tripId,
259
+ tariff
260
+ ];
261
+ }));
262
+ return {
263
+ buyer: response.buyer,
264
+ passengers: response.passengers,
265
+ tariffs: tripsToTariffs
266
+ };
267
+ })];
208
268
  });
209
269
  });
210
270
  };
211
- // TODO: Fix this
212
- JourneyBooking.prototype.getSeatsStatus = function (params) {
271
+ /**
272
+ * @description This methosd shall be called when the user wants to update the buyer and the passengers information.
273
+ * @param {EditPassengersDetailsRequest} passengersDetails The object containing the buyer and the passengers information.
274
+ * @returns An {@link ErrorResponse} object in case of error, nothing otherwise.
275
+ */
276
+ JourneyBooking.prototype.updateBuyerPassengersDetails = function (passengersDetails) {
213
277
  return __awaiter(this, void 0, void 0, function () {
214
- var searchParams, url;
278
+ var buyerPassengersDetails, url;
215
279
  return __generator(this, function (_a) {
280
+ // First check that it is possible to call this API
216
281
  if (!this.cart) {
217
282
  throw Error("Cart is not initialized yet");
218
283
  }
219
- searchParams = new URLSearchParams({ tripId: params.tripId.toString() });
220
- url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/seats?").concat(searchParams);
221
- return [2 /*return*/, this.callGetApi(url)];
284
+ buyerPassengersDetails = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.BUYER_PASSENGERS);
285
+ if (!buyerPassengersDetails || !buyerPassengersDetails[0]) {
286
+ throw Error("The status of the cart does not allow to call this API");
287
+ }
288
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/details");
289
+ return [2 /*return*/, this.callPostApi(url, passengersDetails).then(function (response) {
290
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response;
291
+ })];
222
292
  });
223
293
  });
224
294
  };
225
- // TODO: Fix this
226
- JourneyBooking.prototype.movePassengers = function (params) {
295
+ /**
296
+ * @description This method shall be used when the user wants to retrieve the bus matrix for a trip. The bus matrix shows
297
+ * the seats that are available and the ones that are already taken, as well as how the bus is made.
298
+ * @param {number} tripId The id of the trip for which the bus matrix should be retrieved
299
+ * @param {number} departureStopId The id of the departure stop
300
+ * @param {number} destinationStopId The id of the destination stop
301
+ * @returns An {@link ErrorResponse} object in case of error, a {@link BusMatrix} otherwise.
302
+ */
303
+ JourneyBooking.prototype.getBusMatrix = function (tripId, departureStopId, destinationStopId) {
227
304
  return __awaiter(this, void 0, void 0, function () {
228
- var url;
305
+ var seatSelectionStatus, searchParams, url;
229
306
  return __generator(this, function (_a) {
307
+ // First check that it is possible to call this API
230
308
  if (!this.cart) {
231
309
  throw Error("Cart is not initialized yet");
232
310
  }
233
- url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/seats");
234
- return [2 /*return*/, this.callGetApi(url)];
311
+ seatSelectionStatus = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.SEATS_SELECTION);
312
+ if (!seatSelectionStatus || !seatSelectionStatus[0]) {
313
+ throw Error("The status of the cart does not allow to call this API");
314
+ }
315
+ searchParams = new URLSearchParams({
316
+ departureStopId: departureStopId.toString(),
317
+ destinationStopId: destinationStopId.toString()
318
+ });
319
+ url = "".concat(this.config.API_ENDPOINT, "/booking/journeys/trips/").concat(tripId, "/seats?").concat(searchParams);
320
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
321
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.busMatrix;
322
+ })];
235
323
  });
236
324
  });
237
325
  };
238
- JourneyBooking.prototype.getPassengersDetails = function () {
326
+ /**
327
+ * @description This method shall be called when the user wants to retrieve which seats were assigned for this booking.
328
+ * @param {number} tripId The id of the trip for which the seats should be retrieved.
329
+ * @returns An {@link ErrorResponse} object in case of error, a list of {@link BusLayoutCell} ids otherwise, representing the assigned seats.
330
+ */
331
+ JourneyBooking.prototype.getAssignedSeats = function (tripId) {
239
332
  return __awaiter(this, void 0, void 0, function () {
240
- var url;
333
+ var seatSelectionStatus, searchParams, url;
241
334
  return __generator(this, function (_a) {
335
+ // First check that it is possible to call this API
242
336
  if (!this.cart) {
243
337
  throw Error("Cart is not initialized yet");
244
338
  }
245
- url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/details?");
246
- return [2 /*return*/, this.callGetApi(url)];
339
+ seatSelectionStatus = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.SEATS_SELECTION);
340
+ if (!seatSelectionStatus || !seatSelectionStatus[0]) {
341
+ throw Error("The status of the cart does not allow to call this API");
342
+ }
343
+ searchParams = new URLSearchParams({ tripId: tripId.toString() });
344
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/seats?").concat(searchParams);
345
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
346
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.assignedSeats;
347
+ })];
247
348
  });
248
349
  });
249
350
  };
250
- JourneyBooking.prototype.updatePassengersDetails = function (passengersDetails) {
351
+ /**
352
+ * @description This method shall be called when the user wants to change the assigned seats of a trip.
353
+ * @param {number} tripId The id of the trip for which the seats should be changed
354
+ * @param {number[]} newSeatsIds The ids of the new seats, as found the {@link BusMatrix}
355
+ * @returns An {@link ErrorResponse} object in case of error, nothing otherwise.
356
+ */
357
+ JourneyBooking.prototype.changeSeatsOfTrip = function (tripId, newSeatsIds) {
251
358
  return __awaiter(this, void 0, void 0, function () {
252
- var url;
359
+ var seatSelectionStatus, url;
253
360
  return __generator(this, function (_a) {
361
+ // First check that it is possible to call this API
254
362
  if (!this.cart) {
255
363
  throw Error("Cart is not initialized yet");
256
364
  }
257
- url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/details");
258
- return [2 /*return*/, this.callPostApi(url, passengersDetails)];
365
+ seatSelectionStatus = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.SEATS_SELECTION);
366
+ if (!seatSelectionStatus || !seatSelectionStatus[0]) {
367
+ throw Error("The status of the cart does not allow to call this API");
368
+ }
369
+ url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/seats");
370
+ return [2 /*return*/, this.callPostApi(url, { tripId: tripId, seatsIds: newSeatsIds }).then(function (response) {
371
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response;
372
+ })];
259
373
  });
260
374
  });
261
375
  };
@@ -1,4 +1,5 @@
1
1
  import { MTSEnvs } from "../config";
2
+ import { ErrorResponse } from "../types/ErrorResponse";
2
3
  import { Service, ServiceTrip } from "../types/services/Service";
3
4
  import { CreateServiceCartRequest, ServiceCart } from "../types/services/ServiceCart";
4
5
  import { Booking } from "./booking";
@@ -25,7 +26,7 @@ export declare class ServiceBooking extends Booking {
25
26
  * If the sellerId is not set or it is 0, it will return the list of cities for all sellers.
26
27
  * @returns {string[]} The list of possible cities
27
28
  */
28
- getServiceCities(): Promise<string[]>;
29
+ getServiceCities(): Promise<ErrorResponse | string[]>;
29
30
  /**
30
31
  * This method returns the tours sold by this seller in the given city.
31
32
  * If the sellerId is not set or it is 0, it will return the tours in the given city for all sellers.
@@ -33,7 +34,7 @@ export declare class ServiceBooking extends Booking {
33
34
  * @param {Booking.Currencies} currency The currency in which the prices should be returned
34
35
  * @returns {Tour[]} The returned tours
35
36
  */
36
- getServices(currency: Booking.Currencies, cityName?: string): Promise<Service[]>;
37
+ getServices(currency: Booking.Currencies, cityName?: string): Promise<ErrorResponse | Service[]>;
37
38
  /**
38
39
  * This method returns the tours available for the given date. This method can be used if the seller wants the user to book a specific date
39
40
  * and/or a specific hour for the tour.
@@ -42,6 +43,6 @@ export declare class ServiceBooking extends Booking {
42
43
  * @param {Date} date The date on which to get the tours
43
44
  * @returns {ServiceTrip[]} The returned information about the tour (tripId and hour)
44
45
  */
45
- getServiceTrips(serviceId: number, date: Date): Promise<ServiceTrip[]>;
46
- createServiceCart(serviceCart: CreateServiceCartRequest): Promise<ServiceCart>;
46
+ getServiceTrips(serviceId: number, date: Date): Promise<ErrorResponse | ServiceTrip[]>;
47
+ createServiceCart(serviceCart: CreateServiceCartRequest): Promise<ErrorResponse | ServiceCart>;
47
48
  }
@@ -63,6 +63,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
63
63
  };
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
65
  exports.ServiceBooking = void 0;
66
+ var ErrorResponse_1 = require("../types/ErrorResponse");
66
67
  var booking_1 = require("./booking");
67
68
  var ServiceBooking = /** @class */ (function (_super) {
68
69
  __extends(ServiceBooking, _super);
@@ -101,7 +102,14 @@ var ServiceBooking = /** @class */ (function (_super) {
101
102
  if (cartDate > new Date()) {
102
103
  _this.cart = cart;
103
104
  _this.bookingDueDate = cartDate; // See Booking class
104
- _this.cartStatus = cart.status;
105
+ // Fill the booking process status
106
+ _this.bookingStepsToStatus = new Map(Object.entries(cart.stepsToStatus).map(function (_a) {
107
+ var bookingStep = _a[0], values = _a[1];
108
+ return [
109
+ bookingStep,
110
+ values
111
+ ];
112
+ }));
105
113
  _this.createCartTimer(cartDate);
106
114
  }
107
115
  });
@@ -116,7 +124,6 @@ var ServiceBooking = /** @class */ (function (_super) {
116
124
  setTimeout(function () {
117
125
  localStorage.removeItem("cartId");
118
126
  // Put actions that have to be done when timer expires here
119
- _this.cartStatus = booking_1.Booking.CartStatus.EMPTY;
120
127
  _this.cart = undefined;
121
128
  _this.bookingDueDate = undefined; // See Booking class
122
129
  _this.onCartExpiration();
@@ -130,7 +137,13 @@ var ServiceBooking = /** @class */ (function (_super) {
130
137
  var url;
131
138
  return __generator(this, function (_a) {
132
139
  url = "".concat(this.config.API_ENDPOINT, "/booking/cart?").concat(new URLSearchParams({ cartId: cartId.toString() }));
133
- return [2 /*return*/, this.callGetApi(url)];
140
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
141
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
142
+ localStorage.removeItem("cartId");
143
+ throw new Error("Error ".concat(response.httpStatus, " ").concat(response.message));
144
+ }
145
+ return response.cart;
146
+ })];
134
147
  });
135
148
  });
136
149
  };
@@ -144,7 +157,9 @@ var ServiceBooking = /** @class */ (function (_super) {
144
157
  var url;
145
158
  return __generator(this, function (_a) {
146
159
  url = "".concat(this.config.API_ENDPOINT, "/booking/services/cities?");
147
- return [2 /*return*/, this.callGetApi(url)];
160
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
161
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.cities;
162
+ })];
148
163
  });
149
164
  });
150
165
  };
@@ -161,7 +176,9 @@ var ServiceBooking = /** @class */ (function (_super) {
161
176
  return __generator(this, function (_a) {
162
177
  searchParams = new URLSearchParams(__assign(__assign({}, (cityName && { cityName: cityName })), { currency: currency }));
163
178
  url = "".concat(this.config.API_ENDPOINT, "/booking/services?").concat(searchParams);
164
- return [2 /*return*/, this.callGetApi(url)];
179
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
180
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.services;
181
+ })];
165
182
  });
166
183
  });
167
184
  };
@@ -179,7 +196,9 @@ var ServiceBooking = /** @class */ (function (_super) {
179
196
  return __generator(this, function (_a) {
180
197
  searchParams = new URLSearchParams({ date: date.toDateString() });
181
198
  url = "".concat(this.config.API_ENDPOINT, "/booking/services/").concat(serviceId, "/trips?").concat(searchParams);
182
- return [2 /*return*/, this.callGetApi(url)];
199
+ return [2 /*return*/, this.callGetApi(url).then(function (response) {
200
+ return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.trips;
201
+ })];
183
202
  });
184
203
  });
185
204
  };
@@ -189,12 +208,26 @@ var ServiceBooking = /** @class */ (function (_super) {
189
208
  var _this = this;
190
209
  return __generator(this, function (_a) {
191
210
  url = "".concat(this.config.API_ENDPOINT, "/booking/services/cart");
192
- return [2 /*return*/, this.callPostApi(url, serviceCart).then(function (cart) {
193
- _this.cart = cart.cart;
194
- _this.cartStatus = cart.cart.status;
195
- _this.bookingDueDate = new Date(cart.cart.bookingDueDate);
196
- _this.createCartTimer(new Date(cart.cart.bookingDueDate));
197
- return cart.cart;
211
+ return [2 /*return*/, this.callPostApi(url, serviceCart).then(function (response) {
212
+ // Check for errors
213
+ if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
214
+ return response;
215
+ }
216
+ // Save the local data
217
+ _this.cart = response.cart;
218
+ // Save the cartId in the localStorage
219
+ localStorage.setItem("cartId", response.cart.id.toString());
220
+ // Fill the booking process status
221
+ _this.bookingStepsToStatus = new Map(Object.entries(response.cart.stepsToStatus).map(function (_a) {
222
+ var bookingStep = _a[0], values = _a[1];
223
+ return [
224
+ bookingStep,
225
+ values
226
+ ];
227
+ }));
228
+ _this.bookingDueDate = new Date(response.cart.bookingDueDate);
229
+ _this.createCartTimer(new Date(response.cart.bookingDueDate));
230
+ return response.cart;
198
231
  })];
199
232
  });
200
233
  });
@@ -1,5 +1,7 @@
1
1
  import { MTSEnvs } from "../config";
2
+ import { ErrorResponse } from "../types/ErrorResponse";
2
3
  import { Cart } from "../types/common/Cart";
4
+ import { EditPassengersDetailsRequest, GetBuyerPassengersDetailsResponse } from "../types/common/Person";
3
5
  import { GetSubscriptionAvailabilityRequest, GetSubscriptionAvailabilityResponse } from "../types/subscriptions/SubscriptionAvailabilities";
4
6
  import { CreateSubscriptionCartRequest, SubscriptionCart } from "../types/subscriptions/SubscriptionCart";
5
7
  import { Subscription } from "../types/subscriptions/Subscriptions";
@@ -26,13 +28,13 @@ export declare class SubscriptionBooking extends Booking {
26
28
  * This method returns the possible departures for all subscriptions sold by this seller.
27
29
  * @returns {string[]} The list of possible departures
28
30
  */
29
- getSubscriptionsDepartures(): Promise<string[]>;
31
+ getSubscriptionsDepartures(): Promise<ErrorResponse | string[]>;
30
32
  /**
31
33
  * This method returns the possible destination for the subscriptions sold by this seller that start at the selected departure.
32
34
  * @param {string} departureStopName The departure stop name (as returned by {@link getSubscriptionsDepartures})
33
35
  * @returns {string[]} The list of possible destinations
34
36
  */
35
- getSubscriptionsDestinations(departureStopName: string): Promise<string[]>;
37
+ getSubscriptionsDestinations(departureStopName: string): Promise<ErrorResponse | string[]>;
36
38
  /**
37
39
  * This method returns the possible validity types for the subscriptions sold by this seller between the selected departure and destination.
38
40
  * The validity type is the duration of the subscription (1 week, 1 month, etc.). See {@link ValidityTypes} for more details.
@@ -40,7 +42,7 @@ export declare class SubscriptionBooking extends Booking {
40
42
  * @param {string} destinationStopName The destination stop name (as returned by {@link getSubscriptionsDstinations})
41
43
  * @returns {ValidityTypes[]} The list of possible validity types
42
44
  */
43
- getSubscriptionsValidityTypes(departureStopName: string, destinationStopName: string): Promise<SubscriptionBooking.ValidityTypes[]>;
45
+ getSubscriptionsValidityTypes(departureStopName: string, destinationStopName: string): Promise<ErrorResponse | SubscriptionBooking.ValidityTypes[]>;
44
46
  /**
45
47
  * This method returns the subscriptions that match the given parameters.
46
48
  * Note that it will always return the subscription for the one-way trip.
@@ -50,20 +52,32 @@ export declare class SubscriptionBooking extends Booking {
50
52
  * @param {string} validityType The validity type (as returned by {@link getSubscriptionsValidityTypes})
51
53
  * @returns {Array<Subscription>} The subscriptions that match the given parameters
52
54
  */
53
- getSubscriptions(departureStopName: string, destinationStopName: string, validityType: string): Promise<Subscription[]>;
55
+ getSubscriptions(departureStopName: string, destinationStopName: string, validityType: string): Promise<ErrorResponse | Subscription[]>;
54
56
  /**
55
57
  * This method returns the availability of the subscription for the given parameters.
56
58
  * Note that, contrary for the previous method, you should make one single request for both the outbound and return trip.
57
59
  * @param {GetSubscriptionAvailabilityRequest} request the request object containing the parameters for the availability check
58
60
  * @returns {GetSubscriptionAvailabilityResponse} The availability of the subscription for the given parameters
59
61
  */
60
- getSubscriptionAvailabilities(request: GetSubscriptionAvailabilityRequest): Promise<GetSubscriptionAvailabilityResponse>;
62
+ getSubscriptionAvailabilities(request: GetSubscriptionAvailabilityRequest): Promise<ErrorResponse | GetSubscriptionAvailabilityResponse>;
61
63
  /**
62
64
  * This method creates a subscription cart for the given parameters.
63
65
  * @param {CreateSubscriptionCartRequest} request the request object containing the parameters for the availability check
64
- * @returns
66
+ * @returns {SubscriptionCart} The created cart
65
67
  */
66
- createSubscriptionCart(request: CreateSubscriptionCartRequest): Promise<SubscriptionCart>;
68
+ createSubscriptionCart(request: CreateSubscriptionCartRequest): Promise<ErrorResponse | SubscriptionCart>;
69
+ /**
70
+ * @description This method shall be called when the user wants to retrieve information about the buyer and the passengers.
71
+ * @returns An object of type {@link GetBuyerPassengersDetailsResponse} containing the buyer and the passengers information,
72
+ * as well as a list of the available tariffs for each trip.
73
+ */
74
+ getBuyerPassengersDetails(): Promise<ErrorResponse | GetBuyerPassengersDetailsResponse>;
75
+ /**
76
+ * @description This methosd shall be called when the user wants to update the buyer and the passengers information.
77
+ * @param {EditPassengersDetailsRequest} passengersDetails The object containing the buyer and the passengers information.
78
+ * @returns An {@link ErrorResponse} object in case of error, nothing otherwise.
79
+ */
80
+ updateBuyerPassengersDetails(passengersDetails: EditPassengersDetailsRequest): Promise<ErrorResponse | any>;
67
81
  }
68
82
  export declare namespace SubscriptionBooking {
69
83
  enum ValidityTypes {