mirror of
https://github.com/neynarxyz/create-farcaster-mini-app.git
synced 2025-11-16 08:08:56 -05:00
fix: conditional imports
This commit is contained in:
parent
2edd1bd2ae
commit
d9c74f163b
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@neynar/create-farcaster-mini-app",
|
"name": "@neynar/create-farcaster-mini-app",
|
||||||
"version": "1.7.8",
|
"version": "1.7.9",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": false,
|
"private": false,
|
||||||
"access": "public",
|
"access": "public",
|
||||||
|
|||||||
@ -22,8 +22,9 @@ export default async function RootLayout({
|
|||||||
let session = null;
|
let session = null;
|
||||||
if (shouldUseSession) {
|
if (shouldUseSession) {
|
||||||
try {
|
try {
|
||||||
const { getSession } = await import('~/auth');
|
// @ts-ignore - auth module may not exist in all template variants
|
||||||
session = await getSession();
|
const authModule = eval('require("~/auth")');
|
||||||
|
session = await authModule.getSession();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn('Failed to get session:', error);
|
console.warn('Failed to get session:', error);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import dynamic from 'next/dynamic';
|
import dynamic from 'next/dynamic';
|
||||||
import type { Session } from 'next-auth';
|
|
||||||
import { SessionProvider } from 'next-auth/react';
|
|
||||||
import { MiniAppProvider } from '@neynar/react';
|
import { MiniAppProvider } from '@neynar/react';
|
||||||
import { SafeFarcasterSolanaProvider } from '~/components/providers/SafeFarcasterSolanaProvider';
|
import { SafeFarcasterSolanaProvider } from '~/components/providers/SafeFarcasterSolanaProvider';
|
||||||
import { ANALYTICS_ENABLED } from '~/lib/constants';
|
import { ANALYTICS_ENABLED } from '~/lib/constants';
|
||||||
import { AuthKitProvider } from '@farcaster/auth-kit';
|
|
||||||
|
|
||||||
const WagmiProvider = dynamic(
|
const WagmiProvider = dynamic(
|
||||||
() => import('~/components/providers/WagmiProvider'),
|
() => import('~/components/providers/WagmiProvider'),
|
||||||
@ -15,12 +12,14 @@ const WagmiProvider = dynamic(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export function Providers({
|
export function Providers({
|
||||||
session,
|
session,
|
||||||
children,
|
children,
|
||||||
shouldUseSession = false,
|
shouldUseSession = false,
|
||||||
}: {
|
}: {
|
||||||
session: Session | null;
|
session: any | null;
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
shouldUseSession?: boolean;
|
shouldUseSession?: boolean;
|
||||||
}) {
|
}) {
|
||||||
@ -29,19 +28,41 @@ export function Providers({
|
|||||||
|
|
||||||
// Only wrap with SessionProvider if next auth is used
|
// Only wrap with SessionProvider if next auth is used
|
||||||
if (shouldUseSession) {
|
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 {
|
||||||
|
// @ts-ignore - These modules may not exist in all template variants
|
||||||
|
const nextAuth = eval('require("next-auth/react")');
|
||||||
|
const authKit = eval('require("@farcaster/auth-kit")');
|
||||||
|
|
||||||
|
return ({ children }: { children: React.ReactNode }) => (
|
||||||
|
<nextAuth.SessionProvider session={session}>
|
||||||
|
<authKit.AuthKitProvider config={{}}>{children}</authKit.AuthKitProvider>
|
||||||
|
</nextAuth.SessionProvider>
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
// Fallback component when auth modules aren't available
|
||||||
|
return ({ children }: { children: React.ReactNode }) => <>{children}</>;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{ ssr: false }
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SessionProvider session={session}>
|
|
||||||
<WagmiProvider>
|
<WagmiProvider>
|
||||||
<MiniAppProvider
|
<MiniAppProvider
|
||||||
analyticsEnabled={ANALYTICS_ENABLED}
|
analyticsEnabled={ANALYTICS_ENABLED}
|
||||||
backButtonEnabled={true}
|
backButtonEnabled={true}
|
||||||
>
|
>
|
||||||
<SafeFarcasterSolanaProvider endpoint={solanaEndpoint}>
|
<SafeFarcasterSolanaProvider endpoint={solanaEndpoint}>
|
||||||
<AuthKitProvider config={{}}>{children}</AuthKitProvider>
|
<AuthWrapper>{children}</AuthWrapper>
|
||||||
</SafeFarcasterSolanaProvider>
|
</SafeFarcasterSolanaProvider>
|
||||||
</MiniAppProvider>
|
</MiniAppProvider>
|
||||||
</WagmiProvider>
|
</WagmiProvider>
|
||||||
</SessionProvider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +74,7 @@ export function Providers({
|
|||||||
backButtonEnabled={true}
|
backButtonEnabled={true}
|
||||||
>
|
>
|
||||||
<SafeFarcasterSolanaProvider endpoint={solanaEndpoint}>
|
<SafeFarcasterSolanaProvider endpoint={solanaEndpoint}>
|
||||||
<AuthKitProvider config={{}}>{children}</AuthKitProvider>
|
{children}
|
||||||
</SafeFarcasterSolanaProvider>
|
</SafeFarcasterSolanaProvider>
|
||||||
</MiniAppProvider>
|
</MiniAppProvider>
|
||||||
</WagmiProvider>
|
</WagmiProvider>
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import dynamic from 'next/dynamic';
|
||||||
import { useCallback, useState, type ComponentType } from 'react';
|
import { useCallback, useState, type ComponentType } from 'react';
|
||||||
import { useMiniApp } from '@neynar/react';
|
import { useMiniApp } from '@neynar/react';
|
||||||
import { ShareButton } from '../Share';
|
import { ShareButton } from '../Share';
|
||||||
@ -9,14 +10,21 @@ import { type Haptics } from '@farcaster/miniapp-sdk';
|
|||||||
import { APP_URL } from '~/lib/constants';
|
import { APP_URL } from '~/lib/constants';
|
||||||
|
|
||||||
// Optional import for NeynarAuthButton - may not exist in all templates
|
// Optional import for NeynarAuthButton - may not exist in all templates
|
||||||
let NeynarAuthButton: ComponentType | null = null;
|
const NeynarAuthButton = dynamic(
|
||||||
|
() => {
|
||||||
|
return Promise.resolve().then(() => {
|
||||||
try {
|
try {
|
||||||
const module = require('../NeynarAuthButton/index');
|
// @ts-ignore - NeynarAuthButton may not exist in all template variants
|
||||||
NeynarAuthButton = module.NeynarAuthButton;
|
const module = eval('require("../NeynarAuthButton/index")');
|
||||||
|
return module.default || module.NeynarAuthButton;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Component doesn't exist, that's okay
|
// Return null component when module doesn't exist
|
||||||
console.log('NeynarAuthButton not available in this template');
|
return () => null;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{ ssr: false }
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user