import 'dart:io'; import 'package:shelf/shelf.dart'; import 'package:shelf/shelf_io.dart'; import 'package:shelf_router/shelf_router.dart'; import 'package:waylume_server/services/supabase_heartbeat.dart'; import 'package:waylume_server/services/server_service.dart'; import 'package:waylume_server/services/wireguard_service.dart'; import 'package:waylume_server/core/utils.dart'; import 'package:waylume_server/web/peer_routes.dart'; import 'package:waylume_server/config/supabase_config.dart'; Middleware requestLogger() { return (Handler innerHandler) { return (Request request) async { final clientIP = request.headers['x-forwarded-for'] ?? request.headers['x-real-ip'] ?? 'unknown'; final userAgent = request.headers['user-agent'] ?? 'unknown'; final method = request.method; final path = request.requestedUri.path; final timestamp = DateTime.now().toIso8601String(); print('[$timestamp] $method $path - IP: $clientIP - User-Agent: $userAgent'); return await innerHandler(request); }; }; } List routers = [ PeerRoutes().router, ]; void main() async { if (kIsRunningInDocker) { print('Running in Docker environment.'); } else { print('Not running in Docker environment.'); } if (!await isWireguardInstalled()) { print('WireGuard is not installed. Please install WireGuard to run this server.'); exit(1); } else { print('WireGuard is installed.'); } await WireGuardService.initializeServer(); await ServerService.registerServer(); initHeartbeat(); if (!Platform.isMacOS) { // await ServerService.isolatePeers(); } Router app = Router(); app.get('/', (request) { return Response.ok('Welcome to Waylume Server!'); }); for (var router in routers) { app.mount('/api/', router); } final handler = Pipeline() .addMiddleware(requestLogger()) .addHandler(app); var server = await serve(handler, '0.0.0.0', 3000); print('Server running on http://${server.address.host}:${server.port}'); }