{"version":3,"file":"ngworker-lumberjack-http-driver.mjs","sources":["../../../../../packages/ngworker/lumberjack/http-driver/src/lib/configuration/lumberjack-http-driver-config.token.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/errors/lumberjack-http-driver.error.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/operators/retry-with-delay.operator.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/log-drivers/lumberjack-http.driver.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/configuration/lumberjack-http-driver.provider.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/configuration/provide-lumberjack-http-driver.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/index.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/ngworker-lumberjack-http-driver.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { LumberjackHttpDriverInternalConfig } from './lumberjack-http-driver-internal.config';\n\nexport const lumberjackHttpDriverConfigToken: InjectionToken<LumberjackHttpDriverInternalConfig> = new InjectionToken(\n  '__LUMBERJACK_HTTP_DRIVER_CONFIG__'\n);\n","export class LumberjackHttpDriverError extends Error {\n  constructor(message = 'LumberjackHttpDriverError') {\n    super(message);\n    this.name = 'LumberjackHttpDriverError';\n\n    // Non-standard V8 function for maintaining a stack trace\n    const ErrorWithCaptureStackTrace = Error as unknown as Error & {\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      captureStackTrace?: (targetObject: object, constructorOpt?: Function) => void;\n    };\n    ErrorWithCaptureStackTrace.captureStackTrace?.(this, this.constructor);\n  }\n}\n","import { catchError, MonoTypeOperatorFunction, pipe, retry, throwError } from 'rxjs';\n\nimport { LumberjackHttpDriverError } from '../errors/lumberjack-http-driver.error';\n\nexport const retryWithDelay = <T>(maxRetries: number, delayMs: number): MonoTypeOperatorFunction<T> =>\n  pipe(\n    retry<T>({ count: maxRetries, delay: delayMs }),\n    catchError(() => throwError(() => new LumberjackHttpDriverError(`Failed after ${maxRetries} retries.`)))\n  );\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, NgZone, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { LumberjackLog, LumberjackLogDriver, LumberjackLogDriverLog, LumberjackLogPayload } from '@ngworker/lumberjack';\n\nimport { lumberjackHttpDriverConfigToken } from '../configuration/lumberjack-http-driver-config.token';\nimport { LumberjackHttpLog } from '../logs/lumberjack-http.log';\nimport { retryWithDelay } from '../operators/retry-with-delay.operator';\n\n/**\n * The HTTP driver transports logs to the configured web API log store using the\n * POST HTTP verb.\n *\n * It sends the formatted log and the log including the optional log payload.\n */\n@Injectable()\nexport class LumberjackHttpDriver<TPayload extends LumberjackLogPayload | void = void>\n  implements LumberjackLogDriver<TPayload>, OnDestroy\n{\n  static readonly driverIdentifier = 'LumberjackHttpDriver';\n\n  readonly #http = inject(HttpClient);\n  readonly #ngZone = inject(NgZone);\n  readonly #subscriptions = new Subscription();\n\n  readonly config = inject(lumberjackHttpDriverConfigToken);\n\n  ngOnDestroy(): void {\n    this.#subscriptions.unsubscribe();\n  }\n\n  /**\n   * Send critical log to the log store.\n   *\n   * @param param0 The log and its text representation.\n   */\n  logCritical({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n    this.#sendLog(formattedLog, log);\n  }\n\n  /**\n   * Send debug log to the log store.\n   *\n   * @param param0 The log and its text representation.\n   */\n  logDebug({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n    this.#sendLog(formattedLog, log);\n  }\n\n  /**\n   * Send error log to the log store.\n   *\n   * @param param0 The log and its text representation.\n   */\n  logError({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n    this.#sendLog(formattedLog, log);\n  }\n\n  /**\n   * Send info log to the log store.\n   *\n   * @param param0 The log and its text representation.\n   */\n  logInfo({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n    this.#sendLog(formattedLog, log);\n  }\n\n  /**\n   * Send trace log to the log store.\n   *\n   * @param param0 The log and its text representation.\n   */\n  logTrace({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n    this.#sendLog(formattedLog, log);\n  }\n\n  /**\n   * Send warning log to the log store.\n   *\n   * @param param0 The log and its text representation.\n   */\n  logWarning({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n    this.#sendLog(formattedLog, log);\n  }\n\n  /**\n   * Send log to the log store.\n   *\n   * This is done outside of the `NgZone` as there's no need this to trigger\n   * change detection.\n   *\n   * Failed HTTP requests are retried according to the configured retry options.\n   *\n   * When the last retry fails, the driver will throw a `LumberjackHttpDriverError`\n   * and the log being sent gets discarded.\n   *\n   * @param formattedLog The log's text representation.\n   * @param log The log.\n   */\n  #sendLog(formattedLog: string, log: LumberjackLog<TPayload>): void {\n    const { origin, retryOptions, storeUrl } = this.config;\n    const httpLog: LumberjackHttpLog<TPayload> = { formattedLog, origin, log };\n\n    this.#ngZone.runOutsideAngular(() => {\n      this.#subscriptions.add(\n        this.#http\n          .post<void>(storeUrl, httpLog)\n          .pipe(retryWithDelay(retryOptions.maxRetries, retryOptions.delayMs))\n          // HTTP requests complete after the response is received, so there's no need to unsubscribe.\n          .subscribe(() => {\n            // No-op\n          })\n      );\n    });\n  }\n}\n","import { Provider } from '@angular/core';\n\nimport { lumberjackLogDriverToken } from '@ngworker/lumberjack';\n\nimport { LumberjackHttpDriver } from '../log-drivers/lumberjack-http.driver';\n\nexport const lumberjackHttpDriverProvider: Provider = {\n  provide: lumberjackLogDriverToken,\n  useClass: LumberjackHttpDriver,\n  multi: true,\n};\n","import { provideHttpClient } from '@angular/common/http';\nimport { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\n\nimport { LumberjackLogDriverConfig, lumberjackLogDriverConfigToken } from '@ngworker/lumberjack';\n\nimport { LumberjackHttpDriver } from '../log-drivers/lumberjack-http.driver';\n\nimport { lumberjackHttpDriverConfigToken } from './lumberjack-http-driver-config.token';\nimport { LumberjackHttpDriverInternalConfig } from './lumberjack-http-driver-internal.config';\nimport { LumberjackHttpDriverConfig } from './lumberjack-http-driver.config';\nimport { LumberjackHttpDriverOptions } from './lumberjack-http-driver.options';\nimport { lumberjackHttpDriverProvider } from './lumberjack-http-driver.provider';\n\nexport type LumberjackHttpDriverConfigurationKind = 'options' | 'config';\nexport type LumberjackHttpDriverConfiguration<Kind extends LumberjackHttpDriverConfigurationKind> = {\n  kind: Kind;\n  providers: EnvironmentProviders;\n};\n\nfunction makeLumberjackHttpConfiguration<Kind extends LumberjackHttpDriverConfigurationKind>(\n  kind: Kind,\n  providers: Provider[]\n): LumberjackHttpDriverConfiguration<Kind> {\n  return {\n    kind,\n    providers: makeEnvironmentProviders(providers),\n  };\n}\n\nexport function withHttpConfig(config: LumberjackHttpDriverConfig): LumberjackHttpDriverConfiguration<'config'> {\n  return makeLumberjackHttpConfiguration('config', [\n    {\n      provide: lumberjackHttpDriverConfigToken,\n      deps: [lumberjackLogDriverConfigToken],\n      useFactory: (logDriverConfig: LumberjackLogDriverConfig): LumberjackHttpDriverInternalConfig => ({\n        ...logDriverConfig,\n        identifier: LumberjackHttpDriver.driverIdentifier,\n        ...config,\n      }),\n    },\n  ]);\n}\n\nexport function withHttpOptions(options: LumberjackHttpDriverOptions): LumberjackHttpDriverConfiguration<'options'> {\n  return makeLumberjackHttpConfiguration('options', [\n    {\n      provide: lumberjackHttpDriverConfigToken,\n      deps: [lumberjackLogDriverConfigToken],\n      useFactory: (logDriverConfig: LumberjackLogDriverConfig): LumberjackHttpDriverInternalConfig => ({\n        ...logDriverConfig,\n        identifier: LumberjackHttpDriver.driverIdentifier,\n        ...options,\n      }),\n    },\n  ]);\n}\n\nexport type HttpClientFeatures = Parameters<typeof provideHttpClient>;\n\n/**\n * Returns the [dependency-injection providers](https://angular.io/guide/glossary#provider)\n *\n * for the `LumberjackHttpDriver` and its `LumberjackHttpDriverConfig`.\n * @usageNotes\n *\n * The function is useful when you want to bootstrap an application using\n * the `bootstrapApplication` function and want to make available the `LumberjackHttpDriver` providers.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *    provideLumberjack({...}),\n *    provideLumberjackHttpDriver({...})\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideLumberjackHttpDriver<Kind extends LumberjackHttpDriverConfigurationKind>(\n  configuration: LumberjackHttpDriverConfiguration<Kind>,\n  ...features: HttpClientFeatures\n): EnvironmentProviders[] {\n  return [\n    provideHttpClient(...features),\n    makeEnvironmentProviders([lumberjackHttpDriverProvider]),\n    configuration.providers,\n  ];\n}\n","/*\n * Public API surface of @ngworker/lumberjack/http-driver\n */\n\n// Configuration\nexport { LumberjackHttpDriverRetryOptions } from './lib/configuration/lumberjack-http-driver-retry.options';\nexport { LumberjackHttpDriverConfig } from './lib/configuration/lumberjack-http-driver.config';\nexport { LumberjackHttpDriverOptions } from './lib/configuration/lumberjack-http-driver.options';\nexport {\n  provideLumberjackHttpDriver,\n  withHttpConfig,\n  withHttpOptions,\n} from './lib/configuration/provide-lumberjack-http-driver';\n\n// Errors\nexport { LumberjackHttpDriverError } from './lib/errors/lumberjack-http-driver.error';\n// Log drivers\nexport { LumberjackHttpDriver } from './lib/log-drivers/lumberjack-http.driver';\n// Logs\nexport { LumberjackHttpLog } from './lib/logs/lumberjack-http.log';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}