require('dotenv').config({ path: '.env.local' }); const { createClient } = require('@supabase/supabase-js'); const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL; const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY; if (!supabaseUrl || !supabaseServiceKey) { console.error('Missing env vars'); process.exit(1); } const supabase = createClient(supabaseUrl, supabaseServiceKey); async function fixDb() { console.log('Applying DB fix...'); const sql = ` CREATE OR REPLACE FUNCTION generate_kiosk_api_key() RETURNS VARCHAR(64) AS $$ DECLARE chars VARCHAR(62) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; v_api_key VARCHAR(64); attempts INT := 0; max_attempts INT := 10; BEGIN LOOP v_api_key := ''; FOR i IN 1..64 LOOP v_api_key := v_api_key || substr(chars, floor(random() * 62 + 1)::INT, 1); END LOOP; IF NOT EXISTS (SELECT 1 FROM kiosks WHERE api_key = v_api_key) THEN RETURN v_api_key; END IF; attempts := attempts + 1; IF attempts >= max_attempts THEN RAISE EXCEPTION 'Failed to generate unique api_key after % attempts', max_attempts; END IF; END LOOP; END; $$ LANGUAGE plpgsql SECURITY DEFINER; `; const { error } = await supabase.rpc('exec_sql', { sql_query: sql }); // Wait, I might not have 'exec_sql' RPC function available unless I added it. // Standard Supabase doesn't have it by default. // I can try to use standard pg connection if I have the connection string. // But I only have the URL and Key. // BUT: The error happened in a function that is part of my migration. // Alternative: If I don't have direct SQL execution, I can't easily patch the DB function // without a migration tool. // However, I can try to see if I can drop/recreate via some available mechanism or // maybe the 'exec_sql' exists (some starters have it). if (error) { console.error('RPC exec_sql failed (might not exist):', error); // Fallback: If I can't execute SQL, I'm stuck unless I have a way to run migrations. // I noticed `db/migrate.sh` in package.json. Maybe I can run that? // But I don't have `db` folder locally in the listing. // I only have `supabase` folder. console.log('Trying to use direct postgres connection if connection string available...'); // I don't have the connection string in .env.example, only the URL. // Usually the URL is http... // Let's assume I CANNOT run raw SQL easily. // BUT I can try to "re-apply" a migration if I had the tool. process.exit(1); } else { console.log('Fix applied successfully!'); } } // Actually, let's check if I can use a simpler approach. // I can CREATE a new migration file with the fix and ask the user to run it? // Or I can use the `postgres` package if I can derive the connection string. // But I don't have the DB password. // The service role key allows me to use the API as superuser (sort of), but not run DDL // unless I have an RPC for it. // Let's check if there is an `exec_sql` or similar function. // I'll try to run a simple query. fixDb();