///
import { Types as ChainT } from "@rill/chain";
import { IncomingMessage, Server, ServerResponse, Types as HttpT } from "@rill/http";
import { TlsOptions as _TlsOptions } from "tls";
import Rill from "./";
import Context from "./context";
export declare namespace Types {
type Headers = HttpT.Headers;
interface StringMap {
[x: string]: string | string[];
}
interface StringOrNumberMap {
[x: string]: string | string[];
[x: number]: string | string[];
}
interface StringMapNested {
[x: string]: string | string[] | StringMapNested;
}
interface CookieOptions {
/**
* Specifies the value for the Domain Set-Cookie attribute. By default, no
* domain is set, and most clients will consider the cookie to apply to only
* the current domain.
*/
domain?: string;
/**
* Specifies the `Date` object to be the value for the `Expires`
* `Set-Cookie` attribute. By default, no expiration is set, and most
* clients will consider this a "non-persistent cookie" and will delete it
* on a condition like exiting a web browser application.
*
* *Note* the cookie storage model specification states that if both
* `expires` and `maxAge` are set, then `maxAge` takes precedence, but it is
* possible not all clients by obey this, so if both are set, they should
* point to the same date and time.
*/
expires?: Date;
/**
* Specifies the boolean value for the `HttpOnly` `Set-Cookie` attribute.
* When truthy, the `HttpOnly` attribute is set, otherwise it is not. By
* default, the `HttpOnly` attribute is not set.
*
* *Note* be careful when setting this to true, as compliant clients will
* not allow client-side JavaScript to see the cookie in `document.cookie`.
*/
httpOnly?: boolean;
/**
* Specifies the number (in seconds) to be the value for the `Max-Age`
* `Set-Cookie` attribute. The given number will be converted to an integer
* by rounding down. By default, no maximum age is set.
*
* *Note* the cookie storage model specification states that if both
* `expires` and `maxAge` are set, then `maxAge` takes precedence, but it is
* possible not all clients by obey this, so if both are set, they should
* point to the same date and time.
*/
maxAge?: number;
/**
* Specifies the value for the `Path` `Set-Cookie` attribute. By default,
* the path is considered the "default path".
*/
path?: string;
/**
* Specifies the boolean or string to be the value for the `SameSite`
* `Set-Cookie` attribute.
*
* - `true` will set the `SameSite` attribute to `Strict` for strict same
* site enforcement.
* - `false` will not set the `SameSite` attribute.
* - `'lax'` will set the `SameSite` attribute to Lax for lax same site
* enforcement.
* - `'strict'` will set the `SameSite` attribute to Strict for strict same
* site enforcement.
*/
sameSite?: boolean | "lax" | "strict";
/**
* Specifies the boolean value for the `Secure` `Set-Cookie` attribute. When
* truthy, the `Secure` attribute is set, otherwise it is not. By default,
* the `Secure` attribute is not set.
*
* *Note* be careful when setting this to `true`, as compliant clients will
* not send the cookie back to the server in the future if the browser does
* not have an HTTPS connection.
*/
secure?: boolean;
/**
* Specifies a function that will be used to encode a cookie's value. Since
* value of a cookie has a limited character set (and must be a simple
* string), this function can be used to encode a value into a string suited
* for a cookie's value.
*
* The default function is the global `encodeURIComponent`, which will
* encode a JavaScript string into UTF-8 byte sequences and then URL-encode
* any that fall outside of the cookie range.
*/
encode?(val: string): string;
}
type SetupFunction = (app: Rill) => any;
type SetupArg = SetupFunction | false | void;
type NextFunction = ChainT.NextFunction;
type MiddlewareFunction = ChainT.MiddlewareFunction;
type MiddlewareArg = ChainT.MiddlewareArg;
type Stack = ChainT.Stack;
type HttpRequestHandler = (this: Server, req: IncomingMessage, res?: ServerResponse) => any;
type HttpListenHandler = (this: Server) => any;
type MethodShortcut = (pathname: string | MiddlewareArg, ...middlewares: MiddlewareArg[]) => Rill;
type TlsOptions = _TlsOptions;
interface ListenOptions {
ip?: string;
port?: number;
backlog?: number;
tls?: TlsOptions;
}
}