/// import { Opt } from "@effect-ts-app/core/Option"; import { Context } from "@fp-ts/data/Context"; import { Effect } from "@effect/io/Effect"; import type { Predicate } from "@effect-ts/core/Function"; import type { ParsedQuery } from "query-string"; export declare const Method: { GET: null; POST: null; PUT: null; DELETE: null; PATCH: null; }; export type Method = keyof typeof Method; type Indexed = { [a in A]: { [b in B]: any; }; }; type MakeIndexed> = T; export type RequestType = "JSON" | "DATA" | "FORM" | "BINARY"; export type RequestBodyTypes = MakeIndexed; POST: ParsedQuery; PUT: ParsedQuery; DELETE: ParsedQuery; PATCH: ParsedQuery; }; FORM: { GET: FormData; POST: FormData; PUT: FormData; DELETE: FormData; PATCH: FormData; }; BINARY: { GET: Buffer; POST: Buffer; PUT: Buffer; DELETE: Buffer; PATCH: Buffer; }; }>; export type ResponseType = "JSON" | "TEXT" | "BINARY"; export type ResponseTypes = MakeIndexed; export interface DataInput { [k: string]: unknown; } export type Headers = Record; export interface Response { body: Opt; headers: Headers; status: number; } export declare const HttpErrorReason: { readonly Request: "HttpErrorRequest"; readonly Response: "HttpErrorResponse"; }; export type HttpErrorReason = typeof HttpErrorReason; export interface HttpResponseError { _tag: HttpErrorReason["Response"]; response: Response; } export declare function isHttpResponseError(u: unknown): u is HttpResponseError; export interface HttpRequestError { _tag: HttpErrorReason["Request"]; error: Error; } export declare function isHttpRequestError(u: unknown): u is HttpRequestError; export declare function isHttpError(u: unknown): u is HttpError; export type HttpError = HttpRequestError | HttpResponseError; export declare function foldHttpError(onError: (e: Error) => A, onResponseError: (e: Response) => B): (err: HttpError) => A | B; export interface HttpHeaders extends Record { } export declare const HttpHeaders: import("@fp-ts/data/Context").Tag; export declare function accessHttpHeadersM(eff: (h: Opt) => Effect): import("@effect/io/Effect").Effect; export declare function accessHttpHeaders(eff: (h: Opt) => A): import("@effect/io/Effect").Effect; export interface HttpOps { request(method: M, url: string, requestType: Req, responseType: Resp, headers: Record, body: RequestBodyTypes[Req][M]): Effect, Response>; } export interface Http extends HttpOps { } export declare const Http: import("@fp-ts/data/Context").Tag; export type RequestF = (method: M, url: string, requestType: Req, responseType: Resp, body?: RequestBodyTypes[Req][M]) => Effect, Response>; export type RequestMiddleware = (request: RequestF) => RequestF; export interface MiddlewareStack { stack: RequestMiddleware[]; } export declare const MiddlewareStack: import("@fp-ts/data/Context").Tag; export declare function accessMiddlewareStackM(eff: (h: Opt) => Effect): import("@effect/io/Effect").Effect; export declare function accessMiddlewareStack(eff: (h: Opt) => A): import("@effect/io/Effect").Effect; export declare const LiveMiddlewareStack: (stack?: RequestMiddleware[]) => import("@effect/io/Layer").Layer; export type RequestEnv = Http; export declare function requestInner(method: M, url: string, requestType: Req, responseType: Resp, body: RequestBodyTypes[Req][M]): Effect, Response>; export declare function request(method: "GET", requestType: Req, responseType: Resp): (url: string, body?: RequestBodyTypes[Req]["GET"]) => Effect, Response>; export declare function request(method: "DELETE", requestType: Req, responseType: Resp): (url: string, body?: RequestBodyTypes[Req]["DELETE"]) => Effect, Response>; export declare function request(method: M, requestType: Req, responseType: Resp): (url: string, body: RequestBodyTypes[Req][M]) => Effect, Response>; export declare const get: (url: string, body?: unknown) => import("@effect/io/Effect").Effect, Response>; export declare const post: (url: string, body: unknown) => import("@effect/io/Effect").Effect, Response>; export declare const postReturnText: (url: string, body: unknown) => import("@effect/io/Effect").Effect, Response>; export declare const postData: (url: string, body: ParsedQuery) => import("@effect/io/Effect").Effect, Response>; export declare const postBinaryGetBinary: (url: string, body: Buffer) => import("@effect/io/Effect").Effect, Response>; export declare const patch: (url: string, body: unknown) => import("@effect/io/Effect").Effect, Response>; export declare const patchData: (url: string, body: ParsedQuery) => import("@effect/io/Effect").Effect, Response>; export declare const patchBinaryGetBinary: (url: string, body: Buffer) => import("@effect/io/Effect").Effect, Response>; export declare const put: (url: string, body: unknown) => import("@effect/io/Effect").Effect, Response>; export declare const putData: (url: string, body: ParsedQuery) => import("@effect/io/Effect").Effect, Response>; export declare const postForm: (url: string, body: FormData) => import("@effect/io/Effect").Effect, Response>; export declare const putForm: (url: string, body: FormData) => import("@effect/io/Effect").Effect, Response>; export declare const patchForm: (url: string, body: FormData) => import("@effect/io/Effect").Effect, Response>; export declare const putBinaryGetBinary: (url: string, body: Buffer) => import("@effect/io/Effect").Effect, Response>; export declare const del: (url: string, body?: unknown) => import("@effect/io/Effect").Effect, Response>; export declare const delForm: (url: string, body?: FormData | undefined) => import("@effect/io/Effect").Effect, Response>; export declare const delData: (url: string, body?: ParsedQuery | undefined) => import("@effect/io/Effect").Effect, Response>; export declare const delBinaryGetBinary: (url: string, body?: Buffer | undefined) => import("@effect/io/Effect").Effect, Response>; export declare function withHeaders(headers: Record, replace?: boolean): (eff: Effect) => Effect; export declare function withPathHeaders(headers: Record, path: Predicate, replace?: boolean): RequestMiddleware; export declare function foldRequestType(requestType: RequestType, onJson: () => A, onData: () => B, onForm: () => C, onBinary: () => D): A | B | C | D; export declare function foldResponseType(responseType: ResponseType, onJson: () => A, onText: () => B, onBinary: () => C): A | B | C; export declare function getMethodAsString(method: Method): "GET" | "DELETE" | "POST" | "PATCH" | "PUT"; export {}; //# sourceMappingURL=http-client.d.ts.map