{"version":3,"file":"sdcorejs-angular-services-api.mjs","sources":["../../../projects/sdcorejs-angular/services/api/src/api.model.ts","../../../projects/sdcorejs-angular/services/api/src/api.service.ts","../../../projects/sdcorejs-angular/services/api/src/interceptors/api.interceptor.ts","../../../projects/sdcorejs-angular/services/api/src/api.module.ts","../../../projects/sdcorejs-angular/services/api/sdcorejs-angular-services-api.ts"],"sourcesContent":["import { HttpContext, HttpErrorResponse, HttpHeaders, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\nimport { SdCacheOption } from '@sdcorejs/angular/services/cache';\n\nexport type SdApiResponseType = 'arraybuffer' | 'blob' | 'json' | 'text';\ntype SdApiBivariantCallback<TArgument, TResult> = { bivarianceHack(argument: TArgument): TResult }['bivarianceHack'];\n\nexport interface SdApiHttpOption {\n  headers?: HttpHeaders | Record<string, string | string[]>;\n  context?: HttpContext;\n  params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>;\n  observe?: 'body';\n  reportProgress?: boolean;\n  responseType?: SdApiResponseType;\n  withCredentials?: boolean;\n  transferCache?: { includeHeaders?: string[] } | boolean;\n}\n\nexport interface SdApiRetryOption {\n  /** Number of retries after the initial request. Values are clamped to a finite safe limit. */\n  attempts: number;\n  /** Delay before the first retry. Defaults to 0. */\n  delayMs?: number;\n  /** Multiplier applied to each subsequent delay. Defaults to 1. */\n  backoff?: number;\n  /** Overrides the default transient HTTP-status predicate. `attempt` is one-based. */\n  retryWhen?: (error: unknown, attempt: number) => boolean;\n  /** Required to retry POST, PUT, PATCH, or DELETE. */\n  mutations?: boolean;\n}\n\nexport interface SdApiOption {\n  cacheOption?: SdCacheOption;\n  timeout?: number; // Default: 60000 (60s)\n  /** Cancels only this caller; a shared HTTP request continues while another caller remains. */\n  signal?: AbortSignal;\n  /** Enables request deduplication. Defaults to true for GET and false for mutations. */\n  dedupe?: boolean;\n  /** Keeps a successful dedupe result replayable for this duration. Defaults to 1000ms. */\n  dedupeWindowMs?: number;\n  /** Opt-in bounded retry policy. The default is no retries. */\n  retry?: SdApiRetryOption;\n  /**\n   * @deprecated Use `dedupe`. When both are provided, `dedupe` takes precedence.\n   * Explicit `true` remains a compatibility opt-in for mutation deduplication.\n   */\n  autoCache?: boolean;\n}\n\nexport type SdGetOption = SdApiHttpOption & SdApiOption;\nexport type SdPostOption = SdApiHttpOption & SdApiOption;\nexport type SdPutOption = SdApiHttpOption & SdApiOption;\nexport type SdPatchOption = SdApiHttpOption & SdApiOption;\nexport type SdDeleteOption = SdApiHttpOption & SdApiOption;\nexport type SdApiRequestUpdate = Parameters<HttpRequest<unknown>['clone']>[0];\n\nexport interface SdApiHandler {\n  /** Danh sách host URL mà handler này sẽ xử lý */\n  hosts: string[];\n  /** Can thiệp request: gắn header, token, transform body... */\n  intercept?: SdApiBivariantCallback<HttpRequest<unknown>, HttpRequest<unknown> | SdApiRequestUpdate>;\n  /** Hook chạy TRƯỚC khi gửi request (dùng để log, tracking...) */\n  beforeRemote?: SdApiBivariantCallback<HttpRequest<unknown>, void | Promise<void>>;\n  /** Hook chạy SAU khi nhận response (xử lý lỗi, notify...) */\n  afterRemote?: SdApiBivariantCallback<HttpResponse<unknown> | HttpErrorResponse | Error, void | Promise<void>>;\n  /** Transform response body thành kiểu dữ liệu mong muốn */\n  mapResponse?: SdApiBivariantCallback<unknown, unknown>;\n  /** Timeout tính bằng milliseconds. Mặc định: 60000 (60 giây) */\n  timeout?: number;\n}\n\nexport interface ISdApiConfiguration {\n  handlers?: SdApiHandler[];\n}\n\nexport const SD_API_CONFIG = new InjectionToken<ISdApiConfiguration>('sd-api.configuration');\n\n/** @deprecated Use `SD_API_CONFIG`. This is the same injection token. */\nexport const SD_API_CONFIGURATION = SD_API_CONFIG;\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { SdCacheService } from '@sdcorejs/angular/services/cache';\nimport { BrowserUtilities, Utilities } from '@sdcorejs/utils/fns';\nimport { Observable, of, Subscription, throwError, timer, TimeoutError } from 'rxjs';\nimport { filter, map, retry, timeout } from 'rxjs/operators';\nimport {\n  ISdApiConfiguration,\n  SD_API_CONFIG,\n  SdApiHandler,\n  SdApiRetryOption,\n  SdDeleteOption,\n  SdGetOption,\n  SdPatchOption,\n  SdPostOption,\n  SdPutOption,\n} from './api.model';\n\ntype SdHttpOptions = SdGetOption & SdPostOption & SdPutOption & SdPatchOption & SdDeleteOption;\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\ntype SharedRequestState = 'pending' | 'succeeded' | 'failed' | 'cancelled';\n\ninterface SharedRequest {\n  readonly key?: string;\n  readonly replayWindowMs: number;\n  readonly promise: Promise<unknown>;\n  resolve(value: unknown): void;\n  reject(error: unknown): void;\n  subscription: Subscription;\n  owners: number;\n  state: SharedRequestState;\n  replayTimer?: ReturnType<typeof setTimeout>;\n}\n\ninterface PreparedRequest {\n  request: SharedRequest;\n  source: Observable<unknown>;\n}\n\n/**\n * Response generics intentionally default to `unknown` for type safety.\n * Callers should specify `T`; migration guidance is tracked for Task 13.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class SdApiService {\n  readonly #defaultTimeout = 60000;\n  readonly #defaultDedupeWindowMs = 1000;\n  readonly #maxTimerMs = 2_147_483_647;\n  readonly #maxRetryAttempts = 10;\n  readonly #httpClient = inject(HttpClient);\n  readonly #configurations = inject<ISdApiConfiguration[]>(SD_API_CONFIG, { optional: true }) ?? [];\n  readonly #cacheService = inject(SdCacheService);\n  readonly #destroyRef = inject(DestroyRef);\n  readonly #sharedRequests = new Map<string, SharedRequest>();\n  readonly #activeRequests = new Set<SharedRequest>();\n  readonly #objectIds = new WeakMap<object, number>();\n  #nextObjectId = 1;\n  #destroyed = false;\n\n  constructor() {\n    this.#destroyRef.onDestroy(() => this.#destroy());\n  }\n\n  get http(): HttpClient {\n    return this.#httpClient;\n  }\n\n  get = <T = unknown>(url: string, option?: SdGetOption): Promise<T> => {\n    return this.#executeWithLayeredCache<T>(url, 'GET', undefined, option);\n  };\n\n  post = <T = unknown>(url: string, body?: unknown, option?: SdPostOption): Promise<T> => {\n    return this.#executeWithLayeredCache<T>(url, 'POST', body, option);\n  };\n\n  put = <T = unknown>(url: string, body?: unknown, option?: SdPutOption): Promise<T> => {\n    return this.#executeWithLayeredCache<T>(url, 'PUT', body, option);\n  };\n\n  patch = <T = unknown>(url: string, body?: unknown, option?: SdPatchOption): Promise<T> => {\n    return this.#executeWithLayeredCache<T>(url, 'PATCH', body, option);\n  };\n\n  delete = <T = unknown>(url: string, option?: SdDeleteOption): Promise<T> => {\n    return this.#executeWithLayeredCache<T>(url, 'DELETE', undefined, option);\n  };\n\n  upload = async <T = unknown>(url: string, option?: { extensions?: string[]; maxSizeInMb?: number }): Promise<T | null | undefined> => {\n    const file = await BrowserUtilities.upload(option);\n    if (!Array.isArray(file) && file) {\n      return this.uploadFile<T>(url, file);\n    }\n    return undefined;\n  };\n\n  uploadFile = async <T = unknown>(url: string, file: File | null | undefined): Promise<T | null> => {\n    if (!file) return null;\n    if (file.name.lastIndexOf('.') === -1) throw new Error('Invalid file extension');\n\n    const formData = new FormData();\n    formData.append('file', file, file.name);\n    return this.post<T>(url, formData, { dedupe: false });\n  };\n\n  async #executeWithLayeredCache<T>(url: string, method: HttpMethod, body?: unknown, option?: SdHttpOptions): Promise<T> {\n    if (this.#destroyed || option?.signal?.aborted) {\n      throw this.#createAbortError();\n    }\n\n    if (!option?.cacheOption) {\n      return this.#request<T>(url, method, body, option);\n    }\n\n    const key = this.#generateKey(url, method, body, option);\n    const cache = this.#cacheService.create<T>(key, option.cacheOption);\n    try {\n      const cached = cache.snapshot();\n      if (cached.present) return cached.value;\n\n      const result = await this.#request<T>(url, method, body, option);\n      cache.set(result);\n      return result;\n    } finally {\n      cache.release();\n    }\n  }\n\n  #request<T>(url: string, method: HttpMethod, body?: unknown, option?: SdHttpOptions): Promise<T> {\n    if (this.#destroyed || option?.signal?.aborted) {\n      return Promise.reject(this.#createAbortError());\n    }\n\n    const shouldDedupe = option?.dedupe ?? option?.autoCache ?? method === 'GET';\n    const key = shouldDedupe ? this.#generateRequestKey(url, method, body, option) : undefined;\n    let request = key ? this.#sharedRequests.get(key) : undefined;\n\n    if (!request) {\n      const prepared = this.#prepareRequest(url, method, body, option, key);\n      request = prepared.request;\n      if (key) this.#sharedRequests.set(key, request);\n      this.#startRequest(request, prepared.source);\n    }\n\n    return this.#attachCaller<T>(request, option?.signal);\n  }\n\n  #prepareRequest(\n    url: string,\n    method: HttpMethod,\n    body: unknown,\n    option: SdHttpOptions | undefined,\n    key: string | undefined\n  ): PreparedRequest {\n    let resolve!: (value: unknown) => void;\n    let reject!: (error: unknown) => void;\n    const promise = new Promise<unknown>((resolvePromise, rejectPromise) => {\n      resolve = resolvePromise;\n      reject = rejectPromise;\n    });\n    const request: SharedRequest = {\n      key,\n      replayWindowMs: this.#normalizeDedupeWindow(option?.dedupeWindowMs),\n      promise,\n      resolve,\n      reject,\n      subscription: Subscription.EMPTY,\n      owners: 0,\n      state: 'pending',\n    };\n    this.#activeRequests.add(request);\n\n    const handler = this.#getHandler(url);\n    const httpRequest = new HttpRequest<unknown>(method, url, body ?? null, {\n      headers: this.#toHttpHeaders(option?.headers),\n      context: option?.context,\n      params: this.#toHttpParams(option?.params),\n      reportProgress: option?.reportProgress,\n      responseType: option?.responseType ?? 'json',\n      withCredentials: option?.withCredentials,\n      transferCache: option?.transferCache,\n    });\n    const source = this.#withRetry(\n      this.#httpClient.request(httpRequest).pipe(\n        timeout(this.#resolveTimeout(url, option?.timeout)),\n        filter((event): event is HttpResponse<unknown> => event instanceof HttpResponse),\n        map(response => this.#mapResponse(response.body, handler))\n      ),\n      method,\n      option?.retry\n    );\n\n    return { request, source };\n  }\n\n  #startRequest(request: SharedRequest, source: Observable<unknown>): void {\n    request.subscription = source.subscribe({\n      next: value => this.#completeSuccess(request, value),\n      error: error => this.#completeError(request, error),\n      complete: () => {\n        if (request.state === 'pending') {\n          this.#completeError(request, new Error('HTTP request completed without a response'));\n        }\n      },\n    });\n  }\n\n  #attachCaller<T>(request: SharedRequest, signal?: AbortSignal): Promise<T> {\n    request.owners++;\n\n    return new Promise<T>((resolve, reject) => {\n      let settled = false;\n      const cleanup = (): void => {\n        if (signal) signal.removeEventListener('abort', abort);\n      };\n      const release = (): void => {\n        request.owners = Math.max(0, request.owners - 1);\n        if (request.state === 'pending' && request.owners === 0) {\n          this.#cancelRequest(request);\n        }\n      };\n      const abort = (): void => {\n        if (settled) return;\n        settled = true;\n        cleanup();\n        release();\n        reject(this.#createAbortError());\n      };\n\n      if (signal) {\n        signal.addEventListener('abort', abort, { once: true });\n        if (signal.aborted) {\n          abort();\n          return;\n        }\n      }\n\n      request.promise.then(\n        value => {\n          if (settled) return;\n          settled = true;\n          cleanup();\n          release();\n          resolve(value as T);\n        },\n        error => {\n          if (settled) return;\n          settled = true;\n          cleanup();\n          release();\n          reject(error);\n        }\n      );\n    });\n  }\n\n  #completeSuccess(request: SharedRequest, value: unknown): void {\n    if (request.state !== 'pending') return;\n    request.state = 'succeeded';\n    request.resolve(value);\n\n    if (!request.key) {\n      this.#activeRequests.delete(request);\n      return;\n    }\n\n    if (request.replayWindowMs === 0) {\n      this.#evictRequest(request);\n      return;\n    }\n\n    request.replayTimer = setTimeout(() => this.#evictRequest(request), request.replayWindowMs);\n  }\n\n  #completeError(request: SharedRequest, error: unknown): void {\n    if (request.state !== 'pending') return;\n    request.state = 'failed';\n    this.#removeRequest(request);\n    request.reject(error);\n  }\n\n  #cancelRequest(request: SharedRequest): void {\n    if (request.state !== 'pending') return;\n    request.state = 'cancelled';\n    request.subscription.unsubscribe();\n    this.#removeRequest(request);\n    request.reject(this.#createAbortError());\n  }\n\n  #evictRequest(request: SharedRequest): void {\n    if (request.replayTimer !== undefined) {\n      clearTimeout(request.replayTimer);\n      request.replayTimer = undefined;\n    }\n    this.#removeRequest(request);\n  }\n\n  #removeRequest(request: SharedRequest): void {\n    if (request.key && this.#sharedRequests.get(request.key) === request) {\n      this.#sharedRequests.delete(request.key);\n    }\n    this.#activeRequests.delete(request);\n  }\n\n  #withRetry(source: Observable<unknown>, method: HttpMethod, option?: SdApiRetryOption): Observable<unknown> {\n    const attempts = this.#normalizeRetryAttempts(option?.attempts);\n    const mutation = method !== 'GET';\n    if (attempts === 0 || (mutation && option?.mutations !== true)) {\n      return source;\n    }\n\n    return source.pipe(\n      retry({\n        count: attempts,\n        delay: (error: unknown, attempt: number) => {\n          if (this.#isAbortError(error) || !this.#shouldRetry(error, attempt, option)) {\n            return throwError(() => error);\n          }\n\n          const baseDelay = this.#normalizeRetryDelay(option?.delayMs);\n          const backoff = this.#normalizeRetryBackoff(option?.backoff);\n          const computedDelay = baseDelay * Math.pow(backoff, attempt - 1);\n          const delayMs = Number.isFinite(computedDelay) ? Math.min(this.#maxTimerMs, computedDelay) : this.#maxTimerMs;\n          return delayMs > 0 ? timer(delayMs) : of(undefined);\n        },\n      })\n    );\n  }\n\n  #shouldRetry(error: unknown, attempt: number, option: SdApiRetryOption | undefined): boolean {\n    if (option?.retryWhen) {\n      return option.retryWhen(error, attempt);\n    }\n    if (error instanceof TimeoutError) return true;\n    if (!(error instanceof HttpErrorResponse)) return false;\n    return error.status === 0 || [408, 425, 429, 500, 502, 503, 504].includes(error.status);\n  }\n\n  #mapResponse(body: unknown, handler: SdApiHandler | undefined): unknown {\n    if (body !== null && typeof body === 'object' && 'ok' in body && body.ok === false) {\n      throw body;\n    }\n    return handler?.mapResponse ? handler.mapResponse(body) : body;\n  }\n\n  #getHandler(url: string): SdApiHandler | undefined {\n    const handlers = this.#configurations.flatMap(configuration => configuration.handlers ?? []);\n    return handlers.find(handler => handler.hosts.some(host => url.startsWith(host)));\n  }\n\n  #generateKey(url: string, method: HttpMethod, body: unknown, option?: SdHttpOptions): string {\n    return Utilities.hash({\n      method,\n      url,\n      body: this.#normalizeBody(body),\n      headers: this.#normalizeHeaders(option?.headers),\n      params: this.#normalizeParams(option?.params),\n      context: option?.context ? this.#getObjectId(option.context) : undefined,\n      reportProgress: option?.reportProgress ?? false,\n      responseType: option?.responseType ?? 'json',\n      withCredentials: option?.withCredentials ?? false,\n      transferCache: option?.transferCache,\n      timeout: this.#resolveTimeout(url, option?.timeout),\n      retry: option?.retry\n        ? {\n            attempts: this.#normalizeRetryAttempts(option.retry.attempts),\n            delayMs: this.#normalizeRetryDelay(option.retry.delayMs),\n            backoff: this.#normalizeRetryBackoff(option.retry.backoff),\n            mutations: option.retry.mutations,\n            retryWhen: option.retry.retryWhen ? this.#getObjectId(option.retry.retryWhen) : undefined,\n          }\n        : undefined,\n    });\n  }\n\n  #generateRequestKey(url: string, method: HttpMethod, body: unknown, option?: SdHttpOptions): string {\n    return Utilities.hash({\n      responseKey: this.#generateKey(url, method, body, option),\n      dedupeWindowMs: this.#normalizeDedupeWindow(option?.dedupeWindowMs),\n    });\n  }\n\n  #normalizeDedupeWindow(dedupeWindowMs: number | undefined): number {\n    return this.#normalizeFiniteNumber(dedupeWindowMs, this.#defaultDedupeWindowMs, 0, this.#maxTimerMs);\n  }\n\n  #resolveTimeout(url: string, timeoutMs: number | undefined): number {\n    const configuredTimeout = timeoutMs === undefined ? this.#getHandler(url)?.timeout : timeoutMs;\n    return this.#normalizeFiniteNumber(configuredTimeout, this.#defaultTimeout, 0, this.#maxTimerMs);\n  }\n\n  #normalizeRetryAttempts(attempts: number | undefined): number {\n    return Math.floor(this.#normalizeFiniteNumber(attempts, 0, 0, this.#maxRetryAttempts));\n  }\n\n  #normalizeRetryDelay(delayMs: number | undefined): number {\n    return this.#normalizeFiniteNumber(delayMs, 0, 0, this.#maxTimerMs);\n  }\n\n  #normalizeRetryBackoff(backoff: number | undefined): number {\n    const normalized = this.#normalizeFiniteNumber(backoff, 1, 0, this.#maxTimerMs);\n    return normalized > 0 ? normalized : 1;\n  }\n\n  #normalizeFiniteNumber(value: number | undefined, defaultValue: number, minimum: number, maximum: number): number {\n    if (value === undefined || !Number.isFinite(value)) return defaultValue;\n    return Math.min(maximum, Math.max(minimum, value));\n  }\n\n  #normalizeBody(body: unknown, ancestors = new WeakSet<object>()): unknown {\n    if (body === null || typeof body !== 'object') return body;\n    if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\n      return { urlSearchParams: body.toString() };\n    }\n    if (typeof FormData !== 'undefined' && body instanceof FormData) {\n      return { objectType: 'FormData', objectId: this.#getObjectId(body) };\n    }\n    if (typeof Blob !== 'undefined' && body instanceof Blob) {\n      return { objectType: 'Blob', objectId: this.#getObjectId(body) };\n    }\n    if (typeof ArrayBuffer !== 'undefined' && (body instanceof ArrayBuffer || ArrayBuffer.isView(body))) {\n      return { objectType: 'ArrayBuffer', objectId: this.#getObjectId(body) };\n    }\n    if (body instanceof Date) {\n      return { date: body.getTime() };\n    }\n    if (ancestors.has(body)) {\n      return { circularObjectId: this.#getObjectId(body) };\n    }\n    if (Array.isArray(body)) {\n      ancestors.add(body);\n      const normalized = body.map(value => this.#normalizeBody(value, ancestors));\n      ancestors.delete(body);\n      return normalized;\n    }\n    const prototype = Object.getPrototypeOf(body);\n    if (prototype === Object.prototype || prototype === null) {\n      ancestors.add(body);\n      const normalized = Object.fromEntries(Object.entries(body).map(([key, value]) => [key, this.#normalizeBody(value, ancestors)]));\n      ancestors.delete(body);\n      return normalized;\n    }\n    return { objectType: prototype?.constructor?.name ?? 'Object', objectId: this.#getObjectId(body) };\n  }\n\n  #normalizeHeaders(headers: SdHttpOptions['headers']): unknown {\n    if (headers instanceof HttpHeaders) {\n      return headers\n        .keys()\n        .sort()\n        .map(key => [key.toLowerCase(), headers.getAll(key)]);\n    }\n    return headers;\n  }\n\n  #normalizeParams(params: SdHttpOptions['params']): unknown {\n    if (params instanceof HttpParams) {\n      return params\n        .keys()\n        .sort()\n        .map(key => [key, params.getAll(key)]);\n    }\n    return params;\n  }\n\n  #toHttpHeaders(headers: SdHttpOptions['headers']): HttpHeaders | undefined {\n    if (!headers || headers instanceof HttpHeaders) return headers;\n    return new HttpHeaders(headers);\n  }\n\n  #toHttpParams(params: SdHttpOptions['params']): HttpParams | undefined {\n    if (!params || params instanceof HttpParams) return params;\n    return new HttpParams({ fromObject: params });\n  }\n\n  #getObjectId(value: object): number {\n    const existing = this.#objectIds.get(value);\n    if (existing !== undefined) return existing;\n    const id = this.#nextObjectId++;\n    this.#objectIds.set(value, id);\n    return id;\n  }\n\n  #createAbortError(): Error {\n    const error = new Error('The operation was aborted');\n    error.name = 'AbortError';\n    return error;\n  }\n\n  #isAbortError(error: unknown): boolean {\n    return error instanceof Error && error.name === 'AbortError';\n  }\n\n  #destroy(): void {\n    if (this.#destroyed) return;\n    this.#destroyed = true;\n\n    for (const request of [...this.#activeRequests]) {\n      if (request.replayTimer !== undefined) {\n        clearTimeout(request.replayTimer);\n        request.replayTimer = undefined;\n      }\n      if (request.state === 'pending') {\n        request.state = 'cancelled';\n        request.subscription.unsubscribe();\n        request.reject(this.#createAbortError());\n      }\n      this.#removeRequest(request);\n    }\n    this.#sharedRequests.clear();\n    this.#activeRequests.clear();\n  }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { defer, from, Observable, of, throwError } from 'rxjs';\nimport { catchError, concatMap, dematerialize, map, materialize, switchMap } from 'rxjs/operators';\nimport { ISdApiConfiguration, SD_API_CONFIG, SdApiHandler } from '../api.model';\n\n@Injectable()\nexport class SdHttpInterceptor implements HttpInterceptor {\n  readonly #configurations = inject<ISdApiConfiguration[]>(SD_API_CONFIG, { optional: true }) ?? [];\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    if (!request.url) throw new Error('Invalid URL');\n\n    const handler = this.#findHandler(request.url);\n    if (handler?.intercept) {\n      const interceptedRequest = handler.intercept(request);\n      request = interceptedRequest instanceof HttpRequest ? interceptedRequest : request.clone(interceptedRequest);\n    }\n    if (typeof FormData !== 'undefined' && request.body instanceof FormData) {\n      request = request.clone({ headers: request.headers.delete('Content-Type') });\n    }\n\n    const beforeRemote = handler?.beforeRemote?.(request);\n    if (beforeRemote instanceof Promise) {\n      return from(beforeRemote).pipe(switchMap(() => this.#handleRemote(request, next, handler)));\n    }\n    return this.#handleRemote(request, next, handler);\n  }\n\n  #handleRemote(request: HttpRequest<unknown>, next: HttpHandler, handler: SdApiHandler | undefined): Observable<HttpEvent<unknown>> {\n    return next.handle(request).pipe(\n      materialize(),\n      concatMap(notification => {\n        const afterValue =\n          notification.kind === 'N' && notification.value instanceof HttpResponse\n            ? notification.value\n            : notification.kind === 'E' && (notification.error instanceof Error || notification.error instanceof HttpErrorResponse)\n              ? notification.error\n              : undefined;\n        if (!afterValue || !handler?.afterRemote) {\n          return of(notification);\n        }\n\n        return defer(() => {\n          const result = handler.afterRemote?.(afterValue);\n          return result instanceof Promise ? result : Promise.resolve();\n        }).pipe(\n          map(() => notification),\n          catchError(hookError => (notification.kind === 'E' ? of(notification) : throwError(() => hookError)))\n        );\n      }),\n      dematerialize()\n    );\n  }\n\n  #findHandler(url: string): SdApiHandler | undefined {\n    const handlers = this.#configurations.flatMap(configuration => configuration.handlers ?? []);\n    return handlers.find(handler => handler.hosts.some(host => url.startsWith(host)));\n  }\n}\n","import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { SdHttpInterceptor } from './interceptors/api.interceptor';\n\n@NgModule({\n  imports: [],\n  exports: [],\n  providers: [provideHttpClient(withInterceptorsFromDi()), { provide: HTTP_INTERCEPTORS, useClass: SdHttpInterceptor, multi: true }],\n})\nexport class SdApiModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}