DefinitelyTyped/restify/restify.d.ts
James Trinklein 53c667d1a5 Update restify typings (#9379)
* restify: update Request, fix id type

change id from string property to function returning string
add getId() alias
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L214

* restify: update Request, add getPath()

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L234

* restify: update Request, fix query type

define query as function returning a string
add getQuery() alias
include JSDoc from source:
https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L247

* restify: update Request, fix time type

change time from number property to function returning number
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L262

* restify: update Request, add getUrl

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L273

* restify: update Request, add getVersion

getVersion is a function that returns a string
add version() alias
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L288

* restify: update Request, fix header type

change header return type from any to string
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L316

* restify: update Request, add trailer

trailer is a function that returns a string
trailer requires a string parameter called name
trailer optionally takes a second string parameter for default value

include JSDoc from source:
https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L338

* restify: update Request, add JSDoc

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L359

* restify: update Request, add isChunked

isChunked is a function that returns a boolean
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L394

* restify: update Request, add isKeepAlive

isKeepAlive is a function that returns a boolean
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L405

* restify: update Request, add JSDoc for isSecure

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L426

* restify: update Request, add isUpgradeRequest

isUpgradeRequest is a function that returns a boolean
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L442

* restify: update Request, add isUpload

isUpload is a function that returns a boolean
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L457

* restify: update Request, add userAgent

userAgent is a function that returns a boolean
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L494

* restify: update Request, add start/endHandlerTimer

startHandlerTimer is a function that takes a string
endHandlerTimer is a function that takes a string

include JSDoc from source:
https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L505

* restify: update Request, add absoluteUri

absoluteUri is a function that takes a string and returns a string
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L52

* restify: update Request, fix accepts

accepts can take a parameter of either string or array of strings
include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L68

* restify: update Request, add acceptsEncoding

acceptsEncoding is a function that returns a boolean
acceptsEncoding can take a parameter of either string or array of strings

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L96

* restify: update Request, fix contentLength

add getContentLength which is a function which returns a number
contentLength is an alias for getContentLength function

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L116

* restify: update Request, fix contentType

add getContentType which is a function which returns a string
contentType is an alias for getContentType function

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L152

* restify: update Request, add getHref

getHref is a function which returns a string
href is an alias to getHref

include JSDoc from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L202

* restify: update Request, add timers

timers is an array of handler timer objects
a handler timer object contains a string name and tuple of numbers representing the elapsed time
this is the only way to access times from start/endHandlerTimer()
from source: https://github.com/restify/node-restify/blob/5.x/lib/request.js\#L557

* restify: update RouteSpec, fix path

path can be either a string or RegExp
also shown in RouteOptions.path
2016-06-02 23:52:47 +09:00

611 lines
20 KiB
TypeScript

// Type definitions for node.js REST framework 2.0
// Project: https://github.com/mcavage/node-restify
// Definitions by: Bret Little <https://github.com/blittle>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference path="../node/node.d.ts" />
/// <reference path="../bunyan/bunyan.d.ts" />
declare module "restify" {
import http = require('http');
import bunyan = require('bunyan');
import url = require('url');
interface addressInterface {
port: number;
family: string;
address: string;
}
interface requestFileInterface {
path: string;
type: string;
}
/**
* Comes from authorizationParser plugin
*/
interface requestAuthorization {
scheme: string;
credentials: string;
basic?: {
username: string;
password: string;
}
}
interface Request extends http.ServerRequest {
/**
* builds an absolute URI for the request.
* @private
* @function absoluteUri
* @param {String} path a url path
* @returns {String}
*/
absoluteUri: (path: string) => string;
/**
* returns any header off the request. also, 'correct' any
* correctly spelled 'referrer' header to the actual spelling used.
* @public
* @function header
* @param {String} name the name of the header
* @param {String} value default value if header isn't found on the req
* @returns {String}
*/
header: (name: string, value?: string) => string;
/**
* returns any trailer header off the request. also, 'correct' any
* correctly spelled 'referrer' header to the actual spelling used.
* @public
* @function trailer
* @param {String} name the name of the header
* @param {String} value default value if header isn't found on the req
* @returns {String}
*/
trailer: (name: string, value?: string) => string;
/**
* checks if the accept header is present and has the value requested.
* e.g., req.accepts('html');
* @public
* @function accepts
* @param {String | Array} types an array of accept type headers
* @returns {Boolean}
*/
accepts: (types: string | string[]) => boolean;
/**
* checks if the request accepts the encoding types.
* @public
* @function acceptsEncoding
* @param {String | Array} types an array of accept type headers
* @returns {Boolean}
*/
acceptsEncoding: (types: string | string[]) => boolean;
/**
* Check if the incoming request contains the Content-Type header field, and
* if it contains the given mime type.
* @public
* @function is
* @param {String} type a content-type header value
* @returns {Boolean}
*/
is: (type: string) => boolean;
/**
* Check if the incoming request is chunked.
* @public
* @function isChunked
* @returns {Boolean}
*/
isChunked: () => boolean;
/**
* Check if the incoming request is kept alive.
* @public
* @function isKeepAlive
* @returns {Boolean}
*/
isKeepAlive: () => boolean;
/**
* Check if the incoming request has been upgraded.
* @public
* @function isUpgradeRequest
* @returns {Boolean}
*/
isUpgradeRequest: () => boolean;
/**
* Check if the incoming request is an upload verb.
* @public
* @function isUpload
* @returns {Boolean}
*/
isUpload: () => boolean;
/**
* retrieves the user-agent header.
* @public
* @function userAgent
* @returns {String}
*/
userAgent: () => string;
/**
* Start the timer for a request handler function. You must explicitly invoke
* endHandlerTimer() after invoking this function. Otherwise timing information
* will be inaccurate.
* @public
* @function startHandlerTimer
* @param {String} handlerName The name of the handler.
* @returns {undefined}
*/
startHandlerTimer: (handlerName: string) => void;
/**
* Stop the timer for a request handler function.
* @public
* @function endHandlerTimer
* @param {String} handlerName The name of the handler.
* @returns {undefined}
*/
endHandlerTimer: (handlerName: string) => void;
getLogger: (component: string) => any;
/**
* gets the content-length header off the request.
* @public
* @function getContentLength
* @returns {Number}
*/
getContentLength: () => number;
/**
* @see getContentLength
* @function contentLength
*/
contentLength: () => number;
/**
* gets the content-type header.
* @public
* @function getContentType
* @returns {String}
*/
getContentType: () => string;
/**
* @see getContentType
*/
contentType: () => string;
/**
* retrieves the complete URI requested by the client.
* @public
* @function getHref
* @returns {String}
*/
getHref: () => string;
/**
* @see getHref
*/
href: () => string;
log: bunyan.Logger;
/**
* retrieves the request uuid. was created when the request was setup.
* @public
* @function getId
* @returns {String}
*/
getId: () => string;
/**
* @see getId
*/
id: () => string;
/**
* retrieves the cleaned up url path.
* e.g., /foo?a=1 => /foo
* @public
* @function getPath
* @returns {String}
*/
getPath: () => string;
/**
* @see getPath
*/
path: () => string;
/**
* returns the raw query string
* @public
* @function getQuery
* @returns {String}
*/
getQuery: () => string;
/**
* @see getQuery
*/
query: () => string;
secure: boolean;
/**
* returns ms since epoch when request was setup.
* @public
* @function time
* @returns {Number}
*/
time: () => number;
/**
* returns a parsed URL object.
* @public
* @function getUrl
* @returns {Object}
*/
getUrl: () => url.Url;
/**
* returns the accept-version header.
* @public
* @function getVersion
* @returns {String}
*/
getVersion: () => string;
/**
* @see getVersion
*/
version: () => string;
params: any;
files?: { [name: string]: requestFileInterface };
/**
* Check if the incoming request is encrypted.
* @public
* @function isSecure
* @returns {Boolean}
*/
isSecure: () => boolean;
/** available when bodyParser plugin is used */
body?: any;
/** available when authorizationParser plugin is used */
username?: string;
/** available when authorizationParser plugin is used */
authorization?: requestAuthorization;
timers: HandlerTiming[];
}
/**
* Timer object used to identify how long a specific handler took to run
*
* @property {String} name The name of the handler.
* @property {Array} time A tuple of [seconds, nanoseconds], how long the handler took.
*/
interface HandlerTiming {
name: string;
time: [number, number];
}
interface Response extends http.ServerResponse {
header: (key: string, value ?: any) => any;
cache: (type?: any, options?: Object) => any;
status: (code: number) => any;
send: (status?: any, body?: any, headers?: { [header: string]: string }) => any;
json: (status?: any, body?: any, headers?: { [header: string]: string }) => any;
code: number;
contentLength: number;
charSet(value: string): void;
contentType: string;
headers: Object;
id: string;
}
interface RouteSpec {
method: string;
name: string;
path: string | RegExp;
versions: string[];
}
interface Route {
name: string;
method: string;
path: RoutePathRegex;
spec: RouteSpec;
types: string[];
versions: string[];
}
interface RouteOptions {
name: string;
method: string;
path?: string | RegExp;
url?: string | RegExp;
urlParamPattern?: RegExp;
contentType?: string | string[];
versions?: string | string[];
}
interface RoutePathRegex extends RegExp {
restifyParams: string[];
}
interface Router {
name: string;
mounts: { [routeName: string]: Route };
versions: string[];
contentType: string[];
routes: {
DELETE: Route[];
GET: Route[];
HEAD: Route[];
OPTIONS: Route[];
PATCH: Route[];
POST: Route[];
PUT: Route[];
};
log?: any;
toString: () => string;
/**
* Takes an object of route params and query params, and 'renders' a URL
* @param {String} routeName the route name
* @param {Object} params an object of route params
* @param {Object} query an object of query params
* @returns {String}
*/
render: (routeName: string, params: Object, query?: Object) => string;
/**
* adds a route.
* @param {Object} options an options object
* @returns {String} returns the route name if creation is successful.
*/
mount: (options: Object) => string;
/**
* unmounts a route.
* @param {String} name the route name
* @returns {String} the name of the deleted route (or false if it was not matched)
*/
unmount: (name: string) => string | boolean;
}
interface Server extends http.Server {
use(handler: RequestHandler, ...handlers: RequestHandler[]): Server;
use(handler: RequestHandler[], ...handlers: RequestHandler[]): Server;
use(handler: RequestHandler, ...handlers: RequestHandler[][]): Server;
use(handler: RequestHandler[], ...handlers: RequestHandler[][]): Server;
post(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[]): Route;
post(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[]): Route;
post(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[][]): Route;
post(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[][]): Route;
patch(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[]): Route;
patch(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[]): Route;
patch(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[][]): Route;
patch(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[][]): Route;
put(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[]): Route;
put(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[]): Route;
put(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[][]): Route;
put(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[][]): Route;
del(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[]): Route;
del(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[]): Route;
del(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[][]): Route;
del(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[][]): Route;
get(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[]): Route;
get(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[]): Route;
get(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[][]): Route;
get(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[][]): Route;
head(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[]): Route;
head(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[]): Route;
head(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[][]): Route;
head(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[][]): Route;
opts(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[]): Route;
opts(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[]): Route;
opts(route: any, routeCallBack: RequestHandler, ...routeCallBacks: RequestHandler[][]): Route;
opts(route: any, routeCallBack: RequestHandler[], ...routeCallBacks: RequestHandler[][]): Route;
name: string;
version: string;
log: Object;
acceptable: string[];
url: string;
address: () => addressInterface;
listen(... args: any[]): any;
close(... args: any[]): any;
pre(routeCallBack: RequestHandler): Server;
server: http.Server;
router: Router;
routes: Route[];
toString: () => string;
}
interface ServerOptions {
certificate ?: string;
key ?: string;
formatters ?: Object;
log ?: Object;
name ?: string;
spdy ?: Object;
version ?: string;
responseTimeHeader ?: string;
responseTimeFormatter ?: (durationInMilliseconds: number) => any;
handleUpgrades ?: boolean;
router ?: Router;
}
interface ClientOptions {
accept?: string;
connectTimeout?: number;
dtrace?: Object;
gzip?: Object;
headers?: Object;
log?: Object;
retry?: Object;
signRequest?: Function;
url?: string;
userAgent?: string;
version?: string;
}
interface Client {
get: (path: string, callback?: (err: any, req: Request, res: Response, obj: any) => any) => any;
head: (path: string, callback?: (err: any, req: Request, res: Response) => any) => any;
post: (path: string, object: any, callback?: (err: any, req: Request, res: Response, obj: any) => any) => any;
put: (path: string, object: any, callback?: (err: any, req: Request, res: Response, obj: any) => any) => any;
del: (path: string, callback?: (err: any, req: Request, res: Response) => any) => any;
basicAuth: (username: string, password: string) => any;
}
interface HttpClient extends Client {
get: (path?: any, callback?: Function) => any;
head: (path?:any, callback?: Function) => any;
post: (opts?: any, callback?: Function) => any;
put: (opts?: any, callback?: Function) => any;
del: (opts?: any, callback?: Function) => any;
}
interface ThrottleOptions {
burst?: number;
rate?: number;
ip?: boolean;
xff?: boolean;
username?: boolean;
tokensTable?: Object;
maxKeys?: number;
overrides?: Object;
}
interface Next {
(err?: any): any;
ifError: (err?: any) => any;
}
interface RequestHandler {
(req: Request, res: Response, next: Next): any;
}
interface CORS {
(cors?: {
origins?: string[];
credentials?: boolean;
headers?: string[];
}): RequestHandler;
origins: string[];
ALLOW_HEADERS: string[];
credentials: boolean;
}
export function createServer(options?: ServerOptions): Server;
export function createJsonClient(options?: ClientOptions): Client;
export function createStringClient(options?: ClientOptions): Client;
export function createClient(options?: ClientOptions): HttpClient;
export class HttpError { constructor(cause: any, message?: any); }
class DefiniteHttpError {
constructor(message?: any);
constructor(cause: any, message?: any);
}
export class BadRequestError extends DefiniteHttpError {}
export class UnauthorizedError extends DefiniteHttpError {}
export class PaymentRequiredError extends DefiniteHttpError {}
export class ForbiddenError extends DefiniteHttpError {}
export class NotFoundError extends DefiniteHttpError {}
export class MethodNotAllowedError extends DefiniteHttpError {}
export class NotAcceptableError extends DefiniteHttpError {}
export class ProxyAuthenticationRequiredError extends DefiniteHttpError {}
export class RequestTimeoutError extends DefiniteHttpError {}
export class ConflictError extends DefiniteHttpError {}
export class GoneError extends DefiniteHttpError {}
export class LengthRequiredError extends DefiniteHttpError {}
export class RequestEntityTooLargeError extends DefiniteHttpError {}
export class RequesturiTooLargeError extends DefiniteHttpError {}
export class UnsupportedMediaTypeError extends DefiniteHttpError {}
export class RequestedRangeNotSatisfiableError extends DefiniteHttpError {}
export class ExpectationFailedError extends DefiniteHttpError {}
export class ImATeapotError extends DefiniteHttpError {}
export class UnprocessableEntityError extends DefiniteHttpError {}
export class LockedError extends DefiniteHttpError {}
export class FailedDependencyError extends DefiniteHttpError {}
export class UnorderedCollectionError extends DefiniteHttpError {}
export class UpgradeRequiredError extends DefiniteHttpError {}
export class PreconditionRequiredError extends DefiniteHttpError {}
export class TooManyRequestsError extends DefiniteHttpError {}
export class RequestHeaderFieldsTooLargeError extends DefiniteHttpError {}
export class InternalServerError extends DefiniteHttpError {}
export class NotImplementedError extends DefiniteHttpError {}
export class BadGatewayError extends DefiniteHttpError {}
export class ServiceUnavailableError extends DefiniteHttpError {}
export class GatewayTimeoutError extends DefiniteHttpError {}
export class HttpVersionNotSupportedError extends DefiniteHttpError {}
export class VariantAlsoNegotiatesError extends DefiniteHttpError {}
export class InsufficientStorageError extends DefiniteHttpError {}
export class BandwidthLimitExceededError extends DefiniteHttpError {}
export class NotExtendedError extends DefiniteHttpError {}
export class NetworkAuthenticationRequiredError extends DefiniteHttpError {}
export class RestError extends DefiniteHttpError {}
export class PreconditionFailedError extends RestError {}
export class BadDigestError extends RestError {}
export class BadMethodError extends RestError {}
export class InternalError extends RestError {}
export class InvalidArgumentError extends RestError {}
export class InvalidContentError extends RestError {}
export class InvalidCredentialsError extends RestError {}
export class InvalidHeaderError extends RestError {}
export class InvalidVersionError extends RestError {}
export class MissingParameterError extends RestError {}
export class NotAuthorizedError extends RestError {}
export class RequestExpiredError extends RestError {}
export class RequestThrottledError extends RestError {}
export class ResourceNotFoundError extends RestError {}
export class WrongAcceptError extends RestError {}
export function acceptParser(parser: any): RequestHandler;
export function authorizationParser(): RequestHandler;
export function dateParser(skew?: number): RequestHandler;
export function queryParser(options?: Object): RequestHandler;
export function urlEncodedBodyParser(options?: Object): RequestHandler[];
export function jsonp(): RequestHandler;
export function gzipResponse(options?: Object): RequestHandler;
export function bodyParser(options?: Object): RequestHandler[];
export function requestLogger(options?: Object): RequestHandler;
export function serveStatic(options?: Object): RequestHandler;
export function throttle(options?: ThrottleOptions): RequestHandler;
export function conditionalRequest(): RequestHandler[];
export function auditLogger(options?: Object): Function;
export function fullResponse(): RequestHandler;
export var defaultResponseHeaders : any;
export var CORS: CORS;
export module pre {
export function pause(): RequestHandler;
export function sanitizePath(options?: any): RequestHandler;
export function userAgentConnection(options?: any): RequestHandler;
}
}