@angular/common 21.1.1 → 21.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/_common_module-chunk.mjs +86 -86
- package/fesm2022/_common_module-chunk.mjs.map +1 -1
- package/fesm2022/_location-chunk.mjs +10 -10
- package/fesm2022/_location-chunk.mjs.map +1 -1
- package/fesm2022/_module-chunk.mjs +46 -46
- package/fesm2022/_module-chunk.mjs.map +1 -1
- package/fesm2022/_platform_location-chunk.mjs +7 -7
- package/fesm2022/_platform_location-chunk.mjs.map +1 -1
- package/fesm2022/_platform_navigation-chunk.mjs +4 -4
- package/fesm2022/_platform_navigation-chunk.mjs.map +1 -1
- package/fesm2022/_xhr-chunk.mjs +1 -1
- package/fesm2022/_xhr-chunk.mjs.map +1 -1
- package/fesm2022/common.mjs +17 -17
- package/fesm2022/common.mjs.map +1 -1
- package/fesm2022/http-testing.mjs +8 -8
- package/fesm2022/http-testing.mjs.map +1 -1
- package/fesm2022/http.mjs +1 -1
- package/fesm2022/http.mjs.map +1 -1
- package/fesm2022/testing.mjs +13 -13
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/upgrade.mjs +5 -5
- package/fesm2022/upgrade.mjs.map +1 -1
- package/package.json +2 -2
- package/types/_common_module-chunk.d.ts +1 -1
- package/types/_module-chunk.d.ts +1 -1
- package/types/_platform_location-chunk.d.ts +1 -1
- package/types/_xhr-chunk.d.ts +1 -1
- package/types/common.d.ts +3 -14
- package/types/http-testing.d.ts +1 -1
- package/types/http.d.ts +1 -1
- package/types/testing.d.ts +1 -1
- package/types/upgrade.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_module-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/headers.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/context.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/params.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/request.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/response.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/fetch.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/xhr.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/interceptor.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/backend.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/client.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/jsonp.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/xsrf.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/common/http/src/provider.ts","../../../../../k8-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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"}
|
|
1
|
+
{"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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"}
|