diff --git a/.DS_Store b/.DS_Store index ab0bddbe..e99ed620 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/VibeTunnel.xcodeproj/project.xcworkspace/xcuserdata/steipete.xcuserdatad/UserInterfaceState.xcuserstate b/VibeTunnel.xcodeproj/project.xcworkspace/xcuserdata/steipete.xcuserdatad/UserInterfaceState.xcuserstate index adc56e4e..a25696ee 100644 Binary files a/VibeTunnel.xcodeproj/project.xcworkspace/xcuserdata/steipete.xcuserdatad/UserInterfaceState.xcuserstate and b/VibeTunnel.xcodeproj/project.xcworkspace/xcuserdata/steipete.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/VibeTunnel/.DS_Store b/VibeTunnel/.DS_Store index 40c6ecb8..09d4a4dc 100644 Binary files a/VibeTunnel/.DS_Store and b/VibeTunnel/.DS_Store differ diff --git a/VibeTunnel/Assets.xcassets/.DS_Store b/VibeTunnel/Assets.xcassets/.DS_Store index e4ee6d34..b498cb3b 100644 Binary files a/VibeTunnel/Assets.xcassets/.DS_Store and b/VibeTunnel/Assets.xcassets/.DS_Store differ diff --git a/VibeTunnel/Core/.DS_Store b/VibeTunnel/Core/.DS_Store new file mode 100644 index 00000000..ee37917e Binary files /dev/null and b/VibeTunnel/Core/.DS_Store differ diff --git a/VibeTunnel/Core/Services/TunnelServer.swift b/VibeTunnel/Core/Services/TunnelServer.swift index 9346b899..01d87347 100644 --- a/VibeTunnel/Core/Services/TunnelServer.swift +++ b/VibeTunnel/Core/Services/TunnelServer.swift @@ -21,7 +21,7 @@ import NIOHTTP1 final class TunnelServer: ObservableObject { private let port: Int private let logger = Logger(label: "VibeTunnel.TunnelServer") - private var app: HummingbirdApplication? + private var app: Application? private let terminalManager = TerminalManager() @Published var isRunning = false @@ -68,44 +68,41 @@ final class TunnelServer: ObservableObject { } } - private func buildApplication() async throws -> HummingbirdApplication { + private func buildApplication() async throws -> Application { // Create router - let router = Router() + var router = RouterBuilder() // Add middleware - router.add(middleware: LogRequestsMiddleware(logLevel: .info)) - router.add(middleware: CORSMiddleware()) - router.add(middleware: AuthenticationMiddleware(apiKeys: AuthenticationMiddleware.loadStoredAPIKeys())) + router.middlewares.add(LogRequestsMiddleware(logLevel: .info)) + router.middlewares.add(CORSMiddleware()) + router.middlewares.add(AuthenticationMiddleware(apiKeys: AuthenticationMiddleware.loadStoredAPIKeys())) // Configure routes - configureRoutes(router) + configureRoutes(&router) // Add WebSocket routes router.addWebSocketRoutes(terminalManager: terminalManager) // Create application configuration - var configuration = ApplicationConfiguration( + let configuration = ApplicationConfiguration( address: .hostname("127.0.0.1", port: port), serverName: "VibeTunnel" ) - // Enable WebSocket upgrade - configuration.enableWebSocketUpgrade = true - // Create and configure the application let app = Application( - router: router, + router: router.buildRouter(), configuration: configuration, logger: logger ) // Add cleanup task - app.addLifecycleTask(CleanupTask(terminalManager: terminalManager)) + app.services.add(CleanupService(terminalManager: terminalManager)) return app } - private func configureRoutes(_ router: Router) { + private func configureRoutes(_ router: inout RouterBuilder) { // Health check endpoint router.get("/health") { request, context -> HTTPResponse.Status in return .ok @@ -203,8 +200,8 @@ final class TunnelServer: ObservableObject { } } - // Lifecycle task for periodic cleanup - struct CleanupTask: LifecycleTask { + // Service for periodic cleanup + struct CleanupService: Service { let terminalManager: TerminalManager func run() async throws { diff --git a/VibeTunnel/Core/Services/WebSocketHandler.swift b/VibeTunnel/Core/Services/WebSocketHandler.swift index 8974128a..35507ce0 100644 --- a/VibeTunnel/Core/Services/WebSocketHandler.swift +++ b/VibeTunnel/Core/Services/WebSocketHandler.swift @@ -49,7 +49,7 @@ final class WebSocketHandler { } /// Handle incoming WebSocket connection - func handle(ws: HBWebSocket, context: some RequestContext) async { + func handle(ws: WebSocket, context: some RequestContext) async { let connectionId = UUID() let connection = Connection(id: connectionId, websocket: ws) @@ -172,11 +172,11 @@ final class WebSocketHandler { /// WebSocket connection wrapper class Connection { let id: UUID - let websocket: HBWebSocket + let websocket: WebSocket var sessionId: UUID? var isClosed = false - init(id: UUID, websocket: HBWebSocket) { + init(id: UUID, websocket: WebSocket) { self.id = id self.websocket = websocket } @@ -184,8 +184,8 @@ final class WebSocketHandler { } /// Extension to add WebSocket routes to the router -extension Router { - func addWebSocketRoutes(terminalManager: TerminalManager) { +extension RouterBuilder { + mutating func addWebSocketRoutes(terminalManager: TerminalManager) { let wsHandler = WebSocketHandler(terminalManager: terminalManager) // WebSocket endpoint for terminal streaming diff --git a/VibeTunnel/Presentation/.DS_Store b/VibeTunnel/Presentation/.DS_Store new file mode 100644 index 00000000..5df21517 Binary files /dev/null and b/VibeTunnel/Presentation/.DS_Store differ