UNPKG

@wonderwhy-er/desktop-commander

Version:

MCP server for terminal operations and file editing

65 lines (51 loc) 2.04 kB
#!/usr/bin/env node /** * Blocking script to update device status to offline * Runs synchronously during shutdown to ensure DB update completes * * Usage: node blocking-offline-update.js <deviceId> <supabaseUrl> <supabaseKey> <accessToken> <refreshToken> */ import { createClient } from '@supabase/supabase-js'; // Parse command line arguments const [deviceId, supabaseUrl, supabaseKey, accessToken, refreshToken] = process.argv.slice(2); if (!deviceId || !supabaseUrl || !supabaseKey || !accessToken || !refreshToken) { console.error('❌ Missing required arguments'); console.error('Usage: node blocking-offline-update.js <deviceId> <supabaseUrl> <supabaseKey> <accessToken> <refreshToken>'); process.exit(1); } // Set timeout for entire operation const TIMEOUT_MS = 3000; const timeoutHandle = setTimeout(() => { console.error('⏱️ Timeout: Update took too long'); process.exit(2); // Exit code 2 for timeout }, TIMEOUT_MS); try { // Create Supabase client const client = createClient(supabaseUrl, supabaseKey); // Set session using access token and refresh token const { error: authError } = await client.auth.setSession({ access_token: accessToken, refresh_token: refreshToken }); if (authError) { console.error('❌ Auth error:', authError.message); clearTimeout(timeoutHandle); process.exit(3); // Exit code 3 for auth error } // Update device status to offline const { error } = await client .from('mcp_devices') .update({ status: 'offline' }) .eq('id', deviceId); clearTimeout(timeoutHandle); if (error) { console.error('❌ DB update error:', error.message); process.exit(4); // Exit code 4 for DB error } console.log('✓ Device marked as offline'); process.exit(0); // Success } catch (error) { clearTimeout(timeoutHandle); console.error('❌ Unexpected error:', error.message); process.exit(5); // Exit code 5 for unexpected error }