{"version":3,"sources":["../../src/http/client.ts"],"names":[],"mappings":"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","file":"client.mjs","sourcesContent":["import axios, { AxiosHeaders } from 'axios';\nimport type {\n  AxiosInstance,\n  AxiosResponse,\n  AxiosRequestConfig,\n  RawAxiosRequestHeaders,\n} from 'axios';\n\nimport { ConsoleLogger } from '../logging';\nimport type { ILogger } from '../logging';\n\nimport type { Interceptor } from './interceptor';\nimport type { Token } from './token';\n\n\nexport type ClientOptions = {\n  /**\n   * The client name\n   */\n  readonly name?: string;\n\n  /**\n   * The authorization token to use\n   */\n  readonly token?: Token;\n\n  /**\n   *: ILogger instance to use\n   */\n  readonly logger?: ILogger;\n\n  /**\n   * The baseUrl to prefix all client requests with\n   */\n  readonly baseUrl?: string;\n\n  /**\n   * Default request timeout (ms)\n   */\n  readonly timeout?: number;\n\n  /**\n   * Default headers\n   */\n  readonly headers?: RawAxiosRequestHeaders;\n\n  /**\n   * Default interceptors to register\n   */\n  readonly interceptors?: Array<Interceptor>;\n\n  /**\n   * Default middleware to register. Middleware runs in insertion order around\n   * token resolution, existing interceptors, and the terminal HTTP transport.\n   */\n  readonly middlewares?: Array<Middleware>;\n};\n\n/**\n * Context for a single HTTP middleware invocation.\n *\n * `config` is the single source of truth for the outbound request: it carries\n * the method, URL, body (`data`), query `params`, `headers`, and SDK-local\n * `extensions`. Middleware reads and mutates the request through `config`\n * (e.g. `context.config.headers`, `context.config.extensions`); `extensions`\n * is never copied into headers, query params, or the request body by the\n * common client. `log` is available for diagnostics.\n */\nexport type MiddlewareContext<D = any> = {\n  /**\n   * Mutable request config for this outbound call.\n   *\n   * This is the authoritative request state. Read the method, URL, body, and\n   * SDK-local `extensions` from here, and mutate it in place to change the\n   * request seen by later middleware and the terminal HTTP transport.\n   */\n  config: RequestConfig<D>;\n\n  /**\n   * Client logger.\n   */\n  readonly log: ILogger;\n};\n\n/**\n * Calls the next middleware in the chain, or the terminal HTTP transport.\n */\nexport type MiddlewareNext<R = AxiosResponse> = () => Promise<R>;\n\n/**\n * HTTP middleware that wraps one outbound request.\n *\n * Middleware is registered with `client.use(...)` and runs in insertion order:\n * the first registered middleware is the outermost wrapper.\n */\nexport type Middleware = {\n  invoke<R = AxiosResponse, D = any>(\n    context: MiddlewareContext<D>,\n    next: MiddlewareNext<R>\n  ): Promise<R>;\n};\n\nexport type RequestConfig<D = any> = AxiosRequestConfig<D> & {\n  /**\n   * If provided, this token will be used instead of\n   * the default token provided in the `ClientOptions`\n   */\n  token?: Token;\n\n  /**\n   * SDK-local request metadata for interceptors. This is not sent over the wire.\n   */\n  extensions?: Record<string, unknown>;\n};\n\ntype InterceptorRegistry = {\n  readonly requestId?: number;\n  readonly responseId?: number;\n  readonly interceptor: Interceptor;\n};\n\nexport class Client {\n  token?: Token;\n  readonly name: string;\n\n  protected options: ClientOptions;\n  protected log: ILogger;\n  protected http: AxiosInstance;\n  protected seq: number = 0;\n  protected _interceptors: Map<number, InterceptorRegistry>;\n  protected _middlewares: Map<number, Middleware>;\n\n  constructor(options: ClientOptions = {}) {\n    this.options = options;\n    this.name = options.name || 'http';\n    this.token = options.token;\n    this.log = options.logger || new ConsoleLogger(this.name);\n    this._interceptors = new Map<number, InterceptorRegistry>();\n    this._middlewares = new Map<number, Middleware>();\n    this.http = axios.create({\n      baseURL: options.baseUrl,\n      timeout: options.timeout,\n      headers: options.headers,\n    });\n\n    for (const interceptor of options.interceptors || []) {\n      this.use(interceptor);\n    }\n\n    for (const middleware of options.middlewares || []) {\n      this.use(middleware);\n    }\n  }\n\n  get interceptors(): readonly Interceptor[] {\n    return Array.from(this._interceptors.values()).map((i) => i.interceptor);\n  }\n\n  /**\n   * Registered HTTP middleware in execution order.\n   */\n  get middlewares(): readonly Middleware[] {\n    return Array.from(this._middlewares.values());\n  }\n\n  async get<T = any, R = AxiosResponse<T>, D = any>(\n    url: string,\n    config?: RequestConfig<D>,\n  ): Promise<R> {\n    return this.invokeMiddleware<T, R, D>({\n      config: { ...config, method: 'get', url },\n      log: this.log,\n    }, 0, 'method');\n  }\n\n  async post<T = any, R = AxiosResponse<T>, D = any>(\n    url: string,\n    data?: D,\n    config?: RequestConfig<D>,\n  ): Promise<R> {\n    return this.invokeMiddleware<T, R, D>({\n      config: { ...config, method: 'post', url, data },\n      log: this.log,\n    }, 0, 'method');\n  }\n\n  async put<T = any, R = AxiosResponse<T>, D = any>(\n    url: string,\n    data?: D,\n    config?: RequestConfig<D>,\n  ): Promise<R> {\n    return this.invokeMiddleware<T, R, D>({\n      config: { ...config, method: 'put', url, data },\n      log: this.log,\n    }, 0, 'method');\n  }\n\n  async patch<T = any, R = AxiosResponse<T>, D = any>(\n    url: string,\n    data?: D,\n    config?: RequestConfig<D>,\n  ): Promise<R> {\n    return this.invokeMiddleware<T, R, D>({\n      config: { ...config, method: 'patch', url, data },\n      log: this.log,\n    }, 0, 'method');\n  }\n\n  async delete<T = any, R = AxiosResponse<T>, D = any>(\n    url: string,\n    config?: RequestConfig<D>,\n  ): Promise<R> {\n    return this.invokeMiddleware<T, R, D>({\n      config: { ...config, method: 'delete', url },\n      log: this.log,\n    }, 0, 'method');\n  }\n\n  async request<T = any, R = AxiosResponse<T>, D = any>(\n    config: RequestConfig<D>,\n  ): Promise<R> {\n    return this.invokeMiddleware<T, R, D>({\n      config,\n      log: this.log,\n    }, 0, 'request');\n  }\n\n  /**\n   * Register HTTP middleware.\n   */\n  use(middleware: Middleware): number;\n\n  /**\n   * Register an interceptor for request/response/error compatibility.\n   */\n  use(interceptor: Interceptor): number;\n\n  use(handler: Interceptor | Middleware): number {\n    if (isMiddleware(handler)) {\n      return this.useMiddleware(handler);\n    }\n\n    return this.useInterceptor(handler);\n  }\n\n  /**\n   * Eject an interceptor\n   */\n  eject(id: number): void {\n    const registry = this._interceptors.get(id);\n\n    if (!registry) {\n      this._middlewares.delete(id);\n      return;\n    }\n\n    if (registry.requestId !== undefined) {\n      this.http.interceptors.request.eject(registry.requestId);\n    }\n\n    if (registry.responseId !== undefined) {\n      this.http.interceptors.response.eject(registry.responseId);\n    }\n\n    this._interceptors.delete(id);\n  }\n\n  /**\n   * Clear (Eject) all interceptors\n   */\n  clear(): void {\n    for (const id of this._interceptors.keys()) {\n      this.eject(id);\n    }\n\n    this._middlewares.clear();\n  }\n\n  /**\n   * Create a copy of the client\n   */\n  clone(options?: ClientOptions): Client {\n    const findUA = (h?: RawAxiosRequestHeaders): string | undefined => {\n      if (!h) return undefined;\n      const key = Object.keys(h).find((k) => k.toLowerCase() === 'user-agent');\n      return key ? String(h[key]) : undefined;\n    };\n\n    const parentUA = findUA(this.options.headers);\n    const childUA = findUA(options?.headers);\n    const mergedUA =\n      parentUA && childUA ? `${childUA} ${parentUA}` : childUA || parentUA;\n\n    const headers = {\n      ...this.options.headers,\n      ...options?.headers,\n    };\n\n    if (mergedUA) {\n      for (const key of Object.keys(headers)) {\n        if (key.toLowerCase() === 'user-agent') {\n          delete headers[key];\n        }\n      }\n\n      headers['User-Agent'] = mergedUA;\n    }\n\n    return new Client({\n      ...this.options,\n      ...options,\n      headers,\n      interceptors: [\n        ...Array.from(this._interceptors.values()).map((i) => i.interceptor),\n      ],\n      middlewares: [\n        ...this.middlewares,\n      ],\n    });\n  }\n\n  protected async withConfig(\n    config: RequestConfig = {},\n  ): Promise<RequestConfig> {\n    let token = config.token || this.token;\n    const requestHasAuthorization = hasAuthorizationHeader(config.headers);\n\n    if (config.token) {\n      delete config.token;\n    }\n\n    if (this.options.headers) {\n      config.headers = {\n        ...this.options.headers,\n        ...headersToObject(config.headers),\n      };\n    }\n\n    if (token && !requestHasAuthorization && !hasAuthorizationHeader(config.headers)) {\n      if (!config.headers) {\n        config.headers = {};\n      }\n\n      if (typeof token === 'function') {\n        token = await token(config);\n      }\n\n      if (token && typeof token === 'object') {\n        token = token.toString();\n      }\n\n      if (!token?.toString().trim()) {\n        return config;\n      }\n\n      config.headers['Authorization'] = `Bearer ${token}`;\n    }\n\n    return config;\n  }\n\n  private useMiddleware(middleware: Middleware): number {\n    const id = ++this.seq;\n    this._middlewares.set(id, middleware);\n    return id;\n  }\n\n  private async send<T, R, D>(\n    config: RequestConfig<D>,\n    dispatch: 'method' | 'request',\n  ): Promise<R> {\n    const resolvedConfig = await this.withConfig(config);\n    if (dispatch === 'request') {\n      return this.http.request<T, R, D>(resolvedConfig);\n    }\n\n    const method = resolvedConfig.method?.toLowerCase();\n    const url = resolvedConfig.url;\n    if (url === undefined) {\n      return this.http.request<T, R, D>(resolvedConfig);\n    }\n\n    const transportConfig: RequestConfig<D> = { ...resolvedConfig };\n    delete transportConfig.method;\n    delete transportConfig.url;\n\n    switch (method) {\n      // get/delete carry any request body on `config.data`, so the resolved\n      // config is forwarded as-is. (Stripping `data` here previously dropped\n      // GET/DELETE request bodies that callers passed through `config`.)\n      case 'get':\n        return this.http.get<T, R, D>(url, transportConfig);\n      case 'delete':\n        return this.http.delete<T, R, D>(url, transportConfig);\n      // post/put/patch take the body as a positional argument, so remove it\n      // from the forwarded config to avoid sending it in two places.\n      case 'post': {\n        const { data, ...rest } = transportConfig;\n        return this.http.post<T, R, D>(url, data, rest);\n      }\n      case 'put': {\n        const { data, ...rest } = transportConfig;\n        return this.http.put<T, R, D>(url, data, rest);\n      }\n      case 'patch': {\n        const { data, ...rest } = transportConfig;\n        return this.http.patch<T, R, D>(url, data, rest);\n      }\n      default:\n        return this.http.request<T, R, D>(resolvedConfig);\n    }\n  }\n\n  private useInterceptor(interceptor: Interceptor): number {\n    const id = ++this.seq;\n    let requestId: number | undefined = undefined;\n    let responseId: number | undefined = undefined;\n\n    if (interceptor.request) {\n      requestId = this.http.interceptors.request.use(\n        /* istanbul ignore next */\n        (config) => {\n          return interceptor.request!({ config, log: this.log });\n        },\n        /* istanbul ignore next */\n        (error: any) => {\n          if (!interceptor.error) return error;\n          return interceptor.error({ error, log: this.log });\n        },\n      );\n    }\n\n    if (interceptor.response) {\n      responseId = this.http.interceptors.response.use(\n        /* istanbul ignore next */\n        (res) => {\n          return interceptor.response!({ res, log: this.log });\n        },\n        /* istanbul ignore next */\n        (error: any) => {\n          if (!interceptor.error) return error;\n          return interceptor.error({ error, log: this.log });\n        },\n      );\n    }\n\n    this._interceptors.set(id, {\n      requestId,\n      responseId,\n      interceptor,\n    });\n\n    return id;\n  }\n\n  private async invokeMiddleware<T, R, D>(\n    context: MiddlewareContext<D>,\n    index: number,\n    dispatch: 'method' | 'request',\n  ): Promise<R> {\n    const middleware = this.middlewares.at(index);\n    if (!middleware) {\n      return this.send<T, R, D>(context.config, dispatch);\n    }\n\n    return middleware.invoke<R, D>(\n      context,\n      () => this.invokeMiddleware<T, R, D>(context, index + 1, dispatch)\n    );\n  }\n}\n\nfunction isMiddleware(handler: Interceptor | Middleware): handler is Middleware {\n  return typeof (handler as Middleware).invoke === 'function';\n}\n\nfunction hasAuthorizationHeader(headers: RequestConfig['headers']): boolean {\n  if (!headers) {\n    return false;\n  }\n\n  if (headers instanceof AxiosHeaders) {\n    return !!headers.get('Authorization') || !!headers.get('authorization');\n  }\n\n  return Object.keys(headers).some((key) => key.toLowerCase() === 'authorization');\n}\n\nfunction headersToObject(headers: RequestConfig['headers']): RawAxiosRequestHeaders | undefined {\n  if (!headers) {\n    return undefined;\n  }\n\n  if (headers instanceof AxiosHeaders) {\n    return headers.toJSON() as RawAxiosRequestHeaders;\n  }\n\n  return headers as RawAxiosRequestHeaders;\n}\n"]}