'use client';
import dynamic from 'next/dynamic';
import { MiniAppProvider } from '@neynar/react';
import { SafeFarcasterSolanaProvider } from '~/components/providers/SafeFarcasterSolanaProvider';
import { ANALYTICS_ENABLED } from '~/lib/constants';
const WagmiProvider = dynamic(
() => import('~/components/providers/WagmiProvider'),
{
ssr: false,
}
);
export function Providers({
session,
children,
shouldUseSession = false,
}: {
session: unknown | null;
children: React.ReactNode;
shouldUseSession?: boolean;
}) {
const solanaEndpoint =
process.env.SOLANA_RPC_ENDPOINT || 'https://solana-rpc.publicnode.com';
// Only wrap with SessionProvider if next auth is used
if (shouldUseSession) {
// Dynamic import for auth components - will work if modules exist, fallback if not
const AuthWrapper = dynamic(
() => {
return Promise.resolve().then(() => {
// Use eval to avoid build-time module resolution
try {
const nextAuth = eval('require("next-auth/react")');
const authKit = eval('require("@farcaster/auth-kit")');
const AuthWrapper = ({
children,
}: {
children: React.ReactNode;
}) => (
{children}
);
AuthWrapper.displayName = 'AuthWrapper';
return AuthWrapper;
} catch (_error) {
// Fallback component when auth modules aren't available
const FallbackWrapper = ({
children,
}: {
children: React.ReactNode;
}) => <>{children}>;
FallbackWrapper.displayName = 'FallbackWrapper';
return FallbackWrapper;
}
});
},
{ ssr: false }
);
return (
{children}
);
}
// Return without SessionProvider if no session
return (
{children}
);
}