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.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 {Object} opts
20
- * @param {string} [opts.token] - API key
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 {Object} opts
46
- * @param {string} [opts.token] - API key
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "btrz-api-client",
3
- "version": "9.5.0",
3
+ "version": "9.7.0",
4
4
  "description": "Api client for Betterez endpoints",
5
5
  "main": "index.js",
6
6
  "scripts": {
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 {Object} opts
17
- * @param {string} [opts.token] - API key
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 {Object} opts
34
- * @param {string} [opts.token] - API key
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
- enabled: true
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")