mirror of
https://github.com/neynarxyz/create-farcaster-mini-app.git
synced 2025-11-15 23:58:56 -05:00
feat: update constant writes
This commit is contained in:
parent
e20a2a397d
commit
6f0300fd7c
74
bin/init.js
74
bin/init.js
@ -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');
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user