mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-19 06:05:25 +02:00
84 lines
1.9 KiB
TypeScript
84 lines
1.9 KiB
TypeScript
import {
|
|
createWSClient,
|
|
httpBatchLink,
|
|
httpLink,
|
|
splitLink,
|
|
wsLink,
|
|
} from "@trpc/client";
|
|
import { createTRPCNext } from "@trpc/next";
|
|
import type { inferRouterInputs, inferRouterOutputs } from "@trpc/server";
|
|
import superjson from "superjson";
|
|
import type { AppRouter } from "@/server/api/root";
|
|
|
|
const getBaseUrl = () => {
|
|
if (typeof window !== "undefined") return "";
|
|
return `http://localhost:${process.env.PORT ?? 3000}`;
|
|
};
|
|
|
|
const getWsUrl = () => {
|
|
if (typeof window === "undefined") return null;
|
|
|
|
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
|
|
const host = window.location.host;
|
|
|
|
return `${protocol}${host}/drawer-logs`;
|
|
};
|
|
|
|
let wsClientSingleton: ReturnType<typeof createWSClient> | null = null;
|
|
|
|
const getOrCreateWSClient = () => {
|
|
if (typeof window === "undefined") return null;
|
|
|
|
if (!wsClientSingleton) {
|
|
wsClientSingleton = createWSClient({
|
|
url: getWsUrl()!,
|
|
lazy: { enabled: true, closeMs: 3000 },
|
|
retryDelayMs: () => 3000,
|
|
});
|
|
}
|
|
|
|
return wsClientSingleton;
|
|
};
|
|
|
|
const wsClient = getOrCreateWSClient();
|
|
|
|
const links =
|
|
typeof window !== "undefined"
|
|
? [
|
|
splitLink({
|
|
condition: (op) => op.type === "subscription",
|
|
true: wsLink({
|
|
client: wsClient!,
|
|
transformer: superjson,
|
|
}),
|
|
false: splitLink({
|
|
condition: (op) => op.input instanceof FormData,
|
|
true: httpLink({
|
|
url: `${getBaseUrl()}/api/trpc`,
|
|
transformer: superjson,
|
|
}),
|
|
false: httpBatchLink({
|
|
url: `${getBaseUrl()}/api/trpc`,
|
|
transformer: superjson,
|
|
}),
|
|
}),
|
|
}),
|
|
]
|
|
: [
|
|
httpBatchLink({
|
|
url: `${getBaseUrl()}/api/trpc`,
|
|
transformer: superjson,
|
|
}),
|
|
];
|
|
|
|
export const api = createTRPCNext<AppRouter>({
|
|
config() {
|
|
return { links };
|
|
},
|
|
ssr: false,
|
|
transformer: superjson,
|
|
});
|
|
|
|
export type RouterInputs = inferRouterInputs<AppRouter>;
|
|
export type RouterOutputs = inferRouterOutputs<AppRouter>;
|