import { z } from 'zod' const RequiredSupabaseConfigSchema = z.object({ supabaseUrl: z.string({ error: 'SUPABASE_URL is required' }).trim().url('SUPABASE_URL must be a valid URL'), supabaseServiceRoleKey: z.string({ error: 'SUPABASE_SERVICE_ROLE_KEY is required' }).trim().min(1, 'SUPABASE_SERVICE_ROLE_KEY is required'), public: z.object({ supabaseUrl: z.string({ error: 'NUXT_PUBLIC_SUPABASE_URL is required' }).trim().url('NUXT_PUBLIC_SUPABASE_URL must be a valid URL'), supabaseAnonKey: z.string({ error: 'NUXT_PUBLIC_SUPABASE_ANON_KEY is required' }).trim().min(1, 'NUXT_PUBLIC_SUPABASE_ANON_KEY is required'), }), }) export function assertRequiredSupabaseConfig(config: unknown): void { const result = RequiredSupabaseConfigSchema.safeParse(config) if (!result.success) { const details = result.error.issues.map(issue => issue.message).join('; ') throw new Error(`Invalid Supabase runtime configuration: ${details}`) } const serverOrigin = new URL(result.data.supabaseUrl).origin const publicOrigin = new URL(result.data.public.supabaseUrl).origin if (serverOrigin !== publicOrigin) { throw new Error('Invalid Supabase runtime configuration: SUPABASE_URL and NUXT_PUBLIC_SUPABASE_URL must point to the same project') } }