EdgeAIG's picture
download
raw
38.5 kB
/**
* Provides the service used to run outgoing HTTP requests.
*
* `HttpClient` executes immutable `HttpClientRequest` values and returns
* `HttpClientResponse` values. Keeping HTTP behind this service lets programs,
* tests, and generated API clients use the same request model without depending
* on one concrete platform transport. This module includes request accessors,
* constructors and layers, request and response transformations, status
* filtering, retries, rate limiting, cookies, redirect handling, scoped request
* abortion, and tracing support.
*
* @since 4.0.0
*/
import type { NonEmptyReadonlyArray } from "../../Array.ts";
import * as Context from "../../Context.ts";
import * as Duration from "../../Duration.ts";
import * as Effect from "../../Effect.ts";
import * as Fiber from "../../Fiber.ts";
import * as Inspectable from "../../Inspectable.ts";
import * as Layer from "../../Layer.ts";
import { type Pipeable } from "../../Pipeable.ts";
import * as Predicate from "../../Predicate.ts";
import * as Ref from "../../Ref.ts";
import * as Schedule from "../../Schedule.ts";
import type * as Scope from "../../Scope.ts";
import type { EqualsWith, ExcludeTag, ExtractTag, NoExcessProperties, NoInfer, Tags } from "../../Types.ts";
import type * as RateLimiter from "../persistence/RateLimiter.ts";
import * as Cookies from "./Cookies.ts";
import * as Error from "./HttpClientError.ts";
import * as HttpClientRequest from "./HttpClientRequest.ts";
import * as HttpClientResponse from "./HttpClientResponse.ts";
declare const TypeId = "~effect/http/HttpClient";
/**
* Returns `true` if the provided value is an `HttpClient`.
*
* @category guards
* @since 4.0.0
*/
export declare const isHttpClient: (u: unknown) => u is HttpClient;
/**
* HTTP client whose requests produce `HttpClientResponse` values and can fail with `HttpClientError`.
*
* @category models
* @since 4.0.0
*/
export interface HttpClient extends HttpClient.With<Error.HttpClientError> {
}
/**
* Namespace containing type-level members associated with `HttpClient`.
*
* @since 4.0.0
*/
export declare namespace HttpClient {
/**
* Parameterized HTTP client that may fail with `E` and require environment `R`.
*
* **Details**
*
* It exposes preprocessing, postprocessing, direct request execution, and method-specific helpers.
*
* @category models
* @since 4.0.0
*/
interface With<E, R = never> extends Pipeable, Inspectable.Inspectable {
readonly [TypeId]: typeof TypeId;
readonly preprocess: Preprocess<E, R>;
readonly postprocess: Postprocess<E, R>;
readonly execute: (request: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
readonly get: (url: string | URL, options?: HttpClientRequest.Options.NoUrl) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
readonly head: (url: string | URL, options?: HttpClientRequest.Options.NoUrl) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
readonly post: (url: string | URL, options?: HttpClientRequest.Options.NoUrl) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
readonly patch: (url: string | URL, options?: HttpClientRequest.Options.NoUrl) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
readonly put: (url: string | URL, options?: HttpClientRequest.Options.NoUrl) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
readonly del: (url: string | URL, options?: HttpClientRequest.Options.NoUrl) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
readonly options: (url: string | URL, options?: HttpClientRequest.Options.NoUrl) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
}
/**
* Effectful transformation applied to a request before the client executes it.
*
* @category models
* @since 4.0.0
*/
type Preprocess<E, R> = (request: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientRequest.HttpClientRequest, E, R>;
/**
* Function that turns a preprocessed request effect into the response effect executed by the client.
*
* @category models
* @since 4.0.0
*/
type Postprocess<E = never, R = never> = (request: Effect.Effect<HttpClientRequest.HttpClientRequest, E, R>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>;
}
/**
* Service tag for the default outgoing HTTP client service.
*
* **When to use**
*
* Use to provide the default outgoing HTTP client service used by request
* accessors such as `execute`, `get`, and `post`.
*
* @category services
* @since 4.0.0
*/
export declare const HttpClient: Context.Service<HttpClient, HttpClient>;
/**
* Executes a prebuilt `HttpClientRequest` using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const execute: (request: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Executes a `GET` request using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const get: (url: string | URL, options?: HttpClientRequest.Options.NoUrl | undefined) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Executes a `HEAD` request using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const head: (url: string | URL, options?: HttpClientRequest.Options.NoUrl | undefined) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Executes a `POST` request using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const post: (url: string | URL, options?: HttpClientRequest.Options.NoUrl | undefined) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Executes a `PATCH` request using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const patch: (url: string | URL, options?: HttpClientRequest.Options.NoUrl | undefined) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Executes a `PUT` request using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const put: (url: string | URL, options?: HttpClientRequest.Options.NoUrl | undefined) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Executes a `DELETE` request using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const del: (url: string | URL, options?: HttpClientRequest.Options.NoUrl | undefined) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Executes an `OPTIONS` request using the `HttpClient` service from the environment.
*
* @category accessors
* @since 4.0.0
*/
export declare const options: (url: string | URL, options?: HttpClientRequest.Options.NoUrl | undefined) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError, HttpClient>;
/**
* Transforms a client by wrapping the response effect for each request.
*
* **Details**
*
* The transformation receives both the response effect and the original request, allowing it to change success, error, and environment behavior.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const transform: {
/**
* Transforms a client by wrapping the response effect for each request.
*
* **Details**
*
* The transformation receives both the response effect and the original request, allowing it to change success, error, and environment behavior.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, E1, R1>(f: (effect: Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>, request: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientResponse.HttpClientResponse, E1, R1>): (self: HttpClient.With<E, R>) => HttpClient.With<E | E1, R | R1>;
/**
* Transforms a client by wrapping the response effect for each request.
*
* **Details**
*
* The transformation receives both the response effect and the original request, allowing it to change success, error, and environment behavior.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, E1, R1>(self: HttpClient.With<E, R>, f: (effect: Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>, request: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientResponse.HttpClientResponse, E1, R1>): HttpClient.With<E | E1, R | R1>;
};
/**
* Transforms a client by applying an effectful transformation to each response effect.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const transformResponse: {
/**
* Transforms a client by applying an effectful transformation to each response effect.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, E1, R1>(f: (effect: Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E1, R1>): (self: HttpClient.With<E, R>) => HttpClient.With<E1, R1>;
/**
* Transforms a client by applying an effectful transformation to each response effect.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, E1, R1>(self: HttpClient.With<E, R>, f: (effect: Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E1, R1>): HttpClient.With<E1, R1>;
};
declare const catch_: {
<E, E2, R2>(f: (e: E) => Effect.Effect<HttpClientResponse.HttpClientResponse, E2, R2>): <R>(self: HttpClient.With<E, R>) => HttpClient.With<E2, R2 | R>;
<E, R, A2, E2, R2>(self: HttpClient.With<E, R>, f: (e: E) => Effect.Effect<A2, E2, R2>): HttpClient.With<E2, R | R2>;
};
export {
/**
* Handles all client failures with an effectful recovery function and returns a transformed client.
*
* @category error handling
* @since 4.0.0
*/
catch_ as catch };
/**
* Handles client failures with one or more matching `_tag` values and returns a transformed client.
*
* @category error handling
* @since 4.0.0
*/
export declare const catchTag: {
/**
* Handles client failures with one or more matching `_tag` values and returns a transformed client.
*
* @category error handling
* @since 4.0.0
*/
<K extends Tags<E> | NonEmptyReadonlyArray<Tags<E>>, E, E1, R1>(tag: K, f: (e: ExtractTag<NoInfer<E>, K extends NonEmptyReadonlyArray<string> ? K[number] : K>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E1, R1>): <R>(self: HttpClient.With<E, R>) => HttpClient.With<E1 | ExcludeTag<E, K extends NonEmptyReadonlyArray<string> ? K[number] : K>, R1 | R>;
/**
* Handles client failures with one or more matching `_tag` values and returns a transformed client.
*
* @category error handling
* @since 4.0.0
*/
<R, E, K extends Tags<E> | NonEmptyReadonlyArray<Tags<E>>, R1, E1>(self: HttpClient.With<E, R>, tag: K, f: (e: ExtractTag<E, K extends NonEmptyReadonlyArray<string> ? K[number] : K>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E1, R1>): HttpClient.With<E1 | ExcludeTag<E, K extends NonEmptyReadonlyArray<string> ? K[number] : K>, R1 | R>;
};
/**
* Handles client failures by matching their `_tag` values against a case map.
*
* @category error handling
* @since 4.0.0
*/
export declare const catchTags: {
/**
* Handles client failures by matching their `_tag` values against a case map.
*
* @category error handling
* @since 4.0.0
*/
<E, Cases extends {
[K in Extract<E, {
_tag: string;
}>["_tag"]]+?: (error: Extract<E, {
_tag: K;
}>) => Effect.Effect<HttpClientResponse.HttpClientResponse, any, any>;
} & (unknown extends E ? {} : {
[K in Exclude<keyof Cases, Extract<E, {
_tag: string;
}>["_tag"]>]: never;
})>(cases: Cases): <R>(self: HttpClient.With<E, R>) => HttpClient.With<Exclude<E, {
_tag: keyof Cases;
}> | {
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<any, infer E, any> ? E : never;
}[keyof Cases], R | {
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<any, any, infer R> ? R : never;
}[keyof Cases]>;
/**
* Handles client failures by matching their `_tag` values against a case map.
*
* @category error handling
* @since 4.0.0
*/
<E extends {
_tag: string;
}, R, Cases extends {
[K in Extract<E, {
_tag: string;
}>["_tag"]]+?: (error: Extract<E, {
_tag: K;
}>) => Effect.Effect<HttpClientResponse.HttpClientResponse, any, any>;
} & (unknown extends E ? {} : {
[K in Exclude<keyof Cases, Extract<E, {
_tag: string;
}>["_tag"]>]: never;
})>(self: HttpClient.With<E, R>, cases: Cases): HttpClient.With<Exclude<E, {
_tag: keyof Cases;
}> | {
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<any, infer E, any> ? E : never;
}[keyof Cases], R | {
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<any, any, infer R> ? R : never;
}[keyof Cases]>;
};
/**
* Filters the result of a response, or runs an alternative effect if the predicate fails.
*
* @category filters
* @since 4.0.0
*/
export declare const filterOrElse: {
/**
* Filters the result of a response, or runs an alternative effect if the predicate fails.
*
* @category filters
* @since 4.0.0
*/
<B extends HttpClientResponse.HttpClientResponse, E2, R2>(refinement: Predicate.Refinement<NoInfer<HttpClientResponse.HttpClientResponse>, B>, orElse: (response: EqualsWith<HttpClientResponse.HttpClientResponse, B, NoInfer<HttpClientResponse.HttpClientResponse>, Exclude<NoInfer<HttpClientResponse.HttpClientResponse>, B>>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E2, R2>): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E2 | E, R2 | R>;
/**
* Filters the result of a response, or runs an alternative effect if the predicate fails.
*
* @category filters
* @since 4.0.0
*/
<E2, R2>(predicate: Predicate.Predicate<NoInfer<HttpClientResponse.HttpClientResponse>>, orElse: (response: NoInfer<HttpClientResponse.HttpClientResponse>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E2, R2>): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E2 | E, R2 | R>;
/**
* Filters the result of a response, or runs an alternative effect if the predicate fails.
*
* @category filters
* @since 4.0.0
*/
<E, R, B extends HttpClientResponse.HttpClientResponse, E2, R2>(self: HttpClient.With<E, R>, refinement: Predicate.Refinement<HttpClientResponse.HttpClientResponse, B>, orElse: (response: EqualsWith<HttpClientResponse.HttpClientResponse, B, HttpClientResponse.HttpClientResponse, Exclude<HttpClientResponse.HttpClientResponse, B>>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E2, R2>): HttpClient.With<E2 | E, R2 | R>;
/**
* Filters the result of a response, or runs an alternative effect if the predicate fails.
*
* @category filters
* @since 4.0.0
*/
<E, R, E2, R2>(self: HttpClient.With<E, R>, predicate: Predicate.Predicate<HttpClientResponse.HttpClientResponse>, orElse: (response: HttpClientResponse.HttpClientResponse) => Effect.Effect<HttpClientResponse.HttpClientResponse, E2, R2>): HttpClient.With<E2 | E, R2 | R>;
};
/**
* Filters successful responses, or fails with the error produced by `orFailWith` when the predicate does not match.
*
* @category filters
* @since 4.0.0
*/
export declare const filterOrFail: {
/**
* Filters successful responses, or fails with the error produced by `orFailWith` when the predicate does not match.
*
* @category filters
* @since 4.0.0
*/
<B extends HttpClientResponse.HttpClientResponse, E2>(refinement: Predicate.Refinement<NoInfer<HttpClientResponse.HttpClientResponse>, B>, orFailWith: (response: NoInfer<HttpClientResponse.HttpClientResponse>) => E2): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E2 | E, R>;
/**
* Filters successful responses, or fails with the error produced by `orFailWith` when the predicate does not match.
*
* @category filters
* @since 4.0.0
*/
<E2>(predicate: Predicate.Predicate<NoInfer<HttpClientResponse.HttpClientResponse>>, orFailWith: (response: NoInfer<HttpClientResponse.HttpClientResponse>) => E2): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E2 | E, R>;
/**
* Filters successful responses, or fails with the error produced by `orFailWith` when the predicate does not match.
*
* @category filters
* @since 4.0.0
*/
<E, R, B extends HttpClientResponse.HttpClientResponse, E2>(self: HttpClient.With<E, R>, refinement: Predicate.Refinement<NoInfer<HttpClientResponse.HttpClientResponse>, B>, orFailWith: (response: NoInfer<HttpClientResponse.HttpClientResponse>) => E2): HttpClient.With<E2 | E, R>;
/**
* Filters successful responses, or fails with the error produced by `orFailWith` when the predicate does not match.
*
* @category filters
* @since 4.0.0
*/
<E, R, E2>(self: HttpClient.With<E, R>, predicate: Predicate.Predicate<NoInfer<HttpClientResponse.HttpClientResponse>>, orFailWith: (response: NoInfer<HttpClientResponse.HttpClientResponse>) => E2): HttpClient.With<E2 | E, R>;
};
/**
* Filters responses by HTTP status code.
*
* @category filters
* @since 4.0.0
*/
export declare const filterStatus: {
/**
* Filters responses by HTTP status code.
*
* @category filters
* @since 4.0.0
*/
(f: (status: number) => boolean): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E | Error.HttpClientError, R>;
/**
* Filters responses by HTTP status code.
*
* @category filters
* @since 4.0.0
*/
<E, R>(self: HttpClient.With<E, R>, f: (status: number) => boolean): HttpClient.With<E | Error.HttpClientError, R>;
};
/**
* Filters responses that return a 2xx status code.
*
* @category filters
* @since 4.0.0
*/
export declare const filterStatusOk: <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E | Error.HttpClientError, R>;
/**
* Constructs an `HttpClient.With` from a preprocessing function and a postprocessing function.
*
* **Details**
*
* `execute` applies preprocessing to the request and then passes the resulting request effect to postprocessing.
*
* @category constructors
* @since 4.0.0
*/
export declare const makeWith: <E2, R2, E, R>(postprocess: (request: Effect.Effect<HttpClientRequest.HttpClientRequest, E2, R2>) => Effect.Effect<HttpClientResponse.HttpClientResponse, E, R>, preprocess: HttpClient.Preprocess<E2, R2>) => HttpClient.With<E, R>;
/**
* Constructs an `HttpClient` from a low-level request runner.
*
* **Details**
*
* The runner receives the request, resolved URL, abort signal, and current fiber. The client wrapper handles URL construction failures, tracing and propagation, header redaction, and aborting non-scoped requests on interruption.
*
* @category constructors
* @since 4.0.0
*/
export declare const make: (f: (request: HttpClientRequest.HttpClientRequest, url: URL, signal: AbortSignal, fiber: Fiber.Fiber<HttpClientResponse.HttpClientResponse, Error.HttpClientError>) => Effect.Effect<HttpClientResponse.HttpClientResponse, Error.HttpClientError>) => HttpClient;
/**
* Appends a transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const mapRequest: {
/**
* Appends a transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
(f: (a: HttpClientRequest.HttpClientRequest) => HttpClientRequest.HttpClientRequest): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E, R>;
/**
* Appends a transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R>(self: HttpClient.With<E, R>, f: (a: HttpClientRequest.HttpClientRequest) => HttpClientRequest.HttpClientRequest): HttpClient.With<E, R>;
};
/**
* Appends an effectful transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const mapRequestEffect: {
/**
* Appends an effectful transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E2, R2>(f: (a: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientRequest.HttpClientRequest, E2, R2>): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E | E2, R | R2>;
/**
* Appends an effectful transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, E2, R2>(self: HttpClient.With<E, R>, f: (a: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientRequest.HttpClientRequest, E2, R2>): HttpClient.With<E | E2, R | R2>;
};
/**
* Prepends a transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const mapRequestInput: {
/**
* Prepends a transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
(f: (a: HttpClientRequest.HttpClientRequest) => HttpClientRequest.HttpClientRequest): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E, R>;
/**
* Prepends a transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R>(self: HttpClient.With<E, R>, f: (a: HttpClientRequest.HttpClientRequest) => HttpClientRequest.HttpClientRequest): HttpClient.With<E, R>;
};
/**
* Prepends an effectful transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const mapRequestInputEffect: {
/**
* Prepends an effectful transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E2, R2>(f: (a: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientRequest.HttpClientRequest, E2, R2>): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E | E2, R | R2>;
/**
* Prepends an effectful transformation of the request object before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, E2, R2>(self: HttpClient.With<E, R>, f: (a: HttpClientRequest.HttpClientRequest) => Effect.Effect<HttpClientRequest.HttpClientRequest, E2, R2>): HttpClient.With<E | E2, R | R2>;
};
/**
* Namespace containing type-level helpers for retrying HTTP clients.
*
* @since 4.0.0
*/
export declare namespace Retry {
/**
* Computes the client type returned by `retry` for a given set of retry options.
*
* **Details**
*
* The result includes errors and requirements introduced by schedules and effectful retry predicates.
*
* @category error handling
* @since 4.0.0
*/
type Return<R, E, O extends NoExcessProperties<Effect.Retry.Options<E>, O>> = HttpClient.With<(O extends {
schedule: Schedule.Schedule<infer _O, infer _I, infer _E, infer _R>;
} ? E | _E : O extends {
times: number;
} ? E : O extends {
until: Predicate.Refinement<E, infer E2>;
} ? E2 : E) | (O extends {
while: (...args: Array<any>) => Effect.Effect<infer _A, infer E, infer _R>;
} ? E : never) | (O extends {
until: (...args: Array<any>) => Effect.Effect<infer _A, infer E, infer _R>;
} ? E : never), R | (O extends {
schedule: Schedule.Schedule<infer _O, infer _I, infer _E, infer R>;
} ? R : never) | (O extends {
while: (...args: Array<any>) => Effect.Effect<infer _A, infer _E, infer R>;
} ? R : never) | (O extends {
until: (...args: Array<any>) => Effect.Effect<infer _A, infer _E, infer R>;
} ? R : never)> extends infer Z ? Z : never;
}
/**
* Retries the request based on a provided schedule or policy.
*
* @category error handling
* @since 4.0.0
*/
export declare const retry: {
/**
* Retries the request based on a provided schedule or policy.
*
* @category error handling
* @since 4.0.0
*/
<E, O extends NoExcessProperties<Effect.Retry.Options<E>, O>>(options: O): <R>(self: HttpClient.With<E, R>) => Retry.Return<R, E, O>;
/**
* Retries the request based on a provided schedule or policy.
*
* @category error handling
* @since 4.0.0
*/
<B, E, ES, R1>(policy: Schedule.Schedule<B, NoInfer<E>, ES, R1>): <R>(self: HttpClient.With<E, R>) => HttpClient.With<E | ES, R1 | R>;
/**
* Retries the request based on a provided schedule or policy.
*
* @category error handling
* @since 4.0.0
*/
<E, R, O extends NoExcessProperties<Effect.Retry.Options<E>, O>>(self: HttpClient.With<E, R>, options: O): Retry.Return<R, E, O>;
/**
* Retries the request based on a provided schedule or policy.
*
* @category error handling
* @since 4.0.0
*/
<E, R, B, ES, R1>(self: HttpClient.With<E, R>, policy: Schedule.Schedule<B, E, ES, R1>): HttpClient.With<E | ES, R1 | R>;
};
/**
* Retries common transient errors, such as rate limiting, timeouts or network issues.
*
* **When to use**
*
* Use to focus on retrying errors, transient responses, or both.
*
* **Details**
*
* Specifying a `while` predicate allows you to consider other errors as
* transient, and is ignored in "response-only" mode.
*
* @category error handling
* @since 4.0.0
*/
export declare const retryTransient: {
/**
* Retries common transient errors, such as rate limiting, timeouts or network issues.
*
* **When to use**
*
* Use to focus on retrying errors, transient responses, or both.
*
* **Details**
*
* Specifying a `while` predicate allows you to consider other errors as
* transient, and is ignored in "response-only" mode.
*
* @category error handling
* @since 4.0.0
*/
<E, B = never, ES = never, R1 = never, const RetryOn extends "errors-only" | "response-only" | "errors-and-responses" = "errors-only" | "response-only" | "errors-and-responses", Input = RetryOn extends "errors-only" ? E : RetryOn extends "response-only" ? HttpClientResponse.HttpClientResponse : HttpClientResponse.HttpClientResponse | E>(options: {
readonly retryOn?: RetryOn | undefined;
readonly while?: Predicate.Predicate<NoInfer<E | ES>>;
readonly schedule?: Schedule.Schedule<B, NoInfer<Input>, ES, R1>;
readonly times?: number;
}): <R>(self: HttpClient.With<E, R>) => HttpClient.With<E | ES, R1 | R>;
/**
* Retries common transient errors, such as rate limiting, timeouts or network issues.
*
* **When to use**
*
* Use to focus on retrying errors, transient responses, or both.
*
* **Details**
*
* Specifying a `while` predicate allows you to consider other errors as
* transient, and is ignored in "response-only" mode.
*
* @category error handling
* @since 4.0.0
*/
<E, R, B = never, ES = never, R1 = never, const RetryOn extends "errors-only" | "response-only" | "errors-and-responses" = "errors-only" | "response-only" | "errors-and-responses", Input = RetryOn extends "errors-only" ? E : RetryOn extends "response-only" ? HttpClientResponse.HttpClientResponse : HttpClientResponse.HttpClientResponse | E>(self: HttpClient.With<E, R>, options: {
readonly retryOn?: RetryOn | undefined;
readonly while?: Predicate.Predicate<NoInfer<E | ES>>;
readonly schedule?: Schedule.Schedule<B, NoInfer<Input>, ES, R1>;
readonly times?: number;
}): HttpClient.With<E | ES, R1 | R>;
/**
* Retries common transient errors, such as rate limiting, timeouts or network issues.
*
* **When to use**
*
* Use to focus on retrying errors, transient responses, or both.
*
* **Details**
*
* Specifying a `while` predicate allows you to consider other errors as
* transient, and is ignored in "response-only" mode.
*
* @category error handling
* @since 4.0.0
*/
<B, E, ES = never, R1 = never>(options: Schedule.Schedule<B, NoInfer<HttpClientResponse.HttpClientResponse | E>, ES, R1>): <R>(self: HttpClient.With<E, R>) => HttpClient.With<E | ES, R1 | R>;
/**
* Retries common transient errors, such as rate limiting, timeouts or network issues.
*
* **When to use**
*
* Use to focus on retrying errors, transient responses, or both.
*
* **Details**
*
* Specifying a `while` predicate allows you to consider other errors as
* transient, and is ignored in "response-only" mode.
*
* @category error handling
* @since 4.0.0
*/
<E, R, B, ES = never, R1 = never>(self: HttpClient.With<E, R>, options: Schedule.Schedule<B, NoInfer<HttpClientResponse.HttpClientResponse | E>, ES, R1>): HttpClient.With<E | ES, R1 | R>;
};
/**
* Namespace containing configuration types for `withRateLimiter`.
*
* @since 4.0.0
*/
export declare namespace WithRateLimiter {
/**
* Options used to configure `withRateLimiter`.
*
* **Details**
*
* They define the backing limiter, initial limit window, keying strategy, algorithm, token cost, and whether response headers update future limits.
*
* @category rate limiting
* @since 4.0.0
*/
interface Options {
/**
* The `RateLimiter` service to use for rate limiting.
*/
readonly limiter: RateLimiter.RateLimiter;
/**
* The initial rate limit window duration.
*/
readonly window: Duration.Input;
/**
* The initial maximum number of allowed requests in the window.
*/
readonly limit: number;
/**
* The key to identify the rate limit. Requests with the same key will share
* the same rate limit. This can be used to implement per-user or
* per-endpoint rate limits.
*/
readonly key: string | ((request: HttpClientRequest.HttpClientRequest) => string);
/**
* Defaults to `"fixed-window"`.
*/
readonly algorithm?: "fixed-window" | "token-bucket" | undefined;
/**
* Defaults to `1`.
*/
readonly tokens?: number | ((request: HttpClientRequest.HttpClientRequest) => number) | undefined;
/**
* Disable automatic limits updates from response headers.
*/
readonly disableResponseInspection?: boolean | undefined;
}
}
/**
* Applies request rate limiting using the `RateLimiter` service.
*
* **Details**
*
* It can update limits by inspecting common rate limit response headers and
* automatically retries HTTP `429` responses (or `HttpClientError` values
* wrapping a `429` response) by forcing the retry back through the limiter.
*
* @category rate limiting
* @since 4.0.0
*/
export declare const withRateLimiter: {
/**
* Applies request rate limiting using the `RateLimiter` service.
*
* **Details**
*
* It can update limits by inspecting common rate limit response headers and
* automatically retries HTTP `429` responses (or `HttpClientError` values
* wrapping a `429` response) by forcing the retry back through the limiter.
*
* @category rate limiting
* @since 4.0.0
*/
(options: WithRateLimiter.Options): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E | RateLimiter.RateLimiterError, R>;
/**
* Applies request rate limiting using the `RateLimiter` service.
*
* **Details**
*
* It can update limits by inspecting common rate limit response headers and
* automatically retries HTTP `429` responses (or `HttpClientError` values
* wrapping a `429` response) by forcing the retry back through the limiter.
*
* @category rate limiting
* @since 4.0.0
*/
<E, R>(self: HttpClient.With<E, R>, options: WithRateLimiter.Options): HttpClient.With<E | RateLimiter.RateLimiterError, R>;
};
/**
* Performs an additional effect after a successful request.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const tap: {
/**
* Performs an additional effect after a successful request.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<_, E2, R2>(f: (response: HttpClientResponse.HttpClientResponse) => Effect.Effect<_, E2, R2>): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E | E2, R | R2>;
/**
* Performs an additional effect after a successful request.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, _, E2, R2>(self: HttpClient.With<E, R>, f: (response: HttpClientResponse.HttpClientResponse) => Effect.Effect<_, E2, R2>): HttpClient.With<E | E2, R | R2>;
};
/**
* Performs an additional effect after an unsuccessful request.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const tapError: {
/**
* Performs an additional effect after an unsuccessful request.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<_, E, E2, R2>(f: (e: NoInfer<E>) => Effect.Effect<_, E2, R2>): <R>(self: HttpClient.With<E, R>) => HttpClient.With<E | E2, R | R2>;
/**
* Performs an additional effect after an unsuccessful request.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, _, E2, R2>(self: HttpClient.With<E, R>, f: (e: NoInfer<E>) => Effect.Effect<_, E2, R2>): HttpClient.With<E | E2, R | R2>;
};
/**
* Performs an additional effect on the request before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
export declare const tapRequest: {
/**
* Performs an additional effect on the request before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<_, E2, R2>(f: (a: HttpClientRequest.HttpClientRequest) => Effect.Effect<_, E2, R2>): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E | E2, R | R2>;
/**
* Performs an additional effect on the request before sending it.
*
* @category mapping & sequencing
* @since 4.0.0
*/
<E, R, _, E2, R2>(self: HttpClient.With<E, R>, f: (a: HttpClientRequest.HttpClientRequest) => Effect.Effect<_, E2, R2>): HttpClient.With<E | E2, R | R2>;
};
/**
* Adds a `Ref` of cookies to the client for handling cookies across requests.
*
* **When to use**
*
* Use to add shared cookie storage to a client so response cookies are retained
* and sent by later requests.
*
* @category cookies
* @since 4.0.0
*/
export declare const withCookiesRef: {
/**
* Adds a `Ref` of cookies to the client for handling cookies across requests.
*
* **When to use**
*
* Use to add shared cookie storage to a client so response cookies are retained
* and sent by later requests.
*
* @category cookies
* @since 4.0.0
*/
(ref: Ref.Ref<Cookies.Cookies>): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E, R>;
/**
* Adds a `Ref` of cookies to the client for handling cookies across requests.
*
* **When to use**
*
* Use to add shared cookie storage to a client so response cookies are retained
* and sent by later requests.
*
* @category cookies
* @since 4.0.0
*/
<E, R>(self: HttpClient.With<E, R>, ref: Ref.Ref<Cookies.Cookies>): HttpClient.With<E, R>;
};
/**
* Attaches the lifetime of the `HttpClientRequest` to a `Scope`.
*
* @category resource management
* @since 4.0.0
*/
export declare const withScope: <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E, R | Scope.Scope>;
/**
* Enables following HTTP redirects up to a specified number of times.
*
* @category redirects
* @since 4.0.0
*/
export declare const followRedirects: {
/**
* Enables following HTTP redirects up to a specified number of times.
*
* @category redirects
* @since 4.0.0
*/
(maxRedirects?: number | undefined): <E, R>(self: HttpClient.With<E, R>) => HttpClient.With<E, R>;
/**
* Enables following HTTP redirects up to a specified number of times.
*
* @category redirects
* @since 4.0.0
*/
<E, R>(self: HttpClient.With<E, R>, maxRedirects?: number | undefined): HttpClient.With<E, R>;
};
/**
* Context reference for a predicate that disables client-side tracing for matching outgoing requests.
*
* @category references
* @since 4.0.0
*/
export declare const TracerDisabledWhen: Context.Reference<Predicate.Predicate<HttpClientRequest.HttpClientRequest>>;
/**
* Context reference that controls whether outgoing client spans are propagated to request headers.
*
* @category references
* @since 4.0.0
*/
export declare const TracerPropagationEnabled: Context.Reference<boolean>;
/**
* Context reference for generating the span name used for outgoing client request spans.
*
* @category references
* @since 4.0.0
*/
export declare const SpanNameGenerator: Context.Reference<(request: HttpClientRequest.HttpClientRequest) => string>;
/**
* Creates an `HttpClient` layer and merges the layer construction context into client response effects.
*
* @category layers
* @since 4.0.0
*/
export declare const layerMergedContext: <E, R>(effect: Effect.Effect<HttpClient, E, R>) => Layer.Layer<HttpClient, E, R>;
//# sourceMappingURL=HttpClient.d.ts.map

Xet Storage Details

Size:
38.5 kB
·
Xet hash:
b44e713daf849e293068fe0e07f7feecc8f79bd473de9819cd0ce59747a4a9f1

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.