mts-booking-library 2.4.4 → 2.4.6
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.
- package/README.md +17 -1
- package/lib/booking/serviceBooking.d.ts +1 -1
- package/lib/booking/serviceBooking.js +3 -2
- package/lib/types/common/Person.d.ts +9 -0
- package/lib/types/common/Tariffs.d.ts +1 -1
- package/lib/types/tpl/TplCart.d.ts +2 -0
- package/lib/utils/apiCall.js +1 -0
- package/package.json +17 -8
- package/lib/SubscriptionBooking.d.ts +0 -0
- package/lib/SubscriptionBooking.js +0 -148
- package/lib/utils/testUtils.d.ts +0 -8
- package/lib/utils/testUtils.js +0 -19
package/README.md
CHANGED
@@ -1,8 +1,24 @@
|
|
1
1
|
# Publish
|
2
|
+
|
2
3
|
1. `npm i`
|
3
4
|
1. `npm version patch`
|
4
5
|
1. `git push && git push --tags`
|
5
6
|
1. `npm publish`
|
6
7
|
|
7
8
|
# Test
|
8
|
-
|
9
|
+
|
10
|
+
1. `npm install && npm run test`
|
11
|
+
|
12
|
+
# Linting
|
13
|
+
|
14
|
+
### `npm run lint`
|
15
|
+
|
16
|
+
Will run ESLint on the project.
|
17
|
+
|
18
|
+
### `npm run lint:quiet`
|
19
|
+
|
20
|
+
Will run ESLint on the project, but will ignore warnings.
|
21
|
+
|
22
|
+
### `npm run lint:fix`
|
23
|
+
|
24
|
+
Will run ESLint on the project, fixing the errors that can be fixed automatically.
|
@@ -110,7 +110,7 @@ export declare class ServiceBooking extends Booking {
|
|
110
110
|
* It should be null if the buyer data cannot be specified (see {@link GetBuyerPassengersDetailsResponse.buyerDataStatus}).
|
111
111
|
* @returns An {@link ErrorResponse} object in case of error, true otherwise.
|
112
112
|
*/
|
113
|
-
updateBuyerPassengersDetails(buyerDetails: PersonDetails | null, options?: ApiCallOptions): Promise<ErrorResponse | boolean>;
|
113
|
+
updateBuyerPassengersDetails(buyerDetails: PersonDetails | null, noSSN?: boolean, options?: ApiCallOptions): Promise<ErrorResponse | boolean>;
|
114
114
|
/**
|
115
115
|
* @description This method allows to add a reduction to the whole cart or to a single trip in the cart.
|
116
116
|
* @param request The information about the reduction to add
|
@@ -385,7 +385,7 @@ var ServiceBooking = /** @class */ (function (_super) {
|
|
385
385
|
* It should be null if the buyer data cannot be specified (see {@link GetBuyerPassengersDetailsResponse.buyerDataStatus}).
|
386
386
|
* @returns An {@link ErrorResponse} object in case of error, true otherwise.
|
387
387
|
*/
|
388
|
-
ServiceBooking.prototype.updateBuyerPassengersDetails = function (buyerDetails, options) {
|
388
|
+
ServiceBooking.prototype.updateBuyerPassengersDetails = function (buyerDetails, noSSN, options) {
|
389
389
|
return __awaiter(this, void 0, void 0, function () {
|
390
390
|
var buyerPassengersDetails, request, url;
|
391
391
|
var _this = this;
|
@@ -401,7 +401,8 @@ var ServiceBooking = /** @class */ (function (_super) {
|
|
401
401
|
request = {
|
402
402
|
cartGuid: this.cart.guid,
|
403
403
|
buyer: buyerDetails,
|
404
|
-
passengers: []
|
404
|
+
passengers: [],
|
405
|
+
noSSN: noSSN !== null && noSSN !== void 0 ? noSSN : false
|
405
406
|
};
|
406
407
|
url = "".concat(this.config.API_ENDPOINT, "/v3_booking/carts/details");
|
407
408
|
return [2 /*return*/, this.callPostApi(url, request, options).then(function (response) {
|
@@ -21,6 +21,8 @@ export type Person = {
|
|
21
21
|
export type PersonDetails = Person & {
|
22
22
|
/** The social security number of the buyer, if provided. */
|
23
23
|
socialSecurityNumber: string | null;
|
24
|
+
/** Whether the person has opposed to tax deduction. */
|
25
|
+
noSSN: boolean;
|
24
26
|
};
|
25
27
|
export declare const DEFAULT_PERSON: Person;
|
26
28
|
export declare const initializePerson: (person?: Person | undefined | null) => Person;
|
@@ -91,6 +93,8 @@ export type GetBuyerPassengersDetailsResponse = {
|
|
91
93
|
buyerSSNOption: PersonDataFieldStatus;
|
92
94
|
/** An array of {@link GetPassenger} objects representing the passengers. */
|
93
95
|
passengers: GetPassenger[] | null;
|
96
|
+
/** Whether the buyer has opposed to tax deduction for this cart. */
|
97
|
+
noSSN: boolean | null;
|
94
98
|
};
|
95
99
|
/**
|
96
100
|
* @description Represents the type of the passengers array in {@link EditPassengersDetailsRequest}.
|
@@ -114,4 +118,9 @@ export type EditPassengersDetailsRequest = {
|
|
114
118
|
* It should be null if the buyer data cannot be specified (see {@link GetBuyerPassengersDetailsResponse.buyerDataStatus}).
|
115
119
|
*/
|
116
120
|
buyer: PersonDetails | null;
|
121
|
+
/**
|
122
|
+
* Whether the buyer has opposed to tax deduction.
|
123
|
+
* This should be scoped to the cart, and is different from the preference saved for each buyer, which should only act as the default
|
124
|
+
*/
|
125
|
+
noSSN: boolean | null;
|
117
126
|
};
|
@@ -42,7 +42,7 @@ export type Tariff = {
|
|
42
42
|
/**
|
43
43
|
* Whether there can only be this tariff in the cart, meaning that if the user selects this tariff,
|
44
44
|
* it should not be possible to select any other tariff
|
45
|
-
|
45
|
+
*/
|
46
46
|
onlyThisTariffInCart: boolean;
|
47
47
|
/** The custom code for one-way tickets */
|
48
48
|
oneWayCode: string | null;
|
@@ -49,6 +49,8 @@ export type TplBookingType = {
|
|
49
49
|
export type TplBookingInfo = {
|
50
50
|
/** Whether the booking is a subscription or a single ticket. */
|
51
51
|
isSubscription: boolean;
|
52
|
+
/** Only for subscriptions: the PNR of the subscription */
|
53
|
+
subscriptionPNR?: string;
|
52
54
|
/** The id of the super area. */
|
53
55
|
superAreaId: number;
|
54
56
|
/** The validity of the ticket (or of the subscription). */
|
package/lib/utils/apiCall.js
CHANGED
@@ -95,6 +95,7 @@ var makeRequest = function (method, url, data, options) { return __awaiter(void
|
|
95
95
|
if (!requestFunctions[method]) {
|
96
96
|
throw new Error("MTS Library Error! makeRequest: unsupported method ".concat(method));
|
97
97
|
}
|
98
|
+
// eslint-disable-next-line no-async-promise-executor
|
98
99
|
return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
|
99
100
|
var response, filteredResponse, error_1, message, status_1, isAzureMaintenance, resError, resError;
|
100
101
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "mts-booking-library",
|
3
|
-
"version": "2.4.
|
3
|
+
"version": "2.4.6",
|
4
4
|
"description": "Library for using MyTicketSolution Booking API",
|
5
5
|
"main": "lib/index.js",
|
6
6
|
"types": "lib/index.d.ts",
|
@@ -12,17 +12,26 @@
|
|
12
12
|
"prepublishOnly": "npm run test --runInBand",
|
13
13
|
"version": "git add -A src",
|
14
14
|
"postversion": "git push && git push --tags",
|
15
|
+
"lint": "eslint src",
|
16
|
+
"lint:quiet": "npm run lint -- --quiet",
|
17
|
+
"lint:fix": "npm run lint -- --fix",
|
15
18
|
"format": "prettier --write src/**"
|
16
19
|
},
|
17
20
|
"license": "ISC",
|
18
21
|
"devDependencies": {
|
22
|
+
"@eslint/js": "^9.27.0",
|
19
23
|
"@types/jest": "^29.5.14",
|
20
|
-
"
|
24
|
+
"@types/node-localstorage": "^1.3.3",
|
25
|
+
"dotenv": "^16.5.0",
|
26
|
+
"eslint": "^9.27.0",
|
27
|
+
"eslint-config-prettier": "^10.1.5",
|
28
|
+
"globals": "^16.2.0",
|
21
29
|
"jest": "^29.7.0",
|
22
30
|
"node-localstorage": "^3.0.5",
|
23
|
-
"prettier": "^3.
|
24
|
-
"ts-jest": "^29.
|
25
|
-
"typescript": "^5.
|
31
|
+
"prettier": "^3.5.3",
|
32
|
+
"ts-jest": "^29.3.4",
|
33
|
+
"typescript": "^5.8.3",
|
34
|
+
"typescript-eslint": "^8.32.1"
|
26
35
|
},
|
27
36
|
"files": [
|
28
37
|
"lib/**/*"
|
@@ -33,8 +42,8 @@
|
|
33
42
|
],
|
34
43
|
"author": "Infoservice s.r.l.",
|
35
44
|
"dependencies": {
|
36
|
-
"@react-native-async-storage/async-storage": "^2.1.
|
37
|
-
"axios": "^1.
|
38
|
-
"zustand": "^
|
45
|
+
"@react-native-async-storage/async-storage": "^2.1.2",
|
46
|
+
"axios": "^1.9.0",
|
47
|
+
"zustand": "^5.0.5"
|
39
48
|
}
|
40
49
|
}
|
File without changes
|
@@ -1,148 +0,0 @@
|
|
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
|
-
// });
|
package/lib/utils/testUtils.d.ts
DELETED
@@ -1,8 +0,0 @@
|
|
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;
|
package/lib/utils/testUtils.js
DELETED
@@ -1,19 +0,0 @@
|
|
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;
|