@adonisjs/http-server
Advanced tools
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
@@ -9,3 +9,3 @@ import { | ||
| defineConfig | ||
| } from "../chunk-OLJ72AJE.js"; | ||
| } from "../chunk-RSZ2AJQK.js"; | ||
@@ -166,2 +166,6 @@ // factories/http_context.ts | ||
| jsonpCallbackName: "callback", | ||
| redirect: { | ||
| allowedHosts: [], | ||
| forwardQueryString: false | ||
| }, | ||
| cookie: { | ||
@@ -168,0 +172,0 @@ maxAge: 90, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../factories/http_context.ts","../../factories/request.ts","../../factories/qs_parser_factory.ts","../../factories/response.ts","../../factories/router.ts","../../factories/server_factory.ts"],"sourcesContent":["/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Container } from '@adonisjs/fold'\nimport type { Logger } from '@adonisjs/logger'\nimport { LoggerFactory } from '@adonisjs/logger/factories'\n\nimport { RequestFactory } from './request.js'\nimport { ResponseFactory } from './response.js'\nimport type { Request } from '../src/request.js'\nimport type { Response } from '../src/response.js'\nimport { HttpContext } from '../src/http_context/main.js'\n\ntype FactoryParameters = {\n request: Request\n response: Response\n logger: Logger\n}\n\n/**\n * HttpContext factory is used to generate Http context class instances for\n * testing\n */\nexport class HttpContextFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the request class instance\n */\n #createRequest() {\n return this.#parameters.request || new RequestFactory().create()\n }\n\n /**\n * Returns the response class instance\n */\n #createResponse() {\n return this.#parameters.response || new ResponseFactory().create()\n }\n\n /**\n * Returns an instance of the logger class\n */\n #createLogger() {\n return this.#parameters.logger || new LoggerFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create request\n */\n create() {\n return new HttpContext(\n this.#createRequest(),\n this.#createResponse(),\n this.#createLogger(),\n new Container().createResolver()\n )\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Socket } from 'node:net'\nimport proxyAddr from 'proxy-addr'\nimport type { Encryption } from '@adonisjs/encryption'\nimport { IncomingMessage, ServerResponse } from 'node:http'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { Request } from '../src/request.js'\nimport { RequestConfig } from '../src/types/request.js'\nimport { QsParserFactory } from './qs_parser_factory.js'\n\ntype FactoryParameters = {\n url: string\n method: string\n req: IncomingMessage\n res: ServerResponse\n encryption: Encryption\n config: Partial<RequestConfig>\n}\n\n/**\n * Request factory is used to generate request class instances for\n * testing\n */\nexport class RequestFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the config for the request class\n */\n #getConfig() {\n return {\n allowMethodSpoofing: false,\n trustProxy: proxyAddr.compile('loopback'),\n subdomainOffset: 2,\n generateRequestId: false,\n ...this.#parameters.config,\n }\n }\n\n /**\n * Returns the HTTP req object\n */\n #createRequest() {\n const req = this.#parameters.req || new IncomingMessage(new Socket())\n if (this.#parameters.url) {\n req.url = this.#parameters.url\n }\n\n if (this.#parameters.method) {\n req.method = this.#parameters.method\n }\n\n return req\n }\n\n /**\n * Returns the HTTP res object\n */\n #createResponse(req: IncomingMessage) {\n return this.#parameters.res || new ServerResponse(req)\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create request\n */\n create() {\n const req = this.#createRequest()\n return new Request(\n req,\n this.#createResponse(req),\n this.#createEncryption(),\n this.#getConfig(),\n new QsParserFactory().create()\n )\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Qs } from '../src/qs.js'\nimport type { QSParserConfig } from '../src/types/qs.js'\n\n/**\n * QS Parser factory is used to generate the query string\n * parser for testing\n */\nexport class QsParserFactory {\n #options: QSParserConfig = {\n parse: {\n depth: 5,\n parameterLimit: 1000,\n allowSparse: false,\n arrayLimit: 20,\n comma: true,\n },\n stringify: {\n encode: true,\n encodeValuesOnly: false,\n arrayFormat: 'indices',\n skipNulls: false,\n },\n }\n\n /**\n * Merge encryption factory options\n */\n merge(\n options: Partial<{\n parse: Partial<QSParserConfig['parse']>\n stringify: Partial<QSParserConfig['stringify']>\n }>\n ) {\n Object.assign(this.#options.parse, options.parse)\n Object.assign(this.#options.stringify, options.stringify)\n return this\n }\n\n /**\n * Create instance of the logger class\n */\n create() {\n return new Qs(this.#options)\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Socket } from 'node:net'\nimport type { Encryption } from '@adonisjs/encryption'\nimport { IncomingMessage, ServerResponse } from 'node:http'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { RouterFactory } from './router.js'\nimport { Response } from '../src/response.js'\nimport { Router } from '../src/router/main.js'\nimport { ResponseConfig } from '../src/types/response.js'\nimport { QsParserFactory } from './qs_parser_factory.js'\n\ntype FactoryParameters = {\n req: IncomingMessage\n res: ServerResponse\n encryption: Encryption\n config: Partial<ResponseConfig>\n router: Router\n}\n\n/**\n * Response factory is used to generate response class instances for\n * testing\n */\nexport class ResponseFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the config for the request class\n */\n #getConfig() {\n return {\n etag: false,\n jsonpCallbackName: 'callback',\n cookie: {\n maxAge: 90,\n path: '/',\n httpOnly: true,\n sameSite: false,\n secure: false,\n },\n ...this.#parameters.config,\n }\n }\n\n /**\n * Returns the HTTP req object\n */\n #createRequest() {\n return this.#parameters.req || new IncomingMessage(new Socket())\n }\n\n /**\n * Returns an instance of the router\n */\n #createRouter() {\n return this.#parameters.router || new RouterFactory().create()\n }\n\n /**\n * Returns the HTTP res object\n */\n #createResponse(req: IncomingMessage) {\n return this.#parameters.res || new ServerResponse(req)\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create response class instance\n */\n create() {\n const req = this.#createRequest()\n\n return new Response(\n req,\n this.#createResponse(req),\n this.#createEncryption(),\n this.#getConfig(),\n this.#createRouter(),\n new QsParserFactory().create()\n )\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { Encryption } from '@adonisjs/encryption'\nimport type { Application } from '@adonisjs/application'\nimport { AppFactory } from '@adonisjs/application/factories'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { Router } from '../src/router/main.js'\nimport { QsParserFactory } from './qs_parser_factory.js'\n\ntype FactoryParameters = {\n app: Application<any>\n encryption: Encryption\n}\n\n/**\n * Router factory is used to generate router class instances for\n * testing\n */\nexport class RouterFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns an instance of the application class\n */\n #getApp() {\n return this.#parameters.app || new AppFactory().create(new URL('./app/', import.meta.url))\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create router instance\n */\n create() {\n return new Router(this.#getApp(), this.#createEncryption(), new QsParserFactory().create())\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Logger } from '@adonisjs/logger'\nimport { Emitter } from '@adonisjs/events'\nimport type { Encryption } from '@adonisjs/encryption'\nimport type { Application } from '@adonisjs/application'\nimport { AppFactory } from '@adonisjs/application/factories'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { Server } from '../src/server/main.js'\nimport { defineConfig } from '../src/define_config.js'\nimport type { ServerConfig } from '../src/types/server.js'\n\ntype FactoryParameters = {\n app: Application<any>\n logger: Logger\n encryption: Encryption\n emitter: Emitter<any>\n config: Partial<ServerConfig>\n}\n\n/**\n * Server factory is used to generate server class instances for\n * testing\n */\nexport class ServerFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the emitter instance\n */\n #getEmitter() {\n return this.#parameters.emitter || new Emitter(this.#getApp())\n }\n\n /**\n * Returns the logger instance\n */\n #getLogger() {\n return this.#parameters.logger || new Logger({ enabled: false })\n }\n\n /**\n * Returns the config for the server class\n */\n #getConfig() {\n return defineConfig(this.#parameters.config || {})\n }\n\n /**\n * Returns an instance of the application class\n */\n #getApp() {\n return this.#parameters.app || new AppFactory().create(new URL('./app/', import.meta.url))\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create server instance\n */\n create() {\n return new Server(\n this.#getApp(),\n this.#createEncryption(),\n this.#getEmitter(),\n this.#getLogger(),\n this.#getConfig()\n )\n }\n}\n"],"mappings":"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","names":["Socket","IncomingMessage","ServerResponse","EncryptionFactory","EncryptionFactory","EncryptionFactory","IncomingMessage","Socket","ServerResponse","EncryptionFactory","AppFactory","EncryptionFactory","AppFactory","EncryptionFactory"]} | ||
| {"version":3,"sources":["../../factories/http_context.ts","../../factories/request.ts","../../factories/qs_parser_factory.ts","../../factories/response.ts","../../factories/router.ts","../../factories/server_factory.ts"],"sourcesContent":["/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Container } from '@adonisjs/fold'\nimport type { Logger } from '@adonisjs/logger'\nimport { LoggerFactory } from '@adonisjs/logger/factories'\n\nimport { RequestFactory } from './request.js'\nimport { ResponseFactory } from './response.js'\nimport type { Request } from '../src/request.js'\nimport type { Response } from '../src/response.js'\nimport { HttpContext } from '../src/http_context/main.js'\n\ntype FactoryParameters = {\n request: Request\n response: Response\n logger: Logger\n}\n\n/**\n * HttpContext factory is used to generate Http context class instances for\n * testing\n */\nexport class HttpContextFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the request class instance\n */\n #createRequest() {\n return this.#parameters.request || new RequestFactory().create()\n }\n\n /**\n * Returns the response class instance\n */\n #createResponse() {\n return this.#parameters.response || new ResponseFactory().create()\n }\n\n /**\n * Returns an instance of the logger class\n */\n #createLogger() {\n return this.#parameters.logger || new LoggerFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create request\n */\n create() {\n return new HttpContext(\n this.#createRequest(),\n this.#createResponse(),\n this.#createLogger(),\n new Container().createResolver()\n )\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Socket } from 'node:net'\nimport proxyAddr from 'proxy-addr'\nimport type { Encryption } from '@adonisjs/encryption'\nimport { IncomingMessage, ServerResponse } from 'node:http'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { Request } from '../src/request.js'\nimport { RequestConfig } from '../src/types/request.js'\nimport { QsParserFactory } from './qs_parser_factory.js'\n\ntype FactoryParameters = {\n url: string\n method: string\n req: IncomingMessage\n res: ServerResponse\n encryption: Encryption\n config: Partial<RequestConfig>\n}\n\n/**\n * Request factory is used to generate request class instances for\n * testing\n */\nexport class RequestFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the config for the request class\n */\n #getConfig() {\n return {\n allowMethodSpoofing: false,\n trustProxy: proxyAddr.compile('loopback'),\n subdomainOffset: 2,\n generateRequestId: false,\n ...this.#parameters.config,\n }\n }\n\n /**\n * Returns the HTTP req object\n */\n #createRequest() {\n const req = this.#parameters.req || new IncomingMessage(new Socket())\n if (this.#parameters.url) {\n req.url = this.#parameters.url\n }\n\n if (this.#parameters.method) {\n req.method = this.#parameters.method\n }\n\n return req\n }\n\n /**\n * Returns the HTTP res object\n */\n #createResponse(req: IncomingMessage) {\n return this.#parameters.res || new ServerResponse(req)\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create request\n */\n create() {\n const req = this.#createRequest()\n return new Request(\n req,\n this.#createResponse(req),\n this.#createEncryption(),\n this.#getConfig(),\n new QsParserFactory().create()\n )\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Qs } from '../src/qs.js'\nimport type { QSParserConfig } from '../src/types/qs.js'\n\n/**\n * QS Parser factory is used to generate the query string\n * parser for testing\n */\nexport class QsParserFactory {\n #options: QSParserConfig = {\n parse: {\n depth: 5,\n parameterLimit: 1000,\n allowSparse: false,\n arrayLimit: 20,\n comma: true,\n },\n stringify: {\n encode: true,\n encodeValuesOnly: false,\n arrayFormat: 'indices',\n skipNulls: false,\n },\n }\n\n /**\n * Merge encryption factory options\n */\n merge(\n options: Partial<{\n parse: Partial<QSParserConfig['parse']>\n stringify: Partial<QSParserConfig['stringify']>\n }>\n ) {\n Object.assign(this.#options.parse, options.parse)\n Object.assign(this.#options.stringify, options.stringify)\n return this\n }\n\n /**\n * Create instance of the logger class\n */\n create() {\n return new Qs(this.#options)\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Socket } from 'node:net'\nimport type { Encryption } from '@adonisjs/encryption'\nimport { IncomingMessage, ServerResponse } from 'node:http'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { RouterFactory } from './router.js'\nimport { Response } from '../src/response.js'\nimport { Router } from '../src/router/main.js'\nimport { ResponseConfig } from '../src/types/response.js'\nimport { QsParserFactory } from './qs_parser_factory.js'\n\ntype FactoryParameters = {\n req: IncomingMessage\n res: ServerResponse\n encryption: Encryption\n config: Partial<ResponseConfig>\n router: Router\n}\n\n/**\n * Response factory is used to generate response class instances for\n * testing\n */\nexport class ResponseFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the config for the request class\n */\n #getConfig() {\n return {\n etag: false,\n jsonpCallbackName: 'callback',\n redirect: {\n allowedHosts: [] as string[],\n forwardQueryString: false,\n },\n cookie: {\n maxAge: 90,\n path: '/',\n httpOnly: true,\n sameSite: false,\n secure: false,\n },\n ...this.#parameters.config,\n }\n }\n\n /**\n * Returns the HTTP req object\n */\n #createRequest() {\n return this.#parameters.req || new IncomingMessage(new Socket())\n }\n\n /**\n * Returns an instance of the router\n */\n #createRouter() {\n return this.#parameters.router || new RouterFactory().create()\n }\n\n /**\n * Returns the HTTP res object\n */\n #createResponse(req: IncomingMessage) {\n return this.#parameters.res || new ServerResponse(req)\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create response class instance\n */\n create() {\n const req = this.#createRequest()\n\n return new Response(\n req,\n this.#createResponse(req),\n this.#createEncryption(),\n this.#getConfig(),\n this.#createRouter(),\n new QsParserFactory().create()\n )\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { Encryption } from '@adonisjs/encryption'\nimport type { Application } from '@adonisjs/application'\nimport { AppFactory } from '@adonisjs/application/factories'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { Router } from '../src/router/main.js'\nimport { QsParserFactory } from './qs_parser_factory.js'\n\ntype FactoryParameters = {\n app: Application<any>\n encryption: Encryption\n}\n\n/**\n * Router factory is used to generate router class instances for\n * testing\n */\nexport class RouterFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns an instance of the application class\n */\n #getApp() {\n return this.#parameters.app || new AppFactory().create(new URL('./app/', import.meta.url))\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create router instance\n */\n create() {\n return new Router(this.#getApp(), this.#createEncryption(), new QsParserFactory().create())\n }\n}\n","/*\n * @adonisjs/http-server\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { Logger } from '@adonisjs/logger'\nimport { Emitter } from '@adonisjs/events'\nimport type { Encryption } from '@adonisjs/encryption'\nimport type { Application } from '@adonisjs/application'\nimport { AppFactory } from '@adonisjs/application/factories'\nimport { EncryptionFactory } from '@adonisjs/encryption/factories'\n\nimport { Server } from '../src/server/main.js'\nimport { defineConfig } from '../src/define_config.js'\nimport type { ServerConfig } from '../src/types/server.js'\n\ntype FactoryParameters = {\n app: Application<any>\n logger: Logger\n encryption: Encryption\n emitter: Emitter<any>\n config: Partial<ServerConfig>\n}\n\n/**\n * Server factory is used to generate server class instances for\n * testing\n */\nexport class ServerFactory {\n #parameters: Partial<FactoryParameters> = {}\n\n /**\n * Returns the emitter instance\n */\n #getEmitter() {\n return this.#parameters.emitter || new Emitter(this.#getApp())\n }\n\n /**\n * Returns the logger instance\n */\n #getLogger() {\n return this.#parameters.logger || new Logger({ enabled: false })\n }\n\n /**\n * Returns the config for the server class\n */\n #getConfig() {\n return defineConfig(this.#parameters.config || {})\n }\n\n /**\n * Returns an instance of the application class\n */\n #getApp() {\n return this.#parameters.app || new AppFactory().create(new URL('./app/', import.meta.url))\n }\n\n /**\n * Returns an instance of the encryptor to encrypt\n * signed URLs\n */\n #createEncryption() {\n return this.#parameters.encryption || new EncryptionFactory().create()\n }\n\n /**\n * Merge factory params\n */\n merge(params: Partial<FactoryParameters>) {\n Object.assign(this.#parameters, params)\n return this\n }\n\n /**\n * Create server instance\n */\n create() {\n return new Server(\n this.#getApp(),\n this.#createEncryption(),\n this.#getEmitter(),\n this.#getLogger(),\n this.#getConfig()\n )\n }\n}\n"],"mappings":"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","names":["Socket","IncomingMessage","ServerResponse","EncryptionFactory","EncryptionFactory","EncryptionFactory","IncomingMessage","Socket","ServerResponse","EncryptionFactory","AppFactory","EncryptionFactory","AppFactory","EncryptionFactory"]} |
+1
-1
@@ -21,3 +21,3 @@ import { | ||
| parseRange | ||
| } from "./chunk-OLJ72AJE.js"; | ||
| } from "./chunk-RSZ2AJQK.js"; | ||
@@ -24,0 +24,0 @@ // src/exception_handler.ts |
@@ -0,1 +1,2 @@ | ||
| import type { IncomingHttpHeaders } from 'node:http'; | ||
| import { Route } from './router/route.js'; | ||
@@ -7,2 +8,27 @@ import { BriskRoute } from './router/brisk.js'; | ||
| /** | ||
| * Validates that a URL is safe to use as a redirect destination. | ||
| * | ||
| * - Relative URLs must start with `/` and not be protocol-relative (`//`) | ||
| * - Absolute URLs must parse successfully and their host must match | ||
| * `currentHost` or be listed in `allowedHosts` | ||
| * | ||
| * When `currentHost` and `allowedHosts` are omitted, absolute URLs | ||
| * are accepted as long as they parse successfully. | ||
| * | ||
| * @param url - The URL to validate | ||
| * @param currentHost - The current request's Host header value | ||
| * @param allowedHosts - Array of additionally allowed hosts | ||
| */ | ||
| export declare function isValidRedirectUrl(url: string, currentHost?: string, allowedHosts?: string[]): boolean; | ||
| /** | ||
| * Returns the previous URL from the request's `Referer` header, | ||
| * validated against the request's `Host` header and an optional | ||
| * list of allowed hosts using `isValidRedirectUrl`. | ||
| * | ||
| * @param headers - The incoming request headers | ||
| * @param allowedHosts - Array of allowed referrer hosts | ||
| * @param fallback - URL to return when referrer is missing or invalid | ||
| */ | ||
| export declare function getPreviousUrl(headers: IncomingHttpHeaders, allowedHosts: string[], fallback: string): string; | ||
| /** | ||
| * Makes input string consistent by having only the starting | ||
@@ -9,0 +35,0 @@ * slash |
@@ -6,2 +6,3 @@ import type { IncomingMessage } from 'node:http'; | ||
| import type { MakeUrlOptions } from './types/route.js'; | ||
| import type { ResponseConfig } from './types/response.js'; | ||
| /** | ||
@@ -12,4 +13,16 @@ * Exposes the API to construct redirect routes | ||
| #private; | ||
| constructor(request: IncomingMessage, response: Response, router: Router, qs: Qs); | ||
| /** | ||
| * Array of allowed hosts for referrer-based redirects. | ||
| * When empty, only the request's own host is allowed. | ||
| */ | ||
| allowedHosts: string[]; | ||
| constructor(request: IncomingMessage, response: Response, router: Router, qs: Qs, config: ResponseConfig['redirect']); | ||
| /** | ||
| * Returns the previous URL for redirect back. By default reads | ||
| * the `Referer` header and validates the host. | ||
| * | ||
| * @param fallback - URL to return when no valid previous URL is found | ||
| */ | ||
| getPreviousUrl(fallback: string): string; | ||
| /** | ||
| * Set a custom status code. | ||
@@ -29,8 +42,11 @@ */ | ||
| withQs(): this; | ||
| withQs(forward: boolean): this; | ||
| withQs(values: Record<string, any>): this; | ||
| withQs(name: string, value: any): this; | ||
| /** | ||
| * Redirect to the previous path. | ||
| * Redirects to the previous URL resolved via `getPreviousUrl`. | ||
| * | ||
| * @param fallback - URL to redirect to when no valid previous URL is found | ||
| */ | ||
| back(): void; | ||
| back(fallback?: string): void; | ||
| /** | ||
@@ -37,0 +53,0 @@ * Redirect the request using a route identifier. |
@@ -329,2 +329,14 @@ import Macroable from '@poppinss/macroable'; | ||
| /** | ||
| * Returns the previous URL from the `Referer` header, validated against | ||
| * the request's `Host` header and an optional list of allowed hosts. | ||
| * | ||
| * The referrer is accepted when its host matches the request's `Host` | ||
| * header or is listed in `allowedHosts`. Otherwise the `fallback` | ||
| * value is returned. | ||
| * | ||
| * @param allowedHosts - Array of allowed referrer hosts | ||
| * @param fallback - URL to return when referrer is missing or invalid | ||
| */ | ||
| getPreviousUrl(allowedHosts: string[], fallback?: string): string; | ||
| /** | ||
| * Find if the current HTTP request is for the given route or the routes | ||
@@ -331,0 +343,0 @@ */ |
@@ -42,2 +42,21 @@ import { Readable } from 'node:stream'; | ||
| cookie: Partial<CookieOptions>; | ||
| /** | ||
| * Configuration for HTTP redirects | ||
| */ | ||
| redirect: { | ||
| /** | ||
| * Array of allowed hosts for referrer-based redirects. | ||
| * When empty, only the request's own host is allowed. | ||
| * | ||
| * Defaults to [] | ||
| */ | ||
| allowedHosts: string[]; | ||
| /** | ||
| * Whether to forward the query string from the current request | ||
| * by default on redirects. | ||
| * | ||
| * Defaults to false | ||
| */ | ||
| forwardQueryString: boolean; | ||
| }; | ||
| }; | ||
@@ -44,0 +63,0 @@ /** |
+1
-1
| { | ||
| "name": "@adonisjs/http-server", | ||
| "version": "7.8.0", | ||
| "version": "7.8.1", | ||
| "description": "AdonisJS HTTP server with support packed with Routing and Cookies", | ||
@@ -5,0 +5,0 @@ "main": "build/index.js", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 3 instances in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 3 instances in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
546496
2.05%8530
1.95%20
-23.08%