From ea35d815c6c8e2896896c89811f95559bf9dcf3c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Jun 2025 22:36:44 +0200 Subject: [PATCH] Update Hummingbird implementation to v2 API - Update TunnelServer to use Hummingbird v2 Router API - Use RouterBuilder for middleware and route configuration - Update Application initialization with generic Router type - Replace LifecycleTask with Service for cleanup tasks - Update WebSocketHandler with proper v2 extension methods - Fix all compilation issues with latest Hummingbird --- .DS_Store | Bin 10244 -> 10244 bytes .../UserInterfaceState.xcuserstate | Bin 24486 -> 24483 bytes VibeTunnel/.DS_Store | Bin 6148 -> 6148 bytes VibeTunnel/Assets.xcassets/.DS_Store | Bin 6148 -> 6148 bytes VibeTunnel/Core/.DS_Store | Bin 0 -> 6148 bytes VibeTunnel/Core/Services/TunnelServer.swift | 29 ++++++++---------- .../Core/Services/WebSocketHandler.swift | 10 +++--- VibeTunnel/Presentation/.DS_Store | Bin 0 -> 6148 bytes 8 files changed, 18 insertions(+), 21 deletions(-) create mode 100644 VibeTunnel/Core/.DS_Store create mode 100644 VibeTunnel/Presentation/.DS_Store diff --git a/.DS_Store b/.DS_Store index ab0bddbe7f7effc26545899b38449a00f8b38045..e99ed62001d2d6b0240c7f58c925292f12e71b9f 100644 GIT binary patch delta 476 zcmZn(XbG6$mJU^hRb`eq)1L`G)g;F!$?g7$3A(_bI?z5f3(M+OE47KRjte1>F( z;@tccm!zEhB%l}vHu-`K!{Frn+ybCH1A}qHL7;)%!opHV!OUo~ zxS+%2#}cBGn5LDMX~C-3`K@x() delta 301 zcmZn(XbG6$UDU^hRb;$|L!L`G%?28PWAg7$3A=PmkwuK0h<5h%dIkiwA9kjzk= zo1fy6l#`zX6yv}qUyxxKoSdIq0F(!T$)Ch)CM!#cPJS<`$IM`Mbh3h!3dhdPZBLg2 z%>{C#gb>Cd2}?|#AjQkfFo9u`w9e!YQhZD`U6Z6OSUE4)JzGB6R@xfMs+G23W>~;5 m*4y7&o&ktY8nt<}?zW4st%++hxH;c{uO9H`MAZQ3CIl&e^FODusl!<|Y;zgM$k>3<8 zkP7*b66wTfg{X)x(TP|SiAWG6uuKfPDCnZBi==}W(eLV)Od*lNT(RG4iXvyS&3=E{ z<25Ab3>8a-V@Y9zE!@sMe4gX^Ji_BV!FSp4V_xEA{>Y#CD}U#o9>2$O^P~WUrdsx4w<*$v zJ#lO{N4wi%eRk}u9ST()tT6rh5rQ|=JvFUn)ts7FPt-H@T%}Z6eF7|w@;Ln>a-1UD_FATR~dMF=MUlcI=dj5-jw2&9Xd;9b-} zvM*r>v5TP$BFcO)S!zRws7QezL12p@qE;5RaF9w+=vh3!=@@2WSjs?Q`U3EUe$MOUvin#ZpALcWBV(gCf8TrZfOYy zTb+-Uv+NG5MYW{X)VkVGTWVXqSG($q`mTPdzi`9CS!5y$*~mp6icyY6bfOEr=*K9= z@DPvi7$H2tB&P5TQGCL0#Bqc__{T)L>7kbvQ+bAIyvQmFud$BJY-0!Sb0CW&3~`b# z8RarRaED*{gFkt|LzmZO+3Avvb54;Iz!yo|EN$q;epAiO*1)}-z^xp=zsP^dxoch_ zV?w{sVLhkk^@5J-CH+RP=(qZt<+08?71eQ1phQZgLh7VRg3>PC(kFv5EDvN%#$`&L p%e2f$SmtD27GziACeK_owdT6HVcJZm={E!FB=XdxQ~uu!9Rr`4ekcF{ diff --git a/VibeTunnel/.DS_Store b/VibeTunnel/.DS_Store index 40c6ecb825576f93671e030f4ffef9ac52ac6606..09d4a4dc09dbde15d32122ffbe25b1fd941c90a2 100644 GIT binary patch literal 6148 zcmeHKJx{|h5IsYN@*z>g0Am(br2d1ngoTAl6+8VBAf-)3L1N6v4`60yVS$~I|G_OfGHjxWQt z^*h5c&F#b^HhJUDysFCcE>o3f)uMMHdmZfZ1dlz5)O}xV7O~AH+bP9l*e1Vh|pfGO0k5s_Yd*nRNJl8y8qi z44QOOdS-mb&aCVWMcFc-d>u|IFetq!APTq&%$wID*Z-Z#_kTA@-b4XW;9n`Ays#El zuq0bs#}>!6)<-))W8=8QpiV(&%dvjoQoMnt4P!n(00WDOL3m*DM?lLUohb0D3VZ^` C+PD7z delta 117 zcmZoMXfc=|#>B`mu~2NHo+2a5#DLw5ER*N6C{2!J;bmr!aRahdCik*%u})kw&v3=$ zIV^^7mg?m1EWAt%0hB!ku~2NHo+2af#(>?7i&&T#c_;HQSurvC11TMm+B)qu~2NHo+2a1#(>?7j2x4BSge>Bs)3Xab8f!NP@7~!0g-1&TJ+xo6If|@#L-=6OD){g9;Az&}Z?)){aH zoPi|+@_z_W!Q8M@jK2;v@dyAM!W;$txMu?Ig? 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 0000000000000000000000000000000000000000..5df21517da35d124896aed286d04bc28b669bec6 GIT binary patch literal 6148 zcmeHKO-jR15T2(U^#aP{F|nLyw4Gv?Bwvh?CmXF{2qlz-i=6N}Xcli90e7%0ZooA(**X-CtK