export interface ModifiedRequest { /** * If set, overwrites the incoming headers to the origin request. * * This is useful when you want to pass data between a Middleware and a * Serverless or Edge Function. * * @example * Add a `x-user-id` header and remove the `Authorization` header * * ```ts * import { rewrite } from '@vercel/edge'; * export default async function middleware(request: Request): Promise { * const newHeaders = new Headers(request.headers); * newHeaders.set('x-user-id', 'user_123'); * newHeaders.delete('authorization'); * return rewrite(request.url, { * request: { headers: newHeaders } * }) * } * ``` */ headers?: Headers; } export interface ExtraResponseInit extends Omit { /** * These headers will be sent to the user response * along with the response headers from the origin. */ headers?: HeadersInit; /** * Fields to rewrite for the upstream request. */ request?: ModifiedRequest; } /** * Returns a response that rewrites the request to a different URL. * * @param destination new URL to rewrite the request to * @param init Additional options for the response * * * @example * Rewrite all feature-flagged requests from `/:path*` to `/experimental/:path*` * * ```ts * import { rewrite, next } from '@vercel/edge'; * * export default async function middleware(req: Request) { * const flagged = await getFlag(req, 'isExperimental'); * if (flagged) { * const url = new URL(req.url); * url.pathname = `/experimental{url.pathname}`; * return rewrite(url); * } * * return next(); * } * ``` * * @example * JWT authentication for `/api/:path*` requests * * ```ts * import { rewrite, next } from '@vercel/edge'; * * export default function middleware(req: Request) { * const auth = checkJwt(req.headers.get('Authorization')); * if (!checkJwt) { * return rewrite(new URL('/api/error-unauthorized', req.url)); * } * const url = new URL(req.url); * url.searchParams.set('_userId', auth.userId); * return rewrite(url); * } * * export const config = { matcher: '/api/users/:path*' }; * ``` */ export declare function rewrite(destination: string | URL, init?: ExtraResponseInit): Response; /** * Returns a Response that instructs the system to continue processing the request. * * @param init Additional options for the response * * @example * No-op middleware * * ```ts * import { next } from '@vercel/edge'; * * export default function middleware(_req: Request) { * return next(); * } * ``` * * @example * Add response headers to all requests * * ```ts * import { next } from '@vercel/edge'; * * export default function middleware(_req: Request) { * return next({ * headers: { 'x-from-middleware': 'true' }, * }) * } * ``` */ export declare function next(init?: ExtraResponseInit): Response;