btrz-api-client 9.4.0 → 9.6.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
@@ -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.4.0",
3
+ "version": "9.6.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}),
@@ -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");
@@ -0,0 +1,173 @@
1
+ describe("inventory/banorte-terminals", () => {
2
+ const {
3
+ axiosMock,
4
+ expectRequest
5
+ } = require("../../test-helpers.js");
6
+ const api = require("../../../src/client.js").createApiClient({
7
+ baseURL: "http://test.com"
8
+ });
9
+
10
+ const token = "I owe you a token";
11
+ const jwtToken = "I owe you a JWT token";
12
+
13
+ afterEach(() => {
14
+ axiosMock.restore();
15
+ });
16
+
17
+ it("should retrieve a list of Banorte terminals", () => {
18
+ const query = {page: 2};
19
+
20
+ axiosMock.onGet("/banorte-terminals", {params: query}).reply(expectRequest({
21
+ statusCode: 200, token, jwtToken
22
+ }));
23
+
24
+ return api.inventory.banorteTerminals.all({
25
+ jwtToken,
26
+ token,
27
+ query
28
+ });
29
+ });
30
+
31
+ it("should retrieve an existing Banorte terminal by id", () => {
32
+ const banorteTerminalId = "1234123412341234";
33
+
34
+ axiosMock.onGet(`/banorte-terminals/${banorteTerminalId}`).reply(expectRequest({
35
+ statusCode: 200, token, jwtToken
36
+ }));
37
+
38
+ return api.inventory.banorteTerminals.get({
39
+ jwtToken,
40
+ token,
41
+ banorteTerminalId
42
+ });
43
+ });
44
+
45
+ it("should create a new Banorte terminal", async () => {
46
+ const banorteTerminal = {
47
+ name: "New Banorte Terminal",
48
+ serialNumber: "Test Serial Number"
49
+ };
50
+
51
+ axiosMock.onPost("/banorte-terminals").reply(expectRequest({
52
+ statusCode: 200, token, jwtToken, body: {banorteTerminal}
53
+ }));
54
+
55
+ return api.inventory.banorteTerminals.create({
56
+ jwtToken,
57
+ token,
58
+ banorteTerminal
59
+ });
60
+ });
61
+
62
+ it("should create a new Banorte terminal with stationId (location)", async () => {
63
+ const banorteTerminal = {
64
+ name: "Banorte Terminal at Station",
65
+ serialNumber: "SN-001",
66
+ stationId: "5f243d100617680712e78dd7"
67
+ };
68
+
69
+ axiosMock.onPost("/banorte-terminals").reply(expectRequest({
70
+ statusCode: 200, token, jwtToken, body: {banorteTerminal}
71
+ }));
72
+
73
+ return api.inventory.banorteTerminals.create({
74
+ jwtToken,
75
+ token,
76
+ banorteTerminal
77
+ });
78
+ });
79
+
80
+ it("should delete a Banorte terminal", () => {
81
+ const banorteTerminalId = "1234";
82
+
83
+ axiosMock.onDelete(`/banorte-terminals/${banorteTerminalId}`).reply(expectRequest({
84
+ statusCode: 200, token, jwtToken
85
+ }));
86
+
87
+ return api.inventory.banorteTerminals.remove({
88
+ jwtToken,
89
+ token,
90
+ banorteTerminalId
91
+ });
92
+ });
93
+
94
+ it("should update an existing Banorte terminal", async () => {
95
+ const banorteTerminal = {
96
+ _id: "terminal-id-123",
97
+ name: "Updated Banorte Terminal",
98
+ serialNumber: "Updated Serial Number"
99
+ };
100
+
101
+ const banorteTerminalFieldsToUpdate = {
102
+ name: banorteTerminal.name,
103
+ serialNumber: banorteTerminal.serialNumber,
104
+ stationId: banorteTerminal.stationId
105
+ };
106
+
107
+ axiosMock.onPut(`/banorte-terminals/${banorteTerminal._id}`).reply(expectRequest({
108
+ statusCode: 200, token, jwtToken, body: {banorteTerminal: banorteTerminalFieldsToUpdate}
109
+ }));
110
+
111
+ return api.inventory.banorteTerminals.update({
112
+ jwtToken,
113
+ token,
114
+ banorteTerminal
115
+ });
116
+ });
117
+
118
+ it("should update an existing Banorte terminal with stationId (location)", async () => {
119
+ const banorteTerminalId = "terminal-id-456";
120
+ const banorteTerminal = {
121
+ _id: banorteTerminalId,
122
+ name: "Terminal at Station",
123
+ serialNumber: "SN-789",
124
+ stationId: "5f243d100617680712e78dd7"
125
+ };
126
+
127
+ const expectedBody = {
128
+ banorteTerminal: {
129
+ name: banorteTerminal.name,
130
+ serialNumber: banorteTerminal.serialNumber,
131
+ stationId: banorteTerminal.stationId
132
+ }
133
+ };
134
+
135
+ axiosMock.onPut(`/banorte-terminals/${banorteTerminalId}`).reply(expectRequest({
136
+ statusCode: 200, token, jwtToken, body: expectedBody
137
+ }));
138
+
139
+ return api.inventory.banorteTerminals.update({
140
+ jwtToken,
141
+ token,
142
+ banorteTerminalId,
143
+ banorteTerminal
144
+ });
145
+ });
146
+
147
+ it("should update an existing Banorte terminal with empty stationId", async () => {
148
+ const banorteTerminal = {
149
+ _id: "terminal-id-999",
150
+ name: "Terminal No Location",
151
+ serialNumber: "SN-999",
152
+ stationId: ""
153
+ };
154
+
155
+ const expectedBody = {
156
+ banorteTerminal: {
157
+ name: banorteTerminal.name,
158
+ serialNumber: banorteTerminal.serialNumber,
159
+ stationId: ""
160
+ }
161
+ };
162
+
163
+ axiosMock.onPut(`/banorte-terminals/${banorteTerminal._id}`).reply(expectRequest({
164
+ statusCode: 200, token, jwtToken, body: expectedBody
165
+ }));
166
+
167
+ return api.inventory.banorteTerminals.update({
168
+ jwtToken,
169
+ token,
170
+ banorteTerminal
171
+ });
172
+ });
173
+ });