From c4adc116d687e26ab2d96f1d7824e6f047004800 Mon Sep 17 00:00:00 2001 From: Javaxman Date: Wed, 29 Jul 2026 14:06:16 +0200 Subject: [PATCH] Corregge l'accesso all'env Worker per Astro 6. Sostituisce locals.runtime.env con import da cloudflare:workers, ripristinando contatti e newsletter. Co-authored-by: Cursor --- src/lib/email.ts | 6 ++++-- src/lib/newsletter.ts | 18 ++++-------------- src/pages/api/contact.ts | 21 +++++---------------- 3 files changed, 13 insertions(+), 32 deletions(-) diff --git a/src/lib/email.ts b/src/lib/email.ts index 47c2652..b2b00cf 100644 --- a/src/lib/email.ts +++ b/src/lib/email.ts @@ -1,6 +1,7 @@ /** * Outbound email via Cloudflare Email Service (`send_email` binding). */ +import { env as workerEnv } from 'cloudflare:workers'; export type RuntimeEnv = Record; @@ -15,8 +16,9 @@ type EmailBinding = { }) => Promise<{ messageId: string }>; }; -export function getEmailBinding(runtimeEnv: RuntimeEnv): EmailBinding | null { - const binding = runtimeEnv.EMAIL; +export function getEmailBinding(runtimeEnv?: RuntimeEnv): EmailBinding | null { + const env = (runtimeEnv ?? (workerEnv as unknown as RuntimeEnv)) as RuntimeEnv; + const binding = env.EMAIL; if (binding && typeof binding === 'object' && 'send' in binding) { return binding as EmailBinding; } diff --git a/src/lib/newsletter.ts b/src/lib/newsletter.ts index 2d3294a..5304238 100644 --- a/src/lib/newsletter.ts +++ b/src/lib/newsletter.ts @@ -1,6 +1,7 @@ /** * Shared helpers for newsletter API routes (Cloudflare Worker / Astro). */ +import { env as workerEnv } from 'cloudflare:workers'; export type RuntimeEnv = Record; @@ -19,20 +20,9 @@ export type NewsletterSubscriber = { unsubscribed_at: string | null; }; -export function getRuntimeEnv(locals: unknown): RuntimeEnv { - if ( - locals && - typeof locals === 'object' && - 'runtime' in locals && - locals.runtime && - typeof locals.runtime === 'object' && - 'env' in locals.runtime && - locals.runtime.env && - typeof locals.runtime.env === 'object' - ) { - return locals.runtime.env as RuntimeEnv; - } - return {}; +/** Astro v6+: use `cloudflare:workers` env (locals.runtime.env was removed). */ +export function getRuntimeEnv(_locals?: unknown): RuntimeEnv { + return workerEnv as unknown as RuntimeEnv; } export function readEnv(name: string, runtimeEnv: RuntimeEnv): string { diff --git a/src/pages/api/contact.ts b/src/pages/api/contact.ts index 9e856a7..5bd8de2 100644 --- a/src/pages/api/contact.ts +++ b/src/pages/api/contact.ts @@ -1,24 +1,13 @@ import type { APIRoute } from 'astro'; +import { env as workerEnv } from 'cloudflare:workers'; import { getEmailBinding, sendCloudflareEmail } from '../../lib/email'; export const prerender = false; type RuntimeEnv = Record; -function getRuntimeEnv(locals: unknown): RuntimeEnv { - if ( - locals && - typeof locals === 'object' && - 'runtime' in locals && - locals.runtime && - typeof locals.runtime === 'object' && - 'env' in locals.runtime && - locals.runtime.env && - typeof locals.runtime.env === 'object' - ) { - return locals.runtime.env as RuntimeEnv; - } - return {}; +function getRuntimeEnv(): RuntimeEnv { + return workerEnv as unknown as RuntimeEnv; } function readEnv(name: string, runtimeEnv: RuntimeEnv): string { @@ -69,8 +58,8 @@ function resolveDepartmentRecipient(runtimeEnv: RuntimeEnv, defaultRecipient: st return map[normalized] || defaultRecipient; } -export const POST: APIRoute = async ({ request, locals, url }) => { - const runtimeEnv = getRuntimeEnv(locals); +export const POST: APIRoute = async ({ request, url }) => { + const runtimeEnv = getRuntimeEnv(); const mode = readEnv('CONTACT_FORM_MODE', runtimeEnv).toLowerCase() || 'dev'; const fromEmail = readEnv('CONTACT_FORM_FROM_EMAIL', runtimeEnv); const toEmail = readEnv('CONTACT_FORM_TO_EMAIL', runtimeEnv);