import * as Context from "effect/Context";
import * as Effect from "effect/Effect";
import type * as FiberRef from "effect/FiberRef";
import * as Layer from "effect/Layer";
import * as Option from "effect/Option";
import * as Runtime from "effect/Runtime";
import * as Scope from "effect/Scope";
import type { HttpMiddleware } from "./HttpMiddleware.js";
import * as ServerError from "./HttpServerError.js";
import * as ServerRequest from "./HttpServerRequest.js";
import * as ServerResponse from "./HttpServerResponse.js";
/**
* @since 1.0.0
* @category models
*/
export type HttpApp = Effect.Effect;
/**
* @since 1.0.0
* @category models
*/
export type Default = HttpApp;
/**
* @since 1.0.0
* @category combinators
*/
export declare const toHandled: (self: Default, handleResponse: (request: ServerRequest.HttpServerRequest, response: ServerResponse.HttpServerResponse) => Effect.Effect<_, EH, RH>, middleware?: HttpMiddleware | undefined) => Effect.Effect>;
/**
* If you want to finalize the http request scope elsewhere, you can use this
* function to eject from the default scope closure.
*
* @since 1.0.0
* @category Scope
*/
export declare const ejectDefaultScopeClose: (scope: Scope.Scope) => void;
/**
* @since 1.0.0
* @category Scope
*/
export declare const unsafeEjectStreamScope: (response: ServerResponse.HttpServerResponse) => ServerResponse.HttpServerResponse;
/**
* @since 1.0.0
* @category models
*/
export type PreResponseHandler = (request: ServerRequest.HttpServerRequest, response: ServerResponse.HttpServerResponse) => Effect.Effect;
/**
* @since 1.0.0
* @category fiber refs
*/
export declare const currentPreResponseHandlers: FiberRef.FiberRef>;
/**
* @since 1.0.0
* @category fiber refs
*/
export declare const appendPreResponseHandler: (handler: PreResponseHandler) => Effect.Effect;
/**
* @since 1.0.0
* @category fiber refs
*/
export declare const withPreResponseHandler: ((handler: PreResponseHandler) => (self: HttpApp) => HttpApp) & ((self: HttpApp, handler: PreResponseHandler) => HttpApp);
/**
* @since 1.0.0
* @category conversions
*/
export declare const toWebHandlerRuntime: (runtime: Runtime.Runtime) => (self: Default, middleware?: HttpMiddleware | undefined) => (request: Request, context?: Context.Context | undefined) => Promise;
/**
* @since 1.0.0
* @category conversions
*/
export declare const toWebHandler: (self: Default, middleware?: HttpMiddleware | undefined) => (request: Request, context?: Context.Context | undefined) => Promise;
/**
* @since 1.0.0
* @category conversions
*/
export declare const toWebHandlerLayerWith: (layer: Layer.Layer, options: {
readonly toHandler: (runtime: Runtime.Runtime) => Effect.Effect, EX>;
readonly middleware?: HttpMiddleware | undefined;
readonly memoMap?: Layer.MemoMap | undefined;
}) => {
readonly dispose: () => Promise;
readonly handler: (request: Request, context?: Context.Context | undefined) => Promise;
};
/**
* @since 1.0.0
* @category conversions
*/
export declare const toWebHandlerLayer: (self: Default, layer: Layer.Layer, options?: {
readonly memoMap?: Layer.MemoMap | undefined;
readonly middleware?: HttpMiddleware | undefined;
}) => {
readonly dispose: () => Promise;
readonly handler: (request: Request, context?: Context.Context | undefined) => Promise;
};
/**
* @since 1.0.0
* @category conversions
*/
export declare const fromWebHandler: (handler: (request: Request) => Promise) => Default;
//# sourceMappingURL=HttpApp.d.ts.map