"use client";
import * as Sentry from "@sentry/nextjs";
import { ReactNode, useEffect } from "react";
import { ConvexReactClient } from "convex/react";
import { ConvexBetterAuthProvider } from "@convex-dev/better-auth/react";
import { AuthUIProvider } from "@daveyplate/better-auth-ui";
import { ThemeProvider } from "next-themes";
import { NextIntlClientProvider } from "next-intl";
import type { AbstractIntlMessages } from "next-intl";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { GooeyToaster } from "goey-toast";
import "goey-toast/styles.css";
import { authClient } from "@/lib/auth-client";
const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!);
function SentryAuthUserSync() {
const { data: session } = authClient.useSession();
useEffect(() => {
if (session?.user) {
Sentry.setUser({
id: session.user.id,
email: session.user.email ?? undefined,
});
} else {
Sentry.setUser(null);
}
}, [session?.user]);
return null;
}
type RootProvidersProps = {
children: ReactNode;
locale?: string;
messages?: AbstractIntlMessages;
timeZone?: string;
};
type AppProvidersProps = {
children: ReactNode;
initialToken?: string | null;
};
function AuthUiShell({ children }: { children: ReactNode }) {
const router = useRouter();
return (
router.refresh()}
Link={Link}
>
{children}
);
}
export function RootProviders({
children,
locale,
messages,
timeZone,
}: RootProvidersProps) {
return (
{children}
);
}
export function AppProviders({ children, initialToken }: AppProvidersProps) {
return (
{children}
);
}
export function AuthViewProviders({ children }: { children: ReactNode }) {
return {children};
}