diff --git a/.changeset/lemon-steaks-care.md b/.changeset/lemon-steaks-care.md new file mode 100644 index 000000000000..848db8fcd845 --- /dev/null +++ b/.changeset/lemon-steaks-care.md @@ -0,0 +1,5 @@ +--- +'@astrojs/vercel': patch +--- + +Add back support for Astro.clientAddress diff --git a/packages/integrations/vercel/src/serverless/request-transform.ts b/packages/integrations/vercel/src/serverless/request-transform.ts index 6a86ad976571..819b8e8fecf6 100644 --- a/packages/integrations/vercel/src/serverless/request-transform.ts +++ b/packages/integrations/vercel/src/serverless/request-transform.ts @@ -2,6 +2,8 @@ import type { App } from 'astro/app'; import type { IncomingMessage, ServerResponse } from 'node:http'; import { splitCookiesString } from 'set-cookie-parser'; +const clientAddressSymbol = Symbol.for('astro.clientAddress'); + /* Credits to the SvelteKit team https://github.com/sveltejs/kit/blob/8d1ba04825a540324bc003e85f36559a594aadc2/packages/kit/src/exports/node/index.js @@ -99,13 +101,16 @@ export async function getRequest( req: IncomingMessage, bodySizeLimit?: number ): Promise { - return new Request(base + req.url, { + let headers = req.headers as Record; + let request = new Request(base + req.url, { // @ts-expect-error duplex: 'half', method: req.method, - headers: req.headers as Record, + headers, body: get_raw_body(req, bodySizeLimit), }); + Reflect.set(request, clientAddressSymbol, headers['x-forwarded-for']); + return request; } export async function setResponse(