/** * Swagger Petstore - OpenAPI 3.0Lib * * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). */ import { createAuthProviderFromConfig } from './authProvider.js'; import { PetstoreAuthManager } from './petstoreAuthManager.js'; import { AuthParams, ClientInterface, SdkRequestBuilder, SdkRequestBuilderFactory, Server, } from './clientInterface.js'; import { Configuration, Environment } from './configuration.js'; import { DEFAULT_CONFIGURATION, DEFAULT_RETRY_CONFIG, DEFAULT_LOGGING_OPTIONS, } from './defaultConfiguration.js'; import { ApiLogger, LoggingOptions, mergeLoggingOptions } from './core.js'; import { ApiError } from './core.js'; import { setHeader } from './core.js'; import { updateUserAgent } from './core.js'; import { AbortError, AuthenticatorInterface, createRequestBuilderFactory, HttpClientInterface, RetryConfiguration, XmlSerializerInterface, } from './core.js'; import { XmlSerialization } from '@apimatic/xml-adapter'; import { HttpClient } from './clientAdapter.js'; export class Client implements ClientInterface { private _config: Readonly; private _timeout: number; private _retryConfig: RetryConfiguration; private _loggingOp: LoggingOptions; private _requestBuilderFactory: SdkRequestBuilderFactory; private _userAgent: string; public petstoreAuthManager?: PetstoreAuthManager; constructor(config?: Partial) { this._config = { ...DEFAULT_CONFIGURATION, ...config, }; this._retryConfig = { ...DEFAULT_RETRY_CONFIG, ...this._config.httpClientOptions?.retryConfig, }; this._loggingOp = this._config.logging ? mergeLoggingOptions(this._config.logging ?? {}) : mergeLoggingOptions( this._config.logging ?? {}, DEFAULT_LOGGING_OPTIONS ); this._timeout = typeof this._config.httpClientOptions?.timeout != 'undefined' ? this._config.httpClientOptions.timeout : this._config.timeout; this._userAgent = updateUserAgent( 'TypeScript-SDK/1.0.35 (OS: {os-info}, Engine: {engine}/{engine-version})' ); this._requestBuilderFactory = createRequestHandlerFactory( (server) => getBaseUri(server, this._config), createAuthProviderFromConfig( this._config, () => this.petstoreAuthManager ), new HttpClient(AbortError, { timeout: this._timeout, clientConfigOverrides: this._config.unstable_httpClientOptions, httpAgent: this._config.httpClientOptions?.httpAgent, httpsAgent: this._config.httpClientOptions?.httpsAgent, proxySettings: this._config.httpClientOptions?.proxySettings, }), [ withErrorHandlers, withUserAgent(this._userAgent), withAuthenticationByDefault, ], this._retryConfig, new XmlSerialization(), this._loggingOp ); if (this._config.petstoreAuthCredentials) { this.petstoreAuthManager = new PetstoreAuthManager( this._config.petstoreAuthCredentials, getBaseUri('auth server', this._config) ); } } public getRequestBuilderFactory(): SdkRequestBuilderFactory { return this._requestBuilderFactory; } /** * Clone this client and override given configuration options */ public withConfiguration(config: Partial) { return new Client({ ...this._config, ...config }); } /** * Create a client instance from a JSON configuration string * @param jsonConfig - JSON string containing the configuration * @returns A new Client instance */ public static fromJsonConfig(jsonConfig: string): Client { return new Client(Configuration.fromJsonConfig(jsonConfig)); } /** * Create a client instance from environment variables * @param envVariables - Optional object containing environment variables * @returns A new Client instance */ public static fromEnvironment( envVariables?: Record ): Client { return new Client( Configuration.fromEnvironment(envVariables || process.env) ); } } function createHttpClientAdapter(client: HttpClient): HttpClientInterface { return async (request, requestOptions) => { return await client.executeRequest(request, requestOptions); }; } function getBaseUri(server: Server = 'default', config: Configuration): string { if (config.environment === Environment.Production) { if (server === 'default') { return 'https://petstore3.swagger.io/api/v3'; } if (server === 'auth server') { return 'https://petstore3.swagger.io/oauth'; } } throw new Error('Could not get Base URL. Invalid environment or server.'); } function createRequestHandlerFactory( baseUrlProvider: (server?: Server) => string, authProvider: AuthenticatorInterface, httpClient: HttpClient, addons: ((rb: SdkRequestBuilder) => void)[], retryConfig: RetryConfiguration, xmlSerializer: XmlSerializerInterface, loggingOptions: LoggingOptions ): SdkRequestBuilderFactory { const requestBuilderFactory = createRequestBuilderFactory( createHttpClientAdapter(httpClient), baseUrlProvider, ApiError, authProvider, retryConfig, xmlSerializer, new ApiLogger(loggingOptions) ); return tap(requestBuilderFactory, ...addons); } function tap( requestBuilderFactory: SdkRequestBuilderFactory, ...callback: ((requestBuilder: SdkRequestBuilder) => void)[] ): SdkRequestBuilderFactory { return (...args) => { const requestBuilder = requestBuilderFactory(...args); callback.forEach((c) => c(requestBuilder)); return requestBuilder; }; } function withErrorHandlers(rb: SdkRequestBuilder) { rb.defaultToError(ApiError); } function withUserAgent(userAgent: string) { return (rb: SdkRequestBuilder) => { rb.interceptRequest((request) => { const headers = request.headers ?? {}; setHeader(headers, 'user-agent', userAgent); return { ...request, headers }; }); }; } function withAuthenticationByDefault(rb: SdkRequestBuilder) { rb.authenticate([]); }