From 72fbabfea50c5c3ed1519479f313f053f712390b Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Tue, 19 Jul 2022 16:10:15 -0400 Subject: [PATCH] Adds support for Astro.clientAddress (#3973) * Adds support for Astro.clientAddress * Pass through mode and adapterName in SSG * Pass through the mode provided * Provide an adapter specific error message when possible --- packages/integrations/netlify/src/netlify-edge-functions.ts | 4 ++++ packages/integrations/netlify/src/netlify-functions.ts | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/packages/integrations/netlify/src/netlify-edge-functions.ts b/packages/integrations/netlify/src/netlify-edge-functions.ts index 0d2974c61d5c..a2c883585947 100644 --- a/packages/integrations/netlify/src/netlify-edge-functions.ts +++ b/packages/integrations/netlify/src/netlify-edge-functions.ts @@ -1,6 +1,8 @@ import type { SSRManifest } from 'astro'; import { App } from 'astro/app'; +const clientAddressSymbol = Symbol.for('astro.clientAddress'); + export function createExports(manifest: SSRManifest) { const app = new App(manifest); @@ -13,6 +15,8 @@ export function createExports(manifest: SSRManifest) { return; } if (app.match(request)) { + const ip = request.headers.get('x-nf-client-connection-ip'); + Reflect.set(request, clientAddressSymbol, ip); return app.render(request); } diff --git a/packages/integrations/netlify/src/netlify-functions.ts b/packages/integrations/netlify/src/netlify-functions.ts index d342afc4ca25..0363fb8034a2 100644 --- a/packages/integrations/netlify/src/netlify-functions.ts +++ b/packages/integrations/netlify/src/netlify-functions.ts @@ -15,6 +15,8 @@ function parseContentType(header?: string) { return header?.split(';')[0] ?? ''; } +const clientAddressSymbol = Symbol.for('astro.clientAddress'); + export const createExports = (manifest: SSRManifest, args: Args) => { const app = new App(manifest); @@ -71,6 +73,9 @@ export const createExports = (manifest: SSRManifest, args: Args) => { }; } + const ip = headers['x-nf-client-connection-ip']; + Reflect.set(request, clientAddressSymbol, ip); + const response: Response = await app.render(request); const responseHeaders = Object.fromEntries(response.headers.entries());