mts-booking-library 2.4.1 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
File without changes
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ // import { MTSEnvs } from "../config";
3
+ // import { ServiceBooking } from "../booking/serviceBooking";
4
+ // import { CreateServiceCartRequest, ServiceCart } from "../types/services/ServiceCart";
5
+ // import { Service, ServiceTripsResponse } from "../types/services/Service";
6
+ // import { GetBuyerPassengersDetailsResponse } from "../types/common/Person";
7
+ // import { GetPaymentInformationFromGatewayResponse, GetSellerGatewaysResponse, PaymentMethods } from "../types/common/Payment";
8
+ // import { useTestState } from "../mtsStorage";
9
+ // import { SubscriptionBooking } from "../booking/subscriptionBooking";
10
+ // // Load .env file
11
+ // require('dotenv').config();
12
+ // // How to run the test: npm run test -- SubscriptionBooking.test.ts
13
+ // describe("SubscriptionBooking", () => {
14
+ // const timeOut = 120000;
15
+ // const sub_key = process.env.OCP_SUB_KEY_MTS;
16
+ // const access_token = process.env.ACCESS_TOKEN;
17
+ // const sellerId = 8; // ATV
18
+ // // Define localStorage for local testing
19
+ // if (typeof localStorage === "undefined" || localStorage === null) {
20
+ // var LocalStorage = require("node-localstorage").LocalStorage;
21
+ // global.localStorage = new LocalStorage("./scratch");
22
+ // }
23
+ // test("search_tpl", async () => {
24
+ // const booking = new SubscriptionBooking(MTSEnvs.TEST, sub_key!, true, SubscriptionBooking.Languages.EN, access_token, sellerId);
25
+ // // First, get the departures and destinations
26
+ // const departures = await booking.getSubscriptionsDepartures() as string[];
27
+ // expect(departures.length).toBeGreaterThan(0);
28
+ // expect(departures).toContain("BARDOLINO AUTOSTAZIONE");
29
+ // const selectedDeparture = "BARDOLINO AUTOSTAZIONE";
30
+ // const destinations = await booking.getSubscriptionsDestinations(selectedDeparture) as string[];
31
+ // expect(destinations.length).toBeGreaterThan(0);
32
+ // expect(destinations).toContain("GARDA AUTOSTAZIONE");
33
+ // const selectedDestination = "GARDA AUTOSTAZIONE";
34
+ // // Then get the validity types
35
+ // const validityTypes = await booking.getSubscriptionsValidityTypes(selectedDeparture, selectedDestination) as SubscriptionBooking.ValidityTypes[];
36
+ // expect(validityTypes.length).toBeGreaterThan(0);
37
+ // for (const validityType of validityTypes) {
38
+ // // Check that all returned validity types are valid
39
+ // expect(Object.values(SubscriptionBooking.ValidityTypes).includes(validityType)).toBe(true);
40
+ // }
41
+ // }, timeOut);
42
+ // const createCart = async (booking: ServiceBooking): Promise<ServiceCart> => {
43
+ // const servicesResponse = await booking.getServices(ServiceBooking.Currencies.EUR);
44
+ // const services = servicesResponse as Service[];
45
+ // // Build create cart request
46
+ // let tariffsMatrix = services[0].tariffsMatrix;
47
+ // tariffsMatrix[0][0].quantity = 1;
48
+ // const createServiceCartRequest: CreateServiceCartRequest = {
49
+ // currency: ServiceBooking.Currencies.EUR,
50
+ // service: {
51
+ // serviceId: services[0].id,
52
+ // tariffsMatrix: tariffsMatrix
53
+ // }
54
+ // };
55
+ // // Create cart
56
+ // const cart = await booking.createServiceCart(createServiceCartRequest) as ServiceCart;
57
+ // return cart;
58
+ // }
59
+ // test("create_service_cart", async () => {
60
+ // const booking = new ServiceBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
61
+ // const cart = await createCart(booking);
62
+ // // Check that the cartId was saved to the local storage
63
+ // expect(useTestState().getState().cartId).toBe(cart.id);
64
+ // expect(booking.cartId).toBe(cart.id);
65
+ // // Test the booking status (we test only the Buyer and passenger data, as it will always be required)
66
+ // expect(booking.bookingStepsToStatus.get(ServiceBooking.BookingSteps.BUYER_PASSENGERS)).toStrictEqual([ true, false, true ]);
67
+ // expect(booking.bookingStepsToStatus.get(ServiceBooking.BookingSteps.ISSUE)).toStrictEqual([ false, false, true ]);
68
+ // // Test booking due date
69
+ // expect(booking.bookingDueDate?.toISOString()).toBe(new Date(cart.bookingDueDate).toISOString());
70
+ // // Test expired tickets
71
+ // expect(cart.hasIssuedTickets).toBe(false);
72
+ // // Test seller data
73
+ // expect(booking.getSellerId()).toBe(cart.sellerId);
74
+ // expect(cart.sellerPrivacyUrl.length).toBeGreaterThan(0);
75
+ // expect(cart.sellerTermsUrl.length).toBeGreaterThan(0);
76
+ // // Now try to get the cart
77
+ // const newBooking = await ServiceBooking.createBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
78
+ // expect(newBooking.cartId).toBe(cart.id);
79
+ // expect(newBooking.getCart()?.id).toBe(cart.id)
80
+ // expect(newBooking.getSellerId()).toBe(cart.sellerId);
81
+ // // Finally try to delete the cart
82
+ // await booking.deleteCart();
83
+ // expect(booking.getCart()).toBe(undefined);
84
+ // expect(useTestState().getState().cartId).toBe(undefined);
85
+ // }, timeOut);
86
+ // test("get_edit_buyer_data", async () => {
87
+ // const booking = new ServiceBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
88
+ // const cart = await createCart(booking);
89
+ // // First, try to get the buyer data
90
+ // let buyerDataResponse = await booking.getBuyerPassengersDetails();
91
+ // expect((buyerDataResponse as GetBuyerPassengersDetailsResponse).passengers.length).toBe(0);
92
+ // let buyer = (buyerDataResponse as GetBuyerPassengersDetailsResponse).buyer;
93
+ // expect(buyer).toBe(null);
94
+ // // Now try to edit the buyer data
95
+ // buyer = {
96
+ // id: 0,
97
+ // name: "TestName",
98
+ // lastName: "TestSurname",
99
+ // email: "testBookingLib@infos.it",
100
+ // phoneNumber: "+391234567890"
101
+ // }
102
+ // await booking.updateBuyerPassengersDetails(buyer);
103
+ // // Finally, get the buyer data again and check that the data was updated
104
+ // buyerDataResponse = await booking.getBuyerPassengersDetails();
105
+ // const updatedBuyer = (buyerDataResponse as GetBuyerPassengersDetailsResponse).buyer;
106
+ // expect(updatedBuyer.id).toBeGreaterThan(0);
107
+ // expect(updatedBuyer.name).toBe(buyer.name);
108
+ // expect(updatedBuyer.lastName).toBe(buyer.lastName);
109
+ // expect(updatedBuyer.email).toBe(buyer.email);
110
+ // expect(updatedBuyer.phoneNumber).toBe(buyer.phoneNumber);
111
+ // // Finally try to delete the cart
112
+ // await booking.deleteCart();
113
+ // expect(booking.getCart()).toBe(undefined);
114
+ // expect(useTestState().getState().cartId).toBe(undefined);
115
+ // }, timeOut);
116
+ // test("get_gateway_info", async () => {
117
+ // const booking = new ServiceBooking(MTSEnvs.TEST, sub_key!, true, ServiceBooking.Languages.EN);
118
+ // const cart = await createCart(booking);
119
+ // booking.updateSellerId(cart.sellerId);
120
+ // // First, try to get the buyer data
121
+ // let buyerDataResponse = await booking.getBuyerPassengersDetails();
122
+ // expect((buyerDataResponse as GetBuyerPassengersDetailsResponse).passengers.length).toBe(0);
123
+ // let buyer = (buyerDataResponse as GetBuyerPassengersDetailsResponse).buyer;
124
+ // expect(buyer).toBe(null);
125
+ // // Now try to edit the buyer data
126
+ // buyer = {
127
+ // id: 0,
128
+ // name: "TestName",
129
+ // lastName: "TestSurname",
130
+ // email: "testBookingLib@infos.it",
131
+ // phoneNumber: "+391234567890"
132
+ // }
133
+ // await booking.updateBuyerPassengersDetails(buyer);
134
+ // // Try to get the gateways
135
+ // const gateways = await booking.getSellerGateways() as GetSellerGatewaysResponse;
136
+ // if (!gateways.payPalGatewayDTO && !gateways.cardGatewayDTO) {
137
+ // throw new Error("No gateways found");
138
+ // }
139
+ // const gateway = gateways.payPalGatewayDTO ? gateways.payPalGatewayDTO : gateways.cardGatewayDTO;
140
+ // expect(gateway?.id).toBeGreaterThan(0);
141
+ // // Now try to get the info
142
+ // const gatewayInfo = await booking.getPaymentInformationFromGateway(gateway?.id ?? 0) as GetPaymentInformationFromGatewayResponse;
143
+ // // Finally try to delete the cart
144
+ // await booking.deleteCart();
145
+ // expect(booking.getCart()).toBe(undefined);
146
+ // expect(useTestState().getState().cartId).toBe(undefined);
147
+ // }, timeOut);
148
+ // });
@@ -84,11 +84,12 @@ export declare abstract class Booking {
84
84
  getPaymentInformationFromGateway(gatewayId: number, returnUrl?: string, options?: ApiCallOptions): Promise<ErrorResponse | GetPaymentInformationFromGatewayResponse>;
85
85
  /**
86
86
  * @description This method shall be used to issue the tickets. It must be called after the payment was successful.
87
- * @param {PaymentMethods} paymentMethod The payment method used to pay the cart. If the chosen method is {@link PaymentMethods.ZERO_COST},
87
+ * @param paymentMethod The payment method used to pay the cart. If the chosen method is {@link PaymentMethods.ZERO_COST},
88
88
  * first the {@link Booking.addReduction} API is called with a 100% discount, then tickets are issued with the {@link PaymentMethods.CASH} method.
89
+ * @param tripId The Id of the trip for which the tickets are issued. This parameter is required when the booking done on the MTSAPP
89
90
  * @returns An {@link IssueCartResponse} object.
90
91
  */
91
- issueCart(paymentMethod: PaymentMethods, options?: ApiCallOptions): Promise<ErrorResponse | IssueCartResponse>;
92
+ issueCart(paymentMethod: PaymentMethods, tripId?: number, options?: ApiCallOptions): Promise<ErrorResponse | IssueCartResponse>;
92
93
  getExtras({ extraId, tariffPlanId }?: {
93
94
  /** The extra object identifier. By default, all the extras of the seller are returned. */
94
95
  extraId?: number;
@@ -313,11 +313,12 @@ var Booking = /** @class */ (function () {
313
313
  };
314
314
  /**
315
315
  * @description This method shall be used to issue the tickets. It must be called after the payment was successful.
316
- * @param {PaymentMethods} paymentMethod The payment method used to pay the cart. If the chosen method is {@link PaymentMethods.ZERO_COST},
316
+ * @param paymentMethod The payment method used to pay the cart. If the chosen method is {@link PaymentMethods.ZERO_COST},
317
317
  * first the {@link Booking.addReduction} API is called with a 100% discount, then tickets are issued with the {@link PaymentMethods.CASH} method.
318
+ * @param tripId The Id of the trip for which the tickets are issued. This parameter is required when the booking done on the MTSAPP
318
319
  * @returns An {@link IssueCartResponse} object.
319
320
  */
320
- Booking.prototype.issueCart = function (paymentMethod, options) {
321
+ Booking.prototype.issueCart = function (paymentMethod, tripId, options) {
321
322
  return __awaiter(this, void 0, void 0, function () {
322
323
  var paymentMethodToSet, issueStep, _i, _a, step, url, body;
323
324
  var _b;
@@ -373,10 +374,7 @@ var Booking = /** @class */ (function () {
373
374
  _c.label = 7;
374
375
  case 7:
375
376
  url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/issue");
376
- body = {
377
- cartGuid: this.cartGuid,
378
- paymentMethod: paymentMethodToSet === Payment_1.PaymentMethods.PAY_LATER ? null : paymentMethodToSet
379
- };
377
+ body = __assign(__assign({ cartGuid: this.cartGuid }, (tripId && { tripId: tripId })), { paymentMethod: paymentMethodToSet === Payment_1.PaymentMethods.PAY_LATER ? null : paymentMethodToSet });
380
378
  return [2 /*return*/, this.callPostApi(url, body, options).then(function (response) {
381
379
  return (0, ErrorResponse_1.objectIsMTSErrorResponse)(response) ? response : response;
382
380
  })];
@@ -815,7 +815,7 @@ exports.JourneyBooking = JourneyBooking;
815
815
  (function (JourneyBooking) {
816
816
  var _this = this;
817
817
  JourneyBooking.createBooking = function (_a) { return __awaiter(_this, [_a], void 0, function (_b) {
818
- var booking, error_1;
818
+ var booking, error_1, errorString;
819
819
  var env = _b.env, subKey = _b.subKey, debug = _b.debug, language = _b.language, sessionId = _b.sessionId, restoreState = _b.restoreState, accessToken = _b.accessToken, sellerId = _b.sellerId, resellerId = _b.resellerId, appVersion = _b.appVersion, os = _b.os, dbType = _b.dbType;
820
820
  return __generator(this, function (_c) {
821
821
  switch (_c.label) {
@@ -852,7 +852,22 @@ exports.JourneyBooking = JourneyBooking;
852
852
  booking.cartGuid = undefined;
853
853
  return [2 /*return*/, booking];
854
854
  }
855
- throw new Error("Could not instantiate JourneyBooking");
855
+ errorString = void 0;
856
+ if (typeof error_1 === "string") {
857
+ errorString = error_1;
858
+ }
859
+ else if (typeof error_1 === "object") {
860
+ try {
861
+ errorString = JSON.stringify(error_1);
862
+ }
863
+ catch (_d) {
864
+ errorString = String(error_1);
865
+ }
866
+ }
867
+ else {
868
+ errorString = String(error_1);
869
+ }
870
+ throw new Error("Could not instantiate JourneyBooking. Error: ".concat(errorString));
856
871
  case 5: return [2 /*return*/];
857
872
  }
858
873
  });
@@ -677,7 +677,7 @@ exports.ServiceBooking = ServiceBooking;
677
677
  (function (ServiceBooking) {
678
678
  var _this = this;
679
679
  ServiceBooking.createBooking = function (_a) { return __awaiter(_this, [_a], void 0, function (_b) {
680
- var booking, error_1;
680
+ var booking, error_1, errorString;
681
681
  var env = _b.env, subKey = _b.subKey, debug = _b.debug, language = _b.language, sessionId = _b.sessionId, restoreState = _b.restoreState, accessToken = _b.accessToken, sellerId = _b.sellerId, resellerId = _b.resellerId, appVersion = _b.appVersion, os = _b.os, dbType = _b.dbType;
682
682
  return __generator(this, function (_c) {
683
683
  switch (_c.label) {
@@ -714,7 +714,22 @@ exports.ServiceBooking = ServiceBooking;
714
714
  booking.cartGuid = undefined;
715
715
  return [2 /*return*/, booking];
716
716
  }
717
- throw new Error("Could not instantiate JourneyBooking");
717
+ errorString = void 0;
718
+ if (typeof error_1 === "string") {
719
+ errorString = error_1;
720
+ }
721
+ else if (typeof error_1 === "object") {
722
+ try {
723
+ errorString = JSON.stringify(error_1);
724
+ }
725
+ catch (_d) {
726
+ errorString = String(error_1);
727
+ }
728
+ }
729
+ else {
730
+ errorString = String(error_1);
731
+ }
732
+ throw new Error("Could not instantiate ServiceBooking. Error: ".concat(errorString));
718
733
  case 5: return [2 /*return*/];
719
734
  }
720
735
  });
@@ -727,7 +727,7 @@ exports.SubscriptionBooking = SubscriptionBooking;
727
727
  (function (SubscriptionBooking) {
728
728
  var _this = this;
729
729
  SubscriptionBooking.createBooking = function (_a) { return __awaiter(_this, [_a], void 0, function (_b) {
730
- var booking, error_1;
730
+ var booking, error_1, errorString;
731
731
  var env = _b.env, subKey = _b.subKey, debug = _b.debug, language = _b.language, sessionId = _b.sessionId, restoreState = _b.restoreState, accessToken = _b.accessToken, sellerId = _b.sellerId, resellerId = _b.resellerId, appVersion = _b.appVersion, os = _b.os, dbType = _b.dbType;
732
732
  return __generator(this, function (_c) {
733
733
  switch (_c.label) {
@@ -764,7 +764,22 @@ exports.SubscriptionBooking = SubscriptionBooking;
764
764
  booking.cartGuid = undefined;
765
765
  return [2 /*return*/, booking];
766
766
  }
767
- throw new Error("Could not instantiate JourneyBooking");
767
+ errorString = void 0;
768
+ if (typeof error_1 === "string") {
769
+ errorString = error_1;
770
+ }
771
+ else if (typeof error_1 === "object") {
772
+ try {
773
+ errorString = JSON.stringify(error_1);
774
+ }
775
+ catch (_d) {
776
+ errorString = String(error_1);
777
+ }
778
+ }
779
+ else {
780
+ errorString = String(error_1);
781
+ }
782
+ throw new Error("Could not instantiate SubscriptionsBooking. Error: ".concat(errorString));
768
783
  case 5: return [2 /*return*/];
769
784
  }
770
785
  });
@@ -742,7 +742,7 @@ exports.TplBooking = TplBooking;
742
742
  (function (TplBooking) {
743
743
  var _this = this;
744
744
  TplBooking.createBooking = function (_a) { return __awaiter(_this, [_a], void 0, function (_b) {
745
- var booking, error_1;
745
+ var booking, error_1, errorString;
746
746
  var env = _b.env, subKey = _b.subKey, debug = _b.debug, language = _b.language, sessionId = _b.sessionId, restoreState = _b.restoreState, accessToken = _b.accessToken, sellerId = _b.sellerId, resellerId = _b.resellerId, appVersion = _b.appVersion, os = _b.os, dbType = _b.dbType;
747
747
  return __generator(this, function (_c) {
748
748
  switch (_c.label) {
@@ -779,7 +779,22 @@ exports.TplBooking = TplBooking;
779
779
  booking.cartGuid = undefined;
780
780
  return [2 /*return*/, booking];
781
781
  }
782
- throw new Error("Could not instantiate TplBooking");
782
+ errorString = void 0;
783
+ if (typeof error_1 === "string") {
784
+ errorString = error_1;
785
+ }
786
+ else if (typeof error_1 === "object") {
787
+ try {
788
+ errorString = JSON.stringify(error_1);
789
+ }
790
+ catch (_d) {
791
+ errorString = String(error_1);
792
+ }
793
+ }
794
+ else {
795
+ errorString = String(error_1);
796
+ }
797
+ throw new Error("Could not instantiate TplBooking. Error: ".concat(errorString));
783
798
  case 5: return [2 /*return*/];
784
799
  }
785
800
  });
@@ -0,0 +1,8 @@
1
+ /**
2
+ * This method return the ISO string of the date without GMT. An ISO string looks like this: YYYY-MM-DDThh:mm:ss.mmmZ
3
+ * @param {Date | string} date the date to convert
4
+ * @param {boolean} [removeTimezone=true] if true, the timezone will be removed from the ISO string, meaning
5
+ * that the string will look like this: YYYY-MM-DDThh:mm:ss.mmm
6
+ * @returns {string} the ISO string
7
+ */
8
+ export declare const getISOStringWithoutGMT: (date: Date | string | null | undefined, removeTimezone?: boolean) => string | null;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getISOStringWithoutGMT = void 0;
4
+ /**
5
+ * This method return the ISO string of the date without GMT. An ISO string looks like this: YYYY-MM-DDThh:mm:ss.mmmZ
6
+ * @param {Date | string} date the date to convert
7
+ * @param {boolean} [removeTimezone=true] if true, the timezone will be removed from the ISO string, meaning
8
+ * that the string will look like this: YYYY-MM-DDThh:mm:ss.mmm
9
+ * @returns {string} the ISO string
10
+ */
11
+ var getISOStringWithoutGMT = function (date, removeTimezone) {
12
+ if (removeTimezone === void 0) { removeTimezone = true; }
13
+ if (!date)
14
+ return null;
15
+ var newDate = new Date(date);
16
+ var isoString = new Date(newDate.valueOf() - newDate.getTimezoneOffset() * 60000).toISOString();
17
+ return removeTimezone ? isoString.slice(0, -1) : isoString;
18
+ };
19
+ exports.getISOStringWithoutGMT = getISOStringWithoutGMT;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mts-booking-library",
3
- "version": "2.4.1",
3
+ "version": "2.4.2",
4
4
  "description": "Library for using MyTicketSolution Booking API",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -17,10 +17,10 @@
17
17
  "license": "ISC",
18
18
  "devDependencies": {
19
19
  "@types/jest": "^29.5.14",
20
- "dotenv": "^16.4.5",
20
+ "dotenv": "^16.4.7",
21
21
  "jest": "^29.7.0",
22
22
  "node-localstorage": "^3.0.5",
23
- "prettier": "^3.3.3",
23
+ "prettier": "^3.4.2",
24
24
  "ts-jest": "^29.2.5",
25
25
  "typescript": "^5.7.2"
26
26
  },
@@ -34,7 +34,7 @@
34
34
  "author": "Infoservice s.r.l.",
35
35
  "dependencies": {
36
36
  "@react-native-async-storage/async-storage": "^2.1.0",
37
- "axios": "^1.7.7",
37
+ "axios": "^1.7.9",
38
38
  "zustand": "^4.5.5"
39
39
  }
40
40
  }