UNPKG

@naveenm0307/api-logger-middleware

Version:

Middleware to log API calls and send them to a central server

80 lines (64 loc) • 2.8 kB
const { createClient } = require("@supabase/supabase-js"); // Initialize Supabase client // const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_KEY); const supabaseUrl = 'https://zliaheybskltrdzbecad.supabase.co'; const supabaseKey='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InpsaWFoZXlic2tsdHJkemJlY2FkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDIwMzE1NzksImV4cCI6MjA1NzYwNzU3OX0.1EZLzIU-mLmbcGBeE9sX1BA0Pc_3Crv7qcRbhmWu4k8'; const supabase = createClient(supabaseUrl, supabaseKey); module.exports = function logMiddleware(projectId) { if (!projectId) throw new Error("Project ID is required"); return async function (req, res, next) { const startTime = Date.now(); // Capture original res.end and res.json const originalEnd = res.end; const originalJson = res.json; // Store response data let responseBody; // Override res.json to capture response data res.json = function(data) { responseBody = data; return originalJson.call(this, data); }; res.end = async function (...args) { const duration = Date.now() - startTime; // Prepare request data const requestData = { query: req.query || {}, params: req.params || {}, body: req.method === 'POST' ? req.body : {}, }; // Prepare log entry const logEntry = { project_id: projectId, route: req.url, method: req.method, status: res.statusCode, duration_ms: duration, request_data: requestData, response_data: responseBody || args[0]?.toString(), // Convert Buffer to string if needed headers: req.headers, created_at: new Date().toISOString(), }; try { // Insert log entry into Supabase const { error } = await supabase.from("logs").insert([logEntry]); if (error) { console.error("Error inserting log into Supabase:", error.message); } // Console log for development console.log('\nšŸ” API Request Log:'); console.log('šŸ“ Route:', req.url); console.log('šŸ“ Method:', req.method); console.log('ā±ļø Duration:', duration + 'ms'); console.log('šŸ“Š Status:', res.statusCode); console.log('šŸ“„ Request Data:', JSON.stringify(requestData, null, 2)); console.log('šŸ“¤ Response Data:', JSON.stringify(responseBody || args[0]?.toString(), null, 2)); console.log('⌚ Timestamp:', new Date().toISOString()); console.log('-------------------\n'); } catch (err) { console.error("Database Error:", err.message); } originalEnd.apply(res, args); }; next(); }; };