// Client server-side con privilegi superuser - bypassa le API rules delle collection // (equivalente del service role Supabase, con una differenza: PocketBase non ha una // chiave statica, l'autenticazione è email+password contro la collection _superusers e // va rinnovata quando il token scade). // // SECURITY: usare solo per operazioni server-side fidate, mai esporre al client. // Carica dentro gli handler server: const { pbAdmin } = await import("@/integrations/pocketbase/client.server"); // L'import a livello di modulo è sicuro solo in altri moduli *.server.ts - le route e le // server function finiscono nel bundle client. import PocketBase from "pocketbase"; let _pb: PocketBase | undefined; export async function pbAdmin(): Promise { const POCKETBASE_URL = process.env["POCKETBASE_URL"]; const POCKETBASE_SUPERUSER_EMAIL = process.env["POCKETBASE_SUPERUSER_EMAIL"]; const POCKETBASE_SUPERUSER_PASSWORD = process.env["POCKETBASE_SUPERUSER_PASSWORD"]; if (!POCKETBASE_URL || !POCKETBASE_SUPERUSER_EMAIL || !POCKETBASE_SUPERUSER_PASSWORD) { const missing = [ ...(!POCKETBASE_URL ? ["POCKETBASE_URL"] : []), ...(!POCKETBASE_SUPERUSER_EMAIL ? ["POCKETBASE_SUPERUSER_EMAIL"] : []), ...(!POCKETBASE_SUPERUSER_PASSWORD ? ["POCKETBASE_SUPERUSER_PASSWORD"] : []), ]; const message = `Variabili d'ambiente PocketBase mancanti: ${missing.join(", ")}.`; console.error(`[PocketBase] ${message}`); throw new Error(message); } if (!_pb) _pb = new PocketBase(POCKETBASE_URL); if (!_pb.authStore.isValid) { await _pb .collection("_superusers") .authWithPassword(POCKETBASE_SUPERUSER_EMAIL, POCKETBASE_SUPERUSER_PASSWORD); } return _pb; }