///
import styles from "./globals.css?url";
import { LoaderFunctionArgs, type LinksFunction } from "react-router";
import {
Links,
Meta,
Outlet,
Scripts,
ScrollRestoration,
useLoaderData,
} from "react-router";
import { getUser, isAuthEnabled } from "~/lib/auth";
export const links: LinksFunction = () => [{ rel: "stylesheet", href: styles }];
/**
* Generate GitHub information based on the version format
* @param version - Version string (semver or git SHA)
* @returns Object with GitHub URL and display version
*/
function getVersionMeta(version: string | null | undefined): {
url: string | null;
name: string | null;
} {
if (!version) return { url: null, name: null };
// Check if it's a semver (e.g., 1.2.3) or a git SHA
const isSemver = /^\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(version);
if (isSemver) {
// Link to release page for semver
return {
url: `https://github.com/benvinegar/counterscale/releases/tag/v${version}`,
name: version,
};
} else {
// Link to commit for git SHA - show only first 7 characters
return {
url: `https://github.com/benvinegar/counterscale/commit/${version}`,
name: version.slice(0, 7),
};
}
}
export const loader = async ({ context, request }: LoaderFunctionArgs) => {
// specified during deploy via wrangler --var VERSION:value
const version = context.cloudflare?.env?.VERSION;
const user = await getUser(request, context.cloudflare.env);
return {
version: {
...getVersionMeta(version),
},
origin: new URL(request.url).origin,
url: request.url,
user,
isAuthEnabled: isAuthEnabled(context.cloudflare.env),
};
};
export const Layout = ({ children = [] }: { children: React.ReactNode }) => {
const data = useLoaderData() ?? {
version: {
url: "https://example.com/",
name: "0.0.1",
},
origin: "counterscale.dev",
url: "https://counterscale.dev/",
};
return (
{children}
);
};
export default function App() {
const data = useLoaderData();
// Check if current domain is a subdomain of counterscale.dev
const currentOrigin = new URL(data.url).hostname;
const isCounterscaleSubdomain = currentOrigin.endsWith(".counterscale.dev");
const homeUrl = isCounterscaleSubdomain ? "https://counterscale.dev" : "/";
return (