## What was done: ✅ Fixed Firebase Admin initialization to use default credentials for Firebase Functions ✅ Updated frontend to use correct Firebase Functions URL (was using Cloud Run URL) ✅ Added comprehensive debugging to authentication middleware ✅ Added debugging to file upload middleware and CORS handling ✅ Added debug buttons to frontend for troubleshooting authentication ✅ Enhanced error handling and logging throughout the stack ## Current issues: ❌ Document upload still returns 400 Bad Request despite authentication working ❌ GET requests work fine (200 OK) but POST upload requests fail ❌ Frontend authentication is working correctly (valid JWT tokens) ❌ Backend authentication middleware is working (rejects invalid tokens) ❌ CORS is configured correctly and allowing requests ## Root cause analysis: - Authentication is NOT the issue (tokens are valid, GET requests work) - The problem appears to be in the file upload handling or multer configuration - Request reaches the server but fails during upload processing - Need to identify exactly where in the upload pipeline the failure occurs ## TODO next steps: 1. 🔍 Check Firebase Functions logs after next upload attempt to see debugging output 2. 🔍 Verify if request reaches upload middleware (look for '�� Upload middleware called' logs) 3. 🔍 Check if file validation is triggered (look for '🔍 File filter called' logs) 4. 🔍 Identify specific error in upload pipeline (multer, file processing, etc.) 5. 🔍 Test with smaller file or different file type to isolate issue 6. 🔍 Check if issue is with Firebase Functions file size limits or timeout 7. 🔍 Verify multer configuration and file handling in Firebase Functions environment ## Technical details: - Frontend: https://cim-summarizer.web.app - Backend: https://us-central1-cim-summarizer.cloudfunctions.net/api - Authentication: Firebase Auth with JWT tokens (working correctly) - File upload: Multer with memory storage for immediate GCS upload - Debug buttons available in production frontend for troubleshooting
77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
const { Pool } = require('pg');
|
|
|
|
// Try different possible DATABASE_URL formats for Supabase
|
|
const possibleUrls = [
|
|
'postgresql://postgres.gzoclmbqmgmpuhufbnhy:postgres@aws-0-us-east-1.pooler.supabase.com:6543/postgres',
|
|
'postgresql://postgres.gzoclmbqmgmpuhufbnhy:postgres@db.gzoclmbqmgmpuhufbnhy.supabase.co:5432/postgres',
|
|
'postgresql://postgres:postgres@db.gzoclmbqmgmpuhufbnhy.supabase.co:5432/postgres'
|
|
];
|
|
|
|
async function testConnection(url, index) {
|
|
console.log(`\n🔍 Testing connection ${index + 1}: ${url.replace(/:[^:@]*@/, ':****@')}`);
|
|
|
|
const pool = new Pool({
|
|
connectionString: url,
|
|
max: 1,
|
|
idleTimeoutMillis: 10000,
|
|
connectionTimeoutMillis: 10000,
|
|
});
|
|
|
|
try {
|
|
const client = await pool.connect();
|
|
console.log(`✅ Connection ${index + 1} successful!`);
|
|
|
|
// Test basic query
|
|
const result = await client.query('SELECT NOW() as current_time');
|
|
console.log(`✅ Query successful: ${result.rows[0].current_time}`);
|
|
|
|
// Check if tables exist
|
|
const tablesResult = await client.query(`
|
|
SELECT table_name
|
|
FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
ORDER BY table_name
|
|
`);
|
|
|
|
console.log(`📋 Tables found: ${tablesResult.rows.length}`);
|
|
if (tablesResult.rows.length > 0) {
|
|
console.log('Tables:', tablesResult.rows.map(row => row.table_name).join(', '));
|
|
}
|
|
|
|
client.release();
|
|
await pool.end();
|
|
|
|
return { success: true, url, tables: tablesResult.rows };
|
|
|
|
} catch (error) {
|
|
console.log(`❌ Connection ${index + 1} failed: ${error.message}`);
|
|
await pool.end();
|
|
return { success: false, url, error: error.message };
|
|
}
|
|
}
|
|
|
|
async function testAllConnections() {
|
|
console.log('Testing production database connections...\n');
|
|
|
|
const results = [];
|
|
|
|
for (let i = 0; i < possibleUrls.length; i++) {
|
|
const result = await testConnection(possibleUrls[i], i);
|
|
results.push(result);
|
|
|
|
if (result.success) {
|
|
console.log(`\n🎉 Found working connection!`);
|
|
console.log(`URL: ${result.url.replace(/:[^:@]*@/, ':****@')}`);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
console.log('\n❌ All connection attempts failed');
|
|
results.forEach((result, index) => {
|
|
console.log(`Connection ${index + 1}: ${result.error}`);
|
|
});
|
|
|
|
return null;
|
|
}
|
|
|
|
testAllConnections();
|