{"version":3,"file":"_module-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/headers.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/context.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/params.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/request.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/response.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/fetch.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/xhr.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/interceptor.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/backend.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/client.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/jsonp.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/xsrf.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/provider.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\ninterface Update {\n  name: string;\n  value?: string | string[];\n  op: 'a' | 's' | 'd';\n}\n\n/**\n * Represents the header configuration options for an HTTP request.\n * Instances are immutable. Modifying methods return a cloned\n * instance with the change. The original object is never changed.\n *\n * @see [Setting request headers](guide/http/making-requests#setting-request-headers)\n *\n * @publicApi\n */\nexport class HttpHeaders {\n  /**\n   * Internal map of lowercase header names to values.\n   */\n  private headers!: Map<string, string[]>;\n\n  /**\n   * Internal map of lowercased header names to the normalized\n   * form of the name (the form seen first).\n   */\n  private normalizedNames: Map<string, string> = new Map();\n\n  /**\n   * Complete the lazy initialization of this object (needed before reading).\n   */\n  private lazyInit!: HttpHeaders | Function | null;\n\n  /**\n   * Queued updates to be materialized the next initialization.\n   */\n  private lazyUpdate: Update[] | null = null;\n\n  /**  Constructs a new HTTP header object with the given values.*/\n\n  constructor(\n    headers?: string | {[name: string]: string | number | (string | number)[]} | Headers,\n  ) {\n    if (!headers) {\n      this.headers = new Map<string, string[]>();\n    } else if (typeof headers === 'string') {\n      this.lazyInit = () => {\n        this.headers = new Map<string, string[]>();\n        headers.split('\\n').forEach((line) => {\n          const index = line.indexOf(':');\n          if (index > 0) {\n            const name = line.slice(0, index);\n            const value = line.slice(index + 1).trim();\n            this.addHeaderEntry(name, value);\n          }\n        });\n      };\n    } else if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n      this.headers = new Map<string, string[]>();\n      headers.forEach((value: string, name: string) => {\n        this.addHeaderEntry(name, value);\n      });\n    } else {\n      this.lazyInit = () => {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          assertValidHeaders(headers);\n        }\n        this.headers = new Map<string, string[]>();\n        Object.entries(headers).forEach(([name, values]) => {\n          this.setHeaderEntries(name, values);\n        });\n      };\n    }\n  }\n\n  /**\n   * Checks for existence of a given header.\n   *\n   * @param name The header name to check for existence.\n   *\n   * @returns True if the header exists, false otherwise.\n   */\n  has(name: string): boolean {\n    this.init();\n\n    return this.headers.has(name.toLowerCase());\n  }\n\n  /**\n   * Retrieves the first value of a given header.\n   *\n   * @param name The header name.\n   *\n   * @returns The value string if the header exists, null otherwise\n   */\n  get(name: string): string | null {\n    this.init();\n\n    const values = this.headers.get(name.toLowerCase());\n    return values && values.length > 0 ? values[0] : null;\n  }\n\n  /**\n   * Retrieves the names of the headers.\n   *\n   * @returns A list of header names.\n   */\n  keys(): string[] {\n    this.init();\n\n    return Array.from(this.normalizedNames.values());\n  }\n\n  /**\n   * Retrieves a list of values for a given header.\n   *\n   * @param name The header name from which to retrieve values.\n   *\n   * @returns A string of values if the header exists, null otherwise.\n   */\n  getAll(name: string): string[] | null {\n    this.init();\n\n    return this.headers.get(name.toLowerCase()) || null;\n  }\n\n  /**\n   * Appends a new value to the existing set of values for a header\n   * and returns them in a clone of the original instance.\n   *\n   * @param name The header name for which to append the values.\n   * @param value The value to append.\n   *\n   * @returns A clone of the HTTP headers object with the value appended to the given header.\n   */\n\n  append(name: string, value: string | string[]): HttpHeaders {\n    return this.clone({name, value, op: 'a'});\n  }\n  /**\n   * Sets or modifies a value for a given header in a clone of the original instance.\n   * If the header already exists, its value is replaced with the given value\n   * in the returned object.\n   *\n   * @param name The header name.\n   * @param value The value or values to set or override for the given header.\n   *\n   * @returns A clone of the HTTP headers object with the newly set header value.\n   */\n  set(name: string, value: string | string[]): HttpHeaders {\n    return this.clone({name, value, op: 's'});\n  }\n  /**\n   * Deletes values for a given header in a clone of the original instance.\n   *\n   * @param name The header name.\n   * @param value The value or values to delete for the given header.\n   *\n   * @returns A clone of the HTTP headers object with the given value deleted.\n   */\n  delete(name: string, value?: string | string[]): HttpHeaders {\n    return this.clone({name, value, op: 'd'});\n  }\n\n  private maybeSetNormalizedName(name: string, lcName: string): void {\n    if (!this.normalizedNames.has(lcName)) {\n      this.normalizedNames.set(lcName, name);\n    }\n  }\n\n  private init(): void {\n    if (!!this.lazyInit) {\n      if (this.lazyInit instanceof HttpHeaders) {\n        this.copyFrom(this.lazyInit);\n      } else {\n        this.lazyInit();\n      }\n      this.lazyInit = null;\n      if (!!this.lazyUpdate) {\n        this.lazyUpdate.forEach((update) => this.applyUpdate(update));\n        this.lazyUpdate = null;\n      }\n    }\n  }\n\n  private copyFrom(other: HttpHeaders) {\n    other.init();\n    Array.from(other.headers.keys()).forEach((key) => {\n      this.headers.set(key, other.headers.get(key)!);\n      this.normalizedNames.set(key, other.normalizedNames.get(key)!);\n    });\n  }\n\n  private clone(update: Update): HttpHeaders {\n    const clone = new HttpHeaders();\n    clone.lazyInit = !!this.lazyInit && this.lazyInit instanceof HttpHeaders ? this.lazyInit : this;\n    clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n    return clone;\n  }\n\n  private applyUpdate(update: Update): void {\n    const key = update.name.toLowerCase();\n    switch (update.op) {\n      case 'a':\n      case 's':\n        let value = update.value!;\n        if (typeof value === 'string') {\n          value = [value];\n        }\n        if (value.length === 0) {\n          return;\n        }\n        this.maybeSetNormalizedName(update.name, key);\n        const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n        base.push(...value);\n        this.headers.set(key, base);\n        break;\n      case 'd':\n        const toDelete = update.value as string | undefined;\n        if (!toDelete) {\n          this.headers.delete(key);\n          this.normalizedNames.delete(key);\n        } else {\n          let existing = this.headers.get(key);\n          if (!existing) {\n            return;\n          }\n          existing = existing.filter((value) => toDelete.indexOf(value) === -1);\n          if (existing.length === 0) {\n            this.headers.delete(key);\n            this.normalizedNames.delete(key);\n          } else {\n            this.headers.set(key, existing);\n          }\n        }\n        break;\n    }\n  }\n\n  private addHeaderEntry(name: string, value: string) {\n    const key = name.toLowerCase();\n    this.maybeSetNormalizedName(name, key);\n    if (this.headers.has(key)) {\n      this.headers.get(key)!.push(value);\n    } else {\n      this.headers.set(key, [value]);\n    }\n  }\n\n  private setHeaderEntries(name: string, values: any) {\n    const headerValues = (Array.isArray(values) ? values : [values]).map((value) =>\n      value.toString(),\n    );\n    const key = name.toLowerCase();\n    this.headers.set(key, headerValues);\n    this.maybeSetNormalizedName(name, key);\n  }\n\n  /**\n   * @internal\n   */\n  forEach(fn: (name: string, values: string[]) => void) {\n    this.init();\n    Array.from(this.normalizedNames.keys()).forEach((key) =>\n      fn(this.normalizedNames.get(key)!, this.headers.get(key)!),\n    );\n  }\n}\n\n/**\n * Verifies that the headers object has the right shape: the values\n * must be either strings, numbers or arrays. Throws an error if an invalid\n * header value is present.\n */\nfunction assertValidHeaders(\n  headers: Record<string, unknown> | Headers,\n): asserts headers is Record<string, string | string[] | number | number[]> {\n  for (const [key, value] of Object.entries(headers)) {\n    if (!(typeof value === 'string' || typeof value === 'number') && !Array.isArray(value)) {\n      throw new Error(\n        `Unexpected value of the \\`${key}\\` header provided. ` +\n          `Expecting either a string, a number or an array, but got: \\`${value}\\`.`,\n      );\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * A token used to manipulate and access values stored in `HttpContext`.\n *\n * @see [Request and response metadata](guide/http/interceptors#request-and-response-metadata)\n *\n * @publicApi\n */\nexport class HttpContextToken<T> {\n  constructor(public readonly defaultValue: () => T) {}\n}\n\n/**\n * Http context stores arbitrary user defined values and ensures type safety without\n * actually knowing the types. It is backed by a `Map` and guarantees that keys do not clash.\n *\n * This context is mutable and is shared between cloned requests unless explicitly specified.\n *\n * @usageNotes\n *\n * ### Usage Example\n *\n * ```ts\n * // inside cache.interceptors.ts\n * export const IS_CACHE_ENABLED = new HttpContextToken<boolean>(() => false);\n *\n * export class CacheInterceptor implements HttpInterceptor {\n *\n *   intercept(req: HttpRequest<any>, delegate: HttpHandler): Observable<HttpEvent<any>> {\n *     if (req.context.get(IS_CACHE_ENABLED) === true) {\n *       return ...;\n *     }\n *     return delegate.handle(req);\n *   }\n * }\n *\n * // inside a service\n *\n * this.httpClient.get('/api/weather', {\n *   context: new HttpContext().set(IS_CACHE_ENABLED, true)\n * }).subscribe(...);\n * ```\n *\n * @see [Request and response metadata](guide/http/interceptors#request-and-response-metadata)\n *\n * @publicApi\n */\nexport class HttpContext {\n  private readonly map = new Map<HttpContextToken<unknown>, unknown>();\n\n  /**\n   * Store a value in the context. If a value is already present it will be overwritten.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   * @param value The value to store.\n   *\n   * @returns A reference to itself for easy chaining.\n   */\n  set<T>(token: HttpContextToken<T>, value: T): HttpContext {\n    this.map.set(token, value);\n    return this;\n  }\n\n  /**\n   * Retrieve the value associated with the given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns The stored value or default if one is defined.\n   */\n  get<T>(token: HttpContextToken<T>): T {\n    if (!this.map.has(token)) {\n      this.map.set(token, token.defaultValue());\n    }\n    return this.map.get(token) as T;\n  }\n\n  /**\n   * Delete the value associated with the given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns A reference to itself for easy chaining.\n   */\n  delete(token: HttpContextToken<unknown>): HttpContext {\n    this.map.delete(token);\n    return this;\n  }\n\n  /**\n   * Checks for existence of a given token.\n   *\n   * @param token The reference to an instance of `HttpContextToken`.\n   *\n   * @returns True if the token exists, false otherwise.\n   */\n  has(token: HttpContextToken<unknown>): boolean {\n    return this.map.has(token);\n  }\n\n  /**\n   * @returns a list of tokens currently stored in the context.\n   */\n  keys(): IterableIterator<HttpContextToken<unknown>> {\n    return this.map.keys();\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * A codec for encoding and decoding parameters in URLs.\n *\n * Used by `HttpParams`.\n *\n * @see [Custom parameter encoding](guide/http/making-requests#custom-parameter-encoding)\n *\n * @publicApi\n **/\nexport interface HttpParameterCodec {\n  encodeKey(key: string): string;\n  encodeValue(value: string): string;\n\n  decodeKey(key: string): string;\n  decodeValue(value: string): string;\n}\n\n/**\n * Provides encoding and decoding of URL parameter and query-string values.\n *\n * Serializes and parses URL parameter keys and values to encode and decode them.\n * If you pass URL query parameters without encoding,\n * the query parameters can be misinterpreted at the receiving end.\n *\n *\n * @publicApi\n */\nexport class HttpUrlEncodingCodec implements HttpParameterCodec {\n  /**\n   * Encodes a key name for a URL parameter or query-string.\n   * @param key The key name.\n   * @returns The encoded key name.\n   */\n  encodeKey(key: string): string {\n    return standardEncoding(key);\n  }\n\n  /**\n   * Encodes the value of a URL parameter or query-string.\n   * @param value The value.\n   * @returns The encoded value.\n   */\n  encodeValue(value: string): string {\n    return standardEncoding(value);\n  }\n\n  /**\n   * Decodes an encoded URL parameter or query-string key.\n   * @param key The encoded key name.\n   * @returns The decoded key name.\n   */\n  decodeKey(key: string): string {\n    return decodeURIComponent(key);\n  }\n\n  /**\n   * Decodes an encoded URL parameter or query-string value.\n   * @param value The encoded value.\n   * @returns The decoded value.\n   */\n  decodeValue(value: string) {\n    return decodeURIComponent(value);\n  }\n}\n\nfunction paramParser(rawParams: string, codec: HttpParameterCodec): Map<string, string[]> {\n  const map = new Map<string, string[]>();\n  if (rawParams.length > 0) {\n    // The `window.location.search` can be used while creating an instance of the `HttpParams` class\n    // (e.g. `new HttpParams({ fromString: window.location.search })`). The `window.location.search`\n    // may start with the `?` char, so we strip it if it's present.\n    const params: string[] = rawParams.replace(/^\\?/, '').split('&');\n    params.forEach((param: string) => {\n      const eqIdx = param.indexOf('=');\n      const [key, val]: string[] =\n        eqIdx == -1\n          ? [codec.decodeKey(param), '']\n          : [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];\n      const list = map.get(key) || [];\n      list.push(val);\n      map.set(key, list);\n    });\n  }\n  return map;\n}\n\n/**\n * Encode input string with standard encodeURIComponent and then un-encode specific characters.\n */\nconst STANDARD_ENCODING_REGEX = /%(\\d[a-f0-9])/gi;\nconst STANDARD_ENCODING_REPLACEMENTS: {[x: string]: string} = {\n  '40': '@',\n  '3A': ':',\n  '24': '$',\n  '2C': ',',\n  '3B': ';',\n  '3D': '=',\n  '3F': '?',\n  '2F': '/',\n};\n\nfunction standardEncoding(v: string): string {\n  return encodeURIComponent(v).replace(\n    STANDARD_ENCODING_REGEX,\n    (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s,\n  );\n}\n\nfunction valueToString(value: string | number | boolean): string {\n  return `${value}`;\n}\n\ninterface Update {\n  param: string;\n  value?: string | number | boolean;\n  op: 'a' | 'd' | 's';\n}\n\n/**\n * Options used to construct an `HttpParams` instance.\n *\n * @see [Setting URL parameters](guide/http/making-requests#setting-url-parameters)\n * @see [Custom parameter encoding](guide/http/making-requests#custom-parameter-encoding)\n *\n * @publicApi\n */\nexport interface HttpParamsOptions {\n  /**\n   * String representation of the HTTP parameters in URL-query-string format.\n   * Mutually exclusive with `fromObject`.\n   */\n  fromString?: string;\n\n  /** Object map of the HTTP parameters. Mutually exclusive with `fromString`. */\n  fromObject?: {\n    [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n  };\n\n  /** Encoding codec used to parse and serialize the parameters. */\n  encoder?: HttpParameterCodec;\n}\n\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immutable; all mutation operations return a new instance.\n *\n * @see [Setting URL parameters](guide/http/making-requests#setting-url-parameters)\n *\n * @publicApi\n */\nexport class HttpParams {\n  private map: Map<string, string[]> | null;\n  private encoder: HttpParameterCodec;\n  private updates: Update[] | null = null;\n  private cloneFrom: HttpParams | null = null;\n\n  constructor(options: HttpParamsOptions = {} as HttpParamsOptions) {\n    this.encoder = options.encoder || new HttpUrlEncodingCodec();\n    if (options.fromString) {\n      if (options.fromObject) {\n        throw new RuntimeError(\n          RuntimeErrorCode.CANNOT_SPECIFY_BOTH_FROM_STRING_AND_FROM_OBJECT,\n          ngDevMode && 'Cannot specify both fromString and fromObject.',\n        );\n      }\n      this.map = paramParser(options.fromString, this.encoder);\n    } else if (!!options.fromObject) {\n      this.map = new Map<string, string[]>();\n      Object.keys(options.fromObject).forEach((key) => {\n        const value = (options.fromObject as any)[key];\n        // convert the values to strings\n        const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];\n        this.map!.set(key, values);\n      });\n    } else {\n      this.map = null;\n    }\n  }\n\n  /**\n   * Reports whether the body includes one or more values for a given parameter.\n   * @param param The parameter name.\n   * @returns True if the parameter has one or more values,\n   * false if it has no value or is not present.\n   */\n  has(param: string): boolean {\n    this.init();\n    return this.map!.has(param);\n  }\n\n  /**\n   * Retrieves the first value for a parameter.\n   * @param param The parameter name.\n   * @returns The first value of the given parameter,\n   * or `null` if the parameter is not present.\n   */\n  get(param: string): string | null {\n    this.init();\n    const res = this.map!.get(param);\n    return !!res ? res[0] : null;\n  }\n\n  /**\n   * Retrieves all values for a  parameter.\n   * @param param The parameter name.\n   * @returns All values in a string array,\n   * or `null` if the parameter not present.\n   */\n  getAll(param: string): string[] | null {\n    this.init();\n    return this.map!.get(param) || null;\n  }\n\n  /**\n   * Retrieves all the parameters for this body.\n   * @returns The parameter names in a string array.\n   */\n  keys(): string[] {\n    this.init();\n    return Array.from(this.map!.keys());\n  }\n\n  /**\n   * Appends a new value to existing values for a parameter.\n   * @param param The parameter name.\n   * @param value The new value to add.\n   * @return A new body with the appended value.\n   */\n  append(param: string, value: string | number | boolean): HttpParams {\n    return this.clone({param, value, op: 'a'});\n  }\n\n  /**\n   * Constructs a new body with appended values for the given parameter name.\n   * @param params parameters and values\n   * @return A new body with the new value.\n   */\n  appendAll(params: {\n    [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n  }): HttpParams {\n    const updates: Update[] = [];\n    Object.keys(params).forEach((param) => {\n      const value = params[param];\n      if (Array.isArray(value)) {\n        value.forEach((_value) => {\n          updates.push({param, value: _value, op: 'a'});\n        });\n      } else {\n        updates.push({param, value: value as string | number | boolean, op: 'a'});\n      }\n    });\n    return this.clone(updates);\n  }\n\n  /**\n   * Replaces the value for a parameter.\n   * @param param The parameter name.\n   * @param value The new value.\n   * @return A new body with the new value.\n   */\n  set(param: string, value: string | number | boolean): HttpParams {\n    return this.clone({param, value, op: 's'});\n  }\n\n  /**\n   * Removes a given value or all values from a parameter.\n   * @param param The parameter name.\n   * @param value The value to remove, if provided.\n   * @return A new body with the given value removed, or with all values\n   * removed if no value is specified.\n   */\n  delete(param: string, value?: string | number | boolean): HttpParams {\n    return this.clone({param, value, op: 'd'});\n  }\n\n  /**\n   * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are\n   * separated by `&`s.\n   */\n  toString(): string {\n    this.init();\n    return (\n      this.keys()\n        .map((key) => {\n          const eKey = this.encoder.encodeKey(key);\n          // `a: ['1']` produces `'a=1'`\n          // `b: []` produces `''`\n          // `c: ['1', '2']` produces `'c=1&c=2'`\n          return this.map!.get(key)!\n            .map((value) => eKey + '=' + this.encoder.encodeValue(value))\n            .join('&');\n        })\n        // filter out empty values because `b: []` produces `''`\n        // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't\n        .filter((param) => param !== '')\n        .join('&')\n    );\n  }\n\n  private clone(update: Update | Update[]): HttpParams {\n    const clone = new HttpParams({encoder: this.encoder} as HttpParamsOptions);\n    clone.cloneFrom = this.cloneFrom || this;\n    clone.updates = (this.updates || []).concat(update);\n    return clone;\n  }\n\n  private init() {\n    if (this.map === null) {\n      this.map = new Map<string, string[]>();\n    }\n    if (this.cloneFrom !== null) {\n      this.cloneFrom.init();\n      this.cloneFrom.keys().forEach((key) => this.map!.set(key, this.cloneFrom!.map!.get(key)!));\n      this.updates!.forEach((update) => {\n        switch (update.op) {\n          case 'a':\n          case 's':\n            const base = (update.op === 'a' ? this.map!.get(update.param) : undefined) || [];\n            base.push(valueToString(update.value!));\n            this.map!.set(update.param, base);\n            break;\n          case 'd':\n            if (update.value !== undefined) {\n              let base = this.map!.get(update.param) || [];\n              const idx = base.indexOf(valueToString(update.value));\n              if (idx !== -1) {\n                base.splice(idx, 1);\n              }\n              if (base.length > 0) {\n                this.map!.set(update.param, base);\n              } else {\n                this.map!.delete(update.param);\n              }\n            } else {\n              this.map!.delete(update.param);\n              break;\n            }\n        }\n      });\n      this.cloneFrom = this.updates = null;\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {HttpContext} from './context';\nimport {HttpHeaders} from './headers';\nimport {HttpParams} from './params';\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * Construction interface for `HttpRequest`s.\n *\n * All values are optional and will override default values if provided.\n */\ninterface HttpRequestInit {\n  headers?: HttpHeaders;\n  context?: HttpContext;\n  reportProgress?: boolean;\n  params?: HttpParams;\n  responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n  withCredentials?: boolean;\n  credentials?: RequestCredentials;\n  transferCache?: {includeHeaders?: string[]} | boolean;\n  keepalive?: boolean;\n  priority?: RequestPriority;\n  cache?: RequestCache;\n  timeout?: number;\n  mode?: RequestMode;\n  redirect?: RequestRedirect;\n  referrer?: string;\n  integrity?: string;\n  referrerPolicy?: ReferrerPolicy;\n}\n\n/**\n * Determine whether the given HTTP method may include a body.\n */\nfunction mightHaveBody(method: string): boolean {\n  switch (method) {\n    case 'DELETE':\n    case 'GET':\n    case 'HEAD':\n    case 'OPTIONS':\n    case 'JSONP':\n      return false;\n    default:\n      return true;\n  }\n}\n\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n */\nfunction isArrayBuffer(value: any): value is ArrayBuffer {\n  return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n */\nfunction isBlob(value: any): value is Blob {\n  return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n */\nfunction isFormData(value: any): value is FormData {\n  return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n\n/**\n * Safely assert whether the given value is a URLSearchParams instance.\n *\n * In some execution environments URLSearchParams is not defined.\n */\nfunction isUrlSearchParams(value: any): value is URLSearchParams {\n  return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams;\n}\n\n/**\n * `Content-Type` is an HTTP header used to indicate the media type\n * (also known as MIME type) of the resource being sent to the client\n * or received from the server.\n */\nexport const CONTENT_TYPE_HEADER = 'Content-Type';\n\n/**\n * The `Accept` header is an HTTP request header that indicates the media types\n * (or content types) the client is willing to receive from the server.\n */\nexport const ACCEPT_HEADER = 'Accept';\n\n/**\n * `text/plain` is a content type used to indicate that the content being\n * sent is plain text with no special formatting or structured data\n * like HTML, XML, or JSON.\n */\nexport const TEXT_CONTENT_TYPE = 'text/plain';\n\n/**\n * `application/json` is a content type used to indicate that the content\n * being sent is in the JSON format.\n */\nexport const JSON_CONTENT_TYPE = 'application/json';\n\n/**\n * `application/json, text/plain, *\\/*` is a content negotiation string often seen in the\n * Accept header of HTTP requests. It indicates the types of content the client is willing\n * to accept from the server, with a preference for `application/json` and `text/plain`,\n * but also accepting any other type (*\\/*).\n */\nexport const ACCEPT_HEADER_VALUE = `${JSON_CONTENT_TYPE}, ${TEXT_CONTENT_TYPE}, */*`;\n\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * @publicApi\n */\nexport class HttpRequest<T> {\n  /**\n   * The request body, or `null` if one isn't set.\n   *\n   * Bodies are not enforced to be immutable, as they can include a reference to any\n   * user-defined data type. However, interceptors should take care to preserve\n   * idempotence by treating them as such.\n   */\n  readonly body: T | null = null;\n\n  /**\n   * Outgoing headers for this request.\n   */\n  readonly headers!: HttpHeaders;\n\n  /**\n   * Shared and mutable context that can be used by interceptors\n   */\n  readonly context!: HttpContext;\n\n  /**\n   * Whether this request should be made in a way that exposes progress events.\n   *\n   * Progress events are expensive (change detection runs on each event) and so\n   * they should only be requested if the consumer intends to monitor them.\n   *\n   * Note: The `FetchBackend` doesn't support progress report on uploads.\n   */\n  readonly reportProgress: boolean = false;\n\n  /**\n   * Whether this request should be sent with outgoing credentials (cookies).\n   */\n  readonly withCredentials: boolean = false;\n\n  /**\n   *  The credentials mode of the request, which determines how cookies and HTTP authentication are handled.\n   *  This can affect whether cookies are sent with the request, and how authentication is handled.\n   */\n  readonly credentials!: RequestCredentials;\n\n  /**\n   * When using the fetch implementation and set to `true`, the browser will not abort the associated request if the page that initiated it is unloaded before the request is complete.\n   */\n  readonly keepalive: boolean = false;\n\n  /**\n   * Controls how the request will interact with the browser's HTTP cache.\n   * This affects whether a response is retrieved from the cache, how it is stored, or if it bypasses the cache altogether.\n   */\n  readonly cache!: RequestCache;\n\n  /**\n   * Indicates the relative priority of the request. This may be used by the browser to decide the order in which requests are dispatched and resources fetched.\n   */\n  readonly priority!: RequestPriority;\n\n  /**\n   * The mode of the request, which determines how the request will interact with the browser's security model.\n   * This can affect things like CORS (Cross-Origin Resource Sharing) and same-origin policies.\n   */\n  readonly mode!: RequestMode;\n\n  /**\n   * The redirect mode of the request, which determines how redirects are handled.\n   * This can affect whether the request follows redirects automatically, or if it fails when a redirect occurs.\n   */\n  readonly redirect!: RequestRedirect;\n\n  /**\n   * The referrer of the request, which can be used to indicate the origin of the request.\n   * This is useful for security and analytics purposes.\n   * Value is a same-origin URL, \"about:client\", or the empty string, to set request's referrer.\n   */\n  readonly referrer!: string;\n\n  /**\n   * The integrity metadata of the request, which can be used to ensure the request is made with the expected content.\n   * A cryptographic hash of the resource to be fetched by request\n   */\n  readonly integrity!: string;\n\n  /**\n   * The referrer policy of the request, which can be used to specify the referrer information to be included with the request.\n   * This can affect the amount of referrer information sent with the request, and can be used to enhance privacy and security.\n   */\n  readonly referrerPolicy!: ReferrerPolicy;\n\n  /**\n   * The expected response type of the server.\n   *\n   * This is used to parse the response appropriately before returning it to\n   * the requestee.\n   */\n  readonly responseType: 'arraybuffer' | 'blob' | 'json' | 'text' = 'json';\n\n  /**\n   * The outgoing HTTP request method.\n   */\n  readonly method: string;\n\n  /**\n   * Outgoing URL parameters.\n   *\n   * To pass a string representation of HTTP parameters in the URL-query-string format,\n   * the `HttpParamsOptions`' `fromString` may be used. For example:\n   *\n   * ```ts\n   * new HttpParams({fromString: 'angular=awesome'})\n   * ```\n   */\n  readonly params!: HttpParams;\n\n  /**\n   * The outgoing URL with all URL parameters set.\n   */\n  readonly urlWithParams: string;\n\n  /**\n   * The HttpTransferCache option for the request\n   */\n  readonly transferCache?: {includeHeaders?: string[]} | boolean;\n\n  /**\n   * The timeout for the backend HTTP request in ms.\n   */\n  readonly timeout?: number;\n\n  constructor(\n    method: 'GET' | 'HEAD',\n    url: string,\n    init?: {\n      headers?: HttpHeaders;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      params?: HttpParams;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      /**\n       * This property accepts either a boolean to enable/disable transferring cache for eligible\n       * requests performed using `HttpClient`, or an object, which allows to configure cache\n       * parameters, such as which headers should be included (no headers are included by default).\n       *\n       * Setting this property will override the options passed to `provideClientHydration()` for this\n       * particular request\n       */\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  );\n  constructor(\n    method: 'DELETE' | 'JSONP' | 'OPTIONS',\n    url: string,\n    init?: {\n      headers?: HttpHeaders;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      params?: HttpParams;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      timeout?: number;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n    },\n  );\n  constructor(\n    method: 'POST',\n    url: string,\n    body: T | null,\n    init?: {\n      headers?: HttpHeaders;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      params?: HttpParams;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      /**\n       * This property accepts either a boolean to enable/disable transferring cache for eligible\n       * requests performed using `HttpClient`, or an object, which allows to configure cache\n       * parameters, such as which headers should be included (no headers are included by default).\n       *\n       * Setting this property will override the options passed to `provideClientHydration()` for this\n       * particular request\n       */\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  );\n  constructor(\n    method: 'PUT' | 'PATCH',\n    url: string,\n    body: T | null,\n    init?: {\n      headers?: HttpHeaders;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      params?: HttpParams;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      timeout?: number;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n    },\n  );\n  constructor(\n    method: string,\n    url: string,\n    body: T | null,\n    init?: {\n      headers?: HttpHeaders;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      params?: HttpParams;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      /**\n       * This property accepts either a boolean to enable/disable transferring cache for eligible\n       * requests performed using `HttpClient`, or an object, which allows to configure cache\n       * parameters, such as which headers should be included (no headers are included by default).\n       *\n       * Setting this property will override the options passed to `provideClientHydration()` for this\n       * particular request\n       */\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  );\n  constructor(\n    method: string,\n    readonly url: string,\n    third?:\n      | T\n      | {\n          headers?: HttpHeaders;\n          context?: HttpContext;\n          reportProgress?: boolean;\n          params?: HttpParams;\n          responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n          withCredentials?: boolean;\n          credentials?: RequestCredentials;\n          keepalive?: boolean;\n          priority?: RequestPriority;\n          cache?: RequestCache;\n          mode?: RequestMode;\n          redirect?: RequestRedirect;\n          referrer?: string;\n          integrity?: string;\n          referrerPolicy?: ReferrerPolicy;\n          transferCache?: {includeHeaders?: string[]} | boolean;\n          timeout?: number;\n        }\n      | null,\n    fourth?: {\n      headers?: HttpHeaders;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      params?: HttpParams;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ) {\n    this.method = method.toUpperCase();\n    // Next, need to figure out which argument holds the HttpRequestInit\n    // options, if any.\n    let options: HttpRequestInit | undefined;\n\n    // Check whether a body argument is expected. The only valid way to omit\n    // the body argument is to use a known no-body method like GET.\n    if (mightHaveBody(this.method) || !!fourth) {\n      // Body is the third argument, options are the fourth.\n      this.body = third !== undefined ? (third as T) : null;\n      options = fourth;\n    } else {\n      // No body required, options are the third argument. The body stays null.\n      options = third as HttpRequestInit;\n    }\n\n    // If options have been passed, interpret them.\n    if (options) {\n      // Normalize reportProgress and withCredentials.\n      this.reportProgress = !!options.reportProgress;\n      this.withCredentials = !!options.withCredentials;\n      this.keepalive = !!options.keepalive;\n\n      // Override default response type of 'json' if one is provided.\n      if (!!options.responseType) {\n        this.responseType = options.responseType;\n      }\n\n      // Override headers if they're provided.\n      if (options.headers) {\n        this.headers = options.headers;\n      }\n\n      if (options.context) {\n        this.context = options.context;\n      }\n\n      if (options.params) {\n        this.params = options.params;\n      }\n\n      if (options.priority) {\n        this.priority = options.priority;\n      }\n\n      if (options.cache) {\n        this.cache = options.cache;\n      }\n\n      if (options.credentials) {\n        this.credentials = options.credentials;\n      }\n\n      if (typeof options.timeout === 'number') {\n        // XHR will ignore any value below 1. AbortSignals only accept unsigned integers.\n\n        if (options.timeout < 1 || !Number.isInteger(options.timeout)) {\n          throw new RuntimeError(\n            RuntimeErrorCode.INVALID_TIMEOUT_VALUE,\n            ngDevMode ? '`timeout` must be a positive integer value' : '',\n          );\n        }\n\n        this.timeout = options.timeout;\n      }\n\n      if (options.mode) {\n        this.mode = options.mode;\n      }\n\n      if (options.redirect) {\n        this.redirect = options.redirect;\n      }\n\n      if (options.integrity) {\n        this.integrity = options.integrity;\n      }\n\n      if (options.referrer) {\n        this.referrer = options.referrer;\n      }\n\n      if (options.referrerPolicy) {\n        this.referrerPolicy = options.referrerPolicy;\n      }\n\n      // We do want to assign transferCache even if it's falsy (false is valid value)\n      this.transferCache = options.transferCache;\n    }\n\n    // If no headers have been passed in, construct a new HttpHeaders instance.\n    this.headers ??= new HttpHeaders();\n\n    // If no context have been passed in, construct a new HttpContext instance.\n    this.context ??= new HttpContext();\n\n    // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n    if (!this.params) {\n      this.params = new HttpParams();\n      this.urlWithParams = url;\n    } else {\n      // Encode the parameters to a string in preparation for inclusion in the URL.\n      const params = this.params.toString();\n      if (params.length === 0) {\n        // No parameters, the visible URL is just the URL given at creation time.\n        this.urlWithParams = url;\n      } else {\n        // Does the URL already have query parameters? Look for '?'.\n        const qIdx = url.indexOf('?');\n        // There are 3 cases to handle:\n        // 1) No existing parameters -> append '?' followed by params.\n        // 2) '?' exists and is followed by existing query string ->\n        //    append '&' followed by params.\n        // 3) '?' exists at the end of the url -> append params directly.\n        // This basically amounts to determining the character, if any, with\n        // which to join the URL and parameters.\n        const sep: string = qIdx === -1 ? '?' : qIdx < url.length - 1 ? '&' : '';\n        this.urlWithParams = url + sep + params;\n      }\n    }\n  }\n\n  /**\n   * Transform the free-form body into a serialized format suitable for\n   * transmission to the server.\n   */\n  serializeBody(): ArrayBuffer | Blob | FormData | URLSearchParams | string | null {\n    // If no body is present, no need to serialize it.\n    if (this.body === null) {\n      return null;\n    }\n    // Check whether the body is already in a serialized form. If so,\n    // it can just be returned directly.\n    if (\n      typeof this.body === 'string' ||\n      isArrayBuffer(this.body) ||\n      isBlob(this.body) ||\n      isFormData(this.body) ||\n      isUrlSearchParams(this.body)\n    ) {\n      return this.body;\n    }\n    // Check whether the body is an instance of HttpUrlEncodedParams.\n    if (this.body instanceof HttpParams) {\n      return this.body.toString();\n    }\n    // Check whether the body is an object or array, and serialize with JSON if so.\n    if (\n      typeof this.body === 'object' ||\n      typeof this.body === 'boolean' ||\n      Array.isArray(this.body)\n    ) {\n      return JSON.stringify(this.body);\n    }\n    // Fall back on toString() for everything else.\n    return (this.body as any).toString();\n  }\n\n  /**\n   * Examine the body and attempt to infer an appropriate MIME type\n   * for it.\n   *\n   * If no such type can be inferred, this method will return `null`.\n   */\n  detectContentTypeHeader(): string | null {\n    // An empty body has no content type.\n    if (this.body === null) {\n      return null;\n    }\n    // FormData bodies rely on the browser's content type assignment.\n    if (isFormData(this.body)) {\n      return null;\n    }\n    // Blobs usually have their own content type. If it doesn't, then\n    // no type can be inferred.\n    if (isBlob(this.body)) {\n      return this.body.type || null;\n    }\n    // Array buffers have unknown contents and thus no type can be inferred.\n    if (isArrayBuffer(this.body)) {\n      return null;\n    }\n    // Technically, strings could be a form of JSON data, but it's safe enough\n    // to assume they're plain strings.\n    if (typeof this.body === 'string') {\n      return TEXT_CONTENT_TYPE;\n    }\n    // `HttpUrlEncodedParams` has its own content-type.\n    if (this.body instanceof HttpParams) {\n      return 'application/x-www-form-urlencoded;charset=UTF-8';\n    }\n    // Arrays, objects, boolean and numbers will be encoded as JSON.\n    if (\n      typeof this.body === 'object' ||\n      typeof this.body === 'number' ||\n      typeof this.body === 'boolean'\n    ) {\n      return JSON_CONTENT_TYPE;\n    }\n    // No type could be inferred.\n    return null;\n  }\n\n  clone(): HttpRequest<T>;\n  clone(update: {\n    headers?: HttpHeaders;\n    context?: HttpContext;\n    reportProgress?: boolean;\n    params?: HttpParams;\n    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    withCredentials?: boolean;\n    credentials?: RequestCredentials;\n    keepalive?: boolean;\n    priority?: RequestPriority;\n    cache?: RequestCache;\n    mode?: RequestMode;\n    redirect?: RequestRedirect;\n    referrer?: string;\n    integrity?: string;\n    referrerPolicy?: ReferrerPolicy;\n    transferCache?: {includeHeaders?: string[]} | boolean;\n    timeout?: number;\n    body?: T | null;\n    method?: string;\n    url?: string;\n    setHeaders?: {[name: string]: string | string[]};\n    setParams?: {[param: string]: string};\n  }): HttpRequest<T>;\n  clone<V>(update: {\n    headers?: HttpHeaders;\n    context?: HttpContext;\n    reportProgress?: boolean;\n    params?: HttpParams;\n    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    keepalive?: boolean;\n    priority?: RequestPriority;\n    cache?: RequestCache;\n    mode?: RequestMode;\n    redirect?: RequestRedirect;\n    referrer?: string;\n    integrity?: string;\n    referrerPolicy?: ReferrerPolicy;\n    withCredentials?: boolean;\n    credentials?: RequestCredentials;\n    transferCache?: {includeHeaders?: string[]} | boolean;\n    timeout?: number;\n    body?: V | null;\n    method?: string;\n    url?: string;\n    setHeaders?: {[name: string]: string | string[]};\n    setParams?: {[param: string]: string};\n  }): HttpRequest<V>;\n  clone(\n    update: {\n      headers?: HttpHeaders;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      params?: HttpParams;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n      body?: any | null;\n      method?: string;\n      url?: string;\n      setHeaders?: {[name: string]: string | string[]};\n      setParams?: {[param: string]: string};\n    } = {},\n  ): HttpRequest<any> {\n    // For method, url, and responseType, take the current value unless\n    // it is overridden in the update hash.\n    const method = update.method || this.method;\n    const url = update.url || this.url;\n    const responseType = update.responseType || this.responseType;\n    const keepalive = update.keepalive ?? this.keepalive;\n    const priority = update.priority || this.priority;\n    const cache = update.cache || this.cache;\n    const mode = update.mode || this.mode;\n    const redirect = update.redirect || this.redirect;\n    const credentials = update.credentials || this.credentials;\n    const referrer = update.referrer || this.referrer;\n    const integrity = update.integrity || this.integrity;\n    const referrerPolicy = update.referrerPolicy || this.referrerPolicy;\n    // Carefully handle the transferCache to differentiate between\n    // `false` and `undefined` in the update args.\n    const transferCache = update.transferCache ?? this.transferCache;\n\n    const timeout = update.timeout ?? this.timeout;\n\n    // The body is somewhat special - a `null` value in update.body means\n    // whatever current body is present is being overridden with an empty\n    // body, whereas an `undefined` value in update.body implies no\n    // override.\n    const body = update.body !== undefined ? update.body : this.body;\n\n    // Carefully handle the boolean options to differentiate between\n    // `false` and `undefined` in the update args.\n    const withCredentials = update.withCredentials ?? this.withCredentials;\n    const reportProgress = update.reportProgress ?? this.reportProgress;\n\n    // Headers and params may be appended to if `setHeaders` or\n    // `setParams` are used.\n    let headers = update.headers || this.headers;\n    let params = update.params || this.params;\n\n    // Pass on context if needed\n    const context = update.context ?? this.context;\n\n    // Check whether the caller has asked to add headers.\n    if (update.setHeaders !== undefined) {\n      // Set every requested header.\n      headers = Object.keys(update.setHeaders).reduce(\n        (headers, name) => headers.set(name, update.setHeaders![name]),\n        headers,\n      );\n    }\n\n    // Check whether the caller has asked to set params.\n    if (update.setParams) {\n      // Set every requested param.\n      params = Object.keys(update.setParams).reduce(\n        (params, param) => params.set(param, update.setParams![param]),\n        params,\n      );\n    }\n\n    // Finally, construct the new HttpRequest using the pieces from above.\n    return new HttpRequest(method, url, body, {\n      params,\n      headers,\n      context,\n      reportProgress,\n      responseType,\n      withCredentials,\n      transferCache,\n      keepalive,\n      cache,\n      priority,\n      timeout,\n      mode,\n      redirect,\n      credentials,\n      referrer,\n      integrity,\n      referrerPolicy,\n    });\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HttpHeaders} from './headers';\n\n/**\n * Type enumeration for the different kinds of `HttpEvent`.\n *\n * @see [Receiving raw progress event](guide/http/making-requests#receiving-raw-progress-events)\n *\n * @publicApi\n */\nexport enum HttpEventType {\n  /**\n   * The request was sent out over the wire.\n   */\n  Sent,\n\n  /**\n   * An upload progress event was received.\n   *\n   * Note: The `FetchBackend` doesn't support progress report on uploads.\n   */\n  UploadProgress,\n\n  /**\n   * The response status code and headers were received.\n   */\n  ResponseHeader,\n\n  /**\n   * A download progress event was received.\n   */\n  DownloadProgress,\n\n  /**\n   * The full response including the body was received.\n   */\n  Response,\n\n  /**\n   * A custom event from an interceptor or a backend.\n   */\n  User,\n}\n\n/**\n * Base interface for progress events.\n *\n * @see [Receiving raw progress events](guide/http/making-requests#receiving-raw-progress-events)\n *\n * @publicApi\n */\nexport interface HttpProgressEvent {\n  /**\n   * Progress event type is either upload or download.\n   */\n  type: HttpEventType.DownloadProgress | HttpEventType.UploadProgress;\n\n  /**\n   * Number of bytes uploaded or downloaded.\n   */\n  loaded: number;\n\n  /**\n   * Total number of bytes to upload or download. Depending on the request or\n   * response, this may not be computable and thus may not be present.\n   */\n  total?: number;\n}\n\n/**\n * A download progress event.\n *\n * @see [Receiving raw progress events](guide/http/making-requests#receiving-raw-progress-events)\n *\n * @publicApi\n */\nexport interface HttpDownloadProgressEvent extends HttpProgressEvent {\n  type: HttpEventType.DownloadProgress;\n\n  /**\n   * The partial response body as downloaded so far.\n   *\n   * Only present if the responseType was `text`.\n   */\n  partialText?: string;\n}\n\n/**\n * An upload progress event.\n *\n * Note: The `FetchBackend` doesn't support progress report on uploads.\n *\n * @see [Receiving raw progress events](guide/http/making-requests#receiving-raw-progress-events)\n *\n * @publicApi\n */\nexport interface HttpUploadProgressEvent extends HttpProgressEvent {\n  type: HttpEventType.UploadProgress;\n}\n\n/**\n * An event indicating that the request was sent to the server. Useful\n * when a request may be retried multiple times, to distinguish between\n * retries on the final event stream.\n *\n * @see [Receiving raw progress events](guide/http/making-requests#receiving-raw-progress-events)\n *\n * @publicApi\n */\nexport interface HttpSentEvent {\n  type: HttpEventType.Sent;\n}\n\n/**\n * A user-defined event.\n *\n * Grouping all custom events under this type ensures they will be handled\n * and forwarded by all implementations of interceptors.\n *\n * @see [Receiving raw progress events](guide/http/making-requests#receiving-raw-progress-events)\n *\n * @publicApi\n */\nexport interface HttpUserEvent<T> {\n  type: HttpEventType.User;\n}\n\n/**\n * An error that represents a failed attempt to JSON.parse text coming back\n * from the server.\n *\n * It bundles the Error object with the actual response body that failed to parse.\n *\n *\n */\nexport interface HttpJsonParseError {\n  error: Error;\n  text: string;\n}\n\n/**\n * Union type for all possible events on the response stream.\n *\n * Typed according to the expected type of the response.\n *\n * @see [Intercepting response events](guide/http/interceptors#intercepting-response-events)\n * @publicApi\n */\nexport type HttpEvent<T> =\n  | HttpSentEvent\n  | HttpHeaderResponse\n  | HttpResponse<T>\n  | HttpDownloadProgressEvent\n  | HttpUploadProgressEvent\n  | HttpUserEvent<T>;\n\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * @publicApi\n */\nexport abstract class HttpResponseBase {\n  /**\n   * All response headers.\n   */\n  readonly headers: HttpHeaders;\n\n  /**\n   * Response status code.\n   */\n  readonly status: number;\n\n  /**\n   * Textual description of response status code, defaults to OK.\n   *\n   * Do not depend on this.\n   *\n   * @deprecated With HTTP/2 and later versions, this will incorrectly remain set to 'OK' even when the status code of a response is not 200.\n   */\n  readonly statusText: string;\n\n  /**\n   * URL of the resource retrieved, or null if not available.\n   */\n  readonly url: string | null;\n\n  /**\n   * Whether the status code falls in the 2xx range.\n   */\n  readonly ok: boolean;\n\n  /**\n   * Type of the response, narrowed to either the full response or the header.\n   */\n  readonly type!: HttpEventType.Response | HttpEventType.ResponseHeader;\n\n  /**\n   * Indicates whether the HTTP response was redirected during the request.\n   * This property is only available when using the Fetch API using `withFetch()`\n   * When using the default XHR Request this property will be `undefined`\n   */\n  readonly redirected?: boolean;\n\n  /**\n   * Indicates the type of the HTTP response, based on how the request was made and how the browser handles the response.\n   *\n   * This corresponds to the `type` property of the Fetch API's `Response` object, which can indicate values such as:\n   * - `'basic'`: A same-origin response, allowing full access to the body and headers.\n   * - `'cors'`: A cross-origin response with CORS enabled, exposing only safe response headers.\n   * - `'opaque'`: A cross-origin response made with `no-cors`, where the response body and headers are inaccessible.\n   * - `'opaqueredirect'`: A response resulting from a redirect followed in `no-cors` mode.\n   * - `'error'`: A response representing a network error or similar failure.\n   *\n   * This property is only available when using the Fetch-based backend (via `withFetch()`).\n   * When using Angular's (XHR) backend, this value will be `undefined`.\n   */\n  readonly responseType?: ResponseType;\n\n  /**\n   * Super-constructor for all responses.\n   *\n   * The single parameter accepted is an initialization hash. Any properties\n   * of the response passed there will override the default values.\n   */\n  constructor(\n    init: {\n      headers?: HttpHeaders;\n      status?: number;\n      statusText?: string;\n      url?: string;\n      redirected?: boolean;\n      responseType?: ResponseType;\n    },\n    defaultStatus: number = 200,\n    defaultStatusText: string = 'OK',\n  ) {\n    // If the hash has values passed, use them to initialize the response.\n    // Otherwise use the default values.\n    this.headers = init.headers || new HttpHeaders();\n    this.status = init.status !== undefined ? init.status : defaultStatus;\n    this.statusText = init.statusText || defaultStatusText;\n    this.url = init.url || null;\n    this.redirected = init.redirected;\n    this.responseType = init.responseType;\n    // Cache the ok value to avoid defining a getter.\n    this.ok = this.status >= 200 && this.status < 300;\n  }\n}\n\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * @see [Receiving raw progress events](guide/http/making-requests#receiving-raw-progress-events)\n *\n * @publicApi\n */\nexport class HttpHeaderResponse extends HttpResponseBase {\n  /**\n   * Create a new `HttpHeaderResponse` with the given parameters.\n   */\n  constructor(\n    init: {\n      headers?: HttpHeaders;\n      status?: number;\n      statusText?: string;\n      url?: string;\n    } = {},\n  ) {\n    super(init);\n  }\n\n  override readonly type: HttpEventType.ResponseHeader = HttpEventType.ResponseHeader;\n\n  /**\n   * Copy this `HttpHeaderResponse`, overriding its contents with the\n   * given parameter hash.\n   */\n  clone(\n    update: {\n      headers?: HttpHeaders;\n      status?: number;\n      statusText?: string;\n      url?: string;\n    } = {},\n  ): HttpHeaderResponse {\n    // Perform a straightforward initialization of the new HttpHeaderResponse,\n    // overriding the current parameters with new ones if given.\n    return new HttpHeaderResponse({\n      headers: update.headers || this.headers,\n      status: update.status !== undefined ? update.status : this.status,\n      statusText: update.statusText || this.statusText,\n      url: update.url || this.url || undefined,\n    });\n  }\n}\n\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * @see [Interacting with the server response events](guide/http/making-requests#interacting-with-the-server-response-events)\n *\n * @publicApi\n */\nexport class HttpResponse<T> extends HttpResponseBase {\n  /**\n   * The response body, or `null` if one was not returned.\n   */\n  readonly body: T | null;\n\n  /**\n   * Construct a new `HttpResponse`.\n   */\n  constructor(\n    init: {\n      body?: T | null;\n      headers?: HttpHeaders;\n      status?: number;\n      statusText?: string;\n      url?: string;\n      redirected?: boolean;\n      responseType?: ResponseType;\n    } = {},\n  ) {\n    super(init);\n    this.body = init.body !== undefined ? init.body : null;\n  }\n\n  override readonly type: HttpEventType.Response = HttpEventType.Response;\n\n  clone(): HttpResponse<T>;\n  clone(update: {\n    headers?: HttpHeaders;\n    status?: number;\n    statusText?: string;\n    url?: string;\n    redirected?: boolean;\n    responseType?: ResponseType;\n  }): HttpResponse<T>;\n  clone<V>(update: {\n    body?: V | null;\n    headers?: HttpHeaders;\n    status?: number;\n    statusText?: string;\n    url?: string;\n    redirected?: boolean;\n    responseType?: ResponseType;\n  }): HttpResponse<V>;\n  clone(\n    update: {\n      body?: any | null;\n      headers?: HttpHeaders;\n      status?: number;\n      statusText?: string;\n      url?: string;\n      redirected?: boolean;\n      responseType?: ResponseType;\n    } = {},\n  ): HttpResponse<any> {\n    return new HttpResponse<any>({\n      body: update.body !== undefined ? update.body : this.body,\n      headers: update.headers || this.headers,\n      status: update.status !== undefined ? update.status : this.status,\n      statusText: update.statusText || this.statusText,\n      url: update.url || this.url || undefined,\n      redirected: update.redirected ?? this.redirected,\n      responseType: update.responseType ?? this.responseType,\n    });\n  }\n}\n\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * @see [Handling request failure](guide/http/making-requests#handling-request-failure)\n *\n * @publicApi\n */\nexport class HttpErrorResponse extends HttpResponseBase implements Error {\n  readonly name = 'HttpErrorResponse';\n  readonly message: string;\n  readonly error: any | null;\n\n  /**\n   * Errors are never okay, even when the status code is in the 2xx success range.\n   */\n  override readonly ok = false;\n\n  constructor(init: {\n    error?: any;\n    headers?: HttpHeaders;\n    status?: number;\n    statusText?: string;\n    url?: string;\n    redirected?: boolean;\n    responseType?: ResponseType;\n  }) {\n    // Initialize with a default status of 0 / Unknown Error.\n    super(init, 0, 'Unknown Error');\n\n    // If the response was successful, then this was a parse error. Otherwise, it was\n    // a protocol-level failure of some sort. Either the request failed in transit\n    // or the server returned an unsuccessful status code.\n    if (this.status >= 200 && this.status < 300) {\n      this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;\n    } else {\n      // TODO: Cleanup G3 to update the tests that rely on having the status text in the Error message.\n      this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${\n        init.statusText\n      }`;\n    }\n    this.error = init.error || null;\n  }\n}\n\n/**\n * We use these constant to prevent pulling the whole HttpStatusCode enum\n * Those are the only ones referenced directly by the framework\n */\nexport const HTTP_STATUS_CODE_OK = 200;\nexport const HTTP_STATUS_CODE_NO_CONTENT = 204;\n\n/**\n * Http status codes.\n * As per https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n * @publicApi\n */\nexport enum HttpStatusCode {\n  Continue = 100,\n  SwitchingProtocols = 101,\n  Processing = 102,\n  EarlyHints = 103,\n\n  Ok = HTTP_STATUS_CODE_OK,\n  Created = 201,\n  Accepted = 202,\n  NonAuthoritativeInformation = 203,\n  NoContent = HTTP_STATUS_CODE_NO_CONTENT,\n  ResetContent = 205,\n  PartialContent = 206,\n  MultiStatus = 207,\n  AlreadyReported = 208,\n  ImUsed = 226,\n\n  MultipleChoices = 300,\n  MovedPermanently = 301,\n  Found = 302,\n  SeeOther = 303,\n  NotModified = 304,\n  UseProxy = 305,\n  Unused = 306,\n  TemporaryRedirect = 307,\n  PermanentRedirect = 308,\n\n  BadRequest = 400,\n  Unauthorized = 401,\n  PaymentRequired = 402,\n  Forbidden = 403,\n  NotFound = 404,\n  MethodNotAllowed = 405,\n  NotAcceptable = 406,\n  ProxyAuthenticationRequired = 407,\n  RequestTimeout = 408,\n  Conflict = 409,\n  Gone = 410,\n  LengthRequired = 411,\n  PreconditionFailed = 412,\n  PayloadTooLarge = 413,\n  UriTooLong = 414,\n  UnsupportedMediaType = 415,\n  RangeNotSatisfiable = 416,\n  ExpectationFailed = 417,\n  ImATeapot = 418,\n  MisdirectedRequest = 421,\n  UnprocessableEntity = 422,\n  Locked = 423,\n  FailedDependency = 424,\n  TooEarly = 425,\n  UpgradeRequired = 426,\n  PreconditionRequired = 428,\n  TooManyRequests = 429,\n  RequestHeaderFieldsTooLarge = 431,\n  UnavailableForLegalReasons = 451,\n\n  InternalServerError = 500,\n  NotImplemented = 501,\n  BadGateway = 502,\n  ServiceUnavailable = 503,\n  GatewayTimeout = 504,\n  HttpVersionNotSupported = 505,\n  VariantAlsoNegotiates = 506,\n  InsufficientStorage = 507,\n  LoopDetected = 508,\n  NotExtended = 510,\n  NetworkAuthenticationRequired = 511,\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  DestroyRef,\n  inject,\n  Injectable,\n  InjectionToken,\n  NgZone,\n  ɵformatRuntimeError as formatRuntimeError,\n} from '@angular/core';\nimport {Observable, Observer} from 'rxjs';\nimport {RuntimeErrorCode} from './errors';\n\nimport type {HttpBackend} from './backend';\nimport {HttpHeaders} from './headers';\nimport {ACCEPT_HEADER, ACCEPT_HEADER_VALUE, CONTENT_TYPE_HEADER, HttpRequest} from './request';\nimport {\n  HTTP_STATUS_CODE_OK,\n  HttpDownloadProgressEvent,\n  HttpErrorResponse,\n  HttpEvent,\n  HttpEventType,\n  HttpHeaderResponse,\n  HttpResponse,\n} from './response';\n\n// Needed for the global `Zone` ambient types to be available.\nimport type {} from 'zone.js';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\n/**\n * An internal injection token to reference `FetchBackend` implementation\n * in a tree-shakable way.\n */\nexport const FETCH_BACKEND = new InjectionToken<FetchBackend>(\n  typeof ngDevMode === 'undefined' || ngDevMode ? 'FETCH_BACKEND' : '',\n);\n\n/**\n * Uses `fetch` to send requests to a backend server.\n *\n * This `FetchBackend` requires the support of the\n * [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) which is available on all\n * supported browsers and on Node.js v18 or later.\n *\n * @see {@link HttpHandler}\n *\n * @publicApi\n */\n@Injectable()\nexport class FetchBackend implements HttpBackend {\n  // We use an arrow function to always reference the current global implementation of `fetch`.\n  // This is helpful for cases when the global `fetch` implementation is modified by external code,\n  // see https://github.com/angular/angular/issues/57527.\n  private readonly fetchImpl =\n    inject(FetchFactory, {optional: true})?.fetch ?? ((...args) => globalThis.fetch(...args));\n  private readonly ngZone = inject(NgZone);\n  private readonly destroyRef = inject(DestroyRef);\n\n  handle(request: HttpRequest<any>): Observable<HttpEvent<any>> {\n    return new Observable((observer) => {\n      const aborter = new AbortController();\n\n      this.doRequest(request, aborter.signal, observer).then(noop, (error) =>\n        observer.error(new HttpErrorResponse({error})),\n      );\n\n      let timeoutId: ReturnType<typeof setTimeout> | undefined;\n      if (request.timeout) {\n        // TODO: Replace with AbortSignal.any([aborter.signal, AbortSignal.timeout(request.timeout)])\n        // when AbortSignal.any support is Baseline widely available (NET nov. 2026)\n        timeoutId = this.ngZone.runOutsideAngular(() =>\n          setTimeout(() => {\n            if (!aborter.signal.aborted) {\n              aborter.abort(new DOMException('signal timed out', 'TimeoutError'));\n            }\n          }, request.timeout),\n        );\n      }\n\n      return () => {\n        if (timeoutId !== undefined) {\n          clearTimeout(timeoutId);\n        }\n        aborter.abort();\n      };\n    });\n  }\n\n  private async doRequest(\n    request: HttpRequest<any>,\n    signal: AbortSignal,\n    observer: Observer<HttpEvent<any>>,\n  ): Promise<void> {\n    const init = this.createRequestInit(request);\n    let response;\n    try {\n      // Run fetch outside of Angular zone.\n      // This is due to Node.js fetch implementation (Undici) which uses a number of setTimeouts to check if\n      // the response should eventually timeout which causes extra CD cycles every 500ms\n      const fetchPromise = this.ngZone.runOutsideAngular(() =>\n        this.fetchImpl(request.urlWithParams, {signal, ...init}),\n      );\n\n      // Make sure Zone.js doesn't trigger false-positive unhandled promise\n      // error in case the Promise is rejected synchronously. See function\n      // description for additional information.\n      silenceSuperfluousUnhandledPromiseRejection(fetchPromise);\n\n      // Send the `Sent` event before awaiting the response.\n      observer.next({type: HttpEventType.Sent});\n\n      response = await fetchPromise;\n    } catch (error: any) {\n      observer.error(\n        new HttpErrorResponse({\n          error,\n          status: error.status ?? 0,\n          statusText: error.statusText,\n          url: request.urlWithParams,\n          headers: error.headers,\n        }),\n      );\n      return;\n    }\n\n    const headers = new HttpHeaders(response.headers);\n    const statusText = response.statusText;\n    const url = response.url || request.urlWithParams;\n\n    let status = response.status;\n    let body: string | ArrayBuffer | Blob | object | null = null;\n\n    if (request.reportProgress) {\n      observer.next(new HttpHeaderResponse({headers, status, statusText, url}));\n    }\n\n    if (response.body) {\n      // Read Progress\n      const contentLength = response.headers.get('content-length');\n      const chunks: Uint8Array[] = [];\n      const reader = response.body.getReader();\n      let receivedLength = 0;\n\n      let decoder: TextDecoder;\n      let partialText: string | undefined;\n\n      // We have to check whether the Zone is defined in the global scope because this may be called\n      // when the zone is nooped.\n      const reqZone = typeof Zone !== 'undefined' && Zone.current;\n\n      let canceled = false;\n\n      // Perform response processing outside of Angular zone to\n      // ensure no excessive change detection runs are executed\n      // Here calling the async ReadableStreamDefaultReader.read() is responsible for triggering CD\n      await this.ngZone.runOutsideAngular(async () => {\n        while (true) {\n          // Prevent reading chunks if the app is destroyed. Otherwise, we risk doing\n          // unnecessary work or triggering side effects after teardown.\n          // This may happen if the app was explicitly destroyed before\n          // the response returned entirely.\n          if (this.destroyRef.destroyed) {\n            // Streams left in a pending state (due to `break` without cancel) may\n            // continue consuming or holding onto data behind the scenes.\n            // Calling `reader.cancel()` allows the browser or the underlying\n            // system to release any network or memory resources associated with the stream.\n            await reader.cancel();\n            canceled = true;\n            break;\n          }\n\n          const {done, value} = await reader.read();\n\n          if (done) {\n            break;\n          }\n\n          chunks.push(value);\n          receivedLength += value.length;\n\n          if (request.reportProgress) {\n            partialText =\n              request.responseType === 'text'\n                ? (partialText ?? '') +\n                  (decoder ??= new TextDecoder()).decode(value, {stream: true})\n                : undefined;\n\n            const reportProgress = () =>\n              observer.next({\n                type: HttpEventType.DownloadProgress,\n                total: contentLength ? +contentLength : undefined,\n                loaded: receivedLength,\n                partialText,\n              } as HttpDownloadProgressEvent);\n            reqZone ? reqZone.run(reportProgress) : reportProgress();\n          }\n        }\n      });\n\n      // We need to manage the canceled state — because the Streams API does not\n      // expose a direct `.state` property on the reader.\n      // We need to `return` because `parseBody` may not be able to parse chunks\n      // that were only partially read (due to cancellation caused by app destruction).\n      if (canceled) {\n        observer.complete();\n        return;\n      }\n\n      // Combine all chunks.\n      const chunksAll = this.concatChunks(chunks, receivedLength);\n      try {\n        const contentType = response.headers.get(CONTENT_TYPE_HEADER) ?? '';\n        body = this.parseBody(request, chunksAll, contentType, status);\n      } catch (error) {\n        // Body loading or parsing failed\n        observer.error(\n          new HttpErrorResponse({\n            error,\n            headers: new HttpHeaders(response.headers),\n            status: response.status,\n            statusText: response.statusText,\n            url: response.url || request.urlWithParams,\n          }),\n        );\n        return;\n      }\n    }\n\n    // Same behavior as the XhrBackend\n    if (status === 0) {\n      status = body ? HTTP_STATUS_CODE_OK : 0;\n    }\n\n    // ok determines whether the response will be transmitted on the event or\n    // error channel. Unsuccessful status codes (not 2xx) will always be errors,\n    // but a successful status code can still result in an error if the user\n    // asked for JSON data and the body cannot be parsed as such.\n    const ok = status >= 200 && status < 300;\n\n    const redirected = response.redirected;\n\n    const responseType = response.type;\n\n    if (ok) {\n      observer.next(\n        new HttpResponse({\n          body,\n          headers,\n          status,\n          statusText,\n          url,\n          redirected,\n          responseType,\n        }),\n      );\n\n      // The full body has been received and delivered, no further events\n      // are possible. This request is complete.\n      observer.complete();\n    } else {\n      observer.error(\n        new HttpErrorResponse({\n          error: body,\n          headers,\n          status,\n          statusText,\n          url,\n          redirected,\n          responseType,\n        }),\n      );\n    }\n  }\n\n  private parseBody(\n    request: HttpRequest<any>,\n    binContent: Uint8Array<ArrayBuffer>,\n    contentType: string,\n    status: number,\n  ): string | ArrayBuffer | Blob | object | null {\n    switch (request.responseType) {\n      case 'json':\n        // stripping the XSSI when present\n        const text = new TextDecoder().decode(binContent).replace(XSSI_PREFIX, '');\n        if (text === '') {\n          return null;\n        }\n        try {\n          return JSON.parse(text) as object;\n        } catch (e: unknown) {\n          // Allow handling non-JSON errors (!) as plain text, same as the XHR\n          // backend. Without this special sauce, any non-JSON error would be\n          // completely inaccessible downstream as the `HttpErrorResponse.error`\n          // would be set to the `SyntaxError` from then failing `JSON.parse`.\n          if (status < 200 || status >= 300) {\n            return text;\n          }\n          throw e;\n        }\n      case 'text':\n        return new TextDecoder().decode(binContent);\n      case 'blob':\n        return new Blob([binContent], {type: contentType});\n      case 'arraybuffer':\n        return binContent.buffer;\n    }\n  }\n\n  private createRequestInit(req: HttpRequest<any>): RequestInit {\n    // We could share some of this logic with the XhrBackend\n\n    const headers: Record<string, string> = {};\n    let credentials: RequestCredentials | undefined;\n\n    // If the request has a credentials property, use it.\n    // Otherwise, if the request has withCredentials set to true, use 'include'.\n    credentials = req.credentials;\n\n    // If withCredentials is true should be set to 'include', for compatibility\n    if (req.withCredentials) {\n      // A warning is logged in development mode if the request has both\n      (typeof ngDevMode === 'undefined' || ngDevMode) && warningOptionsMessage(req);\n      credentials = 'include';\n    }\n\n    // Setting all the requested headers.\n    req.headers.forEach((name, values) => (headers[name] = values.join(',')));\n\n    // Add an Accept header if one isn't present already.\n    if (!req.headers.has(ACCEPT_HEADER)) {\n      headers[ACCEPT_HEADER] = ACCEPT_HEADER_VALUE;\n    }\n\n    // Auto-detect the Content-Type header if one isn't present already.\n    if (!req.headers.has(CONTENT_TYPE_HEADER)) {\n      const detectedType = req.detectContentTypeHeader();\n      // Sometimes Content-Type detection fails.\n      if (detectedType !== null) {\n        headers[CONTENT_TYPE_HEADER] = detectedType;\n      }\n    }\n\n    return {\n      body: req.serializeBody(),\n      method: req.method,\n      headers,\n      credentials,\n      keepalive: req.keepalive,\n      cache: req.cache,\n      priority: req.priority,\n      mode: req.mode,\n      redirect: req.redirect,\n      referrer: req.referrer,\n      integrity: req.integrity,\n      referrerPolicy: req.referrerPolicy,\n    };\n  }\n\n  private concatChunks(chunks: Uint8Array[], totalLength: number): Uint8Array<ArrayBuffer> {\n    const chunksAll = new Uint8Array(totalLength);\n    let position = 0;\n    for (const chunk of chunks) {\n      chunksAll.set(chunk, position);\n      position += chunk.length;\n    }\n\n    return chunksAll;\n  }\n}\n\n/**\n * Abstract class to provide a mocked implementation of `fetch()`\n */\nexport abstract class FetchFactory {\n  abstract fetch: typeof fetch;\n}\n\nfunction noop(): void {}\n\nfunction warningOptionsMessage(req: HttpRequest<any>) {\n  if (req.credentials && req.withCredentials) {\n    console.warn(\n      formatRuntimeError(\n        RuntimeErrorCode.WITH_CREDENTIALS_OVERRIDES_EXPLICIT_CREDENTIALS,\n        `Angular detected that a \\`HttpClient\\` request has both \\`withCredentials: true\\` and \\`credentials: '${req.credentials}'\\` options. The \\`withCredentials\\` option is overriding the explicit \\`credentials\\` setting to 'include'. Consider removing \\`withCredentials\\` and using \\`credentials: '${req.credentials}'\\` directly for clarity.`,\n      ),\n    );\n  }\n}\n\n/**\n * Zone.js treats a rejected promise that has not yet been awaited\n * as an unhandled error. This function adds a noop `.then` to make\n * sure that Zone.js doesn't throw an error if the Promise is rejected\n * synchronously.\n */\nfunction silenceSuperfluousUnhandledPromiseRejection(promise: Promise<unknown>) {\n  promise.then(noop, noop);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {XhrFactory} from '../../index';\nimport {\n  inject,\n  Injectable,\n  ɵRuntimeError as RuntimeError,\n  ɵformatRuntimeError as formatRuntimeError,\n  ɵTracingService as TracingService,\n  ɵTracingSnapshot as TracingSnapshot,\n} from '@angular/core';\nimport {from, Observable, Observer, of} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\n\nimport type {HttpBackend} from './backend';\nimport {RuntimeErrorCode} from './errors';\nimport {HttpHeaders} from './headers';\nimport {ACCEPT_HEADER, ACCEPT_HEADER_VALUE, CONTENT_TYPE_HEADER, HttpRequest} from './request';\nimport {\n  HTTP_STATUS_CODE_NO_CONTENT,\n  HTTP_STATUS_CODE_OK,\n  HttpDownloadProgressEvent,\n  HttpErrorResponse,\n  HttpEvent,\n  HttpEventType,\n  HttpHeaderResponse,\n  HttpJsonParseError,\n  HttpResponse,\n  HttpUploadProgressEvent,\n} from './response';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\n/**\n * Validates whether the request is compatible with the XHR backend.\n * Show a warning if the request contains options that are not supported by XHR.\n */\nfunction validateXhrCompatibility(req: HttpRequest<any>) {\n  const unsupportedOptions: {\n    property: keyof HttpRequest<any>;\n    errorCode: RuntimeErrorCode;\n  }[] = [\n    {\n      property: 'keepalive',\n      errorCode: RuntimeErrorCode.KEEPALIVE_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'cache',\n      errorCode: RuntimeErrorCode.CACHE_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'priority',\n      errorCode: RuntimeErrorCode.PRIORITY_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'mode',\n      errorCode: RuntimeErrorCode.MODE_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'redirect',\n      errorCode: RuntimeErrorCode.REDIRECT_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'credentials',\n      errorCode: RuntimeErrorCode.CREDENTIALS_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'integrity',\n      errorCode: RuntimeErrorCode.INTEGRITY_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'referrer',\n      errorCode: RuntimeErrorCode.REFERRER_NOT_SUPPORTED_WITH_XHR,\n    },\n    {\n      property: 'referrerPolicy',\n      errorCode: RuntimeErrorCode.REFERRER_POLICY_NOT_SUPPORTED_WITH_XHR,\n    },\n  ];\n\n  // Check each unsupported option and warn if present\n  for (const {property, errorCode} of unsupportedOptions) {\n    if (req[property]) {\n      console.warn(\n        formatRuntimeError(\n          errorCode,\n          `Angular detected that a \\`HttpClient\\` request with the \\`${property}\\` option was sent using XHR, which does not support it. To use the \\`${property}\\` option, enable Fetch API support by passing \\`withFetch()\\` as an argument to \\`provideHttpClient()\\`.`,\n        ),\n      );\n    }\n  }\n}\n\n/**\n * Uses `XMLHttpRequest` to send requests to a backend server.\n * @see {@link HttpHandler}\n * @see {@link JsonpClientBackend}\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class HttpXhrBackend implements HttpBackend {\n  private readonly tracingService: TracingService<TracingSnapshot> | null = inject(TracingService, {\n    optional: true,\n  });\n\n  constructor(private xhrFactory: XhrFactory) {}\n\n  private maybePropagateTrace<T extends Function>(fn: T): T {\n    return this.tracingService?.propagate ? this.tracingService.propagate(fn) : fn;\n  }\n\n  /**\n   * Processes a request and returns a stream of response events.\n   * @param req The request object.\n   * @returns An observable of the response events.\n   */\n  handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {\n    // Quick check to give a better error message when a user attempts to use\n    // HttpClient.jsonp() without installing the HttpClientJsonpModule\n    if (req.method === 'JSONP') {\n      throw new RuntimeError(\n        RuntimeErrorCode.MISSING_JSONP_MODULE,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          `Cannot make a JSONP request without JSONP support. To fix the problem, either add the \\`withJsonpSupport()\\` call (if \\`provideHttpClient()\\` is used) or import the \\`HttpClientJsonpModule\\` in the root NgModule.`,\n      );\n    }\n\n    // Validate that the request is compatible with the XHR backend.\n    ngDevMode && validateXhrCompatibility(req);\n\n    // Check whether this factory has a special function to load an XHR implementation\n    // for various non-browser environments. We currently limit it to only `ServerXhr`\n    // class, which needs to load an XHR implementation.\n    const xhrFactory: XhrFactory & {ɵloadImpl?: () => Promise<void>} = this.xhrFactory;\n    const source: Observable<void | null> =\n      // Note that `ɵloadImpl` is never defined in client bundles and can be\n      // safely dropped whenever we're running in the browser.\n      // This branching is redundant.\n      // The `ngServerMode` guard also enables tree-shaking of the `from()`\n      // function from the common bundle, as it's only used in server code.\n      typeof ngServerMode !== 'undefined' && ngServerMode && xhrFactory.ɵloadImpl\n        ? from(xhrFactory.ɵloadImpl())\n        : of(null);\n\n    return source.pipe(\n      switchMap(() => {\n        // Everything happens on Observable subscription.\n        return new Observable((observer: Observer<HttpEvent<any>>) => {\n          // Start by setting up the XHR object with request method, URL, and withCredentials\n          // flag.\n          const xhr = xhrFactory.build();\n          xhr.open(req.method, req.urlWithParams);\n          if (req.withCredentials) {\n            xhr.withCredentials = true;\n          }\n\n          // Add all the requested headers.\n          req.headers.forEach((name, values) => xhr.setRequestHeader(name, values.join(',')));\n\n          // Add an Accept header if one isn't present already.\n          if (!req.headers.has(ACCEPT_HEADER)) {\n            xhr.setRequestHeader(ACCEPT_HEADER, ACCEPT_HEADER_VALUE);\n          }\n\n          // Auto-detect the Content-Type header if one isn't present already.\n          if (!req.headers.has(CONTENT_TYPE_HEADER)) {\n            const detectedType = req.detectContentTypeHeader();\n            // Sometimes Content-Type detection fails.\n            if (detectedType !== null) {\n              xhr.setRequestHeader(CONTENT_TYPE_HEADER, detectedType);\n            }\n          }\n\n          if (req.timeout) {\n            xhr.timeout = req.timeout;\n          }\n\n          // Set the responseType if one was requested.\n          if (req.responseType) {\n            const responseType = req.responseType.toLowerCase();\n\n            // JSON responses need to be processed as text. This is because if the server\n            // returns an XSSI-prefixed JSON response, the browser will fail to parse it,\n            // xhr.response will be null, and xhr.responseText cannot be accessed to\n            // retrieve the prefixed JSON data in order to strip the prefix. Thus, all JSON\n            // is parsed by first requesting text and then applying JSON.parse.\n            xhr.responseType = (responseType !== 'json' ? responseType : 'text') as any;\n          }\n\n          // Serialize the request body if one is present. If not, this will be set to null.\n          const reqBody = req.serializeBody();\n\n          // If progress events are enabled, response headers will be delivered\n          // in two events - the HttpHeaderResponse event and the full HttpResponse\n          // event. However, since response headers don't change in between these\n          // two events, it doesn't make sense to parse them twice. So headerResponse\n          // caches the data extracted from the response whenever it's first parsed,\n          // to ensure parsing isn't duplicated.\n          let headerResponse: HttpHeaderResponse | null = null;\n\n          // partialFromXhr extracts the HttpHeaderResponse from the current XMLHttpRequest\n          // state, and memoizes it into headerResponse.\n          const partialFromXhr = (): HttpHeaderResponse => {\n            if (headerResponse !== null) {\n              return headerResponse;\n            }\n\n            const statusText = xhr.statusText || 'OK';\n\n            // Parse headers from XMLHttpRequest - this step is lazy.\n            const headers = new HttpHeaders(xhr.getAllResponseHeaders());\n\n            // Read the response URL from the XMLHttpResponse instance and fall back on the\n            // request URL.\n            const url = xhr.responseURL || req.url;\n\n            // Construct the HttpHeaderResponse and memoize it.\n            headerResponse = new HttpHeaderResponse({headers, status: xhr.status, statusText, url});\n            return headerResponse;\n          };\n\n          // Next, a few closures are defined for the various events which XMLHttpRequest can\n          // emit. This allows them to be unregistered as event listeners later.\n\n          // First up is the load event, which represents a response being fully available.\n          const onLoad = this.maybePropagateTrace(() => {\n            // Read response state from the memoized partial data.\n            let {headers, status, statusText, url} = partialFromXhr();\n\n            // The body will be read out if present.\n            let body: any | null = null;\n\n            if (status !== HTTP_STATUS_CODE_NO_CONTENT) {\n              // Use XMLHttpRequest.response if set, responseText otherwise.\n              body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n            }\n\n            // Normalize another potential bug (this one comes from CORS).\n            if (status === 0) {\n              status = !!body ? HTTP_STATUS_CODE_OK : 0;\n            }\n\n            // ok determines whether the response will be transmitted on the event or\n            // error channel. Unsuccessful status codes (not 2xx) will always be errors,\n            // but a successful status code can still result in an error if the user\n            // asked for JSON data and the body cannot be parsed as such.\n            let ok = status >= 200 && status < 300;\n\n            // Check whether the body needs to be parsed as JSON (in many cases the browser\n            // will have done that already).\n            if (req.responseType === 'json' && typeof body === 'string') {\n              // Save the original body, before attempting XSSI prefix stripping.\n              const originalBody = body;\n              body = body.replace(XSSI_PREFIX, '');\n              try {\n                // Attempt the parse. If it fails, a parse error should be delivered to the\n                // user.\n                body = body !== '' ? JSON.parse(body) : null;\n              } catch (error) {\n                // Since the JSON.parse failed, it's reasonable to assume this might not have\n                // been a JSON response. Restore the original body (including any XSSI prefix)\n                // to deliver a better error response.\n                body = originalBody;\n\n                // If this was an error request to begin with, leave it as a string, it\n                // probably just isn't JSON. Otherwise, deliver the parsing error to the user.\n                if (ok) {\n                  // Even though the response status was 2xx, this is still an error.\n                  ok = false;\n                  // The parse error contains the text of the body that failed to parse.\n                  body = {error, text: body} as HttpJsonParseError;\n                }\n              }\n            }\n\n            if (ok) {\n              // A successful response is delivered on the event stream.\n              observer.next(\n                new HttpResponse({\n                  body,\n                  headers,\n                  status,\n                  statusText,\n                  url: url || undefined,\n                }),\n              );\n              // The full body has been received and delivered, no further events\n              // are possible. This request is complete.\n              observer.complete();\n            } else {\n              // An unsuccessful request is delivered on the error channel.\n              observer.error(\n                new HttpErrorResponse({\n                  // The error in this case is the response body (error from the server).\n                  error: body,\n                  headers,\n                  status,\n                  statusText,\n                  url: url || undefined,\n                }),\n              );\n            }\n          });\n\n          // The onError callback is called when something goes wrong at the network level.\n          // Connection timeout, DNS error, offline, etc. These are actual errors, and are\n          // transmitted on the error channel.\n          const onError = this.maybePropagateTrace((error: ProgressEvent) => {\n            const {url} = partialFromXhr();\n            const res = new HttpErrorResponse({\n              error,\n              status: xhr.status || 0,\n              statusText: xhr.statusText || 'Unknown Error',\n              url: url || undefined,\n            });\n            observer.error(res);\n          });\n\n          let onTimeout = onError;\n\n          if (req.timeout) {\n            onTimeout = this.maybePropagateTrace((_: ProgressEvent) => {\n              const {url} = partialFromXhr();\n              const res = new HttpErrorResponse({\n                error: new DOMException('Request timed out', 'TimeoutError'),\n                status: xhr.status || 0,\n                statusText: xhr.statusText || 'Request timeout',\n                url: url || undefined,\n              });\n              observer.error(res);\n            });\n          }\n\n          // The sentHeaders flag tracks whether the HttpResponseHeaders event\n          // has been sent on the stream. This is necessary to track if progress\n          // is enabled since the event will be sent on only the first download\n          // progress event.\n          let sentHeaders = false;\n\n          // The download progress event handler, which is only registered if\n          // progress events are enabled.\n          const onDownProgress = this.maybePropagateTrace((event: ProgressEvent) => {\n            // Send the HttpResponseHeaders event if it hasn't been sent already.\n            if (!sentHeaders) {\n              observer.next(partialFromXhr());\n              sentHeaders = true;\n            }\n\n            // Start building the download progress event to deliver on the response\n            // event stream.\n            let progressEvent: HttpDownloadProgressEvent = {\n              type: HttpEventType.DownloadProgress,\n              loaded: event.loaded,\n            };\n\n            // Set the total number of bytes in the event if it's available.\n            if (event.lengthComputable) {\n              progressEvent.total = event.total;\n            }\n\n            // If the request was for text content and a partial response is\n            // available on XMLHttpRequest, include it in the progress event\n            // to allow for streaming reads.\n            if (req.responseType === 'text' && !!xhr.responseText) {\n              progressEvent.partialText = xhr.responseText;\n            }\n\n            // Finally, fire the event.\n            observer.next(progressEvent);\n          });\n\n          // The upload progress event handler, which is only registered if\n          // progress events are enabled.\n          const onUpProgress = this.maybePropagateTrace((event: ProgressEvent) => {\n            // Upload progress events are simpler. Begin building the progress\n            // event.\n            let progress: HttpUploadProgressEvent = {\n              type: HttpEventType.UploadProgress,\n              loaded: event.loaded,\n            };\n\n            // If the total number of bytes being uploaded is available, include\n            // it.\n            if (event.lengthComputable) {\n              progress.total = event.total;\n            }\n\n            // Send the event.\n            observer.next(progress);\n          });\n\n          // By default, register for load and error events.\n          xhr.addEventListener('load', onLoad);\n          xhr.addEventListener('error', onError);\n          xhr.addEventListener('timeout', onTimeout);\n          xhr.addEventListener('abort', onError);\n\n          // Progress events are only enabled if requested.\n          if (req.reportProgress) {\n            // Download progress is always enabled if requested.\n            xhr.addEventListener('progress', onDownProgress);\n\n            // Upload progress depends on whether there is a body to upload.\n            if (reqBody !== null && xhr.upload) {\n              xhr.upload.addEventListener('progress', onUpProgress);\n            }\n          }\n\n          // Fire the request, and notify the event stream that it was fired.\n          xhr.send(reqBody!);\n          observer.next({type: HttpEventType.Sent});\n          // This is the return from the Observable function, which is the\n          // request cancellation handler.\n          return () => {\n            // On a cancellation, remove all registered event listeners.\n            xhr.removeEventListener('error', onError);\n            xhr.removeEventListener('abort', onError);\n            xhr.removeEventListener('load', onLoad);\n            xhr.removeEventListener('timeout', onTimeout);\n\n            if (req.reportProgress) {\n              xhr.removeEventListener('progress', onDownProgress);\n              if (reqBody !== null && xhr.upload) {\n                xhr.upload.removeEventListener('progress', onUpProgress);\n              }\n            }\n\n            // Finally, abort the in-flight request.\n            if (xhr.readyState !== xhr.DONE) {\n              xhr.abort();\n            }\n          };\n        });\n      }),\n    );\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  EnvironmentInjector,\n  inject,\n  InjectionToken,\n  runInInjectionContext,\n  PendingTasks,\n} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {finalize} from 'rxjs/operators';\n\nimport type {HttpHandler} from './backend';\n\nimport {HttpRequest} from './request';\nimport {HttpEvent} from './response';\n\n/**\n * Intercepts and handles an `HttpRequest` or `HttpResponse`.\n *\n * Most interceptors transform the outgoing request before passing it to the\n * next interceptor in the chain, by calling `next.handle(transformedReq)`.\n * An interceptor may transform the\n * response event stream as well, by applying additional RxJS operators on the stream\n * returned by `next.handle()`.\n *\n * More rarely, an interceptor may handle the request entirely,\n * and compose a new event stream instead of invoking `next.handle()`. This is an\n * acceptable behavior, but keep in mind that further interceptors will be skipped entirely.\n *\n * It is also rare but valid for an interceptor to return multiple responses on the\n * event stream for a single request.\n *\n * @publicApi\n *\n * @see [HTTP Guide](guide/http/interceptors)\n * @see {@link HttpInterceptorFn}\n *\n * @usageNotes\n *\n * To use the same instance of `HttpInterceptors` for the entire app, import the `HttpClientModule`\n * only in your `AppModule`, and add the interceptors to the root application injector.\n * If you import `HttpClientModule` multiple times across different modules (for example, in lazy\n * loading modules), each import creates a new copy of the `HttpClientModule`, which overwrites the\n * interceptors provided in the root module.\n */\nexport interface HttpInterceptor {\n  /**\n   * Identifies and handles a given HTTP request.\n   * @param req The outgoing request object to handle.\n   * @param next The next interceptor in the chain, or the backend\n   * if no interceptors remain in the chain.\n   * @returns An observable of the event stream.\n   */\n  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;\n}\n\n/**\n * Represents the next interceptor in an interceptor chain, or the real backend if there are no\n * further interceptors.\n *\n * Most interceptors will delegate to this function, and either modify the outgoing request or the\n * response when it arrives. Within the scope of the current request, however, this function may be\n * called any number of times, for any number of downstream requests. Such downstream requests need\n * not be to the same URL or even the same origin as the current request. It is also valid to not\n * call the downstream handler at all, and process the current request entirely within the\n * interceptor.\n *\n * This function should only be called within the scope of the request that's currently being\n * intercepted. Once that request is complete, this downstream handler function should not be\n * called.\n *\n * @publicApi\n *\n * @see [HTTP Guide](guide/http/interceptors)\n */\nexport type HttpHandlerFn = (req: HttpRequest<unknown>) => Observable<HttpEvent<unknown>>;\n\n/**\n * An interceptor for HTTP requests made via `HttpClient`.\n *\n * `HttpInterceptorFn`s are middleware functions which `HttpClient` calls when a request is made.\n * These functions have the opportunity to modify the outgoing request or any response that comes\n * back, as well as block, redirect, or otherwise change the request or response semantics.\n *\n * An `HttpHandlerFn` representing the next interceptor (or the backend which will make a real HTTP\n * request) is provided. Most interceptors will delegate to this function, but that is not required\n * (see `HttpHandlerFn` for more details).\n *\n * `HttpInterceptorFn`s are executed in an [injection context](guide/di/dependency-injection-context).\n * They have access to `inject()` via the `EnvironmentInjector` from which they were configured.\n *\n * @see [HTTP Guide](guide/http/interceptors)\n * @see {@link withInterceptors}\n *\n * @usageNotes\n * Here is a noop interceptor that passes the request through without modifying it:\n * ```ts\n * export const noopInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next:\n * HttpHandlerFn) => {\n *   return next(modifiedReq);\n * };\n * ```\n *\n * If you want to alter a request, clone it first and modify the clone before passing it to the\n * `next()` handler function.\n *\n * Here is a basic interceptor that adds a bearer token to the headers\n * ```ts\n * export const authenticationInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next:\n * HttpHandlerFn) => {\n *    const userToken = 'MY_TOKEN'; const modifiedReq = req.clone({\n *      headers: req.headers.set('Authorization', `Bearer ${userToken}`),\n *    });\n *\n *    return next(modifiedReq);\n * };\n * ```\n */\nexport type HttpInterceptorFn = (\n  req: HttpRequest<unknown>,\n  next: HttpHandlerFn,\n) => Observable<HttpEvent<unknown>>;\n\n/**\n * Function which invokes an HTTP interceptor chain.\n *\n * Each interceptor in the interceptor chain is turned into a `ChainedInterceptorFn` which closes\n * over the rest of the chain (represented by another `ChainedInterceptorFn`). The last such\n * function in the chain will instead delegate to the `finalHandlerFn`, which is passed down when\n * the chain is invoked.\n *\n * This pattern allows for a chain of many interceptors to be composed and wrapped in a single\n * `HttpInterceptorFn`, which is a useful abstraction for including different kinds of interceptors\n * (e.g. legacy class-based interceptors) in the same chain.\n */\nexport type ChainedInterceptorFn<RequestT> = (\n  req: HttpRequest<RequestT>,\n  finalHandlerFn: HttpHandlerFn,\n) => Observable<HttpEvent<RequestT>>;\n\nexport function interceptorChainEndFn(\n  req: HttpRequest<any>,\n  finalHandlerFn: HttpHandlerFn,\n): Observable<HttpEvent<any>> {\n  return finalHandlerFn(req);\n}\n\n/**\n * Constructs a `ChainedInterceptorFn` which adapts a legacy `HttpInterceptor` to the\n * `ChainedInterceptorFn` interface.\n */\nexport function adaptLegacyInterceptorToChain(\n  chainTailFn: ChainedInterceptorFn<any>,\n  interceptor: HttpInterceptor,\n): ChainedInterceptorFn<any> {\n  return (initialRequest, finalHandlerFn) =>\n    interceptor.intercept(initialRequest, {\n      handle: (downstreamRequest) => chainTailFn(downstreamRequest, finalHandlerFn),\n    });\n}\n\n/**\n * Constructs a `ChainedInterceptorFn` which wraps and invokes a functional interceptor in the given\n * injector.\n */\nexport function chainedInterceptorFn(\n  chainTailFn: ChainedInterceptorFn<unknown>,\n  interceptorFn: HttpInterceptorFn,\n  injector: EnvironmentInjector,\n): ChainedInterceptorFn<unknown> {\n  return (initialRequest, finalHandlerFn) =>\n    runInInjectionContext(injector, () =>\n      interceptorFn(initialRequest, (downstreamRequest) =>\n        chainTailFn(downstreamRequest, finalHandlerFn),\n      ),\n    );\n}\n\n/**\n * A multi-provider token that represents the array of registered\n * `HttpInterceptor` objects.\n *\n * @see [HTTP Guide](guide/http/interceptors)\n *\n * @publicApi\n */\nexport const HTTP_INTERCEPTORS = new InjectionToken<readonly HttpInterceptor[]>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_INTERCEPTORS' : '',\n);\n\n/**\n * A multi-provided token of `HttpInterceptorFn`s.\n */\nexport const HTTP_INTERCEPTOR_FNS = new InjectionToken<readonly HttpInterceptorFn[]>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_INTERCEPTOR_FNS' : '',\n  {factory: () => []},\n);\n\n/**\n * A multi-provided token of `HttpInterceptorFn`s that are only set in root.\n */\nexport const HTTP_ROOT_INTERCEPTOR_FNS = new InjectionToken<readonly HttpInterceptorFn[]>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'HTTP_ROOT_INTERCEPTOR_FNS' : '',\n);\n\n// TODO(atscott): We need a larger discussion about stability and what should contribute to stability.\n// Should the whole interceptor chain contribute to stability or just the backend request #55075?\n// Should HttpClient contribute to stability automatically at all?\nexport const REQUESTS_CONTRIBUTE_TO_STABILITY = new InjectionToken<boolean>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'REQUESTS_CONTRIBUTE_TO_STABILITY' : '',\n  // Providing a factory implies that the token is provided in root by default\n  {factory: () => true},\n);\n\n/**\n * Creates an `HttpInterceptorFn` which lazily initializes an interceptor chain from the legacy\n * class-based interceptors and runs the request through it.\n */\nexport function legacyInterceptorFnFactory(): HttpInterceptorFn {\n  let chain: ChainedInterceptorFn<any> | null = null;\n\n  return (req, handler) => {\n    if (chain === null) {\n      const interceptors = inject(HTTP_INTERCEPTORS, {optional: true}) ?? [];\n      // Note: interceptors are wrapped right-to-left so that final execution order is\n      // left-to-right. That is, if `interceptors` is the array `[a, b, c]`, we want to\n      // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n      // out.\n      chain = interceptors.reduceRight(\n        adaptLegacyInterceptorToChain,\n        interceptorChainEndFn as ChainedInterceptorFn<any>,\n      );\n    }\n\n    const pendingTasks = inject(PendingTasks);\n    const contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n    if (contributeToStability) {\n      const removeTask = pendingTasks.add();\n      return chain(req, handler).pipe(finalize(removeTask));\n    } else {\n      return chain(req, handler);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Observable} from 'rxjs';\n\nimport {HttpRequest} from './request';\nimport {HttpEvent} from './response';\nimport {FetchBackend} from './fetch';\nimport {HttpXhrBackend} from './xhr';\nimport {\n  EnvironmentInjector,\n  inject,\n  Injectable,\n  ɵConsole as Console,\n  ɵformatRuntimeError as formatRuntimeError,\n  PendingTasks,\n} from '@angular/core';\nimport {finalize} from 'rxjs/operators';\n\nimport {RuntimeErrorCode} from './errors';\nimport {\n  ChainedInterceptorFn,\n  HTTP_INTERCEPTOR_FNS,\n  HTTP_ROOT_INTERCEPTOR_FNS,\n  REQUESTS_CONTRIBUTE_TO_STABILITY,\n  chainedInterceptorFn,\n  interceptorChainEndFn,\n} from './interceptor';\n\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useExisting: HttpXhrBackend})\nexport abstract class HttpBackend implements HttpHandler {\n  abstract handle(req: HttpRequest<any>): Observable<HttpEvent<any>>;\n}\n\nlet fetchBackendWarningDisplayed = false;\n\n/** Internal function to reset the flag in tests */\nexport function resetFetchBackendWarningFlag() {\n  fetchBackendWarningDisplayed = false;\n}\n\n@Injectable({providedIn: 'root'})\nexport class HttpInterceptorHandler implements HttpHandler {\n  private chain: ChainedInterceptorFn<unknown> | null = null;\n  private readonly pendingTasks = inject(PendingTasks);\n  private readonly contributeToStability = inject(REQUESTS_CONTRIBUTE_TO_STABILITY);\n\n  constructor(\n    private backend: HttpBackend,\n    private injector: EnvironmentInjector,\n  ) {\n    // We strongly recommend using fetch backend for HTTP calls when SSR is used\n    // for an application. The logic below checks if that's the case and produces\n    // a warning otherwise.\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) && !fetchBackendWarningDisplayed) {\n      // This flag is necessary because provideHttpClientTesting() overrides the backend\n      // even if `withFetch()` is used within the test. When the testing HTTP backend is provided,\n      // no HTTP calls are actually performed during the test, so producing a warning would be\n      // misleading.\n      const isTestingBackend = (this.backend as any).isTestingBackend;\n\n      if (\n        typeof ngServerMode !== 'undefined' &&\n        ngServerMode &&\n        !(this.backend instanceof FetchBackend) &&\n        !isTestingBackend\n      ) {\n        fetchBackendWarningDisplayed = true;\n        injector\n          .get(Console)\n          .warn(\n            formatRuntimeError(\n              RuntimeErrorCode.NOT_USING_FETCH_BACKEND_IN_SSR,\n              'Angular detected that `HttpClient` is not configured ' +\n                \"to use `fetch` APIs. It's strongly recommended to \" +\n                'enable `fetch` for applications that use Server-Side Rendering ' +\n                'for better performance and compatibility. ' +\n                'To enable `fetch`, add the `withFetch()` to the `provideHttpClient()` ' +\n                'call at the root of the application.',\n            ),\n          );\n      }\n    }\n  }\n\n  handle(initialRequest: HttpRequest<any>): Observable<HttpEvent<any>> {\n    if (this.chain === null) {\n      const dedupedInterceptorFns = Array.from(\n        new Set([\n          ...this.injector.get(HTTP_INTERCEPTOR_FNS),\n          ...this.injector.get(HTTP_ROOT_INTERCEPTOR_FNS, []),\n        ]),\n      );\n\n      // Note: interceptors are wrapped right-to-left so that final execution order is\n      // left-to-right. That is, if `dedupedInterceptorFns` is the array `[a, b, c]`, we want to\n      // produce a chain that is conceptually `c(b(a(end)))`, which we build from the inside\n      // out.\n      this.chain = dedupedInterceptorFns.reduceRight(\n        (nextSequencedFn, interceptorFn) =>\n          chainedInterceptorFn(nextSequencedFn, interceptorFn, this.injector),\n        interceptorChainEndFn as ChainedInterceptorFn<unknown>,\n      );\n    }\n\n    if (this.contributeToStability) {\n      const removeTask = this.pendingTasks.add();\n      return this.chain(initialRequest, (downstreamRequest) =>\n        this.backend.handle(downstreamRequest),\n      ).pipe(finalize(removeTask));\n    } else {\n      return this.chain(initialRequest, (downstreamRequest) =>\n        this.backend.handle(downstreamRequest),\n      );\n    }\n  }\n}\n\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useExisting: HttpInterceptorHandler})\nexport abstract class HttpHandler {\n  abstract handle(req: HttpRequest<any>): Observable<HttpEvent<any>>;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injectable, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable, of} from 'rxjs';\nimport {concatMap, filter, map} from 'rxjs/operators';\n\nimport {HttpHandler} from './backend';\nimport {HttpContext} from './context';\nimport {HttpHeaders} from './headers';\nimport {HttpParams, HttpParamsOptions} from './params';\nimport {HttpRequest} from './request';\nimport {HttpEvent, HttpResponse} from './response';\nimport {RuntimeErrorCode} from './errors';\n\n/**\n * Constructs an instance of `HttpRequestOptions<T>` from a source `HttpMethodOptions` and\n * the given `body`. This function clones the object and adds the body.\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n *\n */\nfunction addBody<T>(\n  options: {\n    headers?: HttpHeaders | Record<string, string | string[]>;\n    context?: HttpContext;\n    observe?: 'body' | 'events' | 'response';\n    params?:\n      | HttpParams\n      | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n    reportProgress?: boolean;\n    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    withCredentials?: boolean;\n    credentials?: RequestCredentials;\n    keepalive?: boolean;\n    priority?: RequestPriority;\n    cache?: RequestCache;\n    mode?: RequestMode;\n    redirect?: RequestRedirect;\n    referrer?: string;\n    integrity?: string;\n    referrerPolicy?: ReferrerPolicy;\n    transferCache?: {includeHeaders?: string[]} | boolean;\n    timeout?: number;\n  },\n  body: T | null,\n): any {\n  return {\n    body,\n    headers: options.headers,\n    context: options.context,\n    observe: options.observe,\n    params: options.params,\n    reportProgress: options.reportProgress,\n    responseType: options.responseType,\n    withCredentials: options.withCredentials,\n    credentials: options.credentials,\n    transferCache: options.transferCache,\n    timeout: options.timeout,\n    keepalive: options.keepalive,\n    priority: options.priority,\n    cache: options.cache,\n    mode: options.mode,\n    redirect: options.redirect,\n    integrity: options.integrity,\n    referrer: options.referrer,\n    referrerPolicy: options.referrerPolicy,\n  };\n}\n\n/**\n * Performs HTTP requests.\n * This service is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies based on\n * the signature that is called (mainly the values of `observe` and `responseType`).\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n *\n * @usageNotes\n *\n * ### HTTP Request Example\n *\n * ```ts\n *  // GET heroes whose name contains search term\n * searchHeroes(term: string): observable<Hero[]>{\n *\n *  const params = new HttpParams({fromString: 'name=term'});\n *    return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params});\n * }\n * ```\n *\n * Alternatively, the parameter string can be used without invoking HttpParams\n * by directly joining to the URL.\n * ```ts\n * this.httpClient.request('GET', this.heroesUrl + '?' + 'name=term', {responseType:'json'});\n * ```\n *\n *\n * ### JSONP Example\n * ```ts\n * requestJsonp(url, callback = 'callback') {\n *  return this.httpClient.jsonp(this.heroesURL, callback);\n * }\n * ```\n *\n * ### PATCH Example\n * ```ts\n * // PATCH one of the heroes' name\n * patchHero (id: number, heroName: string): Observable<{}> {\n * const url = `${this.heroesUrl}/${id}`;   // PATCH api/heroes/42\n *  return this.httpClient.patch(url, {name: heroName}, httpOptions)\n *    .pipe(catchError(this.handleError('patchHero')));\n * }\n * ```\n *\n * @see [HTTP Guide](guide/http)\n * @see [HTTP Request](api/common/http/HttpRequest)\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class HttpClient {\n  constructor(private handler: HttpHandler) {}\n\n  /**\n   * Sends an `HttpRequest` and returns a stream of `HttpEvent`s.\n   *\n   * @return An `Observable` of the response, with the response body as a stream of `HttpEvent`s.\n   */\n  request<R>(req: HttpRequest<any>): Observable<HttpEvent<R>>;\n\n  /**\n   * Constructs a request that interprets the body as an `ArrayBuffer` and returns the response in\n   * an `ArrayBuffer`.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   *\n   * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs a request that interprets the body as a blob and returns\n   * the response as a blob.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type `Blob`.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs a request that interprets the body as a text string and\n   * returns a string value.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type string.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs a request that interprets the body as an `ArrayBuffer` and returns the\n   * the full event stream.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body as an array of `HttpEvent`s for\n   * the request.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      observe: 'events';\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs a request that interprets the body as a `Blob` and returns\n   * the full event stream.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body of type `Blob`.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs a request which interprets the body as a text string and returns the full event\n   * stream.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body of type string.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs a request which interprets the body as a JavaScript object and returns the full\n   * event stream.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the  request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body of type `Object`.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      observe: 'events';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<any>>;\n\n  /**\n   * Constructs a request which interprets the body as a JavaScript object and returns the full\n   * event stream.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body of type `R`.\n   */\n  request<R>(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      observe: 'events';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<R>>;\n\n  /**\n   * Constructs a request which interprets the body as an `ArrayBuffer`\n   * and returns the full `HttpResponse`.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with the response body as an `ArrayBuffer`.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs a request which interprets the body as a `Blob` and returns the full `HttpResponse`.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with the response body of type `Blob`.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs a request which interprets the body as a text stream and returns the full\n   * `HttpResponse`.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the HTTP response, with the response body of type string.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs a request which interprets the body as a JavaScript object and returns the full\n   * `HttpResponse`.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the full `HttpResponse`,\n   * with the response body of type `Object`.\n   */\n  request(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      observe: 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs a request which interprets the body as a JavaScript object and returns\n   * the full `HttpResponse` with the response body in the requested type.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return  An `Observable` of the full `HttpResponse`, with the response body of type `R`.\n   */\n  request<R>(\n    method: string,\n    url: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      reportProgress?: boolean;\n      observe: 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n    },\n  ): Observable<HttpResponse<R>>;\n\n  /**\n   * Constructs a request which interprets the body as a JavaScript object and returns the full\n   * `HttpResponse` as a JavaScript object.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with the response body of type `Object`.\n   */\n  request(\n    method: string,\n    url: string,\n    options?: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      responseType?: 'json';\n      reportProgress?: boolean;\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs a request which interprets the body as a JavaScript object\n   * with the response body of the requested type.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with the response body of type `R`.\n   */\n  request<R>(\n    method: string,\n    url: string,\n    options?: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      responseType?: 'json';\n      reportProgress?: boolean;\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<R>;\n\n  /**\n   * Constructs a request where response type and requested observable are not known statically.\n   *\n   * @param method  The HTTP method.\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the requested response, with body of type `any`.\n   */\n  request(\n    method: string,\n    url: string,\n    options?: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      observe?: 'body' | 'events' | 'response';\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<any>;\n\n  /**\n   * Constructs an observable for a generic HTTP request that, when subscribed,\n   * fires the request through the chain of registered interceptors and on to the\n   * server.\n   *\n   * You can pass an `HttpRequest` directly as the only parameter. In this case,\n   * the call returns an observable of the raw `HttpEvent` stream.\n   *\n   * Alternatively you can pass an HTTP method as the first parameter,\n   * a URL string as the second, and an options hash containing the request body as the third.\n   * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the\n   * type of returned observable.\n   *   * The `responseType` value determines how a successful response body is parsed.\n   *   * If `responseType` is the default `json`, you can pass a type interface for the resulting\n   * object as a type parameter to the call.\n   *\n   * The `observe` value determines the return type, according to what you are interested in\n   * observing.\n   *   * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including\n   * progress events by default.\n   *   * An `observe` value of response returns an observable of `HttpResponse<T>`,\n   * where the `T` parameter depends on the `responseType` and any optionally provided type\n   * parameter.\n   *   * An `observe` value of body returns an observable of `<T>` with the same `T` body type.\n   *\n   */\n  request(\n    first: string | HttpRequest<any>,\n    url?: string,\n    options: {\n      body?: any;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    } = {},\n  ): Observable<any> {\n    let req: HttpRequest<any>;\n    // First, check whether the primary argument is an instance of `HttpRequest`.\n    if (first instanceof HttpRequest) {\n      // It is. The other arguments must be undefined (per the signatures) and can be\n      // ignored.\n      req = first;\n    } else {\n      // It's a string, so it represents a URL. Construct a request based on it,\n      // and incorporate the remaining arguments (assuming `GET` unless a method is\n      // provided.\n\n      // Figure out the headers.\n      let headers: HttpHeaders | undefined = undefined;\n      if (options.headers instanceof HttpHeaders) {\n        headers = options.headers;\n      } else {\n        headers = new HttpHeaders(options.headers);\n      }\n\n      // Sort out parameters.\n      let params: HttpParams | undefined = undefined;\n      if (!!options.params) {\n        if (options.params instanceof HttpParams) {\n          params = options.params;\n        } else {\n          params = new HttpParams({fromObject: options.params} as HttpParamsOptions);\n        }\n      }\n      // Construct the request.\n      req = new HttpRequest(first, url!, options.body !== undefined ? options.body : null, {\n        headers,\n        context: options.context,\n        params,\n        reportProgress: options.reportProgress,\n        // By default, JSON is assumed to be returned for all calls.\n        responseType: options.responseType || 'json',\n        withCredentials: options.withCredentials,\n        transferCache: options.transferCache,\n        keepalive: options.keepalive,\n        priority: options.priority,\n        cache: options.cache,\n        mode: options.mode,\n        redirect: options.redirect,\n        credentials: options.credentials,\n        referrer: options.referrer,\n        referrerPolicy: options.referrerPolicy,\n        integrity: options.integrity,\n        timeout: options.timeout,\n      });\n    }\n    // Start with an Observable.of() the initial request, and run the handler (which\n    // includes all interceptors) inside a concatMap(). This way, the handler runs\n    // inside an Observable chain, which causes interceptors to be re-run on every\n    // subscription (this also makes retries re-run the handler, including interceptors).\n    const events$: Observable<HttpEvent<any>> = of(req).pipe(\n      concatMap((req: HttpRequest<any>) => this.handler.handle(req)),\n    );\n\n    // If coming via the API signature which accepts a previously constructed HttpRequest,\n    // the only option is to get the event stream. Otherwise, return the event stream if\n    // that is what was requested.\n    if (first instanceof HttpRequest || options.observe === 'events') {\n      return events$;\n    }\n\n    // The requested stream contains either the full response or the body. In either\n    // case, the first step is to filter the event stream to extract a stream of\n    // responses(s).\n    const res$: Observable<HttpResponse<any>> = <Observable<HttpResponse<any>>>(\n      events$.pipe(filter((event: HttpEvent<any>) => event instanceof HttpResponse))\n    );\n\n    // Decide which stream to return.\n    switch (options.observe || 'body') {\n      case 'body':\n        // The requested stream is the body. Map the response stream to the response\n        // body. This could be done more simply, but a misbehaving interceptor might\n        // transform the response body into a different format and ignore the requested\n        // responseType. Guard against this by validating that the response is of the\n        // requested type.\n        switch (req.responseType) {\n          case 'arraybuffer':\n            return res$.pipe(\n              map((res: HttpResponse<any>) => {\n                // Validate that the body is an ArrayBuffer.\n                if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n                  throw new RuntimeError(\n                    RuntimeErrorCode.RESPONSE_IS_NOT_AN_ARRAY_BUFFER,\n                    ngDevMode && 'Response is not an ArrayBuffer.',\n                  );\n                }\n                return res.body;\n              }),\n            );\n          case 'blob':\n            return res$.pipe(\n              map((res: HttpResponse<any>) => {\n                // Validate that the body is a Blob.\n                if (res.body !== null && !(res.body instanceof Blob)) {\n                  throw new RuntimeError(\n                    RuntimeErrorCode.RESPONSE_IS_NOT_A_BLOB,\n                    ngDevMode && 'Response is not a Blob.',\n                  );\n                }\n                return res.body;\n              }),\n            );\n          case 'text':\n            return res$.pipe(\n              map((res: HttpResponse<any>) => {\n                // Validate that the body is a string.\n                if (res.body !== null && typeof res.body !== 'string') {\n                  throw new RuntimeError(\n                    RuntimeErrorCode.RESPONSE_IS_NOT_A_STRING,\n                    ngDevMode && 'Response is not a string.',\n                  );\n                }\n                return res.body;\n              }),\n            );\n          case 'json':\n          default:\n            // No validation needed for JSON responses, as they can be of any type.\n            return res$.pipe(map((res: HttpResponse<any>) => res.body));\n        }\n      case 'response':\n        // The response stream was requested directly, so return it.\n        return res$;\n      default:\n        // Guard against new future observe types being added.\n        throw new RuntimeError(\n          RuntimeErrorCode.UNHANDLED_OBSERVE_TYPE,\n          ngDevMode && `Unreachable: unhandled observe type ${options.observe}}`,\n        );\n    }\n  }\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as an `ArrayBuffer`\n   *  and returns the response as an `ArrayBuffer`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return  An `Observable` of the response body as an `ArrayBuffer`.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      body?: any | null;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as a `Blob` and returns\n   * the response as a `Blob`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response body as a `Blob`.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as a text string and returns\n   * a string.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type string.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as an `ArrayBuffer`\n   *  and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with response body as an `ArrayBuffer`.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as a `Blob`\n   *  and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request, with the response body as a\n   * `Blob`.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as a text string\n   * and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with the response\n   * body of type string.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as JSON\n   * and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with response body of\n   * type `Object`.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  /**\n   * Constructs a `DELETE`request that interprets the body as JSON\n   * and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request, with a response\n   * body in the requested type.\n   */\n  delete<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | (string | number | boolean)[]>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpEvent<T>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as an `ArrayBuffer` and returns\n   *  the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the full `HttpResponse`, with the response body as an `ArrayBuffer`.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as a `Blob` and returns the full\n   * `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with the response body of type `Blob`.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as a text stream and\n   *  returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the full `HttpResponse`, with the response body of type string.\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs a `DELETE` request the interprets the body as a JavaScript object and returns\n   * the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with the response body of type `Object`.\n   *\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as JSON\n   * and returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with the response body of the requested type.\n   */\n  delete<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<HttpResponse<T>>;\n\n  /**\n   * Constructs a `DELETE` request that interprets the body as JSON and\n   * returns the response body as an object parsed from JSON.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type `Object`.\n   */\n  delete(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs a DELETE request that interprets the body as JSON and returns\n   * the response in a given type.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with response body in the requested type.\n   */\n  delete<T>(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    },\n  ): Observable<T>;\n\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `DELETE` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   */\n  delete(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n      body?: any | null;\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('DELETE', url, options as any);\n  }\n\n  /**\n   * Constructs a `GET` request that interprets the body as an `ArrayBuffer` and returns the\n   * response in an `ArrayBuffer`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as a `Blob`\n   * and returns the response as a `Blob`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body as a `Blob`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as a text string\n   * and returns the response as a string value.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type string.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as an `ArrayBuffer` and returns\n   *  the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with the response\n   * body as an `ArrayBuffer`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as a `Blob` and\n   * returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body as a `Blob`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as a text string and returns\n   * the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type string.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as JSON\n   * and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type `Object`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as JSON and returns the full\n   * event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with a response body in the requested type.\n   */\n  get<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<T>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as an `ArrayBuffer` and\n   * returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as a `Blob` and\n   * returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as a `Blob`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as a text stream and\n   * returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body of type string.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as JSON and\n   * returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the full `HttpResponse`,\n   * with the response body of type `Object`.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as JSON and\n   * returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the full `HttpResponse` for the request,\n   * with a response body in the requested type.\n   */\n  get<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<T>>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as JSON and\n   * returns the response body as an object parsed from JSON.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   *\n   * @return An `Observable` of the response body as a JavaScript object.\n   */\n  get(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs a `GET` request that interprets the body as JSON and returns\n   * the response body in a given type.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse`, with a response body in the requested type.\n   */\n  get<T>(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<T>;\n\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `GET` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   */\n  get(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('GET', url, options as any);\n  }\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as an `ArrayBuffer` and\n   * returns the response as an `ArrayBuffer`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as a `Blob` and returns\n   * the response as a `Blob`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return  An `Observable` of the response, with the response body as a `Blob`.\n   */\n\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as a text string and returns the response\n   * as a string value.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body of type string.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as an  `ArrayBuffer`\n   *  and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as a `Blob` and\n   * returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body as a `Blob`.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as a text string\n   * and returns the full event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with the response body of type\n   * string.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as JSON\n   * and returns the full HTTP event stream.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with a response body of\n   * type `Object`.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as JSON and\n   * returns the full event stream.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request,\n   * with a response body in the requested type.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   */\n  head<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<T>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as an `ArrayBuffer`\n   *  and returns the full HTTP response.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as a `Blob` and returns\n   * the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as a blob.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as text stream\n   * and returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body of type string.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as JSON and\n   * returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body of type `Object`.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as JSON\n   * and returns the full `HttpResponse`.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with a response body of the requested type.\n   */\n  head<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<T>>;\n\n  /**\n\n   * Constructs a `HEAD` request that interprets the body as JSON and\n   * returns the response body as an object parsed from JSON.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the response, with the response body as an object parsed from JSON.\n   */\n  head(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs a `HEAD` request that interprets the body as JSON and returns\n   * the response in a given type.\n   *\n   * @param url     The endpoint URL.\n   * @param options The HTTP options to send with the request.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with a response body of the given type.\n   */\n  head<T>(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<T>;\n\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `HEAD` request to execute on the server. The `HEAD` method returns\n   * meta information about the resource without transferring the\n   * resource itself. See the individual overloads for\n   * details on the return type.\n   */\n  head(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('HEAD', url, options as any);\n  }\n\n  /**\n   * Constructs a `JSONP` request for the given URL and name of the callback parameter.\n   *\n   * @param url The resource URL.\n   * @param callbackParam The callback function name.\n   *\n   * @return An `Observable` of the response object, with response body as an object.\n   */\n  jsonp(url: string, callbackParam: string): Observable<Object>;\n\n  /**\n   * Constructs a `JSONP` request for the given URL and name of the callback parameter.\n   *\n   * @param url The resource URL.\n   * @param callbackParam The callback function name.\n   *\n   * You must install a suitable interceptor, such as one provided by `HttpClientJsonpModule`.\n   * If no such interceptor is reached,\n   * then the `JSONP` request can be rejected by the configured backend.\n   *\n   * @return An `Observable` of the response object, with response body in the requested type.\n   */\n  jsonp<T>(url: string, callbackParam: string): Observable<T>;\n\n  /**\n   * Constructs an `Observable` that, when subscribed, causes a request with the special method\n   * `JSONP` to be dispatched via the interceptor pipeline.\n   * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain\n   * API endpoints that don't support newer,\n   * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.\n   * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the\n   * requests even if the API endpoint is not located on the same domain (origin) as the client-side\n   * application making the request.\n   * The endpoint API must support JSONP callback for JSONP requests to work.\n   * The resource API returns the JSON response wrapped in a callback function.\n   * You can pass the callback function name as one of the query parameters.\n   * Note that JSONP requests can only be used with `GET` requests.\n   *\n   * @param url The resource URL.\n   * @param callbackParam The callback function name.\n   *\n   */\n  jsonp<T>(url: string, callbackParam: string): Observable<T> {\n    return this.request<any>('JSONP', url, {\n      params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n      observe: 'body',\n      responseType: 'json',\n    });\n  }\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as an\n   * `ArrayBuffer` and returns the response as an `ArrayBuffer`.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as a `Blob` and returns\n   * the response as a `Blob`.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body as a `Blob`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as a text string and\n   * returns a string value.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body of type string.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as an `ArrayBuffer`\n   *  and returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return  An `Observable` of all `HttpEvent`s for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as a `Blob` and\n   * returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body as a `Blob`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as a text string\n   * and returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request,\n   * with the response body of type string.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as JSON\n   * and returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request with the response\n   * body of type `Object`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as JSON and\n   * returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request,\n   * with a response body in the requested type.\n   */\n  options<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<T>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as an `ArrayBuffer`\n   *  and returns the full HTTP response.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as a `Blob`\n   *  and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as a `Blob`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as text stream\n   * and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body of type string.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as JSON\n   * and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body of type `Object`.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as JSON and\n   * returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with a response body in the requested type.\n   */\n  options<T>(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<T>>;\n\n  /**\n\n   * Constructs an `OPTIONS` request that interprets the body as JSON and returns the\n   * response body as an object parsed from JSON.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body as an object parsed from JSON.\n   */\n  options(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs an `OPTIONS` request that interprets the body as JSON and returns the\n   * response in a given type.\n   *\n   * @param url The endpoint URL.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse`, with a response body of the given type.\n   */\n  options<T>(\n    url: string,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<T>;\n\n  /**\n   * Constructs an `Observable` that, when subscribed, causes the configured\n   * `OPTIONS` request to execute on the server. This method allows the client\n   * to determine the supported HTTP methods and other capabilities of an endpoint,\n   * without implying a resource action. See the individual overloads for\n   * details on the return type.\n   */\n  options(\n    url: string,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('OPTIONS', url, options as any);\n  }\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as an `ArrayBuffer` and returns\n   * the response as an `ArrayBuffer`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as a `Blob` and returns the response\n   * as a `Blob`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body as a `Blob`.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as a text string and\n   * returns the response as a string value.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with a response body of type string.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as an `ArrayBuffer` and\n   *  returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as a `Blob`\n   *  and returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request, with the\n   * response body as `Blob`.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as a text string and\n   * returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request, with a\n   * response body of type string.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as JSON\n   * and returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request,\n   * with a response body of type `Object`.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as JSON\n   * and returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of all the `HttpEvent`s for the request,\n   * with a response body in the requested type.\n   */\n  patch<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<T>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as an `ArrayBuffer`\n   *  and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return  An `Observable` of the `HttpResponse` for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as a `Blob` and returns the full\n   * `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return  An `Observable` of the `HttpResponse` for the request,\n   * with the response body as a `Blob`.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as a text stream and returns the\n   * full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return  An `Observable` of the `HttpResponse` for the request,\n   * with a response body of type string.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as JSON\n   * and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with a response body in the requested type.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as JSON\n   * and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with a response body in the given type.\n   */\n  patch<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<T>>;\n\n  /**\n\n   * Constructs a `PATCH` request that interprets the body as JSON and\n   * returns the response body as an object parsed from JSON.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body as an object parsed from JSON.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs a `PATCH` request that interprets the body as JSON\n   * and returns the response in a given type.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to edit.\n   * @param options HTTP options.\n   *\n   * @return  An `Observable` of the `HttpResponse` for the request,\n   * with a response body in the given type.\n   */\n  patch<T>(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<T>;\n\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `PATCH` request to execute on the server. See the individual overloads for\n   * details on the return type.\n   */\n  patch(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('PATCH', url, addBody(options, body));\n  }\n\n  /**\n   * Constructs a `POST` request that interprets the body as an `ArrayBuffer` and returns\n   * an `ArrayBuffer`.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options.\n   *\n   * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as a `Blob` and returns the\n   * response as a `Blob`.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the response, with the response body as a `Blob`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as a text string and\n   * returns the response as a string value.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the response, with a response body of type string.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as an `ArrayBuffer` and\n   * returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as a `Blob`\n   * and returns the response in an observable of the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with the response body as `Blob`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as a text string and returns the full\n   * event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return  An `Observable` of all `HttpEvent`s for the request,\n   * with a response body of type string.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs a POST request that interprets the body as JSON and returns the full\n   * event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return  An `Observable` of all `HttpEvent`s for the request,\n   * with a response body of type `Object`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  /**\n   * Constructs a POST request that interprets the body as JSON and returns the full\n   * event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with a response body in the requested type.\n   */\n  post<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<T>>;\n\n  /**\n   * Constructs a POST request that interprets the body as an `ArrayBuffer`\n   *  and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return  An `Observable` of the `HttpResponse` for the request, with the response body as an\n   * `ArrayBuffer`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as a `Blob` and returns the full\n   * `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as a `Blob`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as a text stream and returns\n   * the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return  An `Observable` of the `HttpResponse` for the request,\n   * with a response body of type string.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as JSON\n   * and returns the full `HttpResponse`.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request, with a response body of type\n   * `Object`.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as JSON and returns the\n   * full `HttpResponse`.\n   *\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request, with a response body in the\n   * requested type.\n   */\n  post<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<T>>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as JSON\n   * and returns the response body as an object parsed from JSON.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the response, with the response body as an object parsed from JSON.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs a `POST` request that interprets the body as JSON\n   * and returns an observable of the response.\n   *\n   * @param url The endpoint URL.\n   * @param body The content to replace with.\n   * @param options HTTP options\n   *\n   * @return  An `Observable` of the `HttpResponse` for the request, with a response body in the\n   * requested type.\n   */\n  post<T>(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    },\n  ): Observable<T>;\n\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `POST` request to execute on the server. The server responds with the location of\n   * the replaced resource. See the individual overloads for\n   * details on the return type.\n   */\n  post(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      transferCache?: {includeHeaders?: string[]} | boolean;\n      timeout?: number;\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('POST', url, addBody(options, body));\n  }\n\n  /**\n   * Constructs a `PUT` request that interprets the body as an `ArrayBuffer` and returns the\n   * response as an `ArrayBuffer`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<ArrayBuffer>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as a `Blob` and returns\n   * the response as a `Blob`.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the response, with the response body as a `Blob`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<Blob>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as a text string and\n   * returns the response as a string value.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the response, with a response body of type string.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<string>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as an `ArrayBuffer` and\n   * returns the full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body as an `ArrayBuffer`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as a `Blob` and returns the full event\n   * stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with the response body as a `Blob`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as a text string and returns the full event\n   * stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with a response body\n   * of type string.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<string>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as JSON and returns the full\n   * event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request, with a response body of\n   * type `Object`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as JSON and returns the\n   * full event stream.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of all `HttpEvent`s for the request,\n   * with a response body in the requested type.\n   */\n  put<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'events';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpEvent<T>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as an\n   * `ArrayBuffer` and returns an observable of the full HTTP response.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request, with the response body as an\n   * `ArrayBuffer`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'arraybuffer';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<ArrayBuffer>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as a `Blob` and returns the\n   * full HTTP response.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with the response body as a `Blob`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'blob';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Blob>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as a text stream and returns the\n   * full HTTP response.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request, with a response body of type\n   * string.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType: 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<string>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as JSON and returns the full\n   * HTTP response.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request, with a response body\n   * of type 'Object`.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<Object>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as an instance of the requested type and\n   * returns the full HTTP response.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the `HttpResponse` for the request,\n   * with a response body in the requested type.\n   */\n  put<T>(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      observe: 'response';\n      context?: HttpContext;\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<HttpResponse<T>>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as JSON\n   * and returns an observable of JavaScript object.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the response as a JavaScript object.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<Object>;\n\n  /**\n   * Constructs a `PUT` request that interprets the body as an instance of the requested type\n   * and returns an observable of the requested type.\n   *\n   * @param url The endpoint URL.\n   * @param body The resources to add/update.\n   * @param options HTTP options\n   *\n   * @return An `Observable` of the requested type.\n   */\n  put<T>(\n    url: string,\n    body: any | null,\n    options?: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    },\n  ): Observable<T>;\n\n  /**\n   * Constructs an observable that, when subscribed, causes the configured\n   * `PUT` request to execute on the server. The `PUT` method replaces an existing resource\n   * with a new set of values.\n   * See the individual overloads for details on the return type.\n   */\n  put(\n    url: string,\n    body: any | null,\n    options: {\n      headers?: HttpHeaders | Record<string, string | string[]>;\n      context?: HttpContext;\n      observe?: 'body' | 'events' | 'response';\n      params?:\n        | HttpParams\n        | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n      reportProgress?: boolean;\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n      withCredentials?: boolean;\n      credentials?: RequestCredentials;\n      keepalive?: boolean;\n      priority?: RequestPriority;\n      cache?: RequestCache;\n      mode?: RequestMode;\n      redirect?: RequestRedirect;\n      referrer?: string;\n      integrity?: string;\n      referrerPolicy?: ReferrerPolicy;\n      timeout?: number;\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('PUT', url, addBody(options, body));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT} from '../../index';\nimport {\n  EnvironmentInjector,\n  Inject,\n  inject,\n  Injectable,\n  runInInjectionContext,\n  ɵRuntimeError as RuntimeError,\n} from '@angular/core';\nimport {Observable, Observer} from 'rxjs';\n\nimport {HttpBackend, HttpHandler} from './backend';\nimport {HttpHandlerFn} from './interceptor';\nimport {HttpRequest} from './request';\nimport {\n  HTTP_STATUS_CODE_OK,\n  HttpErrorResponse,\n  HttpEvent,\n  HttpEventType,\n  HttpResponse,\n} from './response';\nimport {RuntimeErrorCode} from './errors';\n\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nlet nextRequestId: number = 0;\n\n/**\n * When a pending <script> is unsubscribed we'll move it to this document, so it won't be\n * executed.\n */\nlet foreignDocument: Document | undefined;\n\n// Error text given when a JSONP script is injected, but doesn't invoke the callback\n// passed in its URL.\nexport const JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\n\n// Error text given when a request is passed to the JsonpClientBackend that doesn't\n// have a request method JSONP.\nexport const JSONP_ERR_WRONG_METHOD = 'JSONP requests must use JSONP request method.';\nexport const JSONP_ERR_WRONG_RESPONSE_TYPE = 'JSONP requests must use Json response type.';\n\n// Error text given when a request is passed to the JsonpClientBackend that has\n// headers set\nexport const JSONP_ERR_HEADERS_NOT_SUPPORTED = 'JSONP requests do not support headers.';\n\n/**\n * DI token/abstract type representing a map of JSONP callbacks.\n *\n * In the browser, this should always be the `window` object.\n *\n *\n */\nexport abstract class JsonpCallbackContext {\n  [key: string]: (data: any) => void;\n}\n\n/**\n * Factory function that determines where to store JSONP callbacks.\n *\n * Ordinarily JSONP callbacks are stored on the `window` object, but this may not exist\n * in test environments. In that case, callbacks are stored on an anonymous object instead.\n *\n *\n */\nexport function jsonpCallbackContext(): Object {\n  if (typeof window === 'object') {\n    return window;\n  }\n  return {};\n}\n\n/**\n * Processes an `HttpRequest` with the JSONP method,\n * by performing JSONP style requests.\n * @see {@link HttpHandler}\n * @see {@link HttpXhrBackend}\n *\n * @publicApi\n */\n@Injectable()\nexport class JsonpClientBackend implements HttpBackend {\n  /**\n   * A resolved promise that can be used to schedule microtasks in the event handlers.\n   */\n  private readonly resolvedPromise = Promise.resolve();\n\n  constructor(\n    private callbackMap: JsonpCallbackContext,\n    @Inject(DOCUMENT) private document: any,\n  ) {}\n\n  /**\n   * Get the name of the next callback method, by incrementing the global `nextRequestId`.\n   */\n  private nextCallback(): string {\n    return `ng_jsonp_callback_${nextRequestId++}`;\n  }\n\n  /**\n   * Processes a JSONP request and returns an event stream of the results.\n   * @param req The request object.\n   * @returns An observable of the response events.\n   *\n   */\n  handle(req: HttpRequest<never>): Observable<HttpEvent<any>> {\n    // Firstly, check both the method and response type. If either doesn't match\n    // then the request was improperly routed here and cannot be handled.\n    if (req.method !== 'JSONP') {\n      throw new RuntimeError(\n        RuntimeErrorCode.JSONP_WRONG_METHOD,\n        ngDevMode && JSONP_ERR_WRONG_METHOD,\n      );\n    } else if (req.responseType !== 'json') {\n      throw new RuntimeError(\n        RuntimeErrorCode.JSONP_WRONG_RESPONSE_TYPE,\n        ngDevMode && JSONP_ERR_WRONG_RESPONSE_TYPE,\n      );\n    }\n\n    // Check the request headers. JSONP doesn't support headers and\n    // cannot set any that were supplied.\n    if (req.headers.keys().length > 0) {\n      throw new RuntimeError(\n        RuntimeErrorCode.JSONP_HEADERS_NOT_SUPPORTED,\n        ngDevMode && JSONP_ERR_HEADERS_NOT_SUPPORTED,\n      );\n    }\n\n    // Everything else happens inside the Observable boundary.\n    return new Observable<HttpEvent<any>>((observer: Observer<HttpEvent<any>>) => {\n      // The first step to make a request is to generate the callback name, and replace the\n      // callback placeholder in the URL with the name. Care has to be taken here to ensure\n      // a trailing &, if matched, gets inserted back into the URL in the correct place.\n      const callback = this.nextCallback();\n      const url = req.urlWithParams.replace(/=JSONP_CALLBACK(&|$)/, `=${callback}$1`);\n\n      // Construct the <script> tag and point it at the URL.\n      const node = this.document.createElement('script');\n      node.src = url;\n\n      // A JSONP request requires waiting for multiple callbacks. These variables\n      // are closed over and track state across those callbacks.\n\n      // The response object, if one has been received, or null otherwise.\n      let body: any | null = null;\n\n      // Whether the response callback has been called.\n      let finished: boolean = false;\n\n      // Set the response callback in this.callbackMap (which will be the window\n      // object in the browser. The script being loaded via the <script> tag will\n      // eventually call this callback.\n      this.callbackMap[callback] = (data?: any) => {\n        // Data has been received from the JSONP script. Firstly, delete this callback.\n        delete this.callbackMap[callback];\n\n        // Set state to indicate data was received.\n        body = data;\n        finished = true;\n      };\n\n      // cleanup() is a utility closure that removes the <script> from the page and\n      // the response callback from the window. This logic is used in both the\n      // success, error, and cancellation paths, so it's extracted out for convenience.\n      const cleanup = () => {\n        node.removeEventListener('load', onLoad);\n        node.removeEventListener('error', onError);\n\n        // Remove the <script> tag if it's still on the page.\n        node.remove();\n\n        // Remove the response callback from the callbackMap (window object in the\n        // browser).\n        delete this.callbackMap[callback];\n      };\n\n      // onLoad() is the success callback which runs after the response callback\n      // if the JSONP script loads successfully. The event itself is unimportant.\n      // If something went wrong, onLoad() may run without the response callback\n      // having been invoked.\n      const onLoad = () => {\n        // We wrap it in an extra Promise, to ensure the microtask\n        // is scheduled after the loaded endpoint has executed any potential microtask itself,\n        // which is not guaranteed in Internet Explorer and EdgeHTML. See issue #39496\n        this.resolvedPromise.then(() => {\n          // Cleanup the page.\n          cleanup();\n\n          // Check whether the response callback has run.\n          if (!finished) {\n            // It hasn't, something went wrong with the request. Return an error via\n            // the Observable error path. All JSONP errors have status 0.\n            observer.error(\n              new HttpErrorResponse({\n                url,\n                status: 0,\n                statusText: 'JSONP Error',\n                error: new Error(JSONP_ERR_NO_CALLBACK),\n              }),\n            );\n            return;\n          }\n\n          // Success. body either contains the response body or null if none was\n          // returned.\n          observer.next(\n            new HttpResponse({\n              body,\n              status: HTTP_STATUS_CODE_OK,\n              statusText: 'OK',\n              url,\n            }),\n          );\n\n          // Complete the stream, the response is over.\n          observer.complete();\n        });\n      };\n\n      // onError() is the error callback, which runs if the script returned generates\n      // a Javascript error. It emits the error via the Observable error channel as\n      // a HttpErrorResponse.\n      const onError = (error: Error) => {\n        cleanup();\n\n        // Wrap the error in a HttpErrorResponse.\n        observer.error(\n          new HttpErrorResponse({\n            error,\n            status: 0,\n            statusText: 'JSONP Error',\n            url,\n          }),\n        );\n      };\n\n      // Subscribe to both the success (load) and error events on the <script> tag,\n      // and add it to the page.\n      node.addEventListener('load', onLoad);\n      node.addEventListener('error', onError);\n      this.document.body.appendChild(node);\n\n      // The request has now been successfully sent.\n      observer.next({type: HttpEventType.Sent});\n\n      // Cancellation handler.\n      return () => {\n        if (!finished) {\n          this.removeListeners(node);\n        }\n\n        // And finally, clean up the page.\n        cleanup();\n      };\n    });\n  }\n\n  private removeListeners(script: HTMLScriptElement): void {\n    // Issue #34818\n    // Changing <script>'s ownerDocument will prevent it from execution.\n    // https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block\n    foreignDocument ??= (this.document.implementation as DOMImplementation).createHTMLDocument();\n\n    foreignDocument.adoptNode(script);\n  }\n}\n\n/**\n * Identifies requests with the method JSONP and shifts them to the `JsonpClientBackend`.\n */\nexport function jsonpInterceptorFn(\n  req: HttpRequest<unknown>,\n  next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n  if (req.method === 'JSONP') {\n    return inject(JsonpClientBackend).handle(req as HttpRequest<never>);\n  }\n\n  // Fall through for normal HTTP requests.\n  return next(req);\n}\n\n/**\n * Identifies requests with the method JSONP and\n * shifts them to the `JsonpClientBackend`.\n *\n * @see {@link HttpInterceptor}\n *\n * @publicApi\n */\n@Injectable()\nexport class JsonpInterceptor {\n  constructor(private injector: EnvironmentInjector) {}\n\n  /**\n   * Identifies and handles a given JSONP request.\n   * @param initialRequest The outgoing request object to handle.\n   * @param next The next interceptor in the chain, or the backend\n   * if no interceptors remain in the chain.\n   * @returns An observable of the event stream.\n   */\n  intercept(initialRequest: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    return runInInjectionContext(this.injector, () =>\n      jsonpInterceptorFn(initialRequest, (downstreamRequest) => next.handle(downstreamRequest)),\n    );\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT, ɵparseCookieValue as parseCookieValue, PlatformLocation} from '../../index';\nimport {\n  EnvironmentInjector,\n  inject,\n  Injectable,\n  InjectionToken,\n  runInInjectionContext,\n} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {HttpHandler} from './backend';\nimport {HttpHandlerFn, HttpInterceptor} from './interceptor';\nimport {HttpRequest} from './request';\nimport {HttpEvent} from './response';\n\nexport const XSRF_ENABLED = new InjectionToken<boolean>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_ENABLED' : '',\n  {\n    factory: () => true,\n  },\n);\n\nexport const XSRF_DEFAULT_COOKIE_NAME = 'XSRF-TOKEN';\nexport const XSRF_COOKIE_NAME = new InjectionToken<string>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_COOKIE_NAME' : '',\n  {\n    // Providing a factory implies that the token is provided in root by default\n    factory: () => XSRF_DEFAULT_COOKIE_NAME,\n  },\n);\n\nexport const XSRF_DEFAULT_HEADER_NAME = 'X-XSRF-TOKEN';\nexport const XSRF_HEADER_NAME = new InjectionToken<string>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'XSRF_HEADER_NAME' : '',\n  {\n    factory: () => XSRF_DEFAULT_HEADER_NAME,\n  },\n);\n\n/**\n * `HttpXsrfTokenExtractor` which retrieves the token from a cookie.\n */\n@Injectable({providedIn: 'root'})\nexport class HttpXsrfCookieExtractor implements HttpXsrfTokenExtractor {\n  private readonly cookieName = inject(XSRF_COOKIE_NAME);\n  private readonly doc = inject(DOCUMENT);\n\n  private lastCookieString: string = '';\n  private lastToken: string | null = null;\n\n  /**\n   * @internal for testing\n   */\n  parseCount: number = 0;\n\n  getToken(): string | null {\n    if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n      return null;\n    }\n    const cookieString = this.doc.cookie || '';\n    if (cookieString !== this.lastCookieString) {\n      this.parseCount++;\n      this.lastToken = parseCookieValue(cookieString, this.cookieName);\n      this.lastCookieString = cookieString;\n    }\n    return this.lastToken;\n  }\n}\n\n/**\n * Retrieves the current XSRF token to use with the next outgoing request.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useExisting: HttpXsrfCookieExtractor})\nexport abstract class HttpXsrfTokenExtractor {\n  /**\n   * Get the XSRF token to use with an outgoing request.\n   *\n   * Will be called for every request, so the token may change between requests.\n   */\n  abstract getToken(): string | null;\n}\n\nexport function xsrfInterceptorFn(\n  req: HttpRequest<unknown>,\n  next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n  // Skip both non-mutating requests\n  // Non-mutating requests generally don't require a token.\n  if (!inject(XSRF_ENABLED) || req.method === 'GET' || req.method === 'HEAD') {\n    return next(req);\n  }\n\n  try {\n    const locationHref = inject(PlatformLocation).href;\n    const {origin: locationOrigin} = new URL(locationHref);\n    // We can use `new URL` to normalize a relative URL like '//something.com' to\n    // 'https://something.com' in order to make consistent same-origin comparisons.\n    const {origin: requestOrigin} = new URL(req.url, locationOrigin);\n\n    if (locationOrigin !== requestOrigin) {\n      return next(req);\n    }\n  } catch {\n    // Handle invalid URLs gracefully.\n    return next(req);\n  }\n\n  const token = inject(HttpXsrfTokenExtractor).getToken();\n  const headerName = inject(XSRF_HEADER_NAME);\n\n  // Be careful not to overwrite an existing header of the same name.\n  if (token != null && !req.headers.has(headerName)) {\n    req = req.clone({headers: req.headers.set(headerName, token)});\n  }\n  return next(req);\n}\n\n/**\n * `HttpInterceptor` which adds an XSRF token to eligible outgoing requests.\n */\n@Injectable()\nexport class HttpXsrfInterceptor implements HttpInterceptor {\n  private readonly injector = inject(EnvironmentInjector);\n\n  intercept(initialRequest: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    return runInInjectionContext(this.injector, () =>\n      xsrfInterceptorFn(initialRequest, (downstreamRequest) => next.handle(downstreamRequest)),\n    );\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  EnvironmentProviders,\n  inject,\n  InjectionToken,\n  makeEnvironmentProviders,\n  Provider,\n} from '@angular/core';\n\nimport {HttpBackend, HttpHandler, HttpInterceptorHandler} from './backend';\nimport {HttpClient} from './client';\nimport {FETCH_BACKEND, FetchBackend} from './fetch';\nimport {HTTP_INTERCEPTOR_FNS, HttpInterceptorFn, legacyInterceptorFnFactory} from './interceptor';\nimport {\n  jsonpCallbackContext,\n  JsonpCallbackContext,\n  JsonpClientBackend,\n  jsonpInterceptorFn,\n} from './jsonp';\nimport {HttpXhrBackend} from './xhr';\nimport {XSRF_COOKIE_NAME, XSRF_ENABLED, XSRF_HEADER_NAME, xsrfInterceptorFn} from './xsrf';\n\n/**\n * Identifies a particular kind of `HttpFeature`.\n *\n * @publicApi\n */\nexport enum HttpFeatureKind {\n  Interceptors,\n  LegacyInterceptors,\n  CustomXsrfConfiguration,\n  NoXsrfProtection,\n  JsonpSupport,\n  RequestsMadeViaParent,\n  Fetch,\n}\n\n/**\n * A feature for use when configuring `provideHttpClient`.\n *\n * @publicApi\n */\nexport interface HttpFeature<KindT extends HttpFeatureKind> {\n  ɵkind: KindT;\n  ɵproviders: Provider[];\n}\n\nfunction makeHttpFeature<KindT extends HttpFeatureKind>(\n  kind: KindT,\n  providers: Provider[],\n): HttpFeature<KindT> {\n  return {\n    ɵkind: kind,\n    ɵproviders: providers,\n  };\n}\n\n/**\n * Configures Angular's `HttpClient` service to be available for injection.\n *\n * By default, `HttpClient` will be configured for injection with its default options for XSRF\n * protection of outgoing requests. Additional configuration options can be provided by passing\n * feature functions to `provideHttpClient`. For example, HTTP interceptors can be added using the\n * `withInterceptors(...)` feature.\n *\n * <div class=\"docs-alert docs-alert-helpful\">\n *\n * It's strongly recommended to enable\n * [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) for applications that use\n * Server-Side Rendering for better performance and compatibility. To enable `fetch`, add\n * `withFetch()` feature to the `provideHttpClient()` call at the root of the application:\n *\n * ```ts\n * provideHttpClient(withFetch());\n * ```\n *\n * </div>\n * @see [HTTP Client](guide/http/setup)\n * @see {@link withInterceptors}\n * @see {@link withInterceptorsFromDi}\n * @see {@link withXsrfConfiguration}\n * @see {@link withNoXsrfProtection}\n * @see {@link withJsonpSupport}\n * @see {@link withRequestsMadeViaParent}\n * @see {@link withFetch}\n */\nexport function provideHttpClient(\n  ...features: HttpFeature<HttpFeatureKind>[]\n): EnvironmentProviders {\n  if (ngDevMode) {\n    const featureKinds = new Set(features.map((f) => f.ɵkind));\n    if (\n      featureKinds.has(HttpFeatureKind.NoXsrfProtection) &&\n      featureKinds.has(HttpFeatureKind.CustomXsrfConfiguration)\n    ) {\n      throw new Error(\n        ngDevMode\n          ? `Configuration error: found both withXsrfConfiguration() and withNoXsrfProtection() in the same call to provideHttpClient(), which is a contradiction.`\n          : '',\n      );\n    }\n  }\n\n  const providers: Provider[] = [\n    HttpClient,\n    HttpInterceptorHandler,\n    {provide: HttpHandler, useExisting: HttpInterceptorHandler},\n    {\n      provide: HttpBackend,\n      useFactory: () => {\n        return inject(FETCH_BACKEND, {optional: true}) ?? inject(HttpXhrBackend);\n      },\n    },\n    {\n      provide: HTTP_INTERCEPTOR_FNS,\n      useValue: xsrfInterceptorFn,\n      multi: true,\n    },\n  ];\n\n  for (const feature of features) {\n    providers.push(...feature.ɵproviders);\n  }\n\n  return makeEnvironmentProviders(providers);\n}\n\n/**\n * Adds one or more functional-style HTTP interceptors to the configuration of the `HttpClient`\n * instance.\n *\n * @see {@link HttpInterceptorFn}\n * @see {@link provideHttpClient}\n * @publicApi\n */\nexport function withInterceptors(\n  interceptorFns: HttpInterceptorFn[],\n): HttpFeature<HttpFeatureKind.Interceptors> {\n  return makeHttpFeature(\n    HttpFeatureKind.Interceptors,\n    interceptorFns.map((interceptorFn) => {\n      return {\n        provide: HTTP_INTERCEPTOR_FNS,\n        useValue: interceptorFn,\n        multi: true,\n      };\n    }),\n  );\n}\n\nconst LEGACY_INTERCEPTOR_FN = new InjectionToken<HttpInterceptorFn>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'LEGACY_INTERCEPTOR_FN' : '',\n);\n\n/**\n * Includes class-based interceptors configured using a multi-provider in the current injector into\n * the configured `HttpClient` instance.\n *\n * Prefer `withInterceptors` and functional interceptors instead, as support for DI-provided\n * interceptors may be phased out in a later release.\n *\n * @see {@link HttpInterceptor}\n * @see {@link HTTP_INTERCEPTORS}\n * @see {@link provideHttpClient}\n */\nexport function withInterceptorsFromDi(): HttpFeature<HttpFeatureKind.LegacyInterceptors> {\n  // Note: the legacy interceptor function is provided here via an intermediate token\n  // (`LEGACY_INTERCEPTOR_FN`), using a pattern which guarantees that if these providers are\n  // included multiple times, all of the multi-provider entries will have the same instance of the\n  // interceptor function. That way, the `HttpINterceptorHandler` will dedup them and legacy\n  // interceptors will not run multiple times.\n  return makeHttpFeature(HttpFeatureKind.LegacyInterceptors, [\n    {\n      provide: LEGACY_INTERCEPTOR_FN,\n      useFactory: legacyInterceptorFnFactory,\n    },\n    {\n      provide: HTTP_INTERCEPTOR_FNS,\n      useExisting: LEGACY_INTERCEPTOR_FN,\n      multi: true,\n    },\n  ]);\n}\n\n/**\n * Customizes the XSRF protection for the configuration of the current `HttpClient` instance.\n *\n * This feature is incompatible with the `withNoXsrfProtection` feature.\n *\n * @see {@link provideHttpClient}\n */\nexport function withXsrfConfiguration({\n  cookieName,\n  headerName,\n}: {\n  cookieName?: string;\n  headerName?: string;\n}): HttpFeature<HttpFeatureKind.CustomXsrfConfiguration> {\n  const providers: Provider[] = [];\n  if (cookieName !== undefined) {\n    providers.push({provide: XSRF_COOKIE_NAME, useValue: cookieName});\n  }\n  if (headerName !== undefined) {\n    providers.push({provide: XSRF_HEADER_NAME, useValue: headerName});\n  }\n\n  return makeHttpFeature(HttpFeatureKind.CustomXsrfConfiguration, providers);\n}\n\n/**\n * Disables XSRF protection in the configuration of the current `HttpClient` instance.\n *\n * This feature is incompatible with the `withXsrfConfiguration` feature.\n *\n * @see {@link provideHttpClient}\n */\nexport function withNoXsrfProtection(): HttpFeature<HttpFeatureKind.NoXsrfProtection> {\n  return makeHttpFeature(HttpFeatureKind.NoXsrfProtection, [\n    {\n      provide: XSRF_ENABLED,\n      useValue: false,\n    },\n  ]);\n}\n\n/**\n * Add JSONP support to the configuration of the current `HttpClient` instance.\n *\n * @see {@link provideHttpClient}\n */\nexport function withJsonpSupport(): HttpFeature<HttpFeatureKind.JsonpSupport> {\n  return makeHttpFeature(HttpFeatureKind.JsonpSupport, [\n    JsonpClientBackend,\n    {provide: JsonpCallbackContext, useFactory: jsonpCallbackContext},\n    {provide: HTTP_INTERCEPTOR_FNS, useValue: jsonpInterceptorFn, multi: true},\n  ]);\n}\n\n/**\n * Configures the current `HttpClient` instance to make requests via the parent injector's\n * `HttpClient` instead of directly.\n *\n * By default, `provideHttpClient` configures `HttpClient` in its injector to be an independent\n * instance. For example, even if `HttpClient` is configured in the parent injector with\n * one or more interceptors, they will not intercept requests made via this instance.\n *\n * With this option enabled, once the request has passed through the current injector's\n * interceptors, it will be delegated to the parent injector's `HttpClient` chain instead of\n * dispatched directly, and interceptors in the parent configuration will be applied to the request.\n *\n * If there are several `HttpClient` instances in the injector hierarchy, it's possible for\n * `withRequestsMadeViaParent` to be used at multiple levels, which will cause the request to\n * \"bubble up\" until either reaching the root level or an `HttpClient` which was not configured with\n * this option.\n *\n * @see [HTTP client setup](guide/http/setup#withrequestsmadeviaparent)\n * @see {@link provideHttpClient}\n * @publicApi 19.0\n */\nexport function withRequestsMadeViaParent(): HttpFeature<HttpFeatureKind.RequestsMadeViaParent> {\n  return makeHttpFeature(HttpFeatureKind.RequestsMadeViaParent, [\n    {\n      provide: HttpBackend,\n      useFactory: () => {\n        const handlerFromParent = inject(HttpHandler, {skipSelf: true, optional: true});\n        if (ngDevMode && handlerFromParent === null) {\n          throw new Error(\n            'withRequestsMadeViaParent() can only be used when the parent injector also configures HttpClient',\n          );\n        }\n        return handlerFromParent;\n      },\n    },\n  ]);\n}\n\n/**\n * Configures the current `HttpClient` instance to make requests using the fetch API.\n *\n * Note: The Fetch API doesn't support progress report on uploads.\n *\n * @see [Advanced fetch Options](guide/http/making-requests#advanced-fetch-options)\n *\n * @publicApi\n */\nexport function withFetch(): HttpFeature<HttpFeatureKind.Fetch> {\n  return makeHttpFeature(HttpFeatureKind.Fetch, [\n    FetchBackend,\n    {provide: FETCH_BACKEND, useExisting: FetchBackend},\n    {provide: HttpBackend, useExisting: FetchBackend},\n  ]);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {HTTP_INTERCEPTORS} from './interceptor';\nimport {\n  provideHttpClient,\n  withInterceptorsFromDi,\n  withJsonpSupport,\n  withNoXsrfProtection,\n  withXsrfConfiguration,\n} from './provider';\nimport {\n  HttpXsrfCookieExtractor,\n  HttpXsrfInterceptor,\n  HttpXsrfTokenExtractor,\n  XSRF_DEFAULT_COOKIE_NAME,\n  XSRF_DEFAULT_HEADER_NAME,\n  XSRF_ENABLED,\n} from './xsrf';\n\n/**\n * Configures XSRF protection support for outgoing requests.\n *\n * For a server that supports a cookie-based XSRF protection system,\n * use directly to configure XSRF protection with the correct\n * cookie and header names.\n *\n * If no names are supplied, the default cookie name is `XSRF-TOKEN`\n * and the default header name is `X-XSRF-TOKEN`.\n *\n * @publicApi\n * @deprecated Use withXsrfConfiguration({cookieName: 'XSRF-TOKEN', headerName: 'X-XSRF-TOKEN'}) as\n *     providers instead or `withNoXsrfProtection` if you want to disabled XSRF protection.\n */\n@NgModule({\n  providers: [\n    HttpXsrfInterceptor,\n    {provide: HTTP_INTERCEPTORS, useExisting: HttpXsrfInterceptor, multi: true},\n    {provide: HttpXsrfTokenExtractor, useClass: HttpXsrfCookieExtractor},\n    withXsrfConfiguration({\n      cookieName: XSRF_DEFAULT_COOKIE_NAME,\n      headerName: XSRF_DEFAULT_HEADER_NAME,\n    }).ɵproviders,\n    {provide: XSRF_ENABLED, useValue: true},\n  ],\n})\nexport class HttpClientXsrfModule {\n  /**\n   * Disable the default XSRF protection.\n   */\n  static disable(): ModuleWithProviders<HttpClientXsrfModule> {\n    return {\n      ngModule: HttpClientXsrfModule,\n      providers: [withNoXsrfProtection().ɵproviders],\n    };\n  }\n\n  /**\n   * Configure XSRF protection.\n   * @param options An object that can specify either or both\n   * cookie name or header name.\n   * - Cookie name default is `XSRF-TOKEN`.\n   * - Header name default is `X-XSRF-TOKEN`.\n   *\n   */\n  static withOptions(\n    options: {\n      cookieName?: string;\n      headerName?: string;\n    } = {},\n  ): ModuleWithProviders<HttpClientXsrfModule> {\n    return {\n      ngModule: HttpClientXsrfModule,\n      providers: withXsrfConfiguration(options).ɵproviders,\n    };\n  }\n}\n\n/**\n * Configures the dependency injector for `HttpClient`\n * with supporting services for XSRF. Automatically imported by `HttpClientModule`.\n *\n * You can add interceptors to the chain behind `HttpClient` by binding them to the\n * multiprovider for built-in DI token `HTTP_INTERCEPTORS`.\n *\n * @publicApi\n * @deprecated use `provideHttpClient(withInterceptorsFromDi())` as providers instead\n */\n@NgModule({\n  /**\n   * Configures the dependency injector where it is imported\n   * with supporting services for HTTP communications.\n   */\n  providers: [provideHttpClient(withInterceptorsFromDi())],\n})\nexport class HttpClientModule {}\n\n/**\n * Configures the dependency injector for `HttpClient`\n * with supporting services for JSONP.\n * Without this module, Jsonp requests reach the backend\n * with method JSONP, where they are rejected.\n *\n * @publicApi\n * @deprecated `withJsonpSupport()` as providers instead\n */\n@NgModule({\n  providers: [withJsonpSupport().ɵproviders],\n})\nexport class HttpClientJsonpModule {}\n"],"names":["HttpHeaders","headers","normalizedNames","Map","lazyInit","lazyUpdate","constructor","split","forEach","line","index","indexOf","name","slice","value","trim","addHeaderEntry","Headers","ngDevMode","assertValidHeaders","Object","entries","values","setHeaderEntries","has","init","toLowerCase","get","length","keys","Array","from","getAll","append","clone","op","set","delete","maybeSetNormalizedName","lcName","copyFrom","update","applyUpdate","other","key","concat","base","undefined","push","toDelete","existing","filter","headerValues","isArray","map","toString","fn","Error","HttpContextToken","defaultValue","HttpContext","token","HttpUrlEncodingCodec","encodeKey","standardEncoding","encodeValue","decodeKey","decodeURIComponent","decodeValue","paramParser","rawParams","codec","params","replace","param","eqIdx","val","list","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","v","encodeURIComponent","s","t","valueToString","HttpParams","encoder","updates","cloneFrom","options","fromString","fromObject","RuntimeError","res","appendAll","_value","eKey","join","idx","splice","mightHaveBody","method","isArrayBuffer","ArrayBuffer","isBlob","Blob","isFormData","FormData","isUrlSearchParams","URLSearchParams","CONTENT_TYPE_HEADER","ACCEPT_HEADER","TEXT_CONTENT_TYPE","JSON_CONTENT_TYPE","ACCEPT_HEADER_VALUE","HttpRequest","url","body","context","reportProgress","withCredentials","credentials","keepalive","cache","priority","mode","redirect","referrer","integrity","referrerPolicy","responseType","urlWithParams","transferCache","timeout","third","fourth","toUpperCase","Number","isInteger","qIdx","sep","serializeBody","JSON","stringify","detectContentTypeHeader","type","setHeaders","reduce","setParams","HttpEventType","HttpResponseBase","status","statusText","ok","redirected","defaultStatus","defaultStatusText","HttpHeaderResponse","ResponseHeader","HttpResponse","Response","HttpErrorResponse","message","error","HTTP_STATUS_CODE_OK","HTTP_STATUS_CODE_NO_CONTENT","HttpStatusCode","XSSI_PREFIX","FETCH_BACKEND","InjectionToken","FetchBackend","fetchImpl","inject","FetchFactory","optional","fetch","args","globalThis","ngZone","NgZone","destroyRef","DestroyRef","handle","request","Observable","observer","aborter","AbortController","doRequest","signal","then","noop","timeoutId","runOutsideAngular","setTimeout","aborted","abort","DOMException","clearTimeout","createRequestInit","response","fetchPromise","silenceSuperfluousUnhandledPromiseRejection","next","Sent","contentLength","chunks","reader","getReader","receivedLength","decoder","partialText","reqZone","Zone","current","canceled","destroyed","cancel","done","read","TextDecoder","decode","stream","DownloadProgress","total","loaded","run","complete","chunksAll","concatChunks","contentType","parseBody","binContent","text","parse","e","buffer","req","warningOptionsMessage","detectedType","totalLength","Uint8Array","position","chunk","deps","target","i0","ɵɵFactoryTarget","Injectable","decorators","console","warn","formatRuntimeError","promise","validateXhrCompatibility","unsupportedOptions","property","errorCode","HttpXhrBackend","xhrFactory","tracingService","TracingService","maybePropagateTrace","propagate","source","ngServerMode","ɵloadImpl","of","pipe","switchMap","xhr","build","open","setRequestHeader","reqBody","headerResponse","partialFromXhr","getAllResponseHeaders","responseURL","onLoad","responseText","originalBody","onError","onTimeout","_","sentHeaders","onDownProgress","event","progressEvent","lengthComputable","onUpProgress","progress","UploadProgress","addEventListener","upload","send","removeEventListener","readyState","DONE","i1","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","providedIn","interceptorChainEndFn","finalHandlerFn","adaptLegacyInterceptorToChain","chainTailFn","interceptor","initialRequest","intercept","downstreamRequest","chainedInterceptorFn","interceptorFn","injector","runInInjectionContext","HTTP_INTERCEPTORS","HTTP_INTERCEPTOR_FNS","factory","HTTP_ROOT_INTERCEPTOR_FNS","REQUESTS_CONTRIBUTE_TO_STABILITY","legacyInterceptorFnFactory","chain","handler","interceptors","reduceRight","pendingTasks","PendingTasks","contributeToStability","removeTask","add","finalize","HttpBackend","useExisting","fetchBackendWarningDisplayed","HttpInterceptorHandler","backend","isTestingBackend","Console","dedupedInterceptorFns","Set","nextSequencedFn","EnvironmentInjector","HttpHandler","addBody","observe","HttpClient","first","events$","concatMap","res$","head","jsonp","callbackParam","patch","post","put","nextRequestId","foreignDocument","JSONP_ERR_NO_CALLBACK","JSONP_ERR_WRONG_METHOD","JSONP_ERR_WRONG_RESPONSE_TYPE","JSONP_ERR_HEADERS_NOT_SUPPORTED","JsonpCallbackContext","jsonpCallbackContext","window","JsonpClientBackend","callbackMap","document","resolvedPromise","Promise","resolve","nextCallback","callback","node","createElement","src","finished","data","cleanup","remove","appendChild","removeListeners","script","implementation","createHTMLDocument","adoptNode","ɵfac","ɵɵngDeclareFactory","DOCUMENT","Inject","jsonpInterceptorFn","JsonpInterceptor","XSRF_ENABLED","XSRF_DEFAULT_COOKIE_NAME","XSRF_COOKIE_NAME","XSRF_DEFAULT_HEADER_NAME","XSRF_HEADER_NAME","HttpXsrfCookieExtractor","cookieName","doc","lastCookieString","lastToken","parseCount","getToken","cookieString","cookie","parseCookieValue","HttpXsrfTokenExtractor","xsrfInterceptorFn","locationHref","PlatformLocation","href","origin","locationOrigin","URL","requestOrigin","headerName","HttpXsrfInterceptor","HttpFeatureKind","makeHttpFeature","kind","providers","ɵkind","ɵproviders","provideHttpClient","features","featureKinds","f","NoXsrfProtection","CustomXsrfConfiguration","provide","useFactory","useValue","multi","feature","makeEnvironmentProviders","withInterceptors","interceptorFns","Interceptors","LEGACY_INTERCEPTOR_FN","withInterceptorsFromDi","LegacyInterceptors","withXsrfConfiguration","withNoXsrfProtection","withJsonpSupport","JsonpSupport","withRequestsMadeViaParent","RequestsMadeViaParent","handlerFromParent","skipSelf","withFetch","Fetch","HttpClientXsrfModule","disable","ngModule","withOptions","NgModule","ɵinj","ɵɵngDeclareInjector","useClass","HttpClientModule","HttpClientJsonpModule"],"mappings":"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"}