From 01231de8f4b105a1d748839b80d38e9a0548fc7c Mon Sep 17 00:00:00 2001 From: lucas-neynar Date: Fri, 21 Mar 2025 13:20:56 -0700 Subject: [PATCH] fix: frame manifest --- package.json | 2 +- scripts/deploy.js | 95 +++++++++++++++++++++++++++-------------------- src/app/page.tsx | 4 +- src/lib/utils.ts | 4 +- 4 files changed, 60 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 0736bbe..5df3eda 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "create-neynar-farcaster-frame", - "version": "1.1.5", + "version": "1.1.6", "type": "module", "files": [ "bin/index.js" diff --git a/scripts/deploy.js b/scripts/deploy.js index 387ea2d..edc955d 100755 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -441,69 +441,84 @@ async function deployToVercel(useGitHub = false) { console.log('\n🔍 Verifying deployment domain...'); const projectOutput = execSync('vercel project ls', { cwd: projectRoot, - encoding: 'utf8' + encoding: 'utf8', + stdio: ['inherit', 'pipe', 'inherit'] // Capture stdout but show stderr }); const projectLines = projectOutput.split('\n'); - const currentProject = projectLines.find(line => line.includes(projectName)); - console.log('currentProject'); - console.log(currentProject); + console.log('Project lines:', projectLines); + + // Find the line containing our project name + const currentProject = projectLines.find(line => + line.includes(projectName) && line.includes('https://') + ); + + console.log('Current project line:', currentProject); + if (currentProject) { - const actualDomain = currentProject.split(/\s+/)[1]?.replace('https://', ''); - if (actualDomain && actualDomain !== domain) { - console.log(`⚠️ Actual domain (${actualDomain}) differs from assumed domain (${domain})`); - console.log('🔄 Updating environment variables with correct domain...'); - - // Update domain-dependent environment variables - const webhookUrl = process.env.NEYNAR_API_KEY && process.env.NEYNAR_CLIENT_ID - ? `https://api.neynar.com/f/app/${process.env.NEYNAR_CLIENT_ID}/event` - : `https://${actualDomain}/api/webhook`; + // Extract the domain from the line + const domainMatch = currentProject.match(/https:\/\/([^\s]+)/); + if (domainMatch) { + const actualDomain = domainMatch[1]; + if (actualDomain !== domain) { + console.log(`⚠️ Actual domain (${actualDomain}) differs from assumed domain (${domain})`); + console.log('🔄 Updating environment variables with correct domain...'); + + // Update domain-dependent environment variables + const webhookUrl = process.env.NEYNAR_API_KEY && process.env.NEYNAR_CLIENT_ID + ? `https://api.neynar.com/f/app/${process.env.NEYNAR_CLIENT_ID}/event` + : `https://${actualDomain}/api/webhook`; - if (frameMetadata) { - frameMetadata = await generateFarcasterMetadata(actualDomain, await validateSeedPhrase(process.env.SEED_PHRASE), process.env.SEED_PHRASE, webhookUrl); - // Update FRAME_METADATA env var + if (frameMetadata) { + frameMetadata = await generateFarcasterMetadata(actualDomain, await validateSeedPhrase(process.env.SEED_PHRASE), process.env.SEED_PHRASE, webhookUrl); + // Update FRAME_METADATA env var + try { + execSync(`vercel env rm FRAME_METADATA production -y`, { + cwd: projectRoot, + stdio: 'ignore', + env: process.env + }); + execSync(`printf "%s" "${frameMetadata}" | vercel env add FRAME_METADATA production`, { + cwd: projectRoot, + stdio: 'inherit', + env: process.env + }); + } catch (error) { + console.warn('⚠️ Warning: Failed to update FRAME_METADATA with correct domain'); + } + } + + // Update NEXTAUTH_URL try { - execSync(`vercel env rm FRAME_METADATA production -y`, { + execSync(`vercel env rm NEXTAUTH_URL production -y`, { cwd: projectRoot, stdio: 'ignore', env: process.env }); - execSync(`printf "%s" "${frameMetadata}" | vercel env add FRAME_METADATA production`, { + execSync(`printf "%s" "https://${actualDomain}" | vercel env add NEXTAUTH_URL production`, { cwd: projectRoot, stdio: 'inherit', env: process.env }); } catch (error) { - console.warn('⚠️ Warning: Failed to update FRAME_METADATA with correct domain'); + console.warn('⚠️ Warning: Failed to update NEXTAUTH_URL with correct domain'); } - } - // Update NEXTAUTH_URL - try { - execSync(`vercel env rm NEXTAUTH_URL production -y`, { - cwd: projectRoot, - stdio: 'ignore', - env: process.env - }); - execSync(`printf "%s" "https://${actualDomain}" | vercel env add NEXTAUTH_URL production`, { + // Redeploy with updated environment variables + console.log('\n📦 Redeploying with correct domain...'); + execSync('vercel deploy --prod', { cwd: projectRoot, stdio: 'inherit', env: process.env }); - } catch (error) { - console.warn('⚠️ Warning: Failed to update NEXTAUTH_URL with correct domain'); + + domain = actualDomain; } - - // Redeploy with updated environment variables - console.log('\n📦 Redeploying with correct domain...'); - execSync('vercel deploy --prod', { - cwd: projectRoot, - stdio: 'inherit', - env: process.env - }); - - domain = actualDomain; + } else { + console.warn('⚠️ Could not extract domain from project line'); } + } else { + console.warn('⚠️ Could not find project in Vercel project list'); } diff --git a/src/app/page.tsx b/src/app/page.tsx index e9794cf..b8c5756 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -5,8 +5,8 @@ const appUrl = process.env.NEXT_PUBLIC_URL; // frame preview metadata const appName = process.env.NEXT_PUBLIC_FRAME_NAME; -const splashImageUrl = process.env.NEXT_PUBLIC_FRAME_SPLASH_IMAGE_URL || `${appUrl}/splash.png`; -const iconUrl = process.env.NEXT_PUBLIC_FRAME_ICON_IMAGE_URL || `${appUrl}/icon.png`; +const splashImageUrl = `${appUrl}/splash.png`; +const iconUrl = `${appUrl}/icon.png`; const framePreviewMetadata = { version: "next", diff --git a/src/lib/utils.ts b/src/lib/utils.ts index a2436f3..32b437f 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -104,11 +104,11 @@ export async function getFarcasterMetadata(): Promise { frame: { version: "1", name: process.env.NEXT_PUBLIC_FRAME_NAME || "Frames v2 Demo", - iconUrl: process.env.NEXT_PUBLIC_FRAME_ICON_IMAGE_URL || `${appUrl}/icon.png`, + iconUrl: `${appUrl}/icon.png`, homeUrl: appUrl, imageUrl: `${appUrl}/opengraph-image`, buttonTitle: process.env.NEXT_PUBLIC_FRAME_BUTTON_TEXT || "Launch Frame", - splashImageUrl: process.env.NEXT_PUBLIC_FRAME_SPLASH_IMAGE_URL || `${appUrl}/splash.png`, + splashImageUrl: `${appUrl}/splash.png`, splashBackgroundColor: "#f7f7f7", webhookUrl, },