///
import { Socket } from 'net';
import * as Http from 'http';
import * as Https from 'https';
import * as Url from 'url';
import * as GetBody from 'get-body';
import * as CookieHelper from 'cookie';
import { Connector, TaskConfig, ConnectorRunError } from 'low';
import { Site, SiteMap, SiteConfig, Route } from './site';
import { HttpVerb } from './http-verbs';
import { HttpError } from './http-error';
export declare class HttpConnector extends Connector {
httpServer?: Http.Server;
httpsServer?: Https.Server;
sites: SiteMap;
setup(): Promise;
startListening(server: Http.Server, port: number): Promise;
getPort(portOrVar: number | string): number;
getProxyIp(headers: Http.IncomingHttpHeaders): string;
getClientInfo(headers: Http.IncomingHttpHeaders, connection?: Socket | {
remoteAddress: string;
}): {
address: string;
};
setupTask(task: TaskConfig, config: HttpTaskConfig): Promise;
requestHandler(request: Http.IncomingMessage, response: Http.ServerResponse): Promise;
hostnameCache: HostnameCache;
getSiteFromHostname(hostname: string): Site;
getRequestProtocol(request: Http.IncomingMessage): 'http' | 'https';
getRequestUrl(request: Http.IncomingMessage): Url.URL;
getQuerystringObject(url: Url.URL): any;
getRequestBody(request: Http.IncomingMessage, getBodyOptions?: GetBody.Options): Promise;
handleError(response: Http.ServerResponse, error: Error | HttpError | ConnectorRunError, input: HttpInput): Promise;
mergeErrorHandlers(site?: Site): ErrorHandler[];
findErrorHandler(handlers: ErrorHandler[], statusCode?: number): ErrorHandler;
sendResponse(response: Http.ServerResponse, output: HttpOutput, site?: Site): void;
setResponseHeaders(response: Http.ServerResponse, headers?: HeaderMap, site?: Site): void;
setResponseCookies(response: Http.ServerResponse, cookies?: CookieMap): void;
getContentType(response: Http.ServerResponse, body: any): string;
setResponseBody(response: Http.ServerResponse, body: any, gzip?: boolean): void;
destroy(): Promise;
closeServer(server: Http.Server): Promise;
}
export interface HttpConnectorConfig {
httpOptions?: HttpOptions;
httpsOptions?: HttpsOptions;
sites: {
[name: string]: SiteConfig;
};
defaultSite?: string;
forceSecure?: boolean;
errorHandlers?: ErrorHandler[];
responseHeaders?: HeaderMap;
contentTypeHandlers?: {
formTypes?: string[];
jsonTypes?: string[];
textTypes?: string[];
};
}
export interface HttpOptions {
serverOptions: Http.ServerOptions;
port: number | string;
}
export interface HttpsOptions {
serverOptions: Https.ServerOptions;
port: number | string;
}
export interface HostnameCache {
[hostname: string]: Site;
}
export interface HttpTaskConfig {
patterns: string[];
sites: string[];
output: HttpOutput;
verbs?: HttpVerb[];
priority?: number;
}
export interface HttpInput {
url: Url.URL;
verb: HttpVerb;
query?: any;
cookies?: any;
body?: any;
site?: Site;
headers?: any;
params?: any;
client?: {
address?: string;
port?: number;
family?: string;
};
route?: Route;
}
export interface HttpOutput {
body: any;
statusCode?: number;
statusMessage?: string;
headers?: HeaderMap;
cookies?: CookieMap;
gzip?: boolean;
}
export interface HeaderMap {
[name: string]: string | number | string[];
}
export interface CookieMap {
[name: string]: Cookie | null;
}
export interface Cookie {
value?: string;
options?: CookieHelper.CookieSerializeOptions;
}
export interface ErrorHandler {
statusCodeMin: number;
statusCodeMax: number;
taskName: string;
output: HttpOutput;
}