diff --git a/.env.example b/.env.example index 97c88cc..3263b51 100644 --- a/.env.example +++ b/.env.example @@ -8,5 +8,5 @@ NEXT_PUBLIC_SOLANA_WEBSOCKET_URL=wss://young-radial-orb.solana-mainnet.quiknode. NEXT_PUBLIC_USDC_MINT=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v # Get keys from https://app.pinata.cloud/developers/api-keys -NEXT_PUBLIC_PINATA_JWT= -NEXT_PUBLIC_PINATA_GATEWAY= +PINATA_JWT= +PINATA_GATEWAY= diff --git a/README.md b/README.md index f7f348c..526c803 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ This project is a Solana-based meme generator that allows users to connect their - Setup a project on then add the following to `.env.example`: ```env # Get keys from https://app.pinata.cloud/developers/api-keys - NEXT_PUBLIC_PINATA_JWT= - NEXT_PUBLIC_PINATA_GATEWAY= + PINATA_JWT= + PINATA_GATEWAY= ``` - Run the development server: diff --git a/src/app/api/flux/route.ts b/src/app/api/flux/route.ts index fc1cebf..4d802d3 100644 --- a/src/app/api/flux/route.ts +++ b/src/app/api/flux/route.ts @@ -5,6 +5,7 @@ import { fal } from "@fal-ai/client" import { FLUX_MODELS } from '../../../services/fluxService' import { initializeDataSource } from '../../../data-source' import { verifyPayment, markSignatureAsUsed } from '../../../utils/verifyPayment'; +import { uploadToPinata } from '../../../utils/uploadToPinata'; if (!process.env.FAL_AI_KEY) { throw new Error('FAL_AI_KEY is not configured in environment variables') @@ -97,7 +98,18 @@ export async function POST(req: NextRequest): Promise { ) } - return NextResponse.json({ imageUrl }) + const pinataResult = await uploadToPinata(imageUrl!); + + if (pinataResult.error) { + return NextResponse.json( + { error: 'Failed to upload image to Pinata' }, + { status: 500 } + ) + } + + const publicUrl = pinataResult.imageUrl; + + return NextResponse.json({ imageUrl: publicUrl }) } catch (error) { console.error('Flux generation error:', error) return NextResponse.json( diff --git a/src/app/page.tsx b/src/app/page.tsx index f985771..5043c33 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -9,7 +9,6 @@ import { generateWithFlux, FluxGenerationResult, FLUX_MODELS } from '../services import { processMTMPayment } from '../services/paymentService' import { connectWallet, disconnectWallet, WalletState } from '../services/walletService' import { WalletType } from '../services/types' -import { uploadToPinata } from '../utils/uploadToPinata'; const Page: React.FC = (): React.ReactElement => { const [walletState, setWalletState] = useState({ @@ -91,13 +90,7 @@ const Page: React.FC = (): React.ReactElement => { }; // Generate image with specified model and transaction reference - const fluxResult = await generateWithFlux(prompt, modelId, transactionSignature); - - if (fluxResult.error) { - return { error: fluxResult.error } - } - - return uploadToPinata(fluxResult.imageUrl!); + return generateWithFlux(prompt, modelId, transactionSignature); } catch (error) { console.error('Error in handleFluxGeneration:', error) return { error: error instanceof Error ? error.message : 'Unknown error' } diff --git a/src/utils/uploadToPinata.ts b/src/utils/uploadToPinata.ts index 5e89469..92c6a09 100644 --- a/src/utils/uploadToPinata.ts +++ b/src/utils/uploadToPinata.ts @@ -4,12 +4,12 @@ import assert from 'assert'; import { FluxGenerationResult } from '../services/fluxService'; -assert(process.env.NEXT_PUBLIC_PINATA_JWT, "PINATA_JWT is required"); -assert(process.env.NEXT_PUBLIC_PINATA_GATEWAY, "PINATA_GATEWAY is required"); +assert(process.env.PINATA_JWT, "PINATA_JWT is required"); +assert(process.env.PINATA_GATEWAY, "PINATA_GATEWAY is required"); const pinata = new PinataSDK({ - pinataJwt: process.env.NEXT_PUBLIC_PINATA_JWT, - pinataGateway: process.env.NEXT_PUBLIC_PINATA_GATEWAY, + pinataJwt: process.env.PINATA_JWT, + pinataGateway: process.env.PINATA_GATEWAY, }); export async function uploadToPinata(imageUrl: string): Promise {