feat: update constant writes

This commit is contained in:
veganbeef 2025-07-01 17:27:24 -07:00
parent e20a2a397d
commit 6f0300fd7c
No known key found for this signature in database
4 changed files with 65 additions and 34 deletions

View File

@ -453,47 +453,81 @@ export async function init(projectName = null, autoAcceptDefaults = false) {
if (fs.existsSync(constantsPath)) { if (fs.existsSync(constantsPath)) {
let constantsContent = fs.readFileSync(constantsPath, 'utf8'); let constantsContent = fs.readFileSync(constantsPath, 'utf8');
// Helper function to escape single quotes in strings
const escapeString = (str) => str.replace(/'/g, "\\'");
// Helper function to safely replace constants with validation
const safeReplace = (content, pattern, replacement, constantName) => {
const newContent = content.replace(pattern, replacement);
if (newContent === content) {
console.log(`⚠️ Warning: Could not update ${constantName} in constants.ts`);
}
return newContent;
};
// Update APP_NAME // Update APP_NAME
constantsContent = constantsContent.replace( constantsContent = safeReplace(
/export const APP_NAME = ['"`][^'"`]*['"`];/, constantsContent,
`export const APP_NAME = '${answers.projectName}';` /export const APP_NAME\s*=\s*['"`][^'"`]*['"`];/,
`export const APP_NAME = '${escapeString(answers.projectName)}';`,
'APP_NAME'
); );
// Update APP_DESCRIPTION // Update APP_DESCRIPTION
constantsContent = constantsContent.replace( constantsContent = safeReplace(
/export const APP_DESCRIPTION = ['"`][^'"`]*['"`];/, constantsContent,
`export const APP_DESCRIPTION = '${answers.description}';` /export const APP_DESCRIPTION\s*=\s*['"`][^'"`]*['"`];/,
`export const APP_DESCRIPTION = '${escapeString(answers.description)}';`,
'APP_DESCRIPTION'
); );
// Update APP_PRIMARY_CATEGORY // Update APP_PRIMARY_CATEGORY
if (answers.primaryCategory) { if (answers.primaryCategory) {
constantsContent = constantsContent.replace( constantsContent = safeReplace(
/export const APP_PRIMARY_CATEGORY = ['"`][^'"`]*['"`];/, constantsContent,
`export const APP_PRIMARY_CATEGORY = '${answers.primaryCategory}';` /export const APP_PRIMARY_CATEGORY\s*=\s*['"`][^'"`]*['"`];/,
`export const APP_PRIMARY_CATEGORY = '${escapeString(answers.primaryCategory)}';`,
'APP_PRIMARY_CATEGORY'
); );
} }
// Update APP_TAGS // Update APP_TAGS
const tagsString = answers.tags.length > 0 ? `['${answers.tags.join("', '")}']` : "['neynar', 'starter-kit', 'demo']"; const tagsString = answers.tags.length > 0
constantsContent = constantsContent.replace( ? `['${answers.tags.map(tag => escapeString(tag)).join("', '")}']`
/export const APP_TAGS = \[[^\]]*\];/, : "['neynar', 'starter-kit', 'demo']";
`export const APP_TAGS = ${tagsString};` constantsContent = safeReplace(
constantsContent,
/export const APP_TAGS\s*=\s*\[[^\]]*\];/,
`export const APP_TAGS = ${tagsString};`,
'APP_TAGS'
); );
// Update APP_BUTTON_TEXT // Update APP_BUTTON_TEXT
constantsContent = constantsContent.replace( constantsContent = safeReplace(
/export const APP_BUTTON_TEXT = ['"`][^'"`]*['"`];/, constantsContent,
`export const APP_BUTTON_TEXT = '${answers.buttonText}';` /export const APP_BUTTON_TEXT\s*=\s*['"`][^'"`]*['"`];/,
`export const APP_BUTTON_TEXT = '${escapeString(answers.buttonText)}';`,
'APP_BUTTON_TEXT'
); );
// Update USE_WALLET // Update USE_WALLET
constantsContent = constantsContent.replace( constantsContent = safeReplace(
/export const USE_WALLET = (true|false);/, constantsContent,
`export const USE_WALLET = ${answers.useWallet};` /export const USE_WALLET\s*=\s*(true|false);/,
`export const USE_WALLET = ${answers.useWallet};`,
'USE_WALLET'
);
// Update ANALYTICS_ENABLED
constantsContent = safeReplace(
constantsContent,
/export const ANALYTICS_ENABLED\s*=\s*(true|false);/,
`export const ANALYTICS_ENABLED = ${answers.enableAnalytics};`,
'ANALYTICS_ENABLED'
); );
fs.writeFileSync(constantsPath, constantsContent); fs.writeFileSync(constantsPath, constantsContent);
console.log('Updated constants.ts with user configuration'); console.log('Updated constants.ts with user configuration');
} else { } else {
console.log('⚠️ constants.ts not found, skipping constants update'); console.log('⚠️ constants.ts not found, skipping constants update');
} }

View File

@ -5,6 +5,7 @@ import type { Session } from "next-auth";
import { SessionProvider } from "next-auth/react"; 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";
const WagmiProvider = dynamic( const WagmiProvider = dynamic(
() => import("~/components/providers/WagmiProvider"), () => import("~/components/providers/WagmiProvider"),
@ -18,7 +19,7 @@ export function Providers({ session, children }: { session: Session | null, chil
return ( return (
<SessionProvider session={session}> <SessionProvider session={session}>
<WagmiProvider> <WagmiProvider>
<MiniAppProvider analyticsEnabled={true} backButtonEnabled={true}> <MiniAppProvider analyticsEnabled={ANALYTICS_ENABLED} backButtonEnabled={true}>
<SafeFarcasterSolanaProvider endpoint={solanaEndpoint}> <SafeFarcasterSolanaProvider endpoint={solanaEndpoint}>
{children} {children}
</SafeFarcasterSolanaProvider> </SafeFarcasterSolanaProvider>

View File

@ -157,19 +157,6 @@ export function WalletTab() {
} = useSwitchChain(); } = useSwitchChain();
// --- Effects --- // --- Effects ---
/**
* Debug logging for wallet auto-connection and state changes.
* Logs context, connection status, address, and available connectors.
*/
useEffect(() => {
console.log("WalletTab Debug Info:");
console.log("- context:", context);
console.log("- isConnected:", isConnected);
console.log("- address:", address);
console.log("- connectors:", connectors);
console.log("- context?.user:", context?.user);
}, [context, isConnected, address, connectors]);
/** /**
* Auto-connect when Farcaster context is available. * Auto-connect when Farcaster context is available.
* *

View File

@ -90,3 +90,12 @@ export const APP_WEBHOOK_URL = process.env.NEYNAR_API_KEY && process.env.NEYNAR_
* Useful for mini apps that don't require wallet integration. * Useful for mini apps that don't require wallet integration.
*/ */
export const USE_WALLET = true; export const USE_WALLET = true;
/**
* Flag to enable/disable analytics tracking.
*
* When true, usage analytics are collected and sent to Neynar.
* When false, analytics collection is disabled.
* Useful for privacy-conscious users or development environments.
*/
export const ANALYTICS_ENABLED = true;