Files
AnchorOS/scripts/fix-kiosk-func.js

89 lines
3.1 KiB
JavaScript

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();