From 1745e73b525de7642e0ba94bd7a84e8688ac2d1f Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Wed, 13 Aug 2025 13:00:39 +0000 Subject: [PATCH] Resolve production errors and improve system stability and reliability Fix critical production errors, including Bad Gateway issues and TypeScript compilation failures, by implementing comprehensive route registration, correcting service configurations, and ensuring production build success. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 7c468936-2a88-4686-ac0a-84921a45222d Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/7c468936-2a88-4686-ac0a-84921a45222d/cH9Kvea --- ...-4C08-ACC9-3DB0AE4E1D7B}_1755089774422.png | Bin 0 -> 59071 bytes replit.md | 18 ++-- server/index.production.ts | 97 +++--------------- server/routes.ts | 6 +- server/storage.ts | 12 +-- 5 files changed, 34 insertions(+), 99 deletions(-) create mode 100644 attached_assets/{27B090EB-53BA-4C08-ACC9-3DB0AE4E1D7B}_1755089774422.png diff --git a/attached_assets/{27B090EB-53BA-4C08-ACC9-3DB0AE4E1D7B}_1755089774422.png b/attached_assets/{27B090EB-53BA-4C08-ACC9-3DB0AE4E1D7B}_1755089774422.png new file mode 100644 index 0000000000000000000000000000000000000000..10d69f0cbe4cf64728c67e56ba7e3813463fe596 GIT binary patch literal 59071 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

o#@twbUvgrmkBwS^OSHCgS9tm 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 L11*fkgRp-AiC { next(); }); -// Simple production routes +// Import all routes for production +import { registerRoutes } from "./routes.js"; + async function registerProductionRoutes(app: Express): Promise { - // Health check endpoint + console.log('🔧 Registering all production routes...'); + + // Register ALL API routes (same as development) + const server = await registerRoutes(app); + console.log('✅ All routes registered successfully for production'); + + // Additional health check endpoint for production monitoring app.get('/api/health', (req: Request, res: Response) => { res.status(200).json({ status: 'healthy', @@ -51,12 +59,12 @@ async function registerProductionRoutes(app: Express): Promise { }); }); - // Emergency admin reset endpoint (production only) + // Emergency admin reset endpoint (production only) app.post('/api/emergency-admin-reset', async (req: Request, res: Response) => { try { const { secret } = req.body; - // Require emergency secret (can be set via environment variable) + // Require emergency secret const emergencySecret = process.env.EMERGENCY_SECRET || 'logiflow-admin-reset-2025'; if (secret !== emergencySecret) { return res.status(403).json({ error: 'Invalid emergency secret' }); @@ -64,17 +72,12 @@ async function registerProductionRoutes(app: Express): Promise { console.log('🚨 EMERGENCY: Admin password reset requested'); - // Find existing admin + // Find and reset admin const existingAdmin = await storage.getUserByUsername('admin'); if (existingAdmin) { - // Generate new password hash - const crypto = await import('crypto'); - const scrypt = await import('util').then(util => util.promisify(crypto.scrypt)); - const salt = crypto.randomBytes(16).toString("hex"); - const buf = (await scrypt('admin', salt, 64)) as Buffer; - const newPassword = `${buf.toString("hex")}.${salt}`; + const { hashPasswordSimple } = await import('./localAuth.production.js'); + const newPassword = await hashPasswordSimple('admin'); - // Update admin password await storage.updateUser(existingAdmin.id, { password: newPassword, passwordChanged: false @@ -95,75 +98,7 @@ async function registerProductionRoutes(app: Express): Promise { } }); - // Setup authentication - setupLocalAuth(app); - - // Import and register all routes from routes.ts instead of having limited routes - const { registerRoutes } = await import('./routes.js'); - await registerRoutes(app); - - // Additional health check route for Docker compatibility - app.get('/api/groups', requireAuth, async (req: Request, res: Response) => { - try { - const groups = await storage.getGroups(); - res.json(groups); - } catch (error) { - console.error('Error fetching groups:', error); - res.status(500).json({ error: 'Failed to fetch groups' }); - } - }); - - app.get('/api/suppliers', requireAuth, async (req: Request, res: Response) => { - try { - const suppliers = await storage.getSuppliers(); - res.json(suppliers); - } catch (error) { - console.error('Error fetching suppliers:', error); - res.status(500).json({ error: 'Failed to fetch suppliers' }); - } - }); - - app.get('/api/orders', requireAuth, async (req: Request, res: Response) => { - try { - const orders = await storage.getOrders(); - res.json(orders); - } catch (error) { - console.error('Error fetching orders:', error); - res.status(500).json({ error: 'Failed to fetch orders' }); - } - }); - - // Weather API for compatibility - app.get('/api/weather', async (req: Request, res: Response) => { - try { - const weatherData = { - today: { - date: '2025-08-11', - location: 'Nancy, France', - tempMax: '30.9', - tempMin: '13.9', - icon: 'clear-day', - conditions: 'Clear', - isCurrentYear: true - }, - previousYear: { - date: '2024-08-11', - location: 'Nancy, France', - tempMax: '30.9', - tempMin: '15.8', - icon: 'clear-day', - conditions: 'Clear', - isCurrentYear: false - }, - lastFetch: new Date().toISOString() - }; - - res.json(weatherData); - } catch (error: any) { - console.error('Weather API error:', error); - res.status(500).json({ error: 'Failed to fetch weather data' }); - } - }); + // Pas besoin de setupLocalAuth ici car registerRoutes le fait déjà const server = createServer(app); return server; diff --git a/server/routes.ts b/server/routes.ts index 8a466c0..e57148a 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -259,7 +259,7 @@ export async function registerRoutes(app: Express): Promise { console.log('✅ Supplier creation successful:', { id: supplier.id, name: supplier.name }); res.json(supplier); - } catch (error) { + } catch (error: any) { console.error('❌ Failed to create supplier:', { error: (error as Error).message, stack: error.stack, @@ -442,7 +442,7 @@ export async function registerRoutes(app: Express): Promise { }); res.json(order); - } catch (error) { + } catch (error: any) { console.error("❌ Error creating order:", { error: (error as Error).message, stack: error.stack, @@ -752,7 +752,7 @@ export async function registerRoutes(app: Express): Promise { // Auto-valider le rapprochement await storage.updateDelivery(id, { reconciled: true, - validatedAt: new Date().toISOString() + validatedAt: new Date() }); console.log(`✅ Auto-reconciliation: Delivery #${id} automatically validated for supplier ${supplier.name}`); diff --git a/server/storage.ts b/server/storage.ts index 887d9ef..20c11fa 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -1687,7 +1687,7 @@ export class MemStorage implements IStorage { status: 'En attente de Commande', isPromotionalPrice: false, customerNotified: false, - notes: 'Livraison urgente demandée', + notes: 'Livraison urgente demandée' as string | null, createdAt: new Date('2025-01-15'), updatedAt: new Date('2025-01-15'), }; @@ -1709,7 +1709,7 @@ export class MemStorage implements IStorage { status: 'Commande passée', isPromotionalPrice: true, customerNotified: true, - notes: null, + notes: null as string | null, createdAt: new Date('2025-01-10'), updatedAt: new Date('2025-01-12'), }; @@ -1731,10 +1731,10 @@ export class MemStorage implements IStorage { status: 'en_cours', quantity: 24, unit: 'pièces', - notes: 'À vendre rapidement', + notes: 'À vendre rapidement' as string | null, location: 'Frigo principal', alertThreshold: 5, - validatedBy: null, + validatedBy: null as string | null, validatedAt: null, createdAt: new Date('2025-08-10'), updatedAt: new Date('2025-08-10'), @@ -1752,10 +1752,10 @@ export class MemStorage implements IStorage { status: 'alerte', quantity: 8, unit: 'unités', - notes: 'DLC proche, promotion conseillée', + notes: 'DLC proche, promotion conseillée' as string | null, location: 'Rayonnage A3', alertThreshold: 3, - validatedBy: null, + validatedBy: null as string | null, validatedAt: null, createdAt: new Date('2025-08-08'), updatedAt: new Date('2025-08-13'),