mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-15 14:24:27 +00:00
feat: Add kiosk setup and API testing scripts, alongside database function fixes for API key generation and short IDs.
This commit is contained in:
88
scripts/fix-kiosk-func.js
Normal file
88
scripts/fix-kiosk-func.js
Normal file
@@ -0,0 +1,88 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user