mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-15 19:24:32 +00:00
89 lines
3.1 KiB
JavaScript
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();
|