@sebspark/openapi-client
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.mjs","names":[],"sources":["../src/paramsSerializer.ts","../src/client.ts","../src/graphql/client.ts"],"sourcesContent":["import type { ArrayFormat } from '@sebspark/openapi-core'\n\ntype Param = boolean | string | number | Date | undefined | Array<Param>\ntype Params = Record<string, Param>\n\nconst encodeParam = (param: string) => encodeURIComponent(param)\nconst encodeValue = (param: Param, encodeCommas = false) => {\n if (param instanceof Date) {\n return encodeURIComponent(param.toISOString())\n }\n if (\n typeof param === 'number' ||\n typeof param === 'string' ||\n typeof param === 'boolean'\n ) {\n if (encodeCommas) {\n return encodeURIComponent(param)\n }\n\n return param\n .toString()\n .split(',')\n .map((p) => encodeURIComponent(p))\n .join(',')\n }\n\n return ''\n}\n\nexport const paramsSerializer = (format?: ArrayFormat) => (params?: Params) => {\n if (!params) {\n return ''\n }\n\n const s = []\n\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) {\n continue\n }\n\n if (Array.isArray(value)) {\n const title = encodeParam(key)\n\n if (format === 'comma') {\n s.push(`${title}=${value.map((v) => encodeValue(v, true)).join(',')}`)\n continue\n }\n\n value.forEach((v, ix) => {\n const value = encodeValue(v)\n\n switch (format) {\n case 'indices': {\n s.push(`${title}[${ix}]=${value}`)\n break\n }\n case 'repeat': {\n s.push(`${title}=${value}`)\n break\n }\n default: {\n s.push(`${title}[]=${value}`)\n break\n }\n }\n })\n } else {\n s.push(`${encodeParam(key)}=${encodeValue(value)}`)\n }\n }\n\n return s.join('&')\n}\n","import type {\n APIResponse,\n BaseClient,\n ClientOptions,\n RequestArgs,\n RequestOptions,\n} from '@sebspark/openapi-core'\nimport { fromAxiosError } from '@sebspark/openapi-core'\nimport { getLogger } from '@sebspark/otel'\nimport { retry } from '@sebspark/retry'\nimport type {\n AxiosError,\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n} from 'axios'\nimport axios from 'axios'\nimport createAuthRefreshInterceptor from 'axios-auth-refresh'\nimport { paramsSerializer } from './paramsSerializer'\n\nconst createAuthRefreshInterceptorFunc =\n (\n createAuthRefreshInterceptor as unknown as {\n default: typeof createAuthRefreshInterceptor\n }\n )?.default ?? createAuthRefreshInterceptor\n\nexport type TypedAxiosClient<T> = T & {\n axiosInstance: AxiosInstance\n}\n\nexport const TypedClient = <C extends Partial<BaseClient>>(\n baseURL: string,\n globalOptions?: ClientOptions\n): TypedAxiosClient<C> => {\n const axiosInstance = axios.create()\n\n const logger = getLogger('TypedClient')\n\n if (globalOptions?.authorizationTokenGenerator) {\n logger.debug('authorizationTokenGenerator is set')\n\n axiosInstance.interceptors.request.use(async (request) => {\n const url = `${request.baseURL}${request.url}`\n logger.debug(`Intercepting request to ${url}`)\n\n /* istanbul ignore else */\n if (globalOptions?.authorizationTokenGenerator && url) {\n try {\n const authorizationTokenHeaders =\n await globalOptions.authorizationTokenGenerator(url)\n\n if (authorizationTokenHeaders) {\n for (const key of Object.keys(authorizationTokenHeaders)) {\n const value = authorizationTokenHeaders[key]\n request.headers[key] = value\n }\n }\n } catch (error) {\n logger.error(`Error generating token for URL: ${url}`, error as Error)\n throw error\n }\n }\n return request\n })\n }\n\n if (globalOptions?.authorizationTokenRefresh) {\n const refreshAuthLogic = async (\n // biome-ignore lint/suspicious/noExplicitAny: Defined by dependency\n failedRequest: any\n ): Promise<AxiosResponse> => {\n /* istanbul ignore else */\n if (axios.isAxiosError(failedRequest)) {\n logger.debug('Failed request', failedRequest)\n } else {\n logger.error(\n 'Failed request is not an axios error',\n failedRequest as Error\n )\n throw failedRequest\n }\n\n const axiosError = failedRequest as AxiosError\n\n logger.debug('Failed request config', axiosError.config)\n\n /* istanbul ignore next */\n const url = `${axiosError.config?.baseURL}${axiosError.config?.url}`\n /* istanbul ignore else */\n if (globalOptions?.authorizationTokenRefresh && url) {\n logger.debug(`Refreshing token for URL ${url}`)\n try {\n await globalOptions.authorizationTokenRefresh(url)\n } catch (error) {\n logger.error(`Error refreshing token for URL: ${url}`, error as Error)\n throw error\n }\n }\n\n return axiosError.response as AxiosResponse\n }\n\n createAuthRefreshInterceptorFunc(axiosInstance, refreshAuthLogic)\n }\n\n const client: BaseClient = {\n get: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'get', args, opts, globalOptions),\n logger\n ),\n post: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'post', args, opts, globalOptions),\n logger\n ),\n put: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'put', args, opts, globalOptions),\n logger\n ),\n patch: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'patch', args, opts, globalOptions),\n logger\n ),\n delete: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'delete', args, opts, globalOptions),\n logger\n ),\n }\n\n return { ...client, axiosInstance } as TypedAxiosClient<C>\n}\n\nconst callServer = async <\n R extends APIResponse<\n unknown | undefined,\n Record<string, string> | undefined\n >,\n>(\n axiosInstance: AxiosInstance,\n args: Partial<ClientOptions & RequestArgs>,\n _logger: ReturnType<typeof getLogger>\n): Promise<R> => {\n try {\n const serializer = paramsSerializer((args as ClientOptions).arrayFormat)\n\n const body =\n args.method?.toLowerCase() === 'get' ||\n args.method?.toLowerCase() === 'delete'\n ? undefined\n : args.body\n const { headers, data } = await retry(\n () =>\n axiosInstance.request({\n baseURL: args.baseUrl,\n url: args.url,\n method: args.method,\n headers: args.headers as AxiosRequestConfig['headers'],\n params: args.params,\n paramsSerializer: serializer,\n data: body,\n httpsAgent: args.httpsAgent,\n httpAgent: args.httpAgent,\n }),\n args.retry\n )\n return { headers, data } as R\n } catch (error) {\n throw fromAxiosError(error as AxiosError)\n }\n}\n\nconst mergeArgs = (\n baseUrl: string,\n url: string,\n method: string,\n requestArgs: RequestArgs | RequestOptions | undefined,\n extras: RequestOptions | undefined,\n global: ClientOptions | undefined\n): Partial<ClientOptions & RequestArgs> => {\n const params = merge('params', global, requestArgs, extras)\n const query = merge('query', global, requestArgs, extras)\n const headers = merge('headers', global, requestArgs, extras)\n const body = merge('body', global, requestArgs, extras)\n const retry = merge('retry', global, requestArgs, extras)\n const merged: Partial<ClientOptions & RequestArgs> = {\n url: setParams(url, params),\n baseUrl,\n method,\n params: query,\n headers,\n body,\n retry,\n arrayFormat: global?.arrayFormat,\n httpsAgent: extras?.httpsAgent,\n httpAgent: extras?.httpAgent,\n }\n\n return merged\n}\n\nconst merge = (\n prop: keyof (ClientOptions & RequestArgs),\n // biome-ignore lint/suspicious/noExplicitAny: it is any\n ...args: (any | undefined)[]\n // biome-ignore lint/suspicious/noExplicitAny: it is any\n): any => Object.assign({}, ...args.map((a) => a?.[prop] || {}))\n\nconst setParams = (url: string, params: Record<string, string> = {}): string =>\n Object.entries(params).reduce(\n (url, [key, val]) =>\n url.replace(new RegExp(`/:${key}(?!\\\\w|\\\\d)`, 'g'), `/${val}`),\n url\n )\n","import type { ClientOptions } from '@sebspark/openapi-core'\nimport { getLogger } from '@sebspark/otel'\nimport { TypedClient } from '../client'\nimport type {\n GatewayGraphqlClientArgs,\n GatewayGraphqlClient as GatewayGraphqlClientType,\n} from './types'\n\nexport class GatewayGraphqlClient<\n T extends GatewayGraphqlClientType = GatewayGraphqlClientType,\n> {\n public client: T\n public logger: ReturnType<typeof getLogger>\n private uri: string\n private options: ClientOptions\n\n constructor(args: GatewayGraphqlClientArgs) {\n this.uri = args.uri\n this.logger = getLogger('GatewayGraphqlClient')\n this.options = {\n headers: {\n 'x-api-key': args.apiKey,\n },\n }\n this.client = TypedClient<T>(args.uri, this.options)\n }\n\n public async graphql<K>(query: string, variables?: Record<string, unknown>) {\n try {\n const response = await this.client.post('/graphql', {\n body: { query: query.trim(), variables },\n })\n\n if (response.data.errors) {\n this.logger.error(`Error posting graphql query to: ${this.uri}`)\n throw new Error(response.data.errors.map((e) => e.message).join('\\n'))\n }\n\n return response.data.data as K\n } catch (error) {\n this.logger.error(`Error posting graphql: ${this.uri}`)\n throw error\n }\n }\n\n public async isHealthy() {\n try {\n await this.client.get('/health')\n return true\n } catch (error) {\n this.logger.error(error as Error)\n }\n return false\n }\n}\n"],"mappings":"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"} | ||
| {"version":3,"file":"index.mjs","names":[],"sources":["../src/paramsSerializer.ts","../src/client.ts","../src/graphql/client.ts"],"sourcesContent":["import type { ArrayFormat } from '@sebspark/openapi-core'\n\ntype Param = boolean | string | number | Date | undefined | Array<Param>\ntype Params = Record<string, Param>\n\nconst encodeParam = (param: string) => encodeURIComponent(param)\nconst encodeValue = (param: Param, encodeCommas = false) => {\n if (param instanceof Date) {\n return encodeURIComponent(param.toISOString())\n }\n if (\n typeof param === 'number' ||\n typeof param === 'string' ||\n typeof param === 'boolean'\n ) {\n if (encodeCommas) {\n return encodeURIComponent(param)\n }\n\n return param\n .toString()\n .split(',')\n .map((p) => encodeURIComponent(p))\n .join(',')\n }\n\n return ''\n}\n\nexport const paramsSerializer = (format?: ArrayFormat) => (params?: Params) => {\n if (!params) {\n return ''\n }\n\n const s = []\n\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) {\n continue\n }\n\n if (Array.isArray(value)) {\n const title = encodeParam(key)\n\n if (format === 'comma') {\n s.push(`${title}=${value.map((v) => encodeValue(v, true)).join(',')}`)\n continue\n }\n\n value.forEach((v, ix) => {\n const value = encodeValue(v)\n\n switch (format) {\n case 'indices': {\n s.push(`${title}[${ix}]=${value}`)\n break\n }\n case 'repeat': {\n s.push(`${title}=${value}`)\n break\n }\n default: {\n s.push(`${title}[]=${value}`)\n break\n }\n }\n })\n } else {\n s.push(`${encodeParam(key)}=${encodeValue(value)}`)\n }\n }\n\n return s.join('&')\n}\n","import type {\n APIResponse,\n BaseClient,\n ClientOptions,\n RequestArgs,\n RequestOptions,\n} from '@sebspark/openapi-core'\nimport { fromAxiosError } from '@sebspark/openapi-core'\nimport { getLogger } from '@sebspark/otel'\nimport { retry } from '@sebspark/retry'\nimport type {\n AxiosError,\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n} from 'axios'\nimport axios from 'axios'\nimport createAuthRefreshInterceptor from 'axios-auth-refresh'\nimport { paramsSerializer } from './paramsSerializer'\n\nconst createAuthRefreshInterceptorFunc =\n (\n createAuthRefreshInterceptor as unknown as {\n default: typeof createAuthRefreshInterceptor\n }\n )?.default ?? createAuthRefreshInterceptor\n\nexport type TypedAxiosClient<T> = T & {\n axiosInstance: AxiosInstance\n}\n\nexport const TypedClient = <C extends Partial<BaseClient>>(\n baseURL: string,\n globalOptions?: ClientOptions\n): TypedAxiosClient<C> => {\n const axiosInstance = axios.create()\n\n const logger = getLogger('TypedClient')\n\n if (globalOptions?.authorizationTokenGenerator) {\n logger.debug('authorizationTokenGenerator is set')\n\n axiosInstance.interceptors.request.use(async (request) => {\n const url = `${request.baseURL}${request.url}`\n logger.debug(`Intercepting request to ${url}`)\n\n /* istanbul ignore else */\n if (globalOptions?.authorizationTokenGenerator && url) {\n try {\n const authorizationTokenHeaders =\n await globalOptions.authorizationTokenGenerator(url)\n\n if (authorizationTokenHeaders) {\n for (const key of Object.keys(authorizationTokenHeaders)) {\n const value = authorizationTokenHeaders[key]\n request.headers[key] = value\n }\n }\n } catch (error) {\n logger.error(`Error generating token for URL: ${url}`, error as Error)\n throw error\n }\n }\n return request\n })\n }\n\n if (globalOptions?.authorizationTokenRefresh) {\n const refreshAuthLogic = async (\n // biome-ignore lint/suspicious/noExplicitAny: Defined by dependency\n failedRequest: any\n ): Promise<AxiosResponse> => {\n /* istanbul ignore else */\n if (axios.isAxiosError(failedRequest)) {\n logger.debug('Failed request', failedRequest)\n } else {\n logger.error(\n 'Failed request is not an axios error',\n failedRequest as Error\n )\n throw failedRequest\n }\n\n const axiosError = failedRequest as AxiosError\n\n logger.debug('Failed request config', axiosError.config)\n\n /* istanbul ignore next */\n const url = `${axiosError.config?.baseURL}${axiosError.config?.url}`\n /* istanbul ignore else */\n if (globalOptions?.authorizationTokenRefresh && url) {\n logger.debug(`Refreshing token for URL ${url}`)\n try {\n await globalOptions.authorizationTokenRefresh(url)\n } catch (error) {\n logger.error(`Error refreshing token for URL: ${url}`, error as Error)\n throw error\n }\n }\n\n return axiosError.response as AxiosResponse\n }\n\n createAuthRefreshInterceptorFunc(axiosInstance, refreshAuthLogic)\n }\n\n const client: BaseClient = {\n get: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'get', args, opts, globalOptions),\n logger\n ),\n post: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'post', args, opts, globalOptions),\n logger\n ),\n put: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'put', args, opts, globalOptions),\n logger\n ),\n patch: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'patch', args, opts, globalOptions),\n logger\n ),\n delete: (url, args, opts) =>\n callServer(\n axiosInstance,\n mergeArgs(baseURL, url, 'delete', args, opts, globalOptions),\n logger\n ),\n }\n\n return { ...client, axiosInstance } as TypedAxiosClient<C>\n}\n\nconst callServer = async <\n R extends APIResponse<\n unknown | undefined,\n Record<string, string> | undefined\n >,\n>(\n axiosInstance: AxiosInstance,\n args: Partial<ClientOptions & RequestArgs>,\n _logger: ReturnType<typeof getLogger>\n): Promise<R> => {\n try {\n const serializer = paramsSerializer((args as ClientOptions).arrayFormat)\n\n const body =\n args.method?.toLowerCase() === 'get' ||\n args.method?.toLowerCase() === 'delete'\n ? undefined\n : args.body\n const { headers, data } = await retry(\n () =>\n axiosInstance.request({\n baseURL: args.baseUrl,\n url: args.url,\n method: args.method,\n headers: args.headers as AxiosRequestConfig['headers'],\n params: args.params,\n paramsSerializer: serializer,\n data: body,\n httpsAgent: args.httpsAgent,\n httpAgent: args.httpAgent,\n }),\n args.retry\n )\n return { headers, data } as R\n } catch (error) {\n throw fromAxiosError(error)\n }\n}\n\nconst mergeArgs = (\n baseUrl: string,\n url: string,\n method: string,\n requestArgs: RequestArgs | RequestOptions | undefined,\n extras: RequestOptions | undefined,\n global: ClientOptions | undefined\n): Partial<ClientOptions & RequestArgs> => {\n const params = merge('params', global, requestArgs, extras)\n const query = merge('query', global, requestArgs, extras)\n const headers = merge('headers', global, requestArgs, extras)\n const body = merge('body', global, requestArgs, extras)\n const retry = merge('retry', global, requestArgs, extras)\n const merged: Partial<ClientOptions & RequestArgs> = {\n url: setParams(url, params),\n baseUrl,\n method,\n params: query,\n headers,\n body,\n retry,\n arrayFormat: global?.arrayFormat,\n httpsAgent: extras?.httpsAgent,\n httpAgent: extras?.httpAgent,\n }\n\n return merged\n}\n\nconst merge = (\n prop: keyof (ClientOptions & RequestArgs),\n // biome-ignore lint/suspicious/noExplicitAny: it is any\n ...args: (any | undefined)[]\n // biome-ignore lint/suspicious/noExplicitAny: it is any\n): any => Object.assign({}, ...args.map((a) => a?.[prop] || {}))\n\nconst setParams = (url: string, params: Record<string, string> = {}): string =>\n Object.entries(params).reduce(\n (url, [key, val]) =>\n url.replace(new RegExp(`/:${key}(?!\\\\w|\\\\d)`, 'g'), `/${val}`),\n url\n )\n","import type { ClientOptions } from '@sebspark/openapi-core'\nimport { getLogger } from '@sebspark/otel'\nimport { TypedClient } from '../client'\nimport type {\n GatewayGraphqlClientArgs,\n GatewayGraphqlClient as GatewayGraphqlClientType,\n} from './types'\n\nexport class GatewayGraphqlClient<\n T extends GatewayGraphqlClientType = GatewayGraphqlClientType,\n> {\n public client: T\n public logger: ReturnType<typeof getLogger>\n private uri: string\n private options: ClientOptions\n\n constructor(args: GatewayGraphqlClientArgs) {\n this.uri = args.uri\n this.logger = getLogger('GatewayGraphqlClient')\n this.options = {\n headers: {\n 'x-api-key': args.apiKey,\n },\n }\n this.client = TypedClient<T>(args.uri, this.options)\n }\n\n public async graphql<K>(query: string, variables?: Record<string, unknown>) {\n try {\n const response = await this.client.post('/graphql', {\n body: { query: query.trim(), variables },\n })\n\n if (response.data.errors) {\n this.logger.error(`Error posting graphql query to: ${this.uri}`)\n throw new Error(response.data.errors.map((e) => e.message).join('\\n'))\n }\n\n return response.data.data as K\n } catch (error) {\n this.logger.error(`Error posting graphql: ${this.uri}`)\n throw error\n }\n }\n\n public async isHealthy() {\n try {\n await this.client.get('/health')\n return true\n } catch (error) {\n this.logger.error(error as Error)\n }\n return false\n }\n}\n"],"mappings":"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"} |
+4
-4
| { | ||
| "name": "@sebspark/openapi-client", | ||
| "version": "4.2.7", | ||
| "version": "4.2.8", | ||
| "license": "Apache-2.0", | ||
@@ -28,3 +28,3 @@ "type": "module", | ||
| "devDependencies": { | ||
| "@sebspark/openapi-typegen": "5.1.4", | ||
| "@sebspark/openapi-typegen": "5.1.5", | ||
| "express": "5.2.1", | ||
@@ -34,4 +34,4 @@ "nock": "15.0.0" | ||
| "dependencies": { | ||
| "@sebspark/openapi-core": "4.1.15", | ||
| "@sebspark/otel": "4.1.5", | ||
| "@sebspark/openapi-core": "4.1.16", | ||
| "@sebspark/otel": "4.1.6", | ||
| "@sebspark/retry": "1.0.13", | ||
@@ -38,0 +38,0 @@ "axios": "1.16.0", |
36570
-0.04%+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
Updated