diff --git a/apps/dokploy/utils/api.ts b/apps/dokploy/utils/api.ts index 56197528b..4de5fe036 100644 --- a/apps/dokploy/utils/api.ts +++ b/apps/dokploy/utils/api.ts @@ -30,12 +30,41 @@ const getWsUrl = () => { return `${protocol}${host}/drawer-logs`; }; -const wsClient = - typeof window !== "undefined" - ? createWSClient({ - url: getWsUrl() || "", - }) - : null; +// Create WebSocket client with delayed connection +const createLazyWSClient = () => { + if (typeof window === "undefined") return null; + + let actualClient: ReturnType | null = null; + + return { + request: (op: any, callbacks: any) => { + if (!actualClient) { + const wsUrl = getWsUrl(); + if (wsUrl) { + actualClient = createWSClient({ url: wsUrl }); + } + } + return actualClient?.request(op, callbacks) || (() => {}); + }, + close: () => { + if (actualClient) { + actualClient.close(); + actualClient = null; + } + }, + getConnection: () => { + if (!actualClient) { + const wsUrl = getWsUrl(); + if (wsUrl) { + actualClient = createWSClient({ url: wsUrl }); + } + } + return actualClient!.getConnection(); + }, + }; +}; + +const wsClient = createLazyWSClient(); /** A set of type-safe react-query hooks for your tRPC API. */ export const api = createTRPCNext({