summaryrefslogtreecommitdiff
path: root/packages/integrations
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations')
-rw-r--r--packages/integrations/cloudflare/src/server.advanced.ts10
-rw-r--r--packages/integrations/cloudflare/src/server.directory.ts10
-rw-r--r--packages/integrations/deno/src/server.ts17
-rw-r--r--packages/integrations/netlify/src/netlify-edge-functions.ts8
-rw-r--r--packages/integrations/netlify/src/netlify-functions.ts10
-rw-r--r--packages/integrations/node/src/server.ts12
-rw-r--r--packages/integrations/vercel/src/edge/entrypoint.ts8
-rw-r--r--packages/integrations/vercel/src/serverless/entrypoint.ts2
-rw-r--r--packages/integrations/vercel/src/serverless/request-transform.ts10
9 files changed, 77 insertions, 10 deletions
diff --git a/packages/integrations/cloudflare/src/server.advanced.ts b/packages/integrations/cloudflare/src/server.advanced.ts
index 7b88c7b1e..62adb44ec 100644
--- a/packages/integrations/cloudflare/src/server.advanced.ts
+++ b/packages/integrations/cloudflare/src/server.advanced.ts
@@ -26,7 +26,15 @@ export function createExports(manifest: SSRManifest) {
Symbol.for('astro.clientAddress'),
request.headers.get('cf-connecting-ip')
);
- return app.render(request, routeData);
+ let response = await app.render(request, routeData);
+
+ if(app.setCookieHeaders) {
+ for(const setCookieHeader of app.setCookieHeaders(response)) {
+ response.headers.append('Set-Cookie', setCookieHeader);
+ }
+ }
+
+ return response;
}
return new Response(null, {
diff --git a/packages/integrations/cloudflare/src/server.directory.ts b/packages/integrations/cloudflare/src/server.directory.ts
index 58e83be34..7a484378c 100644
--- a/packages/integrations/cloudflare/src/server.directory.ts
+++ b/packages/integrations/cloudflare/src/server.directory.ts
@@ -28,7 +28,15 @@ export function createExports(manifest: SSRManifest) {
Symbol.for('astro.clientAddress'),
request.headers.get('cf-connecting-ip')
);
- return app.render(request, routeData);
+ let response = await app.render(request, routeData);
+
+ if(app.setCookieHeaders) {
+ for(const setCookieHeader of app.setCookieHeaders(response)) {
+ response.headers.append('Set-Cookie', setCookieHeader);
+ }
+ }
+
+ return response;
}
return new Response(null, {
diff --git a/packages/integrations/deno/src/server.ts b/packages/integrations/deno/src/server.ts
index d8eb3320d..d8c6aede9 100644
--- a/packages/integrations/deno/src/server.ts
+++ b/packages/integrations/deno/src/server.ts
@@ -26,7 +26,13 @@ export function start(manifest: SSRManifest, options: Options) {
if (app.match(request)) {
let ip = connInfo?.remoteAddr?.hostname;
Reflect.set(request, Symbol.for('astro.clientAddress'), ip);
- return await app.render(request);
+ const response = await app.render(request);
+ if(app.setCookieHeaders) {
+ for(const setCookieHeader of app.setCookieHeaders(response)) {
+ response.headers.append('Set-Cookie', setCookieHeader);
+ }
+ }
+ return response;
}
// If the request path wasn't found in astro,
@@ -38,7 +44,14 @@ export function start(manifest: SSRManifest, options: Options) {
// If the static file can't be found
if (fileResp.status == 404) {
// Render the astro custom 404 page
- return await app.render(request);
+ const response = await app.render(request);
+
+ if(app.setCookieHeaders) {
+ for(const setCookieHeader of app.setCookieHeaders(response)) {
+ response.headers.append('Set-Cookie', setCookieHeader);
+ }
+ }
+ return response;
// If the static file is found
} else {
diff --git a/packages/integrations/netlify/src/netlify-edge-functions.ts b/packages/integrations/netlify/src/netlify-edge-functions.ts
index a2c883585..c788b5f67 100644
--- a/packages/integrations/netlify/src/netlify-edge-functions.ts
+++ b/packages/integrations/netlify/src/netlify-edge-functions.ts
@@ -17,7 +17,13 @@ export function createExports(manifest: SSRManifest) {
if (app.match(request)) {
const ip = request.headers.get('x-nf-client-connection-ip');
Reflect.set(request, clientAddressSymbol, ip);
- return app.render(request);
+ const response = await app.render(request);
+ if(app.setCookieHeaders) {
+ for(const setCookieHeader of app.setCookieHeaders(response)) {
+ response.headers.append('Set-Cookie', setCookieHeader);
+ }
+ }
+ return response;
}
return new Response(null, {
diff --git a/packages/integrations/netlify/src/netlify-functions.ts b/packages/integrations/netlify/src/netlify-functions.ts
index 94c9b6eee..7945b4687 100644
--- a/packages/integrations/netlify/src/netlify-functions.ts
+++ b/packages/integrations/netlify/src/netlify-functions.ts
@@ -120,6 +120,16 @@ export const createExports = (manifest: SSRManifest, args: Args) => {
}
}
+ // Apply cookies set via Astro.cookies.set/delete
+ if(app.setCookieHeaders) {
+ const setCookieHeaders = Array.from(app.setCookieHeaders(response));
+ fnResponse.multiValueHeaders = fnResponse.multiValueHeaders || {};
+ if(!fnResponse.multiValueHeaders['set-cookie']) {
+ fnResponse.multiValueHeaders['set-cookie'] = [];
+ }
+ fnResponse.multiValueHeaders['set-cookie'].push(...setCookieHeaders);
+ }
+
return fnResponse;
};
diff --git a/packages/integrations/node/src/server.ts b/packages/integrations/node/src/server.ts
index 12fcf0448..794580ee9 100644
--- a/packages/integrations/node/src/server.ts
+++ b/packages/integrations/node/src/server.ts
@@ -18,7 +18,7 @@ export function createExports(manifest: SSRManifest) {
if (route) {
try {
const response = await app.render(req);
- await writeWebResponse(res, response);
+ await writeWebResponse(app, res, response);
} catch (err: unknown) {
if (next) {
next(err);
@@ -39,8 +39,16 @@ export function createExports(manifest: SSRManifest) {
};
}
-async function writeWebResponse(res: ServerResponse, webResponse: Response) {
+async function writeWebResponse(app: NodeApp, res: ServerResponse, webResponse: Response) {
const { status, headers, body } = webResponse;
+
+ if(app.setCookieHeaders) {
+ const setCookieHeaders: Array<string> = Array.from(app.setCookieHeaders(webResponse));
+ if(setCookieHeaders.length) {
+ res.setHeader('Set-Cookie', setCookieHeaders);
+ }
+ }
+
res.writeHead(status, Object.fromEntries(headers.entries()));
if (body) {
for await (const chunk of body as unknown as Readable) {
diff --git a/packages/integrations/vercel/src/edge/entrypoint.ts b/packages/integrations/vercel/src/edge/entrypoint.ts
index 8063c271a..b37421744 100644
--- a/packages/integrations/vercel/src/edge/entrypoint.ts
+++ b/packages/integrations/vercel/src/edge/entrypoint.ts
@@ -15,7 +15,13 @@ export function createExports(manifest: SSRManifest) {
const handler = async (request: Request): Promise<Response> => {
if (app.match(request)) {
Reflect.set(request, clientAddressSymbol, request.headers.get('x-forwarded-for'));
- return await app.render(request);
+ const response = await app.render(request);
+ if(app.setCookieHeaders) {
+ for(const setCookieHeader of app.setCookieHeaders(response)) {
+ response.headers.append('Set-Cookie', setCookieHeader);
+ }
+ }
+ return response;
}
return new Response(null, {
diff --git a/packages/integrations/vercel/src/serverless/entrypoint.ts b/packages/integrations/vercel/src/serverless/entrypoint.ts
index 6b94f201c..e41d0a438 100644
--- a/packages/integrations/vercel/src/serverless/entrypoint.ts
+++ b/packages/integrations/vercel/src/serverless/entrypoint.ts
@@ -28,7 +28,7 @@ export const createExports = (manifest: SSRManifest) => {
return res.end('Not found');
}
- await setResponse(res, await app.render(request, routeData));
+ await setResponse(app, res, await app.render(request, routeData));
};
return { default: handler };
diff --git a/packages/integrations/vercel/src/serverless/request-transform.ts b/packages/integrations/vercel/src/serverless/request-transform.ts
index 6f3a063bd..97337751f 100644
--- a/packages/integrations/vercel/src/serverless/request-transform.ts
+++ b/packages/integrations/vercel/src/serverless/request-transform.ts
@@ -1,4 +1,5 @@
import type { IncomingMessage, ServerResponse } from 'node:http';
+import type { App } from 'astro/app';
import { Readable } from 'node:stream';
const clientAddressSymbol = Symbol.for('astro.clientAddress');
@@ -77,7 +78,7 @@ export async function getRequest(base: string, req: IncomingMessage): Promise<Re
return request;
}
-export async function setResponse(res: ServerResponse, response: Response): Promise<void> {
+export async function setResponse(app: App, res: ServerResponse, response: Response): Promise<void> {
const headers = Object.fromEntries(response.headers);
if (response.headers.has('set-cookie')) {
@@ -85,6 +86,13 @@ export async function setResponse(res: ServerResponse, response: Response): Prom
headers['set-cookie'] = response.headers.raw()['set-cookie'];
}
+ if(app.setCookieHeaders) {
+ const setCookieHeaders: Array<string> = Array.from(app.setCookieHeaders(response));
+ if(setCookieHeaders.length) {
+ res.setHeader('Set-Cookie', setCookieHeaders);
+ }
+ }
+
res.writeHead(response.status, headers);
if (response.body instanceof Readable) {