diff --git a/server/hybridServer.ts b/server/hybridServer.ts index adf9ce25..c0d342cf 100644 --- a/server/hybridServer.ts +++ b/server/hybridServer.ts @@ -33,24 +33,24 @@ export async function createHybridClientServer() { // Register message handlers client.registerHandler("remoteExitNode/peers/add", async (message) => { - const { pubKey, allowedIps } = message.data; + const { publicKey, allowedIps } = message.data; // TODO: we are getting the exit node twice here // NOTE: there should only be one gerbil registered so... const [exitNode] = await db.select().from(exitNodes).limit(1); await addPeer(exitNode.exitNodeId, { - publicKey: pubKey, + publicKey: publicKey, allowedIps: allowedIps || [] }); }); client.registerHandler("remoteExitNode/peers/remove", async (message) => { - const { pubKey } = message.data; + const { publicKey } = message.data; // TODO: we are getting the exit node twice here // NOTE: there should only be one gerbil registered so... const [exitNode] = await db.select().from(exitNodes).limit(1); - await deletePeer(exitNode.exitNodeId, pubKey); + await deletePeer(exitNode.exitNodeId, publicKey); }); // /update-proxy-mapping @@ -65,21 +65,18 @@ export async function createHybridClientServer() { const response = await axios.post(`${exitNode.endpoint}/update-proxy-mapping`, message.data); logger.info(`Successfully updated proxy mapping: ${response.status}`); } catch (error) { - // Extract useful information from axios error without circular references - if (error && typeof error === 'object' && 'response' in error) { - const axiosError = error as any; - logger.error("Failed to update proxy mapping:", { - status: axiosError.response?.status, - statusText: axiosError.response?.statusText, - data: axiosError.response?.data, - message: axiosError.message, - url: axiosError.config?.url + // pull data out of the axios error to log + if (axios.isAxiosError(error)) { + logger.error("Error updating proxy mapping:", { + message: error.message, + code: error.code, + status: error.response?.status, + statusText: error.response?.statusText, + url: error.config?.url, + method: error.config?.method }); } else { - logger.error("Failed to update proxy mapping:", { - message: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined - }); + logger.error("Error updating proxy mapping:", error); } } }); @@ -96,21 +93,18 @@ export async function createHybridClientServer() { const response = await axios.post(`${exitNode.endpoint}/update-destinations`, message.data); logger.info(`Successfully updated destinations: ${response.status}`); } catch (error) { - // Extract useful information from axios error without circular references - if (error && typeof error === 'object' && 'response' in error) { - const axiosError = error as any; - logger.error("Failed to update destinations:", { - status: axiosError.response?.status, - statusText: axiosError.response?.statusText, - data: axiosError.response?.data, - message: axiosError.message, - url: axiosError.config?.url + // pull data out of the axios error to log + if (axios.isAxiosError(error)) { + logger.error("Error updating destinations:", { + message: error.message, + code: error.code, + status: error.response?.status, + statusText: error.response?.statusText, + url: error.config?.url, + method: error.config?.method }); } else { - logger.error("Failed to update proxy mapping:", { - message: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined - }); + logger.error("Error updating destinations:", error); } } }); diff --git a/server/lib/remoteTraefikConfig.ts b/server/lib/remoteTraefikConfig.ts index 36bdad24..88ea011a 100644 --- a/server/lib/remoteTraefikConfig.ts +++ b/server/lib/remoteTraefikConfig.ts @@ -87,8 +87,7 @@ export class TraefikConfigManager { public async HandleTraefikConfig(): Promise { try { // Get all active domains for this exit node via HTTP call - const getTraefikConfig = - await this.getTraefikConfig(); + const getTraefikConfig = await this.getTraefikConfig(); if (!getTraefikConfig) { logger.error( @@ -138,12 +137,32 @@ export class TraefikConfigManager { try { const [exitNode] = await db.select().from(exitNodes).limit(1); if (exitNode) { + try { + await axios.post( + `${exitNode.reachableAt}/update-local-snis`, + { fullDomains: Array.from(domains) }, + { headers: { "Content-Type": "application/json" } } + ); + } catch (error) { + // pull data out of the axios error to log + if (axios.isAxiosError(error)) { + logger.error("Error updating local SNI:", { + message: error.message, + code: error.code, + status: error.response?.status, + statusText: error.response?.statusText, + url: error.config?.url, + method: error.config?.method + }); + } else { + logger.error( + "Error updating local SNI:", + error + ); + } + } + } else { logger.error("No exit node found"); - await axios.post( - `${exitNode.reachableAt}/update-local-snis`, - { fullDomains: Array.from(domains) }, - { headers: { "Content-Type": "application/json" } } - ); } } catch (err) { logger.error("Failed to post domains to SNI proxy:", err); @@ -199,22 +218,19 @@ export class TraefikConfigManager { ); return { domains, traefikConfig }; - } catch (err) { - // Extract useful information from axios error without circular references - if (err && typeof err === 'object' && 'response' in err) { - const axiosError = err as any; - logger.error("Failed to fetch traefik config:", { - status: axiosError.response?.status, - statusText: axiosError.response?.statusText, - data: axiosError.response?.data, - message: axiosError.message, - url: axiosError.config?.url + } catch (error) { + // pull data out of the axios error to log + if (axios.isAxiosError(error)) { + logger.error("Error fetching traefik config:", { + message: error.message, + code: error.code, + status: error.response?.status, + statusText: error.response?.statusText, + url: error.config?.url, + method: error.config?.method }); } else { - logger.error("Failed to fetch traefik config:", { - message: err instanceof Error ? err.message : String(err), - stack: err instanceof Error ? err.stack : undefined - }); + logger.error("Error fetching traefik config:", error); } return null; } @@ -303,23 +319,18 @@ export class TraefikConfigManager { return response.data.data; } catch (error) { - // Extract useful information from axios error without circular references - if (error && typeof error === 'object' && 'response' in error) { - const axiosError = error as any; - logger.error("Error fetching certificates for domains:", { - status: axiosError.response?.status, - statusText: axiosError.response?.statusText, - data: axiosError.response?.data, - message: axiosError.message, - url: axiosError.config?.url, - domains: domainArray + // pull data out of the axios error to log + if (axios.isAxiosError(error)) { + logger.error("Error getting certificates:", { + message: error.message, + code: error.code, + status: error.response?.status, + statusText: error.response?.statusText, + url: error.config?.url, + method: error.config?.method }); } else { - logger.error("Error fetching certificates for domains:", { - message: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined, - domains: domainArray - }); + logger.error("Error getting certificates:", error); } return []; }