@sebspark/openapi-client 3.0.1 → 4.0.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/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }var __defProp = Object.defineProperty;
1
+ var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -19,14 +19,14 @@ var __spreadValues = (a, b) => {
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
20
 
21
21
  // src/index.ts
22
- var _retry = require('@sebspark/retry'); _createStarExport(_retry);
22
+ export * from "@sebspark/retry";
23
23
 
24
24
  // src/client.ts
25
- var _openapicore = require('@sebspark/openapi-core');
26
- var _otel = require('@sebspark/otel');
27
-
28
- var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);
29
- var _axiosauthrefresh = require('axios-auth-refresh'); var _axiosauthrefresh2 = _interopRequireDefault(_axiosauthrefresh);
25
+ import {fromAxiosError} from "@sebspark/openapi-core";
26
+ import {getLogger} from "@sebspark/otel";
27
+ import {retry} from "@sebspark/retry";
28
+ import axios from "axios";
29
+ import createAuthRefreshInterceptor from "axios-auth-refresh";
30
30
 
31
31
  // src/paramsSerializer.ts
32
32
  var encodeParam = (param) => encodeURIComponent(param);
@@ -83,15 +83,15 @@ var paramsSerializer = (format) => (params) => {
83
83
 
84
84
  // src/client.ts
85
85
  var TypedClient = (baseURL, globalOptions) => {
86
- const axiosInstance = _axios2.default.create();
87
- const logger = _otel.getLogger.call(void 0, "TypedClient");
88
- logger.debug(`client initialized with arrayFormat '${globalOptions == null ? void 0 : globalOptions.arrayFormat}'`);
89
- if (globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) {
86
+ const axiosInstance = axios.create();
87
+ const logger = getLogger("TypedClient");
88
+ logger.debug(`client initialized with arrayFormat '${globalOptions?.arrayFormat}'`);
89
+ if (globalOptions?.authorizationTokenGenerator) {
90
90
  logger.debug("authorizationTokenGenerator is set");
91
91
  axiosInstance.interceptors.request.use(async (request) => {
92
92
  const url = `${request.baseURL}${request.url}`;
93
93
  logger.debug(`Intercepting request to ${url}`);
94
- if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) && url) {
94
+ if (globalOptions?.authorizationTokenGenerator && url) {
95
95
  try {
96
96
  const authorizationTokenHeaders = await globalOptions.authorizationTokenGenerator(url);
97
97
  if (authorizationTokenHeaders) {
@@ -111,29 +111,29 @@ var TypedClient = (baseURL, globalOptions) => {
111
111
  return request;
112
112
  });
113
113
  }
114
- if (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) {
114
+ if (globalOptions?.authorizationTokenRefresh) {
115
115
  const refreshAuthLogic = async (failedRequest) => {
116
- var _a, _b;
117
- if (!_axios2.default.isAxiosError(failedRequest)) {
116
+ if (!axios.isAxiosError(failedRequest)) {
118
117
  logger.error("Failed request is not an axios error", failedRequest);
119
- return;
118
+ throw failedRequest;
120
119
  } else {
121
120
  logger.debug("Failed request", failedRequest);
122
121
  }
123
122
  const axiosError = failedRequest;
124
123
  logger.debug("Failed request config", axiosError.config);
125
- const url = `${(_a = axiosError.config) == null ? void 0 : _a.baseURL}${(_b = axiosError.config) == null ? void 0 : _b.url}`;
126
- if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) && url) {
124
+ const url = `${axiosError.config?.baseURL}${axiosError.config?.url}`;
125
+ if (globalOptions?.authorizationTokenRefresh && url) {
127
126
  logger.debug(`Refreshing token for URL ${url}`);
128
127
  try {
129
- await (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh(url));
128
+ await globalOptions?.authorizationTokenRefresh(url);
130
129
  } catch (error) {
131
130
  logger.error(`Error refreshing token for URL: ${url}`, error);
132
131
  throw error;
133
132
  }
134
133
  }
134
+ return axiosError.response;
135
135
  };
136
- _axiosauthrefresh2.default.call(void 0, axiosInstance, refreshAuthLogic);
136
+ createAuthRefreshInterceptor(axiosInstance, refreshAuthLogic);
137
137
  }
138
138
  if (logger) {
139
139
  axiosInstance.interceptors.request.use((request) => {
@@ -165,12 +165,11 @@ var TypedClient = (baseURL, globalOptions) => {
165
165
  return __spreadProps(__spreadValues({}, client), {axiosInstance});
166
166
  };
167
167
  var callServer = async (axiosInstance, args, logger) => {
168
- var _a, _b;
169
168
  try {
170
169
  const serializer = paramsSerializer(args.arrayFormat);
171
170
  logger.debug(`[callServer] typeof serializer: ${typeof serializer}`);
172
- const body = ((_a = args.method) == null ? void 0 : _a.toLowerCase()) === "get" || ((_b = args.method) == null ? void 0 : _b.toLowerCase()) === "delete" ? void 0 : args.body;
173
- const {headers, data} = await _retry.retry.call(void 0, () => axiosInstance.request({
171
+ const body = args.method?.toLowerCase() === "get" || args.method?.toLowerCase() === "delete" ? void 0 : args.body;
172
+ const {headers, data} = await retry(() => axiosInstance.request({
174
173
  baseURL: args.baseUrl,
175
174
  url: args.url,
176
175
  method: args.method,
@@ -183,7 +182,7 @@ var callServer = async (axiosInstance, args, logger) => {
183
182
  }), args.retry);
184
183
  return {headers, data};
185
184
  } catch (error) {
186
- throw _openapicore.fromAxiosError.call(void 0, error);
185
+ throw fromAxiosError(error);
187
186
  }
188
187
  };
189
188
  var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
@@ -200,34 +199,34 @@ var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
200
199
  headers,
201
200
  body,
202
201
  retry: retry2,
203
- arrayFormat: global == null ? void 0 : global.arrayFormat,
204
- httpsAgent: extras == null ? void 0 : extras.httpsAgent,
205
- httpAgent: extras == null ? void 0 : extras.httpAgent
202
+ arrayFormat: global?.arrayFormat,
203
+ httpsAgent: extras?.httpsAgent,
204
+ httpAgent: extras?.httpAgent
206
205
  };
207
206
  return merged;
208
207
  };
209
- var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => (a == null ? void 0 : a[prop]) || {}));
208
+ var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => a?.[prop] || {}));
210
209
  var setParams = (url, params = {}) => Object.entries(params).reduce((url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`), url);
211
210
 
212
211
  // src/graphql/client.ts
213
-
214
-
215
-
216
- var _openapiauthiam = require('@sebspark/openapi-auth-iam');
217
-
212
+ import {
213
+ apiGatewayTokenByUrlGenerator,
214
+ apiGatewayTokenRefresh
215
+ } from "@sebspark/openapi-auth-iam";
216
+ import {getLogger as getLogger2} from "@sebspark/otel";
218
217
  var GatewayGraphqlClient = class {
219
218
  constructor(args) {
220
219
  this.uri = args.uri;
221
- this.logger = _otel.getLogger.call(void 0, "GatewayGraphqlClient");
220
+ this.logger = getLogger2("GatewayGraphqlClient");
222
221
  this.options = {
223
222
  timeout: 10 * 1e3,
224
223
  authorizationTokenGenerator: async (url) => {
225
224
  this.logger.debug(`Generating token for: ${this.uri}`);
226
- return _openapiauthiam.apiGatewayTokenByUrlGenerator.call(void 0, args.apiKey)(url);
225
+ return apiGatewayTokenByUrlGenerator(args.apiKey)(url);
227
226
  },
228
227
  authorizationTokenRefresh: async (url) => {
229
228
  this.logger.debug(`Refreshing token for: ${this.uri}`);
230
- return _openapiauthiam.apiGatewayTokenRefresh.call(void 0, )(url);
229
+ return apiGatewayTokenRefresh()(url);
231
230
  }
232
231
  };
233
232
  this.client = TypedClient(args.uri, this.options);
@@ -257,7 +256,7 @@ var GatewayGraphqlClient = class {
257
256
  return false;
258
257
  }
259
258
  };
260
-
261
-
262
-
263
- exports.GatewayGraphqlClient = GatewayGraphqlClient; exports.TypedClient = TypedClient;
259
+ export {
260
+ GatewayGraphqlClient,
261
+ TypedClient
262
+ };
package/package.json CHANGED
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-client",
3
- "version": "3.0.1",
3
+ "version": "4.0.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
+ "type": "module",
7
8
  "types": "dist/index.d.ts",
8
9
  "files": [
9
10
  "dist"
10
11
  ],
11
12
  "scripts": {
12
13
  "generate": "yarn openapi-typegen -i ./src/test/ -o ./src/test/",
13
- "build": "tsup-node src/index.ts --format esm,cjs --dts",
14
+ "build": "tsup-node src/index.ts --format esm --target node22 --dts",
14
15
  "dev": "tsc --watch --noEmit",
15
16
  "lint": "biome check .",
16
17
  "test": "vitest run --passWithNoTests --coverage",
@@ -24,16 +25,16 @@
24
25
  "express": "5.1.0",
25
26
  "nock": "14.0.10",
26
27
  "tsup-node": "^0.1.0",
27
- "vitest": "4.0.3"
28
+ "vitest": "4.0.5"
28
29
  },
29
30
  "dependencies": {
30
31
  "@sebspark/openapi-auth-iam": "*",
31
32
  "@sebspark/openapi-core": "*",
32
33
  "@sebspark/retry": "*",
33
- "axios": "^1.12.2",
34
+ "axios": "1.13.1",
34
35
  "axios-auth-refresh": "3.3.6"
35
36
  },
36
37
  "peerDependencies": {
37
- "@sebspark/otel": ">=1.1.4"
38
+ "@sebspark/otel": ">=2.0.0"
38
39
  }
39
40
  }
package/dist/index.mjs DELETED
@@ -1,263 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
8
- var __spreadValues = (a, b) => {
9
- for (var prop in b || (b = {}))
10
- if (__hasOwnProp.call(b, prop))
11
- __defNormalProp(a, prop, b[prop]);
12
- if (__getOwnPropSymbols)
13
- for (var prop of __getOwnPropSymbols(b)) {
14
- if (__propIsEnum.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- }
17
- return a;
18
- };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
-
21
- // src/index.ts
22
- export * from "@sebspark/retry";
23
-
24
- // src/client.ts
25
- import {fromAxiosError} from "@sebspark/openapi-core";
26
- import {getLogger} from "@sebspark/otel";
27
- import {retry} from "@sebspark/retry";
28
- import axios from "axios";
29
- import createAuthRefreshInterceptor from "axios-auth-refresh";
30
-
31
- // src/paramsSerializer.ts
32
- var encodeParam = (param) => encodeURIComponent(param);
33
- var encodeValue = (param, encodeCommas = false) => {
34
- if (param instanceof Date) {
35
- return encodeURIComponent(param.toISOString());
36
- }
37
- if (typeof param === "number" || typeof param === "string" || typeof param === "boolean") {
38
- if (encodeCommas) {
39
- return encodeURIComponent(param);
40
- }
41
- return param.toString().split(",").map((p) => encodeURIComponent(p)).join(",");
42
- }
43
- return "";
44
- };
45
- var paramsSerializer = (format) => (params) => {
46
- if (!params) {
47
- return "";
48
- }
49
- const s = [];
50
- for (const [key, value] of Object.entries(params)) {
51
- if (value === void 0) {
52
- continue;
53
- }
54
- if (Array.isArray(value)) {
55
- const title = encodeParam(key);
56
- if (format === "comma") {
57
- s.push(`${title}=${value.map((v) => encodeValue(v, true)).join(",")}`);
58
- continue;
59
- }
60
- value.forEach((v, ix) => {
61
- const value2 = encodeValue(v);
62
- switch (format) {
63
- case "indices": {
64
- s.push(`${title}[${ix}]=${value2}`);
65
- break;
66
- }
67
- case "repeat": {
68
- s.push(`${title}=${value2}`);
69
- break;
70
- }
71
- default: {
72
- s.push(`${title}[]=${value2}`);
73
- break;
74
- }
75
- }
76
- });
77
- } else {
78
- s.push(`${encodeParam(key)}=${encodeValue(value)}`);
79
- }
80
- }
81
- return s.join("&");
82
- };
83
-
84
- // src/client.ts
85
- var TypedClient = (baseURL, globalOptions) => {
86
- const axiosInstance = axios.create();
87
- const logger = getLogger("TypedClient");
88
- logger.debug(`client initialized with arrayFormat '${globalOptions == null ? void 0 : globalOptions.arrayFormat}'`);
89
- if (globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) {
90
- logger.debug("authorizationTokenGenerator is set");
91
- axiosInstance.interceptors.request.use(async (request) => {
92
- const url = `${request.baseURL}${request.url}`;
93
- logger.debug(`Intercepting request to ${url}`);
94
- if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) && url) {
95
- try {
96
- const authorizationTokenHeaders = await globalOptions.authorizationTokenGenerator(url);
97
- if (authorizationTokenHeaders) {
98
- for (const key of Object.keys(authorizationTokenHeaders)) {
99
- const value = authorizationTokenHeaders[key];
100
- logger.debug(`Setting header ${key} to ${value}`);
101
- request.headers[key] = value;
102
- }
103
- }
104
- } catch (error) {
105
- logger.error(`Error generating token for URL: ${url}`, error);
106
- throw error;
107
- }
108
- }
109
- logger.debug("Intercepted request:");
110
- logger.debug(JSON.stringify(request, null, 2));
111
- return request;
112
- });
113
- }
114
- if (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) {
115
- const refreshAuthLogic = async (failedRequest) => {
116
- var _a, _b;
117
- if (!axios.isAxiosError(failedRequest)) {
118
- logger.error("Failed request is not an axios error", failedRequest);
119
- return;
120
- } else {
121
- logger.debug("Failed request", failedRequest);
122
- }
123
- const axiosError = failedRequest;
124
- logger.debug("Failed request config", axiosError.config);
125
- const url = `${(_a = axiosError.config) == null ? void 0 : _a.baseURL}${(_b = axiosError.config) == null ? void 0 : _b.url}`;
126
- if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) && url) {
127
- logger.debug(`Refreshing token for URL ${url}`);
128
- try {
129
- await (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh(url));
130
- } catch (error) {
131
- logger.error(`Error refreshing token for URL: ${url}`, error);
132
- throw error;
133
- }
134
- }
135
- };
136
- createAuthRefreshInterceptor(axiosInstance, refreshAuthLogic);
137
- }
138
- if (logger) {
139
- axiosInstance.interceptors.request.use((request) => {
140
- const requestObject = {
141
- url: request.url,
142
- params: request.params,
143
- headers: request.headers
144
- };
145
- logger.debug("request", requestObject);
146
- return request;
147
- });
148
- axiosInstance.interceptors.response.use((response) => {
149
- const responseObject = {
150
- data: response.data,
151
- config: response.config,
152
- headers: response.headers
153
- };
154
- logger.debug("response", responseObject);
155
- return response;
156
- });
157
- }
158
- const client = {
159
- get: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "get", args, opts, globalOptions), logger),
160
- post: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "post", args, opts, globalOptions), logger),
161
- put: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "put", args, opts, globalOptions), logger),
162
- patch: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "patch", args, opts, globalOptions), logger),
163
- delete: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "delete", args, opts, globalOptions), logger)
164
- };
165
- return __spreadProps(__spreadValues({}, client), {axiosInstance});
166
- };
167
- var callServer = async (axiosInstance, args, logger) => {
168
- var _a, _b;
169
- try {
170
- const serializer = paramsSerializer(args.arrayFormat);
171
- logger.debug(`[callServer] typeof serializer: ${typeof serializer}`);
172
- const body = ((_a = args.method) == null ? void 0 : _a.toLowerCase()) === "get" || ((_b = args.method) == null ? void 0 : _b.toLowerCase()) === "delete" ? void 0 : args.body;
173
- const {headers, data} = await retry(() => axiosInstance.request({
174
- baseURL: args.baseUrl,
175
- url: args.url,
176
- method: args.method,
177
- headers: args.headers,
178
- params: args.params,
179
- paramsSerializer: serializer,
180
- data: body,
181
- httpsAgent: args.httpsAgent,
182
- httpAgent: args.httpAgent
183
- }), args.retry);
184
- return {headers, data};
185
- } catch (error) {
186
- throw fromAxiosError(error);
187
- }
188
- };
189
- var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
190
- const params = merge("params", global, requestArgs, extras);
191
- const query = merge("query", global, requestArgs, extras);
192
- const headers = merge("headers", global, requestArgs, extras);
193
- const body = merge("body", global, requestArgs, extras);
194
- const retry2 = merge("retry", global, requestArgs, extras);
195
- const merged = {
196
- url: setParams(url, params),
197
- baseUrl,
198
- method,
199
- params: query,
200
- headers,
201
- body,
202
- retry: retry2,
203
- arrayFormat: global == null ? void 0 : global.arrayFormat,
204
- httpsAgent: extras == null ? void 0 : extras.httpsAgent,
205
- httpAgent: extras == null ? void 0 : extras.httpAgent
206
- };
207
- return merged;
208
- };
209
- var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => (a == null ? void 0 : a[prop]) || {}));
210
- var setParams = (url, params = {}) => Object.entries(params).reduce((url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`), url);
211
-
212
- // src/graphql/client.ts
213
- import {
214
- apiGatewayTokenByUrlGenerator,
215
- apiGatewayTokenRefresh
216
- } from "@sebspark/openapi-auth-iam";
217
- import {getLogger as getLogger2} from "@sebspark/otel";
218
- var GatewayGraphqlClient = class {
219
- constructor(args) {
220
- this.uri = args.uri;
221
- this.logger = getLogger2("GatewayGraphqlClient");
222
- this.options = {
223
- timeout: 10 * 1e3,
224
- authorizationTokenGenerator: async (url) => {
225
- this.logger.debug(`Generating token for: ${this.uri}`);
226
- return apiGatewayTokenByUrlGenerator(args.apiKey)(url);
227
- },
228
- authorizationTokenRefresh: async (url) => {
229
- this.logger.debug(`Refreshing token for: ${this.uri}`);
230
- return apiGatewayTokenRefresh()(url);
231
- }
232
- };
233
- this.client = TypedClient(args.uri, this.options);
234
- }
235
- async graphql(query, variables) {
236
- try {
237
- const response = await this.client.post("/graphql", {
238
- body: {query: query.trim(), variables}
239
- });
240
- if (response.data.errors) {
241
- this.logger.error(`Error posting graphql query to: ${this.uri}`);
242
- throw new Error(response.data.errors.map((e) => e.message).join("\n"));
243
- }
244
- return response.data.data;
245
- } catch (error) {
246
- this.logger.error(`Error posting graphql: ${this.uri}`);
247
- throw error;
248
- }
249
- }
250
- async isHealthy() {
251
- try {
252
- await this.client.get("/health");
253
- return true;
254
- } catch (error) {
255
- this.logger.error(error);
256
- }
257
- return false;
258
- }
259
- };
260
- export {
261
- GatewayGraphqlClient,
262
- TypedClient
263
- };