From 8d217f368733b640b90ffc0c8d8224746733f6cf Mon Sep 17 00:00:00 2001 From: Lindsay Wardell <32229300+lindsaykwardell@users.noreply.github.com> Date: Fri, 7 Jun 2019 18:51:22 -0700 Subject: [PATCH] Added missing types in express-http-proxy (#36001) * Added missing types in express-http-proxy * Fixed comparison * Fixed typo in name --- .../express-http-proxy-tests.ts | 92 +++++++++++++------ types/express-http-proxy/index.d.ts | 39 +++++++- 2 files changed, 99 insertions(+), 32 deletions(-) diff --git a/types/express-http-proxy/express-http-proxy-tests.ts b/types/express-http-proxy/express-http-proxy-tests.ts index a30d17729e..e94bac8f27 100644 --- a/types/express-http-proxy/express-http-proxy-tests.ts +++ b/types/express-http-proxy/express-http-proxy-tests.ts @@ -3,49 +3,55 @@ import proxy = require("express-http-proxy"); const app: Express = {} as any; -app.use('/proxy', proxy('www.google.com')); +app.use("/proxy", proxy("www.google.com")); -proxy('www.google.com', {}); +proxy("www.google.com", {}); -proxy('www.google.com', { - proxyReqPathResolver: (req) => req.url, +proxy("www.google.com", { + proxyReqPathResolver: req => req.url }); -proxy('www.google.com', { +proxy("www.google.com", { limit: "10mb" }); -proxy('www.google.com', { +proxy("www.google.com", { limit: 1024 }); -proxy('www.google.com', { +proxy("www.google.com", { proxyErrorHandler: (err, res, next) => { switch (err && err.code) { - case 'ECONNRESET': { return res.status(405).send('504 became 405'); } - case 'ECONNREFUSED': { return res.status(200).send('gotcher back'); } - default: { next(err); } + case "ECONNRESET": { + return res.status(405).send("504 became 405"); + } + case "ECONNREFUSED": { + return res.status(200).send("gotcher back"); + } + default: { + next(err); + } } - }, + } }); -proxy('www.google.com', { +proxy("www.google.com", { proxyReqOptDecorator(proxyReqOpts, srcReq) { console.log(proxyReqOpts.headers, proxyReqOpts.method); console.log(srcReq.url, srcReq.cookies); return proxyReqOpts; - }, -}); - -proxy('www.google.com', { - proxyReqOptDecorator: (proxyReqOpts, srcReq) => { - return new Promise((resolve, reject) => { - resolve(proxyReqOpts); - }); } }); -proxy('www.google.com', { +proxy("www.google.com", { + proxyReqOptDecorator: (proxyReqOpts, srcReq) => { + return new Promise((resolve, reject) => { + resolve(proxyReqOpts); + }); + } +}); + +proxy("www.google.com", { userResHeaderDecorator(headers, userReq, userRes, proxyReq, proxyRes) { console.log(userReq.url, userRes.statusCode); console.log(proxyReq.url, proxyRes.statusCode); @@ -56,7 +62,7 @@ proxy('www.google.com', { } }); -proxy('www.google.com', { +proxy("www.google.com", { userResDecorator(proxyRes, proxyResData, userReq, userRes) { console.log(userReq.url, userRes.statusCode); const data = JSON.parse(proxyResData.toString("utf8")); @@ -65,28 +71,60 @@ proxy('www.google.com', { } }); -proxy('www.google.com', { +proxy("www.google.com", { userResDecorator(proxyRes, proxyResData, userReq, userRes) { // some code return proxyResData; } }); -proxy('www.google.com', { +proxy("www.google.com", { userResDecorator(proxyRes, proxyResData, userReq, userRes) { // some code return Promise.resolve(proxyResData); } }); -proxy('www.google.com', { +proxy("www.google.com", { preserveHostHdr: true }); -proxy('www.google.com', { +proxy("www.google.com", { parseReqBody: true }); const proxyOptions: proxy.ProxyOptions = {}; -app.use('/proxy/:port', proxy((req) => 'localhost:' + req.params.port)); +app.use("/proxy/:port", proxy(req => "localhost:" + req.params.port)); + +proxy("www.google.com", { + filter: (req, res) => { + return req.method === "GET"; + } +}); + +proxy("www.google.com", { + memoizeHost: true +}); + +proxy("www.google.com", { + skipToNextHandlerFilter: proxyRes => { + return proxyRes.statusCode === 404; + } +}); + +proxy("www.google.com", { + https: true +}); + +proxy("www.google.com", { + reqAsBuffer: true +}); + +proxy("httpbin.org", { + reqBodyEncoding: null +}); + +proxy("httpbin.org", { + timeout: 2000 +}); diff --git a/types/express-http-proxy/index.d.ts b/types/express-http-proxy/index.d.ts index 5cffd214d9..914f60fc20 100644 --- a/types/express-http-proxy/index.d.ts +++ b/types/express-http-proxy/index.d.ts @@ -5,6 +5,7 @@ // Gabriel Fournier // Niek van Bennekom // John L. Singleton +// Lindsay Wardell // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.2 @@ -19,16 +20,44 @@ declare namespace proxy { * See https://github.com/stream-utils/raw-body/blob/master/index.d.ts */ limit?: number | string; - proxyErrorHandler?: (err: any, res: Response, next: NextFunction) => any; + proxyErrorHandler?: ( + err: any, + res: Response, + next: NextFunction + ) => any; proxyReqPathResolver?: (req: Request) => string; - proxyReqOptDecorator?: (proxyReqOpts: RequestOptions, srcReq: Request) => RequestOptions | Promise; - userResHeaderDecorator?: (headers: IncomingHttpHeaders, userReq: Request, userRes: Response, proxyReq: Request, proxyRes: Response) => OutgoingHttpHeaders; - userResDecorator?: (proxyRes: Response, proxyResData: any, userReq: Request, userRes: Response) => Buffer | string | Promise; + proxyReqOptDecorator?: ( + proxyReqOpts: RequestOptions, + srcReq: Request + ) => RequestOptions | Promise; + userResHeaderDecorator?: ( + headers: IncomingHttpHeaders, + userReq: Request, + userRes: Response, + proxyReq: Request, + proxyRes: Response + ) => OutgoingHttpHeaders; + userResDecorator?: ( + proxyRes: Response, + proxyResData: any, + userReq: Request, + userRes: Response + ) => Buffer | string | Promise; preserveHostHdr?: boolean; parseReqBody?: boolean; + filter?: (req: Request, res: Response) => boolean; + memoizeHost?: boolean; + skipToNextHandlerFilter?: (proxyRes: Response) => boolean; + https?: boolean; + reqAsBuffer?: boolean; + reqBodyEncoding?: string | null; + timeout?: number; } } -declare function proxy(host: string|((req: Request) => string), options?: proxy.ProxyOptions): RequestHandler; +declare function proxy( + host: string | ((req: Request) => string), + options?: proxy.ProxyOptions +): RequestHandler; export = proxy;