summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Matthew Phillips <matthew@skypack.dev> 2023-03-09 11:27:16 -0500
committerGravatar GitHub <noreply@github.com> 2023-03-09 11:27:16 -0500
commit700a55549925e2a0ef2da378a20a2a5d35c53b93 (patch)
treeac6167f0ec634ab0ec522a06b1657cf19dc8ddb5
parent1343a6469f91728d5f9718895b4eaeab1ca07190 (diff)
downloadastro-700a55549925e2a0ef2da378a20a2a5d35c53b93.tar.gz
astro-700a55549925e2a0ef2da378a20a2a5d35c53b93.tar.zst
astro-700a55549925e2a0ef2da378a20a2a5d35c53b93.zip
Add back support for Astro.clientAddress to Vercel serverless (#6484)
-rw-r--r--.changeset/lemon-steaks-care.md5
-rw-r--r--packages/integrations/vercel/src/serverless/request-transform.ts9
2 files changed, 12 insertions, 2 deletions
diff --git a/.changeset/lemon-steaks-care.md b/.changeset/lemon-steaks-care.md
new file mode 100644
index 000000000..848db8fcd
--- /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 6a86ad976..819b8e8fe 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<Request> {
- return new Request(base + req.url, {
+ let headers = req.headers as Record<string, string>;
+ let request = new Request(base + req.url, {
// @ts-expect-error
duplex: 'half',
method: req.method,
- headers: req.headers as Record<string, string>,
+ headers,
body: get_raw_body(req, bodySizeLimit),
});
+ Reflect.set(request, clientAddressSymbol, headers['x-forwarded-for']);
+ return request;
}
export async function setResponse(