mts-booking-library 2.4.1 → 2.4.2

Sign up to get free protection for your applications and to get access to all the features.
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
  }