@sebspark/openapi-client 2.3.0 → 2.4.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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { BaseClient, ClientOptions } from '@sebspark/openapi-core';
1
+ import { BaseClient, ClientOptions, RequestOptions, APIResponse } from '@sebspark/openapi-core';
2
2
  import { AxiosInstance } from 'axios';
3
3
  import { Logger } from 'winston';
4
4
  export * from '@sebspark/retry';
@@ -8,4 +8,55 @@ type TypedAxiosClient<T> = T & {
8
8
  };
9
9
  declare const TypedClient: <C extends Partial<BaseClient>>(baseURL: string, globalOptions?: ClientOptions, logger?: Logger) => TypedAxiosClient<C>;
10
10
 
11
- export { type TypedAxiosClient, TypedClient };
11
+ type GatewayGraphqlClient$1 = Pick<BaseClient, 'post' | 'get'> & {
12
+ post: {
13
+ /**
14
+ *
15
+ * @param {string} url
16
+ * @param {Object} [args] - Optional. The arguments for the request.
17
+ * @param {Object} [args.body] - Optional. Request body for the request.
18
+ * @param {string} [args.body.query] - Optional.
19
+ * @param {object} [args.body.variables] - Optional.
20
+ * @param {RequestOptions} [opts] - Optional.
21
+ * @returns {Promise<APIResponse<{
22
+ }>>}
23
+ */
24
+ (url: '/graphql', args?: {
25
+ body?: {
26
+ query?: string;
27
+ variables?: Record<string, unknown>;
28
+ };
29
+ }, opts?: RequestOptions): Promise<APIResponse<{
30
+ data: Record<string, any>;
31
+ errors?: ({
32
+ message: string;
33
+ } & Record<string, any>)[];
34
+ }>>;
35
+ };
36
+ get: {
37
+ /**
38
+ *
39
+ * @param {string} url
40
+ * @param {RequestOptions} [opts] - Optional.
41
+ * @returns {Promise<undefined>}
42
+ */
43
+ (url: '/health', opts?: RequestOptions): Promise<undefined>;
44
+ };
45
+ };
46
+ type GatewayGraphqlClientArgs = {
47
+ logger: Logger;
48
+ uri: string;
49
+ apiKey: string;
50
+ };
51
+
52
+ declare class GatewayGraphqlClient<T extends GatewayGraphqlClient$1 = GatewayGraphqlClient$1> {
53
+ client: T;
54
+ logger: Logger;
55
+ private uri;
56
+ private options;
57
+ constructor(args: GatewayGraphqlClientArgs);
58
+ graphql<K>(query: string, variables?: Record<string, unknown>): Promise<K>;
59
+ isHealthy(): Promise<boolean>;
60
+ }
61
+
62
+ export { GatewayGraphqlClient, TypedAxiosClient, TypedClient };
package/dist/index.js CHANGED
@@ -1,45 +1,28 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
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;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
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;
19
18
  };
20
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
- // If the importer is in node compatibility mode or this is not an ESM
23
- // file that has been converted to a CommonJS file using a Babel-
24
- // compatible transform (i.e. "__esModule" has not been set), then set
25
- // "default" to the CommonJS "module.exports" for node compatibility.
26
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
- mod
28
- ));
29
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
-
31
- // src/index.ts
32
- var index_exports = {};
33
- __export(index_exports, {
34
- TypedClient: () => TypedClient
35
- });
36
- module.exports = __toCommonJS(index_exports);
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
37
20
 
38
21
  // src/client.ts
39
- var import_openapi_core = require("@sebspark/openapi-core");
40
- var import_retry = require("@sebspark/retry");
41
- var import_axios = __toESM(require("axios"));
42
- var import_axios_auth_refresh = __toESM(require("axios-auth-refresh"));
22
+ var _openapicore = require('@sebspark/openapi-core');
23
+ var _retry = require('@sebspark/retry'); _createStarExport(_retry);
24
+ var _axios = require('axios'); var _axios2 = _interopRequireDefault(_axios);
25
+ var _axiosauthrefresh = require('axios-auth-refresh'); var _axiosauthrefresh2 = _interopRequireDefault(_axiosauthrefresh);
43
26
 
44
27
  // src/paramsSerializer.ts
45
28
  var encodeParam = (param) => encodeURIComponent(param);
@@ -96,59 +79,57 @@ var paramsSerializer = (format) => (params) => {
96
79
 
97
80
  // src/client.ts
98
81
  var TypedClient = (baseURL, globalOptions, logger) => {
99
- const axiosInstance = import_axios.default.create();
100
- logger?.debug(
101
- "client initialized with arrayFormat",
102
- globalOptions?.arrayFormat
103
- );
104
- if (globalOptions?.authorizationTokenGenerator) {
105
- logger?.debug("authorizationTokenGenerator is set");
82
+ const axiosInstance = _axios2.default.create();
83
+ logger == null ? void 0 : logger.debug("client initialized with arrayFormat", globalOptions == null ? void 0 : globalOptions.arrayFormat);
84
+ if (globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) {
85
+ logger == null ? void 0 : logger.debug("authorizationTokenGenerator is set");
106
86
  axiosInstance.interceptors.request.use(async (request) => {
107
87
  const url = `${request.baseURL}${request.url}`;
108
- logger?.debug(`Intercepting request to ${url}`);
109
- if (globalOptions?.authorizationTokenGenerator && url) {
88
+ logger == null ? void 0 : logger.debug(`Intercepting request to ${url}`);
89
+ if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) && url) {
110
90
  try {
111
91
  const authorizationTokenHeaders = await globalOptions.authorizationTokenGenerator(url);
112
92
  if (authorizationTokenHeaders) {
113
93
  for (const key of Object.keys(authorizationTokenHeaders)) {
114
94
  const value = authorizationTokenHeaders[key];
115
- logger?.debug(`Setting header ${key} to ${value}`);
95
+ logger == null ? void 0 : logger.debug(`Setting header ${key} to ${value}`);
116
96
  request.headers[key] = value;
117
97
  }
118
98
  }
119
99
  } catch (error) {
120
- logger?.error(`Error generating token for URL: ${url}`);
100
+ logger == null ? void 0 : logger.error(`Error generating token for URL: ${url}`);
121
101
  throw error;
122
102
  }
123
103
  }
124
- logger?.debug("Intercepted request:");
125
- logger?.debug(JSON.stringify(request, null, 2));
104
+ logger == null ? void 0 : logger.debug("Intercepted request:");
105
+ logger == null ? void 0 : logger.debug(JSON.stringify(request, null, 2));
126
106
  return request;
127
107
  });
128
108
  }
129
- if (globalOptions?.authorizationTokenRefresh) {
109
+ if (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) {
130
110
  const refreshAuthLogic = async (failedRequest) => {
131
- logger?.debug("Failed request");
132
- logger?.debug(JSON.stringify(failedRequest, null, 2));
133
- if (!import_axios.default.isAxiosError(failedRequest)) {
134
- logger?.error("Failed request is not an axios error");
111
+ var _a, _b;
112
+ logger == null ? void 0 : logger.debug("Failed request");
113
+ logger == null ? void 0 : logger.debug(JSON.stringify(failedRequest, null, 2));
114
+ if (!_axios2.default.isAxiosError(failedRequest)) {
115
+ logger == null ? void 0 : logger.error("Failed request is not an axios error");
135
116
  return;
136
117
  }
137
118
  const axiosError = failedRequest;
138
- logger?.debug("Failed request config:");
139
- logger?.debug(JSON.stringify(axiosError.config, null, 2));
140
- const url = `${axiosError.config?.baseURL}${axiosError.config?.url}`;
141
- if (globalOptions?.authorizationTokenRefresh && url) {
142
- logger?.debug(`Refreshing token for URL ${url}`);
119
+ logger == null ? void 0 : logger.debug("Failed request config:");
120
+ logger == null ? void 0 : logger.debug(JSON.stringify(axiosError.config, null, 2));
121
+ const url = `${(_a = axiosError.config) == null ? void 0 : _a.baseURL}${(_b = axiosError.config) == null ? void 0 : _b.url}`;
122
+ if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) && url) {
123
+ logger == null ? void 0 : logger.debug(`Refreshing token for URL ${url}`);
143
124
  try {
144
- await globalOptions?.authorizationTokenRefresh(url);
125
+ await (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh(url));
145
126
  } catch (error) {
146
- logger?.error(`Error refreshing token for URL: ${url}`);
127
+ logger == null ? void 0 : logger.error(`Error refreshing token for URL: ${url}`);
147
128
  throw error;
148
129
  }
149
130
  }
150
131
  };
151
- (0, import_axios_auth_refresh.default)(axiosInstance, refreshAuthLogic);
132
+ _axiosauthrefresh2.default.call(void 0, axiosInstance, refreshAuthLogic);
152
133
  }
153
134
  if (logger) {
154
135
  axiosInstance.interceptors.request.use((request) => {
@@ -171,60 +152,35 @@ var TypedClient = (baseURL, globalOptions, logger) => {
171
152
  });
172
153
  }
173
154
  const client = {
174
- get: (url, args, opts) => callServer(
175
- axiosInstance,
176
- mergeArgs(baseURL, url, "get", args, opts, globalOptions),
177
- logger
178
- ),
179
- post: (url, args, opts) => callServer(
180
- axiosInstance,
181
- mergeArgs(baseURL, url, "post", args, opts, globalOptions),
182
- logger
183
- ),
184
- put: (url, args, opts) => callServer(
185
- axiosInstance,
186
- mergeArgs(baseURL, url, "put", args, opts, globalOptions),
187
- logger
188
- ),
189
- patch: (url, args, opts) => callServer(
190
- axiosInstance,
191
- mergeArgs(baseURL, url, "patch", args, opts, globalOptions),
192
- logger
193
- ),
194
- delete: (url, args, opts) => callServer(
195
- axiosInstance,
196
- mergeArgs(baseURL, url, "delete", args, opts, globalOptions),
197
- logger
198
- )
155
+ get: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "get", args, opts, globalOptions), logger),
156
+ post: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "post", args, opts, globalOptions), logger),
157
+ put: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "put", args, opts, globalOptions), logger),
158
+ patch: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "patch", args, opts, globalOptions), logger),
159
+ delete: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "delete", args, opts, globalOptions), logger)
199
160
  };
200
- return { ...client, axiosInstance };
161
+ return __spreadProps(__spreadValues({}, client), {axiosInstance});
201
162
  };
202
163
  var callServer = async (axiosInstance, args, logger) => {
164
+ var _a, _b;
203
165
  try {
204
166
  const serializer = paramsSerializer(args.arrayFormat);
205
- logger?.debug(`[callServer] typeof serializer: ${typeof serializer}`);
206
- logger?.debug(
207
- `[callServer] sample serialization: ${serializer({ test: ["a", "b"] })}`
208
- );
209
- const body = args.method?.toLowerCase() === "get" || args.method?.toLowerCase() === "delete" ? void 0 : args.body;
210
- const { headers, data } = await (0, import_retry.retry)(
211
- () => axiosInstance.request({
212
- baseURL: args.baseUrl,
213
- url: args.url,
214
- method: args.method,
215
- headers: args.headers,
216
- params: args.params,
217
- paramsSerializer: serializer,
218
- data: body,
219
- httpsAgent: args.httpsAgent,
220
- httpAgent: args.httpAgent,
221
- timeout: args.timeout
222
- }),
223
- args.retry
224
- );
225
- return { headers, data };
167
+ logger == null ? void 0 : logger.debug(`[callServer] typeof serializer: ${typeof serializer}`);
168
+ logger == null ? void 0 : logger.debug(`[callServer] sample serialization: ${serializer({test: ["a", "b"]})}`);
169
+ const body = ((_a = args.method) == null ? void 0 : _a.toLowerCase()) === "get" || ((_b = args.method) == null ? void 0 : _b.toLowerCase()) === "delete" ? void 0 : args.body;
170
+ const {headers, data} = await _retry.retry.call(void 0, () => axiosInstance.request({
171
+ baseURL: args.baseUrl,
172
+ url: args.url,
173
+ method: args.method,
174
+ headers: args.headers,
175
+ params: args.params,
176
+ paramsSerializer: serializer,
177
+ data: body,
178
+ httpsAgent: args.httpsAgent,
179
+ httpAgent: args.httpAgent
180
+ }), args.retry);
181
+ return {headers, data};
226
182
  } catch (error) {
227
- throw (0, import_openapi_core.fromAxiosError)(error);
183
+ throw _openapicore.fromAxiosError.call(void 0, error);
228
184
  }
229
185
  };
230
186
  var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
@@ -241,23 +197,66 @@ var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
241
197
  headers,
242
198
  body,
243
199
  retry: retry2,
244
- arrayFormat: global?.arrayFormat,
245
- httpsAgent: extras?.httpsAgent,
246
- httpAgent: extras?.httpAgent,
247
- timeout: extras?.timeout ?? global?.timeout
200
+ arrayFormat: global == null ? void 0 : global.arrayFormat,
201
+ httpsAgent: extras == null ? void 0 : extras.httpsAgent,
202
+ httpAgent: extras == null ? void 0 : extras.httpAgent
248
203
  };
249
204
  return merged;
250
205
  };
251
- var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => a?.[prop] || {}));
252
- var setParams = (url, params = {}) => Object.entries(params).reduce(
253
- (url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`),
254
- url
255
- );
206
+ var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => (a == null ? void 0 : a[prop]) || {}));
207
+ var setParams = (url, params = {}) => Object.entries(params).reduce((url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`), url);
256
208
 
257
209
  // src/index.ts
258
- __reExport(index_exports, require("@sebspark/retry"), module.exports);
259
- // Annotate the CommonJS export names for ESM import in node:
260
- 0 && (module.exports = {
261
- TypedClient,
262
- ...require("@sebspark/retry")
263
- });
210
+
211
+
212
+ // src/graphql/client.ts
213
+
214
+
215
+
216
+ var _openapiauthiam = require('@sebspark/openapi-auth-iam');
217
+ var GatewayGraphqlClient = class {
218
+ constructor(args) {
219
+ this.uri = args.uri;
220
+ this.logger = args.logger;
221
+ this.options = {
222
+ timeout: 10 * 1e3,
223
+ authorizationTokenGenerator: async (url) => {
224
+ this.logger.debug(`Generating token for: ${this.uri}`);
225
+ return _openapiauthiam.apiGatewayTokenByUrlGenerator.call(void 0, args.apiKey)(url);
226
+ },
227
+ authorizationTokenRefresh: async (url) => {
228
+ this.logger.debug(`Refreshing token for: ${this.uri}`);
229
+ return _openapiauthiam.apiGatewayTokenRefresh.call(void 0, )(url);
230
+ }
231
+ };
232
+ this.client = TypedClient(args.uri, this.options, this.logger);
233
+ }
234
+ async graphql(query, variables) {
235
+ try {
236
+ const response = await this.client.post("/graphql", {
237
+ body: {query: query.trim(), variables}
238
+ });
239
+ if (response.data.errors) {
240
+ this.logger.error(`Error posting graphql query to: ${this.uri}`);
241
+ throw new Error(response.data.errors.map((e) => e.message).join("\n"));
242
+ }
243
+ return response.data.data;
244
+ } catch (error) {
245
+ this.logger.error(`Error posting graphql: ${this.uri}`);
246
+ throw error;
247
+ }
248
+ }
249
+ async isHealthy() {
250
+ try {
251
+ await this.client.get("/health");
252
+ return true;
253
+ } catch (error) {
254
+ this.logger.error(error);
255
+ }
256
+ return false;
257
+ }
258
+ };
259
+
260
+
261
+
262
+ exports.GatewayGraphqlClient = GatewayGraphqlClient; exports.TypedClient = TypedClient;
package/dist/index.mjs CHANGED
@@ -1,8 +1,26 @@
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
+
1
21
  // src/client.ts
2
- import {
3
- fromAxiosError
4
- } from "@sebspark/openapi-core";
5
- import { retry } from "@sebspark/retry";
22
+ import {fromAxiosError} from "@sebspark/openapi-core";
23
+ import {retry} from "@sebspark/retry";
6
24
  import axios from "axios";
7
25
  import createAuthRefreshInterceptor from "axios-auth-refresh";
8
26
 
@@ -62,53 +80,51 @@ var paramsSerializer = (format) => (params) => {
62
80
  // src/client.ts
63
81
  var TypedClient = (baseURL, globalOptions, logger) => {
64
82
  const axiosInstance = axios.create();
65
- logger?.debug(
66
- "client initialized with arrayFormat",
67
- globalOptions?.arrayFormat
68
- );
69
- if (globalOptions?.authorizationTokenGenerator) {
70
- logger?.debug("authorizationTokenGenerator is set");
83
+ logger == null ? void 0 : logger.debug("client initialized with arrayFormat", globalOptions == null ? void 0 : globalOptions.arrayFormat);
84
+ if (globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) {
85
+ logger == null ? void 0 : logger.debug("authorizationTokenGenerator is set");
71
86
  axiosInstance.interceptors.request.use(async (request) => {
72
87
  const url = `${request.baseURL}${request.url}`;
73
- logger?.debug(`Intercepting request to ${url}`);
74
- if (globalOptions?.authorizationTokenGenerator && url) {
88
+ logger == null ? void 0 : logger.debug(`Intercepting request to ${url}`);
89
+ if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenGenerator) && url) {
75
90
  try {
76
91
  const authorizationTokenHeaders = await globalOptions.authorizationTokenGenerator(url);
77
92
  if (authorizationTokenHeaders) {
78
93
  for (const key of Object.keys(authorizationTokenHeaders)) {
79
94
  const value = authorizationTokenHeaders[key];
80
- logger?.debug(`Setting header ${key} to ${value}`);
95
+ logger == null ? void 0 : logger.debug(`Setting header ${key} to ${value}`);
81
96
  request.headers[key] = value;
82
97
  }
83
98
  }
84
99
  } catch (error) {
85
- logger?.error(`Error generating token for URL: ${url}`);
100
+ logger == null ? void 0 : logger.error(`Error generating token for URL: ${url}`);
86
101
  throw error;
87
102
  }
88
103
  }
89
- logger?.debug("Intercepted request:");
90
- logger?.debug(JSON.stringify(request, null, 2));
104
+ logger == null ? void 0 : logger.debug("Intercepted request:");
105
+ logger == null ? void 0 : logger.debug(JSON.stringify(request, null, 2));
91
106
  return request;
92
107
  });
93
108
  }
94
- if (globalOptions?.authorizationTokenRefresh) {
109
+ if (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) {
95
110
  const refreshAuthLogic = async (failedRequest) => {
96
- logger?.debug("Failed request");
97
- logger?.debug(JSON.stringify(failedRequest, null, 2));
111
+ var _a, _b;
112
+ logger == null ? void 0 : logger.debug("Failed request");
113
+ logger == null ? void 0 : logger.debug(JSON.stringify(failedRequest, null, 2));
98
114
  if (!axios.isAxiosError(failedRequest)) {
99
- logger?.error("Failed request is not an axios error");
115
+ logger == null ? void 0 : logger.error("Failed request is not an axios error");
100
116
  return;
101
117
  }
102
118
  const axiosError = failedRequest;
103
- logger?.debug("Failed request config:");
104
- logger?.debug(JSON.stringify(axiosError.config, null, 2));
105
- const url = `${axiosError.config?.baseURL}${axiosError.config?.url}`;
106
- if (globalOptions?.authorizationTokenRefresh && url) {
107
- logger?.debug(`Refreshing token for URL ${url}`);
119
+ logger == null ? void 0 : logger.debug("Failed request config:");
120
+ logger == null ? void 0 : logger.debug(JSON.stringify(axiosError.config, null, 2));
121
+ const url = `${(_a = axiosError.config) == null ? void 0 : _a.baseURL}${(_b = axiosError.config) == null ? void 0 : _b.url}`;
122
+ if ((globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh) && url) {
123
+ logger == null ? void 0 : logger.debug(`Refreshing token for URL ${url}`);
108
124
  try {
109
- await globalOptions?.authorizationTokenRefresh(url);
125
+ await (globalOptions == null ? void 0 : globalOptions.authorizationTokenRefresh(url));
110
126
  } catch (error) {
111
- logger?.error(`Error refreshing token for URL: ${url}`);
127
+ logger == null ? void 0 : logger.error(`Error refreshing token for URL: ${url}`);
112
128
  throw error;
113
129
  }
114
130
  }
@@ -136,58 +152,33 @@ var TypedClient = (baseURL, globalOptions, logger) => {
136
152
  });
137
153
  }
138
154
  const client = {
139
- get: (url, args, opts) => callServer(
140
- axiosInstance,
141
- mergeArgs(baseURL, url, "get", args, opts, globalOptions),
142
- logger
143
- ),
144
- post: (url, args, opts) => callServer(
145
- axiosInstance,
146
- mergeArgs(baseURL, url, "post", args, opts, globalOptions),
147
- logger
148
- ),
149
- put: (url, args, opts) => callServer(
150
- axiosInstance,
151
- mergeArgs(baseURL, url, "put", args, opts, globalOptions),
152
- logger
153
- ),
154
- patch: (url, args, opts) => callServer(
155
- axiosInstance,
156
- mergeArgs(baseURL, url, "patch", args, opts, globalOptions),
157
- logger
158
- ),
159
- delete: (url, args, opts) => callServer(
160
- axiosInstance,
161
- mergeArgs(baseURL, url, "delete", args, opts, globalOptions),
162
- logger
163
- )
155
+ get: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "get", args, opts, globalOptions), logger),
156
+ post: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "post", args, opts, globalOptions), logger),
157
+ put: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "put", args, opts, globalOptions), logger),
158
+ patch: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "patch", args, opts, globalOptions), logger),
159
+ delete: (url, args, opts) => callServer(axiosInstance, mergeArgs(baseURL, url, "delete", args, opts, globalOptions), logger)
164
160
  };
165
- return { ...client, axiosInstance };
161
+ return __spreadProps(__spreadValues({}, client), {axiosInstance});
166
162
  };
167
163
  var callServer = async (axiosInstance, args, logger) => {
164
+ var _a, _b;
168
165
  try {
169
166
  const serializer = paramsSerializer(args.arrayFormat);
170
- logger?.debug(`[callServer] typeof serializer: ${typeof serializer}`);
171
- logger?.debug(
172
- `[callServer] sample serialization: ${serializer({ test: ["a", "b"] })}`
173
- );
174
- const body = args.method?.toLowerCase() === "get" || args.method?.toLowerCase() === "delete" ? void 0 : args.body;
175
- const { headers, data } = await retry(
176
- () => axiosInstance.request({
177
- baseURL: args.baseUrl,
178
- url: args.url,
179
- method: args.method,
180
- headers: args.headers,
181
- params: args.params,
182
- paramsSerializer: serializer,
183
- data: body,
184
- httpsAgent: args.httpsAgent,
185
- httpAgent: args.httpAgent,
186
- timeout: args.timeout
187
- }),
188
- args.retry
189
- );
190
- return { headers, data };
167
+ logger == null ? void 0 : logger.debug(`[callServer] typeof serializer: ${typeof serializer}`);
168
+ logger == null ? void 0 : logger.debug(`[callServer] sample serialization: ${serializer({test: ["a", "b"]})}`);
169
+ const body = ((_a = args.method) == null ? void 0 : _a.toLowerCase()) === "get" || ((_b = args.method) == null ? void 0 : _b.toLowerCase()) === "delete" ? void 0 : args.body;
170
+ const {headers, data} = await retry(() => axiosInstance.request({
171
+ baseURL: args.baseUrl,
172
+ url: args.url,
173
+ method: args.method,
174
+ headers: args.headers,
175
+ params: args.params,
176
+ paramsSerializer: serializer,
177
+ data: body,
178
+ httpsAgent: args.httpsAgent,
179
+ httpAgent: args.httpAgent
180
+ }), args.retry);
181
+ return {headers, data};
191
182
  } catch (error) {
192
183
  throw fromAxiosError(error);
193
184
  }
@@ -206,21 +197,66 @@ var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
206
197
  headers,
207
198
  body,
208
199
  retry: retry2,
209
- arrayFormat: global?.arrayFormat,
210
- httpsAgent: extras?.httpsAgent,
211
- httpAgent: extras?.httpAgent,
212
- timeout: extras?.timeout ?? global?.timeout
200
+ arrayFormat: global == null ? void 0 : global.arrayFormat,
201
+ httpsAgent: extras == null ? void 0 : extras.httpsAgent,
202
+ httpAgent: extras == null ? void 0 : extras.httpAgent
213
203
  };
214
204
  return merged;
215
205
  };
216
- var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => a?.[prop] || {}));
217
- var setParams = (url, params = {}) => Object.entries(params).reduce(
218
- (url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`),
219
- url
220
- );
206
+ var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => (a == null ? void 0 : a[prop]) || {}));
207
+ var setParams = (url, params = {}) => Object.entries(params).reduce((url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`), url);
221
208
 
222
209
  // src/index.ts
223
210
  export * from "@sebspark/retry";
211
+
212
+ // src/graphql/client.ts
213
+ import {
214
+ apiGatewayTokenByUrlGenerator,
215
+ apiGatewayTokenRefresh
216
+ } from "@sebspark/openapi-auth-iam";
217
+ var GatewayGraphqlClient = class {
218
+ constructor(args) {
219
+ this.uri = args.uri;
220
+ this.logger = args.logger;
221
+ this.options = {
222
+ timeout: 10 * 1e3,
223
+ authorizationTokenGenerator: async (url) => {
224
+ this.logger.debug(`Generating token for: ${this.uri}`);
225
+ return apiGatewayTokenByUrlGenerator(args.apiKey)(url);
226
+ },
227
+ authorizationTokenRefresh: async (url) => {
228
+ this.logger.debug(`Refreshing token for: ${this.uri}`);
229
+ return apiGatewayTokenRefresh()(url);
230
+ }
231
+ };
232
+ this.client = TypedClient(args.uri, this.options, this.logger);
233
+ }
234
+ async graphql(query, variables) {
235
+ try {
236
+ const response = await this.client.post("/graphql", {
237
+ body: {query: query.trim(), variables}
238
+ });
239
+ if (response.data.errors) {
240
+ this.logger.error(`Error posting graphql query to: ${this.uri}`);
241
+ throw new Error(response.data.errors.map((e) => e.message).join("\n"));
242
+ }
243
+ return response.data.data;
244
+ } catch (error) {
245
+ this.logger.error(`Error posting graphql: ${this.uri}`);
246
+ throw error;
247
+ }
248
+ }
249
+ async isHealthy() {
250
+ try {
251
+ await this.client.get("/health");
252
+ return true;
253
+ } catch (error) {
254
+ this.logger.error(error);
255
+ }
256
+ return false;
257
+ }
258
+ };
224
259
  export {
260
+ GatewayGraphqlClient,
225
261
  TypedClient
226
262
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/openapi-client",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -19,14 +19,16 @@
19
19
  },
20
20
  "devDependencies": {
21
21
  "@sebspark/openapi-typegen": "*",
22
- "nock": "14.0.4",
22
+ "nock": "14.0.5",
23
23
  "tsconfig": "*",
24
- "vitest": "3.1.2"
24
+ "tsup-node": "^0.1.0",
25
+ "vitest": "3.2.4"
25
26
  },
26
27
  "dependencies": {
28
+ "@sebspark/openapi-auth-iam": "*",
27
29
  "@sebspark/openapi-core": "*",
28
30
  "@sebspark/retry": "*",
29
- "axios": "1.9.0",
31
+ "axios": "1.10.0",
30
32
  "axios-auth-refresh": "3.3.6"
31
33
  }
32
34
  }
package/dist/index.d.mts DELETED
@@ -1,11 +0,0 @@
1
- import { BaseClient, ClientOptions } from '@sebspark/openapi-core';
2
- import { AxiosInstance } from 'axios';
3
- import { Logger } from 'winston';
4
- export * from '@sebspark/retry';
5
-
6
- type TypedAxiosClient<T> = T & {
7
- axiosInstance: AxiosInstance;
8
- };
9
- declare const TypedClient: <C extends Partial<BaseClient>>(baseURL: string, globalOptions?: ClientOptions, logger?: Logger) => TypedAxiosClient<C>;
10
-
11
- export { type TypedAxiosClient, TypedClient };