mts-booking-library 1.1.10 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/booking/booking.d.ts +61 -10
- package/lib/booking/booking.js +174 -12
- package/lib/booking/journeyBooking.d.ts +51 -18
- package/lib/booking/journeyBooking.js +200 -48
- package/lib/booking/serviceBooking.d.ts +5 -4
- package/lib/booking/serviceBooking.js +45 -12
- package/lib/booking/subscriptionBooking.d.ts +30 -7
- package/lib/booking/subscriptionBooking.js +154 -15
- package/lib/index.d.ts +6 -2
- package/lib/index.js +8 -2
- package/lib/types/ErrorResponse.d.ts +1 -0
- package/lib/types/ErrorResponse.js +5 -0
- package/lib/types/common/Cart.d.ts +14 -26
- package/lib/types/common/Extra.d.ts +20 -0
- package/lib/types/common/Extra.js +2 -0
- package/lib/types/common/Payment.d.ts +63 -0
- package/lib/types/common/Payment.js +24 -0
- package/lib/types/common/Person.d.ts +29 -7
- package/lib/types/common/Person.js +8 -1
- package/lib/types/common/Reduction.d.ts +31 -0
- package/lib/types/common/Reduction.js +2 -0
- package/lib/types/common/Tariffs.d.ts +21 -0
- package/lib/types/journeys/BusMatrix.d.ts +34 -0
- package/lib/types/journeys/BusMatrix.js +20 -0
- package/lib/types/services/ServiceCart.d.ts +1 -1
- package/lib/utils/apiCall.js +14 -8
- package/package.json +3 -3
@@ -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
|
-
|
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.
|
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,241 @@ 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}
|
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 (
|
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 (
|
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:
|
170
|
-
destinationStopName:
|
171
|
-
passengersNumber:
|
172
|
-
date:
|
173
|
-
roundTripDate:
|
174
|
-
currency:
|
175
|
-
isRoundtrip:
|
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 (
|
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,
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
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
|
-
|
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
|
238
|
+
var buyerPassengersDetails, url;
|
201
239
|
return __generator(this, function (_a) {
|
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
|
+
})];
|
268
|
+
});
|
269
|
+
});
|
270
|
+
};
|
271
|
+
/**
|
272
|
+
* @description This method shall be called when the user wants to retrieve information about an esisting buyer.
|
273
|
+
* @param {string} [linkavelCardNumber=undefined] The linkavel card number of the buyer. This parameter is required if linkavelCardPhoneNumber is not set.
|
274
|
+
* A linkavelCardNumber is a string of 9 digits.
|
275
|
+
* @param {string} [linkavelCardPhoneNumber=undefined] The linkavel card phone number of the buyer. This parameter is required if linkavelCardNumber is not set.
|
276
|
+
* @returns An object of type {@link GetBuyerPassengersDetailsResponse} containing the buyer and the passengers information,
|
277
|
+
* as well as a list of the available tariffs for each trip.
|
278
|
+
*/
|
279
|
+
JourneyBooking.prototype.getBuyer = function (linkavelCardNumber, linkavelCardPhoneNumber) {
|
280
|
+
return __awaiter(this, void 0, void 0, function () {
|
281
|
+
var buyerPassengersDetails, searchParams, url;
|
282
|
+
return __generator(this, function (_a) {
|
283
|
+
// First check that it is possible to call this API
|
284
|
+
if (!this.cart) {
|
285
|
+
throw Error("Cart is not initialized yet");
|
286
|
+
}
|
287
|
+
buyerPassengersDetails = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.BUYER_PASSENGERS);
|
288
|
+
if (!buyerPassengersDetails || !buyerPassengersDetails[0]) {
|
289
|
+
throw Error("The status of the cart does not allow to call this API");
|
290
|
+
}
|
291
|
+
if (!linkavelCardNumber && !linkavelCardPhoneNumber) {
|
292
|
+
throw Error("At least one of the parameters linkavelCardNumber and linkavelCardPhoneNumber must be set");
|
293
|
+
}
|
202
294
|
searchParams = new URLSearchParams({
|
203
|
-
|
204
|
-
|
295
|
+
linkavelCardNumber: linkavelCardNumber !== null && linkavelCardNumber !== void 0 ? linkavelCardNumber : "",
|
296
|
+
linkavelCardPhoneNumber: linkavelCardPhoneNumber !== null && linkavelCardPhoneNumber !== void 0 ? linkavelCardPhoneNumber : "",
|
205
297
|
});
|
206
|
-
url = "".concat(this.config.API_ENDPOINT, "/
|
207
|
-
return [2 /*return*/, this.callGetApi(url)
|
298
|
+
url = "".concat(this.config.API_ENDPOINT, "/buyers?").concat(searchParams, "}");
|
299
|
+
return [2 /*return*/, this.callGetApi(url).then(function (response) {
|
300
|
+
// Check for errors
|
301
|
+
if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
|
302
|
+
return response;
|
303
|
+
}
|
304
|
+
return response.buyers[0];
|
305
|
+
})];
|
208
306
|
});
|
209
307
|
});
|
210
308
|
};
|
211
|
-
|
212
|
-
|
309
|
+
/**
|
310
|
+
* @description This methosd shall be called when the user wants to update the buyer and the passengers information.
|
311
|
+
* @param {EditPassengersDetailsRequest} passengersDetails The object containing the buyer and the passengers information.
|
312
|
+
* @returns An {@link ErrorResponse} object in case of error, nothing otherwise.
|
313
|
+
*/
|
314
|
+
JourneyBooking.prototype.updateBuyerPassengersDetails = function (passengersDetails) {
|
213
315
|
return __awaiter(this, void 0, void 0, function () {
|
214
|
-
var
|
316
|
+
var buyerPassengersDetails, url;
|
215
317
|
return __generator(this, function (_a) {
|
318
|
+
// First check that it is possible to call this API
|
216
319
|
if (!this.cart) {
|
217
320
|
throw Error("Cart is not initialized yet");
|
218
321
|
}
|
219
|
-
|
220
|
-
|
221
|
-
|
322
|
+
buyerPassengersDetails = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.BUYER_PASSENGERS);
|
323
|
+
if (!buyerPassengersDetails || !buyerPassengersDetails[0]) {
|
324
|
+
throw Error("The status of the cart does not allow to call this API");
|
325
|
+
}
|
326
|
+
url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/details");
|
327
|
+
return [2 /*return*/, this.callPostApi(url, passengersDetails).then(function (response) {
|
328
|
+
return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response;
|
329
|
+
})];
|
222
330
|
});
|
223
331
|
});
|
224
332
|
};
|
225
|
-
|
226
|
-
|
333
|
+
/**
|
334
|
+
* @description This method shall be used when the user wants to retrieve the bus matrix for a trip. The bus matrix shows
|
335
|
+
* the seats that are available and the ones that are already taken, as well as how the bus is made.
|
336
|
+
* @param {number} tripId The id of the trip for which the bus matrix should be retrieved
|
337
|
+
* @param {number} departureStopId The id of the departure stop
|
338
|
+
* @param {number} destinationStopId The id of the destination stop
|
339
|
+
* @returns An {@link ErrorResponse} object in case of error, a {@link BusMatrix} otherwise.
|
340
|
+
*/
|
341
|
+
JourneyBooking.prototype.getBusMatrix = function (tripId, departureStopId, destinationStopId) {
|
227
342
|
return __awaiter(this, void 0, void 0, function () {
|
228
|
-
var url;
|
343
|
+
var seatSelectionStatus, searchParams, url;
|
229
344
|
return __generator(this, function (_a) {
|
345
|
+
// First check that it is possible to call this API
|
230
346
|
if (!this.cart) {
|
231
347
|
throw Error("Cart is not initialized yet");
|
232
348
|
}
|
233
|
-
|
234
|
-
|
349
|
+
seatSelectionStatus = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.SEATS_SELECTION);
|
350
|
+
if (!seatSelectionStatus || !seatSelectionStatus[0]) {
|
351
|
+
throw Error("The status of the cart does not allow to call this API");
|
352
|
+
}
|
353
|
+
searchParams = new URLSearchParams({
|
354
|
+
departureStopId: departureStopId.toString(),
|
355
|
+
destinationStopId: destinationStopId.toString()
|
356
|
+
});
|
357
|
+
url = "".concat(this.config.API_ENDPOINT, "/booking/journeys/trips/").concat(tripId, "/seats?").concat(searchParams);
|
358
|
+
return [2 /*return*/, this.callGetApi(url).then(function (response) {
|
359
|
+
return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.busMatrix;
|
360
|
+
})];
|
235
361
|
});
|
236
362
|
});
|
237
363
|
};
|
238
|
-
|
364
|
+
/**
|
365
|
+
* @description This method shall be called when the user wants to retrieve which seats were assigned for this booking.
|
366
|
+
* @param {number} tripId The id of the trip for which the seats should be retrieved.
|
367
|
+
* @returns An {@link ErrorResponse} object in case of error, a list of {@link BusLayoutCell} ids otherwise, representing the assigned seats.
|
368
|
+
*/
|
369
|
+
JourneyBooking.prototype.getAssignedSeats = function (tripId) {
|
239
370
|
return __awaiter(this, void 0, void 0, function () {
|
240
|
-
var url;
|
371
|
+
var seatSelectionStatus, searchParams, url;
|
241
372
|
return __generator(this, function (_a) {
|
373
|
+
// First check that it is possible to call this API
|
242
374
|
if (!this.cart) {
|
243
375
|
throw Error("Cart is not initialized yet");
|
244
376
|
}
|
245
|
-
|
246
|
-
|
377
|
+
seatSelectionStatus = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.SEATS_SELECTION);
|
378
|
+
if (!seatSelectionStatus || !seatSelectionStatus[0]) {
|
379
|
+
throw Error("The status of the cart does not allow to call this API");
|
380
|
+
}
|
381
|
+
searchParams = new URLSearchParams({ tripId: tripId.toString() });
|
382
|
+
url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/seats?").concat(searchParams);
|
383
|
+
return [2 /*return*/, this.callGetApi(url).then(function (response) {
|
384
|
+
return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response.assignedSeats;
|
385
|
+
})];
|
247
386
|
});
|
248
387
|
});
|
249
388
|
};
|
250
|
-
|
389
|
+
/**
|
390
|
+
* @description This method shall be called when the user wants to change the assigned seats of a trip.
|
391
|
+
* @param {number} tripId The id of the trip for which the seats should be changed
|
392
|
+
* @param {number[]} newSeatsIds The ids of the new seats, as found the {@link BusMatrix}
|
393
|
+
* @returns An {@link ErrorResponse} object in case of error, nothing otherwise.
|
394
|
+
*/
|
395
|
+
JourneyBooking.prototype.changeSeatsOfTrip = function (tripId, newSeatsIds) {
|
251
396
|
return __awaiter(this, void 0, void 0, function () {
|
252
|
-
var url;
|
397
|
+
var seatSelectionStatus, url;
|
253
398
|
return __generator(this, function (_a) {
|
399
|
+
// First check that it is possible to call this API
|
254
400
|
if (!this.cart) {
|
255
401
|
throw Error("Cart is not initialized yet");
|
256
402
|
}
|
257
|
-
|
258
|
-
|
403
|
+
seatSelectionStatus = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.SEATS_SELECTION);
|
404
|
+
if (!seatSelectionStatus || !seatSelectionStatus[0]) {
|
405
|
+
throw Error("The status of the cart does not allow to call this API");
|
406
|
+
}
|
407
|
+
url = "".concat(this.config.API_ENDPOINT, "/booking/cart/").concat(this.cart.id, "/seats");
|
408
|
+
return [2 /*return*/, this.callPostApi(url, { tripId: tripId, seatsIds: newSeatsIds }).then(function (response) {
|
409
|
+
return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response;
|
410
|
+
})];
|
259
411
|
});
|
260
412
|
});
|
261
413
|
};
|
@@ -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
|
-
|
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 (
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
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, Person } 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,41 @@ 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 method shall be called when the user wants to retrieve information about an esisting buyer.
|
77
|
+
* @param {string} [linkavelCardNumber=undefined] The linkavel card number of the buyer. This parameter is required if linkavelCardPhoneNumber is not set.
|
78
|
+
* A linkavelCardNumber is a string of 9 digits.
|
79
|
+
* @param {string} [linkavelCardPhoneNumber=undefined] The linkavel card phone number of the buyer. This parameter is required if linkavelCardNumber is not set.
|
80
|
+
* @returns An object of type {@link GetBuyerPassengersDetailsResponse} containing the buyer and the passengers information,
|
81
|
+
* as well as a list of the available tariffs for each trip.
|
82
|
+
*/
|
83
|
+
getBuyer(linkavelCardNumber?: string, linkavelCardPhoneNumber?: string): Promise<ErrorResponse | Person>;
|
84
|
+
/**
|
85
|
+
* @description This methosd shall be called when the user wants to update the buyer and the passengers information.
|
86
|
+
* @param {EditPassengersDetailsRequest} passengersDetails The object containing the buyer and the passengers information.
|
87
|
+
* @returns An {@link ErrorResponse} object in case of error, nothing otherwise.
|
88
|
+
*/
|
89
|
+
updateBuyerPassengersDetails(passengersDetails: EditPassengersDetailsRequest): Promise<ErrorResponse | any>;
|
67
90
|
}
|
68
91
|
export declare namespace SubscriptionBooking {
|
69
92
|
enum ValidityTypes {
|