feat(api): implement lazy WebSocket client for improved connection management

- Introduced a `createLazyWSClient` function to manage WebSocket connections more efficiently by delaying the creation of the client until it's needed.
- Updated the `wsClient` initialization to use the new lazy client, enhancing performance and resource management in the application.
This commit is contained in:
Mauricio Siu
2025-07-05 17:06:39 -06:00
parent cd4533df9e
commit 75b2c34a13

View File

@@ -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<typeof createWSClient> | 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<AppRouter>({