btrz-api-client 9.5.0 → 9.7.0
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/lib/client-standalone-min.js +6 -6
- package/lib/client.js +4 -0
- package/lib/endpoints/accounts/ticket-movement-settings.js +76 -11
- package/lib/endpoints/inventory/banorte-terminals.js +181 -0
- package/package.json +1 -1
- package/src/client.js +1 -0
- package/src/endpoints/accounts/ticket-movement-settings.js +76 -11
- package/src/endpoints/inventory/banorte-terminals.js +156 -0
- package/test/all.test.js +1 -0
- package/test/endpoints/accounts/ticket-movement-settings.test.js +31 -1
- package/test/endpoints/inventory/banorte-terminals.test.js +173 -0
package/lib/client.js
CHANGED
|
@@ -183,6 +183,10 @@ function createInventory({
|
|
|
183
183
|
client,
|
|
184
184
|
internalAuthTokenProvider
|
|
185
185
|
}),
|
|
186
|
+
banorteTerminals: require("./endpoints/inventory/banorte-terminals.js")({
|
|
187
|
+
client,
|
|
188
|
+
internalAuthTokenProvider
|
|
189
|
+
}),
|
|
186
190
|
getnetTerminals: require("./endpoints/inventory/getnet-terminals.js")({
|
|
187
191
|
client,
|
|
188
192
|
internalAuthTokenProvider
|
|
@@ -2,6 +2,78 @@ const {
|
|
|
2
2
|
authorizationHeaders
|
|
3
3
|
} = require("./../endpoints_helpers.js");
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {Object} AmenityGroupTransition
|
|
7
|
+
* @property {string} from - Original ticket amenity group id.
|
|
8
|
+
* @property {string} to - Destination amenity group id.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {Object} AmenityGroupTransitionsSettings
|
|
13
|
+
* @property {boolean} allowAny - When true, any transition is allowed.
|
|
14
|
+
* @property {AmenityGroupTransition[] | null} allowedTransitions - Allowed transition pairs when allowAny is false.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {Object} OriginalTripRestrictions
|
|
19
|
+
* @property {number} cutoffMinutes - Minutes before/after the selected reference point.
|
|
20
|
+
* @property {"original_passenger_departure_time" | "original_schedule_departure_time"} referencePoint - Restriction reference point.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {Object} NewTripRestrictions
|
|
25
|
+
* @property {number} lowerBoundCutoffMinutes - Lower bound for move eligibility in minutes.
|
|
26
|
+
* @property {"original_passenger_departure_time"} lowerBoundReferencePoint - Lower bound reference point.
|
|
27
|
+
* @property {number} upperBoundCutoffMinutes - Upper bound for move eligibility in minutes.
|
|
28
|
+
* @property {"original_passenger_departure_time"} upperBoundReferencePoint - Upper bound reference point.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @typedef {Object} TimeRestrictionsSettings
|
|
33
|
+
* @property {OriginalTripRestrictions} originalTripRestrictions - Restrictions applied to the original trip.
|
|
34
|
+
* @property {NewTripRestrictions} newTripRestrictions - Restrictions applied to the destination trip.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Ticket movement settings payload used by the accounts API.
|
|
39
|
+
* @typedef {Object} TicketMovementSettings
|
|
40
|
+
* @property {boolean} preventMovementsAfterManifestHasBeenPrinted - Prevent moves after printing manifests.
|
|
41
|
+
* @property {boolean} preventSeatmapOptimizationMovementsWithDifferentSeatClassOrFees - Block optimization moves changing class/fees.
|
|
42
|
+
* @property {boolean} preventMovementsWhenOriginalManifestIsBoarding - Prevent moves when original manifest is boarding.
|
|
43
|
+
* @property {null | "passengers_board_at_any_station" | "passengers_board_at_ticket_departure_station"} originalManifestIsBoardingWhen - Rule to determine original manifest boarding state.
|
|
44
|
+
* @property {boolean} preventMovementsWhenDestinationManifestIsBoarding - Prevent moves when destination manifest is boarding.
|
|
45
|
+
* @property {null | "passengers_board_at_any_station" | "passengers_board_at_ticket_departure_station"} destinationManifestIsBoardingWhen - Rule to determine destination manifest boarding state.
|
|
46
|
+
* @property {boolean} preventMovedTicketsFromBeingChanged - Block changing tickets after movement.
|
|
47
|
+
* @property {boolean} preventMovedTicketsFromBeingCancelled - Block cancelling tickets after movement.
|
|
48
|
+
* @property {boolean} preventMovementsWhenFareSpecificCapacityLimitsAreExceeded - Prevent moves when fare capacity is exceeded.
|
|
49
|
+
* @property {boolean} sendSMSNotifications - Enable SMS notifications for ticket movements.
|
|
50
|
+
* @property {boolean} [allowSendingEmailNotification] - Enable email notifications for ticket movements.
|
|
51
|
+
* @property {boolean} [useConfirmationRecipientForNotifications] - Send notifications to the confirmation recipient.
|
|
52
|
+
* @property {number} maxMovementsPerTicket - Maximum ticket movements without authorization.
|
|
53
|
+
* @property {number} [maxMovementsPerTicketWithAuthorization] - Maximum ticket movements with authorization.
|
|
54
|
+
* @property {AmenityGroupTransitionsSettings} amenityGroupTransitions - Allowed amenity group transitions.
|
|
55
|
+
* @property {TimeRestrictionsSettings} timeRestrictions - Time restriction rules.
|
|
56
|
+
* @property {string[]} [allowMovementToManifestsWithStatus] - Allowed destination manifest statuses.
|
|
57
|
+
* @property {string} [singleTicketMoveUIVersion] - Single ticket move UI version preference.
|
|
58
|
+
* @property {boolean} [displayExpiredSchedulesInUIToMove] - Show expired schedules in move UI when true.
|
|
59
|
+
* @property {boolean} [followingSeatBehaviorEnabled] - Enables following-seat behavior for automatic seat movement resolution.
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @typedef {Object} GetTicketMovementSettingsOptions
|
|
64
|
+
* @property {string} [token] - API key.
|
|
65
|
+
* @property {string} [jwtToken] - JWT or internal auth symbol.
|
|
66
|
+
* @property {Object} [headers] - Optional headers.
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @typedef {Object} UpdateTicketMovementSettingsOptions
|
|
71
|
+
* @property {string} [token] - API key.
|
|
72
|
+
* @property {string} [jwtToken] - JWT or internal auth symbol.
|
|
73
|
+
* @property {TicketMovementSettings} ticketMovementSettings - Full settings payload to persist.
|
|
74
|
+
* @property {Object} [headers] - Optional headers.
|
|
75
|
+
*/
|
|
76
|
+
|
|
5
77
|
/**
|
|
6
78
|
* Factory for ticket-movement-settings API (btrz-api-accounts).
|
|
7
79
|
* @param {Object} deps
|
|
@@ -16,11 +88,8 @@ function ticketMovementSettingsFactory({
|
|
|
16
88
|
/**
|
|
17
89
|
* GET /ticket-movement-settings - get ticket movement settings for the account.
|
|
18
90
|
* No query or path parameters. See get-handler getSpec() in btrz-api-accounts for response schema.
|
|
19
|
-
* @param {
|
|
20
|
-
* @
|
|
21
|
-
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
22
|
-
* @param {Object} [opts.headers] - Optional headers
|
|
23
|
-
* @returns {Promise<import("axios").AxiosResponse<Object>>} Response body: ticket movement settings object. Errors: 401, 500
|
|
91
|
+
* @param {GetTicketMovementSettingsOptions} opts
|
|
92
|
+
* @returns {Promise<import("axios").AxiosResponse<TicketMovementSettings>>} Response body: ticket movement settings object. Errors: 401, 500
|
|
24
93
|
*/
|
|
25
94
|
function get({
|
|
26
95
|
token,
|
|
@@ -42,12 +111,8 @@ function ticketMovementSettingsFactory({
|
|
|
42
111
|
* PUT /ticket-movement-settings - update ticket movement settings for the account.
|
|
43
112
|
* Body must include all required fields (see put-handler getSpec() in btrz-api-accounts).
|
|
44
113
|
* Side effect: persists to account.preferences.ticketMovements.
|
|
45
|
-
* @param {
|
|
46
|
-
* @
|
|
47
|
-
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
48
|
-
* @param {Object} opts.ticketMovementSettings - Full settings payload (see put-handler getSpec())
|
|
49
|
-
* @param {Object} [opts.headers] - Optional headers
|
|
50
|
-
* @returns {Promise<import("axios").AxiosResponse<Object>>} Updated settings. Errors: 400, 401, 500
|
|
114
|
+
* @param {UpdateTicketMovementSettingsOptions} opts
|
|
115
|
+
* @returns {Promise<import("axios").AxiosResponse<TicketMovementSettings>>} Updated settings. Errors: 400, 401, 500
|
|
51
116
|
*/
|
|
52
117
|
function update({
|
|
53
118
|
token,
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
const {
|
|
2
|
+
authorizationHeaders
|
|
3
|
+
} = require("../endpoints_helpers.js");
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Query params for GET /banorte-terminals (btrz-api-inventory). See get-handler getSpec().
|
|
7
|
+
* @typedef {Object} BanorteTerminalsQuery
|
|
8
|
+
* @property {number} [page] - The page number to retrieve
|
|
9
|
+
* @property {string} [stationId] - Filter terminals by station (location) ID
|
|
10
|
+
* @property {string} [serialNumber] - Filter terminals by serial number
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Factory for banorte-terminals API (btrz-api-inventory).
|
|
15
|
+
* @param {Object} deps
|
|
16
|
+
* @param {import("axios").AxiosInstance} deps.client
|
|
17
|
+
* @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
|
|
18
|
+
* @returns {{ all: function, get: function, create: function, remove: function, update: function }}
|
|
19
|
+
*/
|
|
20
|
+
function banorteTerminalFactory({
|
|
21
|
+
client,
|
|
22
|
+
internalAuthTokenProvider
|
|
23
|
+
}) {
|
|
24
|
+
/**
|
|
25
|
+
* GET /banorte-terminals - list Banorte terminals (paginated).
|
|
26
|
+
* @param {Object} opts
|
|
27
|
+
* @param {string} [opts.token] - API key
|
|
28
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
29
|
+
* @param {BanorteTerminalsQuery} [opts.query] - Query params (page, stationId, serialNumber)
|
|
30
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
31
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminals: Array, next?: string, previous?: string, count: number }>>}
|
|
32
|
+
* @throws When response is 4xx/5xx (400 INVALID_PAGE, 401, 500)
|
|
33
|
+
*/
|
|
34
|
+
function all({
|
|
35
|
+
token,
|
|
36
|
+
jwtToken,
|
|
37
|
+
query = {},
|
|
38
|
+
headers
|
|
39
|
+
}) {
|
|
40
|
+
return client.get("/banorte-terminals", {
|
|
41
|
+
params: query,
|
|
42
|
+
headers: authorizationHeaders({
|
|
43
|
+
token,
|
|
44
|
+
jwtToken,
|
|
45
|
+
internalAuthTokenProvider,
|
|
46
|
+
headers
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* GET /banorte-terminals/:banorteTerminalId - get a Banorte terminal by id.
|
|
53
|
+
* @param {Object} opts
|
|
54
|
+
* @param {string} [opts.token] - API key
|
|
55
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
56
|
+
* @param {string} opts.banorteTerminalId - Banorte terminal id (24 hex characters)
|
|
57
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
58
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminal: Object }>>}
|
|
59
|
+
* @throws When response is 4xx/5xx (400 INVALID_BANORTE_TERMINAL_ID, 401, 404 BANORTE_TERMINAL_NOT_FOUND, 500)
|
|
60
|
+
*/
|
|
61
|
+
function get({
|
|
62
|
+
banorteTerminalId,
|
|
63
|
+
token,
|
|
64
|
+
jwtToken,
|
|
65
|
+
headers
|
|
66
|
+
}) {
|
|
67
|
+
return client.get(`/banorte-terminals/${banorteTerminalId}`, {
|
|
68
|
+
headers: authorizationHeaders({
|
|
69
|
+
token,
|
|
70
|
+
jwtToken,
|
|
71
|
+
internalAuthTokenProvider,
|
|
72
|
+
headers
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* POST /banorte-terminals - create Banorte terminal.
|
|
79
|
+
* @param {Object} opts
|
|
80
|
+
* @param {string} [opts.token] - API key
|
|
81
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
82
|
+
* @param {Object} opts.banorteTerminal - Banorte terminal payload (name, serialNumber, stationId optional)
|
|
83
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
84
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminal: Object }>>}
|
|
85
|
+
* @throws When response is 4xx/5xx (400 WRONG_DATA/INVALID_STATION_ID/STATION_NOT_FOUND, 401, 409 duplicate serial, 500)
|
|
86
|
+
*/
|
|
87
|
+
function create({
|
|
88
|
+
jwtToken,
|
|
89
|
+
token,
|
|
90
|
+
banorteTerminal,
|
|
91
|
+
headers
|
|
92
|
+
}) {
|
|
93
|
+
return client({
|
|
94
|
+
url: "/banorte-terminals",
|
|
95
|
+
method: "post",
|
|
96
|
+
headers: authorizationHeaders({
|
|
97
|
+
token,
|
|
98
|
+
jwtToken,
|
|
99
|
+
internalAuthTokenProvider,
|
|
100
|
+
headers
|
|
101
|
+
}),
|
|
102
|
+
data: {
|
|
103
|
+
banorteTerminal
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* DELETE /banorte-terminals/:banorteTerminalId - remove Banorte terminal.
|
|
110
|
+
* @param {Object} opts
|
|
111
|
+
* @param {string} [opts.token] - API key
|
|
112
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
113
|
+
* @param {string} opts.banorteTerminalId - Banorte terminal id (24 hex characters)
|
|
114
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
115
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminalId: string }>>}
|
|
116
|
+
* @throws When response is 4xx/5xx (400 INVALID_BANORTE_TERMINAL_ID, 401, 404 BANORTE_TERMINAL_NOT_FOUND, 500)
|
|
117
|
+
*/
|
|
118
|
+
function remove({
|
|
119
|
+
jwtToken,
|
|
120
|
+
banorteTerminalId,
|
|
121
|
+
token,
|
|
122
|
+
headers
|
|
123
|
+
}) {
|
|
124
|
+
return client({
|
|
125
|
+
url: `/banorte-terminals/${banorteTerminalId}`,
|
|
126
|
+
method: "delete",
|
|
127
|
+
headers: authorizationHeaders({
|
|
128
|
+
token,
|
|
129
|
+
jwtToken,
|
|
130
|
+
internalAuthTokenProvider,
|
|
131
|
+
headers
|
|
132
|
+
})
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* PUT /banorte-terminals/:banorteTerminalId - update Banorte terminal.
|
|
138
|
+
* @param {Object} opts
|
|
139
|
+
* @param {string} [opts.token] - API key
|
|
140
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
141
|
+
* @param {string} opts.banorteTerminalId - Banorte terminal id (24 hex characters)
|
|
142
|
+
* @param {Object} opts.banorteTerminal - Banorte terminal payload (name, serialNumber, stationId)
|
|
143
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
144
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminal: Object }>>}
|
|
145
|
+
* @throws When response is 4xx/5xx (400, 401, 404 BANORTE_TERMINAL_NOT_FOUND, 409 duplicate serial, 500)
|
|
146
|
+
*/
|
|
147
|
+
function update({
|
|
148
|
+
jwtToken,
|
|
149
|
+
token,
|
|
150
|
+
banorteTerminalId,
|
|
151
|
+
banorteTerminal,
|
|
152
|
+
headers
|
|
153
|
+
}) {
|
|
154
|
+
const _banorteTerminalId = banorteTerminalId || banorteTerminal._id;
|
|
155
|
+
return client({
|
|
156
|
+
url: `/banorte-terminals/${_banorteTerminalId}`,
|
|
157
|
+
method: "put",
|
|
158
|
+
headers: authorizationHeaders({
|
|
159
|
+
token,
|
|
160
|
+
jwtToken,
|
|
161
|
+
internalAuthTokenProvider,
|
|
162
|
+
headers
|
|
163
|
+
}),
|
|
164
|
+
data: {
|
|
165
|
+
banorteTerminal: {
|
|
166
|
+
name: banorteTerminal.name,
|
|
167
|
+
serialNumber: banorteTerminal.serialNumber,
|
|
168
|
+
stationId: banorteTerminal.stationId
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
all,
|
|
175
|
+
get,
|
|
176
|
+
create,
|
|
177
|
+
remove,
|
|
178
|
+
update
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
module.exports = banorteTerminalFactory;
|
package/package.json
CHANGED
package/src/client.js
CHANGED
|
@@ -84,6 +84,7 @@ function createInventory({baseURL, headers, timeout, overrideFn, internalAuthTok
|
|
|
84
84
|
filteredTripsV2: require("./endpoints/inventory/filtered-trips-v2.js")({client, internalAuthTokenProvider}),
|
|
85
85
|
financingCosts: require("./endpoints/inventory/financing-costs.js")({client, internalAuthTokenProvider}),
|
|
86
86
|
garages: require("./endpoints/inventory/garages.js")({client, internalAuthTokenProvider}),
|
|
87
|
+
banorteTerminals: require("./endpoints/inventory/banorte-terminals.js")({client, internalAuthTokenProvider}),
|
|
87
88
|
getnetTerminals: require("./endpoints/inventory/getnet-terminals.js")({client, internalAuthTokenProvider}),
|
|
88
89
|
giftCertificateDefinitions: require("./endpoints/inventory/gift-certificate-definitions.js")({client, internalAuthTokenProvider}),
|
|
89
90
|
healthCheck: require("./endpoints/inventory/healthcheck.js")({client, internalAuthTokenProvider}),
|
|
@@ -2,6 +2,78 @@ const {
|
|
|
2
2
|
authorizationHeaders
|
|
3
3
|
} = require("./../endpoints_helpers.js");
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {Object} AmenityGroupTransition
|
|
7
|
+
* @property {string} from - Original ticket amenity group id.
|
|
8
|
+
* @property {string} to - Destination amenity group id.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {Object} AmenityGroupTransitionsSettings
|
|
13
|
+
* @property {boolean} allowAny - When true, any transition is allowed.
|
|
14
|
+
* @property {AmenityGroupTransition[] | null} allowedTransitions - Allowed transition pairs when allowAny is false.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {Object} OriginalTripRestrictions
|
|
19
|
+
* @property {number} cutoffMinutes - Minutes before/after the selected reference point.
|
|
20
|
+
* @property {"original_passenger_departure_time" | "original_schedule_departure_time"} referencePoint - Restriction reference point.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {Object} NewTripRestrictions
|
|
25
|
+
* @property {number} lowerBoundCutoffMinutes - Lower bound for move eligibility in minutes.
|
|
26
|
+
* @property {"original_passenger_departure_time"} lowerBoundReferencePoint - Lower bound reference point.
|
|
27
|
+
* @property {number} upperBoundCutoffMinutes - Upper bound for move eligibility in minutes.
|
|
28
|
+
* @property {"original_passenger_departure_time"} upperBoundReferencePoint - Upper bound reference point.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @typedef {Object} TimeRestrictionsSettings
|
|
33
|
+
* @property {OriginalTripRestrictions} originalTripRestrictions - Restrictions applied to the original trip.
|
|
34
|
+
* @property {NewTripRestrictions} newTripRestrictions - Restrictions applied to the destination trip.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Ticket movement settings payload used by the accounts API.
|
|
39
|
+
* @typedef {Object} TicketMovementSettings
|
|
40
|
+
* @property {boolean} preventMovementsAfterManifestHasBeenPrinted - Prevent moves after printing manifests.
|
|
41
|
+
* @property {boolean} preventSeatmapOptimizationMovementsWithDifferentSeatClassOrFees - Block optimization moves changing class/fees.
|
|
42
|
+
* @property {boolean} preventMovementsWhenOriginalManifestIsBoarding - Prevent moves when original manifest is boarding.
|
|
43
|
+
* @property {null | "passengers_board_at_any_station" | "passengers_board_at_ticket_departure_station"} originalManifestIsBoardingWhen - Rule to determine original manifest boarding state.
|
|
44
|
+
* @property {boolean} preventMovementsWhenDestinationManifestIsBoarding - Prevent moves when destination manifest is boarding.
|
|
45
|
+
* @property {null | "passengers_board_at_any_station" | "passengers_board_at_ticket_departure_station"} destinationManifestIsBoardingWhen - Rule to determine destination manifest boarding state.
|
|
46
|
+
* @property {boolean} preventMovedTicketsFromBeingChanged - Block changing tickets after movement.
|
|
47
|
+
* @property {boolean} preventMovedTicketsFromBeingCancelled - Block cancelling tickets after movement.
|
|
48
|
+
* @property {boolean} preventMovementsWhenFareSpecificCapacityLimitsAreExceeded - Prevent moves when fare capacity is exceeded.
|
|
49
|
+
* @property {boolean} sendSMSNotifications - Enable SMS notifications for ticket movements.
|
|
50
|
+
* @property {boolean} [allowSendingEmailNotification] - Enable email notifications for ticket movements.
|
|
51
|
+
* @property {boolean} [useConfirmationRecipientForNotifications] - Send notifications to the confirmation recipient.
|
|
52
|
+
* @property {number} maxMovementsPerTicket - Maximum ticket movements without authorization.
|
|
53
|
+
* @property {number} [maxMovementsPerTicketWithAuthorization] - Maximum ticket movements with authorization.
|
|
54
|
+
* @property {AmenityGroupTransitionsSettings} amenityGroupTransitions - Allowed amenity group transitions.
|
|
55
|
+
* @property {TimeRestrictionsSettings} timeRestrictions - Time restriction rules.
|
|
56
|
+
* @property {string[]} [allowMovementToManifestsWithStatus] - Allowed destination manifest statuses.
|
|
57
|
+
* @property {string} [singleTicketMoveUIVersion] - Single ticket move UI version preference.
|
|
58
|
+
* @property {boolean} [displayExpiredSchedulesInUIToMove] - Show expired schedules in move UI when true.
|
|
59
|
+
* @property {boolean} [followingSeatBehaviorEnabled] - Enables following-seat behavior for automatic seat movement resolution.
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @typedef {Object} GetTicketMovementSettingsOptions
|
|
64
|
+
* @property {string} [token] - API key.
|
|
65
|
+
* @property {string} [jwtToken] - JWT or internal auth symbol.
|
|
66
|
+
* @property {Object} [headers] - Optional headers.
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @typedef {Object} UpdateTicketMovementSettingsOptions
|
|
71
|
+
* @property {string} [token] - API key.
|
|
72
|
+
* @property {string} [jwtToken] - JWT or internal auth symbol.
|
|
73
|
+
* @property {TicketMovementSettings} ticketMovementSettings - Full settings payload to persist.
|
|
74
|
+
* @property {Object} [headers] - Optional headers.
|
|
75
|
+
*/
|
|
76
|
+
|
|
5
77
|
/**
|
|
6
78
|
* Factory for ticket-movement-settings API (btrz-api-accounts).
|
|
7
79
|
* @param {Object} deps
|
|
@@ -13,11 +85,8 @@ function ticketMovementSettingsFactory({client, internalAuthTokenProvider}) {
|
|
|
13
85
|
/**
|
|
14
86
|
* GET /ticket-movement-settings - get ticket movement settings for the account.
|
|
15
87
|
* No query or path parameters. See get-handler getSpec() in btrz-api-accounts for response schema.
|
|
16
|
-
* @param {
|
|
17
|
-
* @
|
|
18
|
-
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
19
|
-
* @param {Object} [opts.headers] - Optional headers
|
|
20
|
-
* @returns {Promise<import("axios").AxiosResponse<Object>>} Response body: ticket movement settings object. Errors: 401, 500
|
|
88
|
+
* @param {GetTicketMovementSettingsOptions} opts
|
|
89
|
+
* @returns {Promise<import("axios").AxiosResponse<TicketMovementSettings>>} Response body: ticket movement settings object. Errors: 401, 500
|
|
21
90
|
*/
|
|
22
91
|
function get({token, jwtToken, headers}) {
|
|
23
92
|
return client({
|
|
@@ -30,12 +99,8 @@ function ticketMovementSettingsFactory({client, internalAuthTokenProvider}) {
|
|
|
30
99
|
* PUT /ticket-movement-settings - update ticket movement settings for the account.
|
|
31
100
|
* Body must include all required fields (see put-handler getSpec() in btrz-api-accounts).
|
|
32
101
|
* Side effect: persists to account.preferences.ticketMovements.
|
|
33
|
-
* @param {
|
|
34
|
-
* @
|
|
35
|
-
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
36
|
-
* @param {Object} opts.ticketMovementSettings - Full settings payload (see put-handler getSpec())
|
|
37
|
-
* @param {Object} [opts.headers] - Optional headers
|
|
38
|
-
* @returns {Promise<import("axios").AxiosResponse<Object>>} Updated settings. Errors: 400, 401, 500
|
|
102
|
+
* @param {UpdateTicketMovementSettingsOptions} opts
|
|
103
|
+
* @returns {Promise<import("axios").AxiosResponse<TicketMovementSettings>>} Updated settings. Errors: 400, 401, 500
|
|
39
104
|
*/
|
|
40
105
|
function update({token, jwtToken, ticketMovementSettings, headers}) {
|
|
41
106
|
return client({
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
const {
|
|
2
|
+
authorizationHeaders
|
|
3
|
+
} = require("../endpoints_helpers.js");
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Query params for GET /banorte-terminals (btrz-api-inventory). See get-handler getSpec().
|
|
7
|
+
* @typedef {Object} BanorteTerminalsQuery
|
|
8
|
+
* @property {number} [page] - The page number to retrieve
|
|
9
|
+
* @property {string} [stationId] - Filter terminals by station (location) ID
|
|
10
|
+
* @property {string} [serialNumber] - Filter terminals by serial number
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Factory for banorte-terminals API (btrz-api-inventory).
|
|
15
|
+
* @param {Object} deps
|
|
16
|
+
* @param {import("axios").AxiosInstance} deps.client
|
|
17
|
+
* @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
|
|
18
|
+
* @returns {{ all: function, get: function, create: function, remove: function, update: function }}
|
|
19
|
+
*/
|
|
20
|
+
function banorteTerminalFactory({client, internalAuthTokenProvider}) {
|
|
21
|
+
/**
|
|
22
|
+
* GET /banorte-terminals - list Banorte terminals (paginated).
|
|
23
|
+
* @param {Object} opts
|
|
24
|
+
* @param {string} [opts.token] - API key
|
|
25
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
26
|
+
* @param {BanorteTerminalsQuery} [opts.query] - Query params (page, stationId, serialNumber)
|
|
27
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
28
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminals: Array, next?: string, previous?: string, count: number }>>}
|
|
29
|
+
* @throws When response is 4xx/5xx (400 INVALID_PAGE, 401, 500)
|
|
30
|
+
*/
|
|
31
|
+
function all({
|
|
32
|
+
token,
|
|
33
|
+
jwtToken,
|
|
34
|
+
query = {},
|
|
35
|
+
headers
|
|
36
|
+
}) {
|
|
37
|
+
return client.get("/banorte-terminals", {
|
|
38
|
+
params: query,
|
|
39
|
+
headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* GET /banorte-terminals/:banorteTerminalId - get a Banorte terminal by id.
|
|
45
|
+
* @param {Object} opts
|
|
46
|
+
* @param {string} [opts.token] - API key
|
|
47
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
48
|
+
* @param {string} opts.banorteTerminalId - Banorte terminal id (24 hex characters)
|
|
49
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
50
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminal: Object }>>}
|
|
51
|
+
* @throws When response is 4xx/5xx (400 INVALID_BANORTE_TERMINAL_ID, 401, 404 BANORTE_TERMINAL_NOT_FOUND, 500)
|
|
52
|
+
*/
|
|
53
|
+
function get({
|
|
54
|
+
banorteTerminalId,
|
|
55
|
+
token,
|
|
56
|
+
jwtToken,
|
|
57
|
+
headers
|
|
58
|
+
}) {
|
|
59
|
+
return client.get(`/banorte-terminals/${banorteTerminalId}`, {
|
|
60
|
+
headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* POST /banorte-terminals - create Banorte terminal.
|
|
66
|
+
* @param {Object} opts
|
|
67
|
+
* @param {string} [opts.token] - API key
|
|
68
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
69
|
+
* @param {Object} opts.banorteTerminal - Banorte terminal payload (name, serialNumber, stationId optional)
|
|
70
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
71
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminal: Object }>>}
|
|
72
|
+
* @throws When response is 4xx/5xx (400 WRONG_DATA/INVALID_STATION_ID/STATION_NOT_FOUND, 401, 409 duplicate serial, 500)
|
|
73
|
+
*/
|
|
74
|
+
function create({
|
|
75
|
+
jwtToken,
|
|
76
|
+
token,
|
|
77
|
+
banorteTerminal,
|
|
78
|
+
headers
|
|
79
|
+
}) {
|
|
80
|
+
return client({
|
|
81
|
+
url: "/banorte-terminals",
|
|
82
|
+
method: "post",
|
|
83
|
+
headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers}),
|
|
84
|
+
data: {
|
|
85
|
+
banorteTerminal
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* DELETE /banorte-terminals/:banorteTerminalId - remove Banorte terminal.
|
|
92
|
+
* @param {Object} opts
|
|
93
|
+
* @param {string} [opts.token] - API key
|
|
94
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
95
|
+
* @param {string} opts.banorteTerminalId - Banorte terminal id (24 hex characters)
|
|
96
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
97
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminalId: string }>>}
|
|
98
|
+
* @throws When response is 4xx/5xx (400 INVALID_BANORTE_TERMINAL_ID, 401, 404 BANORTE_TERMINAL_NOT_FOUND, 500)
|
|
99
|
+
*/
|
|
100
|
+
function remove({
|
|
101
|
+
jwtToken,
|
|
102
|
+
banorteTerminalId,
|
|
103
|
+
token,
|
|
104
|
+
headers
|
|
105
|
+
}) {
|
|
106
|
+
return client({
|
|
107
|
+
url: `/banorte-terminals/${banorteTerminalId}`,
|
|
108
|
+
method: "delete",
|
|
109
|
+
headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* PUT /banorte-terminals/:banorteTerminalId - update Banorte terminal.
|
|
115
|
+
* @param {Object} opts
|
|
116
|
+
* @param {string} [opts.token] - API key
|
|
117
|
+
* @param {string} [opts.jwtToken] - JWT or internal auth symbol
|
|
118
|
+
* @param {string} opts.banorteTerminalId - Banorte terminal id (24 hex characters)
|
|
119
|
+
* @param {Object} opts.banorteTerminal - Banorte terminal payload (name, serialNumber, stationId)
|
|
120
|
+
* @param {Object} [opts.headers] - Optional headers
|
|
121
|
+
* @returns {Promise<import("axios").AxiosResponse<{ banorteTerminal: Object }>>}
|
|
122
|
+
* @throws When response is 4xx/5xx (400, 401, 404 BANORTE_TERMINAL_NOT_FOUND, 409 duplicate serial, 500)
|
|
123
|
+
*/
|
|
124
|
+
function update({
|
|
125
|
+
jwtToken,
|
|
126
|
+
token,
|
|
127
|
+
banorteTerminalId,
|
|
128
|
+
banorteTerminal,
|
|
129
|
+
headers
|
|
130
|
+
}) {
|
|
131
|
+
const _banorteTerminalId = banorteTerminalId || banorteTerminal._id;
|
|
132
|
+
|
|
133
|
+
return client({
|
|
134
|
+
url: `/banorte-terminals/${_banorteTerminalId}`,
|
|
135
|
+
method: "put",
|
|
136
|
+
headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers}),
|
|
137
|
+
data: {
|
|
138
|
+
banorteTerminal: {
|
|
139
|
+
name: banorteTerminal.name,
|
|
140
|
+
serialNumber: banorteTerminal.serialNumber,
|
|
141
|
+
stationId: banorteTerminal.stationId
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return {
|
|
148
|
+
all,
|
|
149
|
+
get,
|
|
150
|
+
create,
|
|
151
|
+
remove,
|
|
152
|
+
update
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
module.exports = banorteTerminalFactory;
|
package/test/all.test.js
CHANGED
|
@@ -95,6 +95,7 @@ require("./endpoints/inventory/filtered-trips-v2.test.js");
|
|
|
95
95
|
require("./endpoints/inventory/filtered-trips.test.js");
|
|
96
96
|
require("./endpoints/inventory/financing-costs.test.js");
|
|
97
97
|
require("./endpoints/inventory/garages.test.js");
|
|
98
|
+
require("./endpoints/inventory/banorte-terminals.test.js");
|
|
98
99
|
require("./endpoints/inventory/getnet-terminals.test.js");
|
|
99
100
|
require("./endpoints/inventory/gift-certificate-definitions.test.js");
|
|
100
101
|
require("./endpoints/inventory/holidays.test.js");
|
|
@@ -17,7 +17,37 @@ describe("accounts/ticket-movement-settings", () => {
|
|
|
17
17
|
|
|
18
18
|
it("should update ticket movement settings", () => {
|
|
19
19
|
const ticketMovementSettings = {
|
|
20
|
-
|
|
20
|
+
preventMovementsAfterManifestHasBeenPrinted: true,
|
|
21
|
+
preventSeatmapOptimizationMovementsWithDifferentSeatClassOrFees: false,
|
|
22
|
+
preventMovementsWhenOriginalManifestIsBoarding: false,
|
|
23
|
+
originalManifestIsBoardingWhen: null,
|
|
24
|
+
preventMovementsWhenDestinationManifestIsBoarding: false,
|
|
25
|
+
destinationManifestIsBoardingWhen: null,
|
|
26
|
+
preventMovedTicketsFromBeingChanged: true,
|
|
27
|
+
preventMovedTicketsFromBeingCancelled: false,
|
|
28
|
+
preventMovementsWhenFareSpecificCapacityLimitsAreExceeded: true,
|
|
29
|
+
sendSMSNotifications: true,
|
|
30
|
+
allowSendingEmailNotification: true,
|
|
31
|
+
useConfirmationRecipientForNotifications: false,
|
|
32
|
+
maxMovementsPerTicket: 1,
|
|
33
|
+
maxMovementsPerTicketWithAuthorization: 2,
|
|
34
|
+
amenityGroupTransitions: {
|
|
35
|
+
allowAny: true,
|
|
36
|
+
allowedTransitions: null
|
|
37
|
+
},
|
|
38
|
+
timeRestrictions: {
|
|
39
|
+
originalTripRestrictions: {
|
|
40
|
+
cutoffMinutes: 0,
|
|
41
|
+
referencePoint: "original_passenger_departure_time"
|
|
42
|
+
},
|
|
43
|
+
newTripRestrictions: {
|
|
44
|
+
lowerBoundCutoffMinutes: 0,
|
|
45
|
+
lowerBoundReferencePoint: "original_passenger_departure_time",
|
|
46
|
+
upperBoundCutoffMinutes: 15,
|
|
47
|
+
upperBoundReferencePoint: "original_passenger_departure_time"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
followingSeatBehaviorEnabled: true
|
|
21
51
|
};
|
|
22
52
|
|
|
23
53
|
axiosMock.onPut("/ticket-movement-settings")
|