mts-booking-library 1.3.17 → 1.3.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/README.md +6 -20
  2. package/lib/booking/booking.d.ts +2 -0
  3. package/lib/booking/booking.js +3 -3
  4. package/lib/booking/journeyBooking.d.ts +17 -10
  5. package/lib/booking/journeyBooking.js +43 -27
  6. package/lib/booking/serviceBooking.d.ts +16 -9
  7. package/lib/booking/serviceBooking.js +28 -19
  8. package/lib/booking/subscriptionBooking.d.ts +16 -9
  9. package/lib/booking/subscriptionBooking.js +28 -20
  10. package/lib/booking/tplBooking.d.ts +16 -9
  11. package/lib/booking/tplBooking.js +28 -19
  12. package/lib/mtsStorage.d.ts +3 -1
  13. package/lib/mtsStorage.js +5 -2
  14. package/lib/types/Booking.js +1 -0
  15. package/lib/types/Cart.d.ts +79 -0
  16. package/lib/types/Details.d.ts +9 -0
  17. package/lib/types/ErrorResponse.js +4 -1
  18. package/lib/types/Info.d.ts +7 -0
  19. package/lib/types/Journeys/Journey.d.ts +8 -0
  20. package/lib/types/Line.d.ts +6 -0
  21. package/lib/types/Line.js +2 -0
  22. package/lib/types/Person.d.ts +7 -0
  23. package/lib/types/Person.js +2 -0
  24. package/lib/types/Subscriptions/SubscriptionAvailabilities.js +2 -0
  25. package/lib/types/Subscriptions/SubscriptionCart.js +2 -0
  26. package/lib/types/Subscriptions/SubscriptionInfo.js +2 -0
  27. package/lib/types/Subscriptions/Subscriptions.js +2 -0
  28. package/lib/types/Subscriptions/Subscrptions.d.ts +12 -0
  29. package/lib/types/Subscriptions/Subscrptions.js +2 -0
  30. package/lib/types/Subscriptions/ValidityTypes.d.ts +6 -0
  31. package/lib/types/Subscriptions/ValidityTypes.js +10 -0
  32. package/lib/types/TermsAndTariffs.d.ts +21 -0
  33. package/lib/types/TermsAndTariffs.js +2 -0
  34. package/lib/types/Tours/Tour.d.ts +18 -0
  35. package/lib/types/Tours/Tour.js +2 -0
  36. package/lib/types/common/Cart.d.ts +7 -1
  37. package/lib/utils/apiCall.js +21 -12
  38. package/package.json +1 -1
  39. package/lib/SubscriptionBooking.js +0 -148
  40. package/lib/utils/testUtils.d.ts +0 -8
  41. package/lib/utils/testUtils.js +0 -19
  42. /package/lib/{SubscriptionBooking.d.ts → types/Booking.d.ts} +0 -0
  43. /package/lib/types/{journeys/JourneyInfo.js → Cart.js} +0 -0
  44. /package/lib/types/{journeys/Stop.js → Details.js} +0 -0
  45. /package/lib/types/{journeys/Trip.js → Info.js} +0 -0
  46. /package/lib/types/{journeys → Journeys}/BusMatrix.d.ts +0 -0
  47. /package/lib/types/{journeys → Journeys}/BusMatrix.js +0 -0
  48. /package/lib/types/{subscriptions/SubscriptionAvailabilities.js → Journeys/Journey.js} +0 -0
  49. /package/lib/types/{journeys → Journeys}/JourneyCart.d.ts +0 -0
  50. /package/lib/types/{journeys → Journeys}/JourneyCart.js +0 -0
  51. /package/lib/types/{journeys → Journeys}/JourneyInfo.d.ts +0 -0
  52. /package/lib/types/{subscriptions/SubscriptionCart.js → Journeys/JourneyInfo.js} +0 -0
  53. /package/lib/types/{journeys → Journeys}/JourneySearch.d.ts +0 -0
  54. /package/lib/types/{journeys → Journeys}/JourneySearch.js +0 -0
  55. /package/lib/types/{journeys → Journeys}/Stop.d.ts +0 -0
  56. /package/lib/types/{subscriptions/SubscriptionInfo.js → Journeys/Stop.js} +0 -0
  57. /package/lib/types/{journeys → Journeys}/Trip.d.ts +0 -0
  58. /package/lib/types/{subscriptions/Subscriptions.js → Journeys/Trip.js} +0 -0
  59. /package/lib/types/{subscriptions → Subscriptions}/SubscriptionAvailabilities.d.ts +0 -0
  60. /package/lib/types/{subscriptions → Subscriptions}/SubscriptionCart.d.ts +0 -0
  61. /package/lib/types/{subscriptions → Subscriptions}/SubscriptionInfo.d.ts +0 -0
  62. /package/lib/types/{subscriptions → Subscriptions}/Subscriptions.d.ts +0 -0
@@ -13,20 +13,23 @@ export declare class SubscriptionBooking extends Booking {
13
13
  constructor({ env, subKey, debug, language, sessionId, restoreState, accessToken, sellerId, resellerId, dbType }: Omit<Booking.BookingConfig, "bookingType">);
14
14
  getStorage(): import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<{
15
15
  cartId: number | undefined;
16
+ cartGuid: string | undefined;
16
17
  } & {
17
- updateCartId: (cartId: number | undefined) => void;
18
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
18
19
  resetState: () => void;
19
20
  }>, "persist"> & {
20
21
  persist: {
21
22
  setOptions: (options: Partial<import("zustand/middleware").PersistOptions<{
22
23
  cartId: number | undefined;
24
+ cartGuid: string | undefined;
23
25
  } & {
24
- updateCartId: (cartId: number | undefined) => void;
26
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
25
27
  resetState: () => void;
26
28
  }, {
27
29
  cartId: number | undefined;
30
+ cartGuid: string | undefined;
28
31
  } & {
29
- updateCartId: (cartId: number | undefined) => void;
32
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
30
33
  resetState: () => void;
31
34
  }>>) => void;
32
35
  clearStorage: () => void;
@@ -34,33 +37,37 @@ export declare class SubscriptionBooking extends Booking {
34
37
  hasHydrated: () => boolean;
35
38
  onHydrate: (fn: (state: {
36
39
  cartId: number | undefined;
40
+ cartGuid: string | undefined;
37
41
  } & {
38
- updateCartId: (cartId: number | undefined) => void;
42
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
39
43
  resetState: () => void;
40
44
  }) => void) => () => void;
41
45
  onFinishHydration: (fn: (state: {
42
46
  cartId: number | undefined;
47
+ cartGuid: string | undefined;
43
48
  } & {
44
- updateCartId: (cartId: number | undefined) => void;
49
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
45
50
  resetState: () => void;
46
51
  }) => void) => () => void;
47
52
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<{
48
53
  cartId: number | undefined;
54
+ cartGuid: string | undefined;
49
55
  } & {
50
- updateCartId: (cartId: number | undefined) => void;
56
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
51
57
  resetState: () => void;
52
58
  }, {
53
59
  cartId: number | undefined;
60
+ cartGuid: string | undefined;
54
61
  } & {
55
- updateCartId: (cartId: number | undefined) => void;
62
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
56
63
  resetState: () => void;
57
64
  }>>;
58
65
  };
59
66
  }>;
60
67
  getCart(): SubscriptionCart | undefined;
61
68
  resetBooking(): void;
62
- fetchAndSetCart(cartId: number): Promise<void>;
63
- fetchCart(cartId: number): Promise<SubscriptionCart>;
69
+ fetchAndSetCart(cartGuid: string): Promise<void>;
70
+ fetchCart(cartGuid: string): Promise<SubscriptionCart>;
64
71
  /**
65
72
  * This method allows to delete a cart, thus allowing the user to exit from the booking process.
66
73
  * @returns An {@link ErrorResponse} object in case of error, nothing otherwise. Note that also in case of error, all
@@ -98,11 +98,14 @@ var SubscriptionBooking = /** @class */ (function (_super) {
98
98
  resellerId: resellerId,
99
99
  dbType: dbType
100
100
  }) || this;
101
- // Set cartId
102
- var cartId = _this.getStorage().getState().cartId;
101
+ // Set cartId & cartGuid
102
+ var _b = _this.getStorage().getState(), cartId = _b.cartId, cartGuid = _b.cartGuid;
103
103
  if (cartId && restoreState) {
104
104
  _this.cartId = cartId;
105
105
  }
106
+ if (cartGuid && restoreState) {
107
+ _this.cartGuid = cartGuid;
108
+ }
106
109
  return _this;
107
110
  }
108
111
  SubscriptionBooking.prototype.getStorage = function () {
@@ -117,10 +120,11 @@ var SubscriptionBooking = /** @class */ (function (_super) {
117
120
  SubscriptionBooking.prototype.resetBooking = function () {
118
121
  this.cart = undefined;
119
122
  this.cartId = undefined;
123
+ this.cartGuid = undefined;
120
124
  this.bookingStepsToStatus = new Map();
121
125
  this.bookingDueDate = undefined;
122
126
  try {
123
- this.getStorage().getState().updateCartId(undefined);
127
+ this.getStorage().getState().updateCartId(undefined, undefined);
124
128
  }
125
129
  catch (e) {
126
130
  if (this.config.ENV !== config_1.MTSEnvs.TEST) {
@@ -129,18 +133,19 @@ var SubscriptionBooking = /** @class */ (function (_super) {
129
133
  console.log(e);
130
134
  }
131
135
  };
132
- SubscriptionBooking.prototype.fetchAndSetCart = function (cartId) {
136
+ SubscriptionBooking.prototype.fetchAndSetCart = function (cartGuid) {
133
137
  return __awaiter(this, void 0, void 0, function () {
134
138
  var _this = this;
135
139
  return __generator(this, function (_a) {
136
140
  switch (_a.label) {
137
- case 0: return [4 /*yield*/, this.fetchCart(cartId).then(function (cart) {
141
+ case 0: return [4 /*yield*/, this.fetchCart(cartGuid).then(function (cart) {
138
142
  if (cart) {
139
143
  var cartDueDate = new Date();
140
144
  cartDueDate.setSeconds(cartDueDate.getSeconds() + cart.bookingDueDateRemainingSeconds);
141
145
  if (cartDueDate > new Date() && !cart.hasIssuedTickets) {
142
146
  _this.cart = cart;
143
147
  _this.cartId = cart.id;
148
+ _this.cartGuid = cart.guid;
144
149
  _this.bookingDueDate = cartDueDate; // See Booking class
145
150
  // Update the sellerId. This is particularly important in Linkavel
146
151
  _this.updateSellerId(cart.sellerId);
@@ -160,12 +165,12 @@ var SubscriptionBooking = /** @class */ (function (_super) {
160
165
  });
161
166
  });
162
167
  };
163
- SubscriptionBooking.prototype.fetchCart = function (cartId) {
168
+ SubscriptionBooking.prototype.fetchCart = function (cartGuid) {
164
169
  return __awaiter(this, void 0, void 0, function () {
165
170
  var url;
166
171
  var _this = this;
167
172
  return __generator(this, function (_a) {
168
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartId: cartId.toString() }));
173
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartGuid: cartGuid }));
169
174
  return [2 /*return*/, this.callGetApi(url).then(function (response) {
170
175
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
171
176
  _this.resetBooking();
@@ -191,10 +196,10 @@ var SubscriptionBooking = /** @class */ (function (_super) {
191
196
  var _this = this;
192
197
  return __generator(this, function (_a) {
193
198
  // First check that it is possible to call this API
194
- if (!this.cart || !this.cartId) {
199
+ if (!this.cart) {
195
200
  throw Error("Cart is not initialized yet");
196
201
  }
197
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartId: this.cartId.toString() }));
202
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartGuid: this.cart.guid }));
198
203
  return [2 /*return*/, this.callDeleteApi(url).then(function (response) {
199
204
  _this.resetBooking();
200
205
  return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response;
@@ -338,8 +343,9 @@ var SubscriptionBooking = /** @class */ (function (_super) {
338
343
  }
339
344
  _this.cart = response.cart;
340
345
  _this.cartId = response.cart.id;
346
+ _this.cartGuid = response.cart.guid;
341
347
  // Save the cartId in the mts-storage
342
- _this.getStorage().getState().updateCartId(response.cart.id);
348
+ _this.getStorage().getState().updateCartId(response.cart.id, response.cart.guid);
343
349
  // Fill the booking process status
344
350
  _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.cart.stepsToStatus);
345
351
  var cartDueDate = new Date();
@@ -359,7 +365,7 @@ var SubscriptionBooking = /** @class */ (function (_super) {
359
365
  */
360
366
  SubscriptionBooking.prototype.getBuyerPassengersDetails = function () {
361
367
  return __awaiter(this, void 0, void 0, function () {
362
- var buyerPassengersDetails, url;
368
+ var buyerPassengersDetails, searchParams, url;
363
369
  return __generator(this, function (_a) {
364
370
  // First check that it is possible to call this API
365
371
  if (!this.cart) {
@@ -369,7 +375,8 @@ var SubscriptionBooking = /** @class */ (function (_super) {
369
375
  if (!buyerPassengersDetails || !buyerPassengersDetails[0]) {
370
376
  throw Error("The status of the cart does not allow to call this API");
371
377
  }
372
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/").concat(this.cart.id, "/details?");
378
+ searchParams = new URLSearchParams({ cartGuid: this.cart.guid });
379
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/details?").concat(searchParams);
373
380
  return [2 /*return*/, this.callGetApi(url).then(function (response) {
374
381
  // Check for errors
375
382
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
@@ -458,7 +465,7 @@ var SubscriptionBooking = /** @class */ (function (_super) {
458
465
  if (!buyerPassengersDetails || !buyerPassengersDetails[0]) {
459
466
  throw Error("The status of the cart does not allow to call this API");
460
467
  }
461
- request = __assign({}, passengersDetails);
468
+ request = __assign(__assign({}, passengersDetails), { cartGuid: this.cart.guid });
462
469
  passengersDetails.passengers.map(function (passenger, passengerIndex) {
463
470
  var tripsToTariffsToJson = {};
464
471
  passenger.tripsToTariffs.forEach(function (value, key) {
@@ -466,7 +473,7 @@ var SubscriptionBooking = /** @class */ (function (_super) {
466
473
  });
467
474
  request.passengers[passengerIndex].tripsToTariffs = tripsToTariffsToJson;
468
475
  });
469
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/").concat(this.cart.id, "/details");
476
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/details");
470
477
  return [2 /*return*/, this.callPostApi(url, request).then(function (response) {
471
478
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
472
479
  return response;
@@ -688,7 +695,7 @@ var SubscriptionBooking = /** @class */ (function (_super) {
688
695
  switch (_c.label) {
689
696
  case 0:
690
697
  // First check that it is possible to call this API
691
- if (!this.cartId || this.cartId === 0) {
698
+ if (!this.cartGuid) {
692
699
  throw Error("Cart is not initialized yet");
693
700
  }
694
701
  discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
@@ -716,8 +723,8 @@ var SubscriptionBooking = /** @class */ (function (_super) {
716
723
  }
717
724
  _c.label = 5;
718
725
  case 5:
719
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/").concat(this.cartId, "/payment/voucher");
720
- return [2 /*return*/, this.callPostApi(url, { voucherCode: voucherCode }).then(function (response) {
726
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/payment/voucher");
727
+ return [2 /*return*/, this.callPostApi(url, { voucherCode: voucherCode, cartGuid: this.cartGuid }).then(function (response) {
721
728
  var _a, _b;
722
729
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
723
730
  return response;
@@ -759,8 +766,8 @@ exports.SubscriptionBooking = SubscriptionBooking;
759
766
  _c.label = 1;
760
767
  case 1:
761
768
  _c.trys.push([1, 4, , 5]);
762
- if (!booking.cartId) return [3 /*break*/, 3];
763
- return [4 /*yield*/, booking.fetchAndSetCart(booking.cartId)];
769
+ if (!booking.cartGuid) return [3 /*break*/, 3];
770
+ return [4 /*yield*/, booking.fetchAndSetCart(booking.cartGuid)];
764
771
  case 2:
765
772
  _c.sent();
766
773
  _c.label = 3;
@@ -770,8 +777,9 @@ exports.SubscriptionBooking = SubscriptionBooking;
770
777
  // Check if the error is due to an expired cart. In this case, delete the cartId from the mts-storage
771
778
  // This error can occur when the user refreshes the page and the cart has expired
772
779
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(error_1) && error_1.mtsCode === 40053) {
773
- booking.getStorage().getState().updateCartId(undefined);
780
+ booking.getStorage().getState().updateCartId(undefined, undefined);
774
781
  booking.cartId = undefined;
782
+ booking.cartGuid = undefined;
775
783
  return [2 /*return*/, booking];
776
784
  }
777
785
  throw new Error("Could not instantiate JourneyBooking");
@@ -15,20 +15,23 @@ export declare class TplBooking extends Booking {
15
15
  constructor({ env, subKey, debug, language, sessionId, restoreState, accessToken, sellerId, resellerId, dbType }: Omit<Booking.BookingConfig, "bookingType">);
16
16
  getStorage(): import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<{
17
17
  cartId: number | undefined;
18
+ cartGuid: string | undefined;
18
19
  } & {
19
- updateCartId: (cartId: number | undefined) => void;
20
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
20
21
  resetState: () => void;
21
22
  }>, "persist"> & {
22
23
  persist: {
23
24
  setOptions: (options: Partial<import("zustand/middleware").PersistOptions<{
24
25
  cartId: number | undefined;
26
+ cartGuid: string | undefined;
25
27
  } & {
26
- updateCartId: (cartId: number | undefined) => void;
28
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
27
29
  resetState: () => void;
28
30
  }, {
29
31
  cartId: number | undefined;
32
+ cartGuid: string | undefined;
30
33
  } & {
31
- updateCartId: (cartId: number | undefined) => void;
34
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
32
35
  resetState: () => void;
33
36
  }>>) => void;
34
37
  clearStorage: () => void;
@@ -36,33 +39,37 @@ export declare class TplBooking extends Booking {
36
39
  hasHydrated: () => boolean;
37
40
  onHydrate: (fn: (state: {
38
41
  cartId: number | undefined;
42
+ cartGuid: string | undefined;
39
43
  } & {
40
- updateCartId: (cartId: number | undefined) => void;
44
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
41
45
  resetState: () => void;
42
46
  }) => void) => () => void;
43
47
  onFinishHydration: (fn: (state: {
44
48
  cartId: number | undefined;
49
+ cartGuid: string | undefined;
45
50
  } & {
46
- updateCartId: (cartId: number | undefined) => void;
51
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
47
52
  resetState: () => void;
48
53
  }) => void) => () => void;
49
54
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<{
50
55
  cartId: number | undefined;
56
+ cartGuid: string | undefined;
51
57
  } & {
52
- updateCartId: (cartId: number | undefined) => void;
58
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
53
59
  resetState: () => void;
54
60
  }, {
55
61
  cartId: number | undefined;
62
+ cartGuid: string | undefined;
56
63
  } & {
57
- updateCartId: (cartId: number | undefined) => void;
64
+ updateCartId: (cartId: number | undefined, cartGuid: string | undefined) => void;
58
65
  resetState: () => void;
59
66
  }>>;
60
67
  };
61
68
  }>;
62
69
  getCart(): undefined | TplCart;
63
70
  resetBooking(): void;
64
- fetchAndSetCart(cartId: number): Promise<void>;
65
- fetchCart(cartId: number): Promise<TplCart>;
71
+ fetchAndSetCart(cartGuid: string): Promise<void>;
72
+ fetchCart(cartGuid: string): Promise<TplCart>;
66
73
  /**
67
74
  * This method allows to delete a cart, thus allowing the user to exit from the booking process.
68
75
  * @returns An {@link ErrorResponse} object in case of error, nothing otherwise. Note that also in case of error, all
@@ -98,11 +98,14 @@ var TplBooking = /** @class */ (function (_super) {
98
98
  resellerId: resellerId,
99
99
  dbType: dbType
100
100
  }) || this;
101
- // Set cartId
102
- var cartId = _this.getStorage().getState().cartId;
101
+ // Set cartId & cartGuid
102
+ var _b = _this.getStorage().getState(), cartId = _b.cartId, cartGuid = _b.cartGuid;
103
103
  if (cartId && restoreState) {
104
104
  _this.cartId = cartId;
105
105
  }
106
+ if (cartGuid && restoreState) {
107
+ _this.cartGuid = cartGuid;
108
+ }
106
109
  return _this;
107
110
  }
108
111
  TplBooking.prototype.getStorage = function () {
@@ -117,10 +120,11 @@ var TplBooking = /** @class */ (function (_super) {
117
120
  TplBooking.prototype.resetBooking = function () {
118
121
  this.cart = undefined;
119
122
  this.cartId = undefined;
123
+ this.cartGuid = undefined;
120
124
  this.bookingStepsToStatus = new Map();
121
125
  this.bookingDueDate = undefined;
122
126
  try {
123
- this.getStorage().getState().updateCartId(undefined);
127
+ this.getStorage().getState().updateCartId(undefined, undefined);
124
128
  }
125
129
  catch (e) {
126
130
  if (this.config.ENV !== config_1.MTSEnvs.TEST) {
@@ -129,18 +133,19 @@ var TplBooking = /** @class */ (function (_super) {
129
133
  console.log(e);
130
134
  }
131
135
  };
132
- TplBooking.prototype.fetchAndSetCart = function (cartId) {
136
+ TplBooking.prototype.fetchAndSetCart = function (cartGuid) {
133
137
  return __awaiter(this, void 0, void 0, function () {
134
138
  var _this = this;
135
139
  return __generator(this, function (_a) {
136
140
  switch (_a.label) {
137
- case 0: return [4 /*yield*/, this.fetchCart(cartId).then(function (cart) {
141
+ case 0: return [4 /*yield*/, this.fetchCart(cartGuid).then(function (cart) {
138
142
  if (cart) {
139
143
  var cartDueDate = new Date();
140
144
  cartDueDate.setSeconds(cartDueDate.getSeconds() + cart.bookingDueDateRemainingSeconds);
141
145
  if (cartDueDate > new Date() && !cart.hasIssuedTickets) {
142
146
  _this.cart = cart;
143
147
  _this.cartId = cart.id;
148
+ _this.cartGuid = cart.guid;
144
149
  _this.bookingDueDate = cartDueDate; // See Booking class
145
150
  // Update the sellerId. This is particularly important in Linkavel
146
151
  _this.updateSellerId(cart.sellerId);
@@ -160,12 +165,12 @@ var TplBooking = /** @class */ (function (_super) {
160
165
  });
161
166
  });
162
167
  };
163
- TplBooking.prototype.fetchCart = function (cartId) {
168
+ TplBooking.prototype.fetchCart = function (cartGuid) {
164
169
  return __awaiter(this, void 0, void 0, function () {
165
170
  var url;
166
171
  var _this = this;
167
172
  return __generator(this, function (_a) {
168
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartId: cartId.toString() }));
173
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartGuid: cartGuid }));
169
174
  return [2 /*return*/, this.callGetApi(url).then(function (response) {
170
175
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
171
176
  _this.resetBooking();
@@ -191,10 +196,10 @@ var TplBooking = /** @class */ (function (_super) {
191
196
  var _this = this;
192
197
  return __generator(this, function (_a) {
193
198
  // First check that it is possible to call this API
194
- if (!this.cart || !this.cartId) {
199
+ if (!this.cart) {
195
200
  throw Error("Cart is not initialized yet");
196
201
  }
197
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartId: this.cartId.toString() }));
202
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts?").concat(new URLSearchParams({ cartGuid: this.cart.guid }));
198
203
  return [2 /*return*/, this.callDeleteApi(url).then(function (response) {
199
204
  // Clear all data
200
205
  _this.resetBooking();
@@ -340,8 +345,9 @@ var TplBooking = /** @class */ (function (_super) {
340
345
  }
341
346
  _this.cart = response.cart;
342
347
  _this.cartId = response.cart.id;
348
+ _this.cartGuid = response.cart.guid;
343
349
  // Save the cartId in the mts-storage
344
- _this.getStorage().getState().updateCartId(response.cart.id);
350
+ _this.getStorage().getState().updateCartId(response.cart.id, response.cart.guid);
345
351
  // Fill the booking process status
346
352
  _this.bookingStepsToStatus = (0, processBookingSteps_1.processBookingSteps)(response.cart.stepsToStatus);
347
353
  var cartDueDate = new Date();
@@ -362,7 +368,7 @@ var TplBooking = /** @class */ (function (_super) {
362
368
  */
363
369
  TplBooking.prototype.getBuyerPassengersDetails = function () {
364
370
  return __awaiter(this, void 0, void 0, function () {
365
- var buyerPassengersDetails, url;
371
+ var buyerPassengersDetails, searchParams, url;
366
372
  return __generator(this, function (_a) {
367
373
  // First check that it is possible to call this API
368
374
  if (!this.cart) {
@@ -372,7 +378,8 @@ var TplBooking = /** @class */ (function (_super) {
372
378
  if (!buyerPassengersDetails || !buyerPassengersDetails[0]) {
373
379
  throw Error("The status of the cart does not allow to call this API");
374
380
  }
375
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/").concat(this.cart.id, "/details?");
381
+ searchParams = new URLSearchParams({ cartGuid: this.cart.guid });
382
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/details?").concat(searchParams);
376
383
  return [2 /*return*/, this.callGetApi(url).then(function (response) {
377
384
  // Check for errors
378
385
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
@@ -447,6 +454,7 @@ var TplBooking = /** @class */ (function (_super) {
447
454
  throw Error("The status of the cart does not allow to call this API");
448
455
  }
449
456
  request = {
457
+ cartGuid: this.cart.guid,
450
458
  buyer: buyerDetails,
451
459
  passengers: subscriptionPersonCode
452
460
  ? [
@@ -456,7 +464,7 @@ var TplBooking = /** @class */ (function (_super) {
456
464
  ]
457
465
  : []
458
466
  };
459
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/").concat(this.cart.id, "/details");
467
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/details");
460
468
  return [2 /*return*/, this.callPostApi(url, request).then(function (response) {
461
469
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
462
470
  return response;
@@ -679,7 +687,7 @@ var TplBooking = /** @class */ (function (_super) {
679
687
  switch (_c.label) {
680
688
  case 0:
681
689
  // First check that it is possible to call this API
682
- if (!this.cartId || this.cartId === 0) {
690
+ if (!this.cartGuid) {
683
691
  throw Error("Cart is not initialized yet");
684
692
  }
685
693
  discountsStep = this.bookingStepsToStatus.get(booking_1.Booking.BookingSteps.DISCOUNTS);
@@ -707,8 +715,8 @@ var TplBooking = /** @class */ (function (_super) {
707
715
  }
708
716
  _c.label = 5;
709
717
  case 5:
710
- url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/").concat(this.cartId, "/payment/voucher");
711
- return [2 /*return*/, this.callPostApi(url, { voucherCode: voucherCode }).then(function (response) {
718
+ url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/payment/voucher");
719
+ return [2 /*return*/, this.callPostApi(url, { voucherCode: voucherCode, cartGuid: this.cartGuid }).then(function (response) {
712
720
  var _a, _b;
713
721
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(response)) {
714
722
  return response;
@@ -750,8 +758,8 @@ exports.TplBooking = TplBooking;
750
758
  _c.label = 1;
751
759
  case 1:
752
760
  _c.trys.push([1, 4, , 5]);
753
- if (!booking.cartId) return [3 /*break*/, 3];
754
- return [4 /*yield*/, booking.fetchAndSetCart(booking.cartId)];
761
+ if (!booking.cartGuid) return [3 /*break*/, 3];
762
+ return [4 /*yield*/, booking.fetchAndSetCart(booking.cartGuid)];
755
763
  case 2:
756
764
  _c.sent();
757
765
  _c.label = 3;
@@ -761,8 +769,9 @@ exports.TplBooking = TplBooking;
761
769
  // Check if the error is due to an expired cart. In this case, delete the cartId from the mts-storage
762
770
  // This error can occur when the user refreshes the page and the cart has expired
763
771
  if ((0, ErrorResponse_1.objectIsMTSErrorResponse)(error_1) && error_1.mtsCode === 40053) {
764
- booking.getStorage().getState().updateCartId(undefined);
772
+ booking.getStorage().getState().updateCartId(undefined, undefined);
765
773
  booking.cartId = undefined;
774
+ booking.cartGuid = undefined;
766
775
  return [2 /*return*/, booking];
767
776
  }
768
777
  throw new Error("Could not instantiate TplBooking");
@@ -1,8 +1,10 @@
1
1
  type MtsBookingState = {
2
+ /** @deprecated Please use {@link MtsBookingState.cartGuid} instead, where possible */
2
3
  cartId: number | undefined;
4
+ cartGuid: string | undefined;
3
5
  };
4
6
  type MtsBookingAction = {
5
- updateCartId: (cartId: MtsBookingState["cartId"]) => void;
7
+ updateCartId: (cartId: MtsBookingState["cartId"], cartGuid: MtsBookingState["cartGuid"]) => void;
6
8
  resetState: () => void;
7
9
  };
8
10
  export declare const useMtsBookingLocalState: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<MtsBookingState & MtsBookingAction>, "persist"> & {
package/lib/mtsStorage.js CHANGED
@@ -16,13 +16,16 @@ var async_storage_1 = require("@react-native-async-storage/async-storage");
16
16
  var zustand_1 = require("zustand");
17
17
  var middleware_1 = require("zustand/middleware");
18
18
  var INITIAL_STATE = {
19
- cartId: 0
19
+ cartId: 0,
20
+ cartGuid: undefined
20
21
  };
21
22
  var useMtsBookingAsyncState = (0, zustand_1.create)((0, middleware_1.persist)(function (set) { return (__assign(__assign({}, INITIAL_STATE), { updateCartId: function (cartId) { return set(function () { return ({ cartId: cartId }); }); }, resetState: function () { return set(function () { return INITIAL_STATE; }); } })); }, {
22
23
  name: "mts-booking-storage",
23
24
  storage: (0, middleware_1.createJSONStorage)(function () { return async_storage_1.default; })
24
25
  }));
25
- exports.useMtsBookingLocalState = (0, zustand_1.create)((0, middleware_1.persist)(function (set) { return (__assign(__assign({}, INITIAL_STATE), { updateCartId: function (cartId) { return set(function () { return ({ cartId: cartId }); }); }, resetState: function () { return set(function () { return INITIAL_STATE; }); } })); }, {
26
+ exports.useMtsBookingLocalState = (0, zustand_1.create)((0, middleware_1.persist)(function (set) { return (__assign(__assign({}, INITIAL_STATE), { updateCartId: function (cartId, cartGuid) {
27
+ return set(function () { return ({ cartId: cartId, cartGuid: cartGuid }); });
28
+ }, resetState: function () { return set(function () { return INITIAL_STATE; }); } })); }, {
26
29
  name: "mts-booking-storage",
27
30
  storage: (0, middleware_1.createJSONStorage)(function () { return localStorage; })
28
31
  }));
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,79 @@
1
+ import { Booking } from "..";
2
+ import { Person } from "./Person";
3
+ import { TariffMatrix } from "./TermsAndTariffs";
4
+ export type Cart = {
5
+ id: number;
6
+ cartCode: string;
7
+ status: Booking.CartStatus;
8
+ nextStatus: Booking.CartStatus;
9
+ currency: string;
10
+ bookingDueDate: string;
11
+ bookings: {
12
+ type: string;
13
+ summary: {
14
+ quantity: number;
15
+ label: string;
16
+ value: number;
17
+ }[];
18
+ }[];
19
+ info: {
20
+ stops: {
21
+ id: number;
22
+ departureTime: Date;
23
+ destinationTime: Date;
24
+ name: string;
25
+ address: string;
26
+ }[];
27
+ };
28
+ buyer: Person;
29
+ reductions: {
30
+ tripId: number;
31
+ tripName: string;
32
+ value: number;
33
+ isPercentage: boolean;
34
+ voucherCode?: string;
35
+ }[];
36
+ isSeatsSelectionAllowed: boolean;
37
+ sellingMethod: string;
38
+ totalValue: number;
39
+ totalResellerFee?: number;
40
+ totalCreditFromChange: number;
41
+ totalAmountToPay: number;
42
+ extas: {
43
+ id: number;
44
+ resourceId: number;
45
+ name: string;
46
+ description: string;
47
+ notes: string;
48
+ tariff: {
49
+ tariffId: number;
50
+ tariffName: string;
51
+ };
52
+ }[];
53
+ };
54
+ export type TourCart = {
55
+ cartId?: number;
56
+ currency: Booking.Currencies;
57
+ tour: {
58
+ tourId: number;
59
+ date?: Date;
60
+ tripId?: number;
61
+ tariffsMatrix: TariffMatrix;
62
+ };
63
+ };
64
+ export type JourneyCart = {
65
+ cartId?: number;
66
+ currency: Booking.Currencies;
67
+ outboundJourney: {
68
+ departureStopId: number;
69
+ destinationStopId: number;
70
+ tripId: number;
71
+ tariffsMatrix: TariffMatrix;
72
+ }[];
73
+ returnJourney: {
74
+ tripId: number;
75
+ departureStopId: number;
76
+ destinationStopId: number;
77
+ tariffsMatrix: TariffMatrix;
78
+ }[] | null;
79
+ };
@@ -0,0 +1,9 @@
1
+ import { Person } from "./Person";
2
+ export type Details = {
3
+ passengers: Person[] & {
4
+ tripsToTariffs: {
5
+ [tripId: number]: number;
6
+ };
7
+ };
8
+ buyer: Person;
9
+ };
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.objectIsMTSErrorResponse = void 0;
4
4
  var objectIsMTSErrorResponse = function (error) {
5
- return (typeof error === "object" && "mtsCode" in error && "httpStatus" in error && "message" in error);
5
+ if (typeof error !== "object" || error === null) {
6
+ return false;
7
+ }
8
+ return "mtsCode" in error && "httpStatus" in error && "message" in error;
6
9
  };
7
10
  exports.objectIsMTSErrorResponse = objectIsMTSErrorResponse;
@@ -0,0 +1,7 @@
1
+ export type Info = {
2
+ sellerName: string;
3
+ minimumTotalPrice: string;
4
+ remainingSeats?: number;
5
+ bookingProcessMessage: string;
6
+ isBookable: boolean;
7
+ };
@@ -0,0 +1,8 @@
1
+ import { Stop } from "./Stop";
2
+ import { Info } from "../Info";
3
+ import { Trip } from "./Trip";
4
+ export type Journey = {
5
+ stops: Stop[];
6
+ info: Info;
7
+ trips: Trip[];
8
+ };
@@ -0,0 +1,6 @@
1
+ export type Line = {
2
+ id: number;
3
+ name: string;
4
+ linkavelDescription: string;
5
+ backofficeNotes: string;
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });