@@ -1619,114 +1619,6 @@ pub async fn generate_gateway_config(
16191619 serde_json:: to_string_pretty ( & config) . map_err ( |e| e. to_string ( ) )
16201620}
16211621
1622- /// Resolve the system's default space id (the `is_default` Space).
1623- async fn get_default_space_id ( app_state : & AppState ) -> Result < String , String > {
1624- let space = app_state
1625- . space_service
1626- . get_default ( )
1627- . await
1628- . map_err ( |e : anyhow:: Error | e. to_string ( ) ) ?
1629- . ok_or ( "No default space found" ) ?;
1630- Ok ( space. id . to_string ( ) )
1631- }
1632-
1633- /// Connect an installed server to the gateway
1634- #[ tauri:: command]
1635- pub async fn connect_server (
1636- server_id : String ,
1637- space_id : Option < String > ,
1638- app_state : State < ' _ , AppState > ,
1639- gateway_state : State < ' _ , Arc < RwLock < GatewayAppState > > > ,
1640- ) -> Result < ( ) , String > {
1641- info ! ( "[Gateway] Connecting server: {}" , server_id) ;
1642-
1643- // Get space ID
1644- let space_id_str = match space_id {
1645- Some ( sid) => sid,
1646- None => get_default_space_id ( & app_state) . await ?,
1647- } ;
1648-
1649- let space_uuid = Uuid :: parse_str ( & space_id_str) . map_err ( |e| e. to_string ( ) ) ?;
1650-
1651- // Get the installed server from the database
1652- let installed = app_state
1653- . installed_server_repository
1654- . get_by_server_id ( & space_id_str, & server_id)
1655- . await
1656- . map_err ( |e| {
1657- error ! (
1658- "[Gateway] Failed to get installed server {}: {}" ,
1659- server_id, e
1660- ) ;
1661- e. to_string ( )
1662- } ) ?
1663- . ok_or_else ( || {
1664- warn ! ( "[Gateway] Server not installed: {}" , server_id) ;
1665- format ! ( "Server not installed: {}" , server_id)
1666- } ) ?;
1667-
1668- // Use cached definition (offline-first)
1669- let server_definition = installed. get_definition ( ) . ok_or_else ( || {
1670- warn ! ( "[Gateway] Server has no cached definition: {}" , server_id) ;
1671- format ! ( "Server has no cached definition: {}" , server_id)
1672- } ) ?;
1673-
1674- // Get pool service
1675- let state = gateway_state. read ( ) . await ;
1676- if !state. running {
1677- return Err ( "Gateway is not running" . to_string ( ) ) ;
1678- }
1679- let pool_service = state
1680- . pool_service
1681- . clone ( )
1682- . ok_or ( "Pool service not initialized" ) ?;
1683- drop ( state) ; // Release lock before async work
1684-
1685- // Build transport config from cached definition + input values
1686- let transport = mcpmux_gateway:: pool:: transport:: resolution:: build_transport_config (
1687- & server_definition. transport ,
1688- & installed,
1689- Some ( app_state. data_dir ( ) ) ,
1690- mcpmux_gateway:: pool:: transport:: resolution:: TransportResolutionOptions :: default ( ) ,
1691- ) ;
1692-
1693- // Connect using pool service (manual connect from API)
1694- let ctx = ConnectionContext :: new ( space_uuid, server_id. clone ( ) , transport) ;
1695- let result = pool_service. connect_server ( & ctx) . await ;
1696-
1697- match result {
1698- ConnectionResult :: Connected { reused, features } => {
1699- info ! (
1700- "[Gateway] Server {} connected (reused: {}, features: {})" ,
1701- server_id,
1702- reused,
1703- features. total_count( )
1704- ) ;
1705-
1706- Ok ( ( ) )
1707- }
1708- ConnectionResult :: Failed { error } => {
1709- error ! (
1710- "[Gateway] Failed to connect server {}: {}" ,
1711- server_id, error
1712- ) ;
1713-
1714- Err ( error)
1715- }
1716- ConnectionResult :: OAuthRequired { auth_url } => {
1717- warn ! (
1718- "[Gateway] Server {} requires OAuth authentication" ,
1719- server_id
1720- ) ;
1721-
1722- Err ( format ! (
1723- "OAuth required. Please authenticate at: {}" ,
1724- auth_url
1725- ) )
1726- }
1727- }
1728- }
1729-
17301622/// Disconnect a server from the gateway
17311623#[ tauri:: command]
17321624pub async fn disconnect_server (
0 commit comments