'use client'; import * as fal from '@fal-ai/serverless-client'; import { useState } from 'react'; fal.config({ proxyUrl: '/api/fal/proxy', }); type ErrorProps = { error: any; }; function Error(props: ErrorProps) { if (!props.error) { return null; } return (
Error {props.error.message}
); } export default function Home() { // Input state const [endpointId, setEndpointId] = useState(''); const [input, setInput] = useState('{}'); // Result state const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [result, setResult] = useState(null); const [logs, setLogs] = useState([]); const [elapsedTime, setElapsedTime] = useState(0); const reset = () => { setLoading(false); setError(null); setResult(null); setLogs([]); setElapsedTime(0); }; const run = async () => { reset(); setLoading(true); const start = Date.now(); try { const result: any = await fal.subscribe(endpointId, { input: JSON.parse(input), logs: true, mode: 'streaming', // pollInterval: 1000, onQueueUpdate(update) { console.log('queue update'); console.log(update); setElapsedTime(Date.now() - start); if ( update.status === 'IN_PROGRESS' || update.status === 'COMPLETED' ) { if (update.logs && update.logs.length > logs.length) { setLogs((update.logs || []).map((log) => log.message)); } } }, }); setResult(result); } catch (error: any) { setError(error); } finally { setLoading(false); setElapsedTime(Date.now() - start); } }; return (

fal queue

setEndpointId(e.target.value)} />

JSON Result

{`Elapsed Time (seconds): ${(elapsedTime / 1000).toFixed(2)}`}

              {result
                ? JSON.stringify(result, null, 2)
                : '// result pending...'}
            

Logs

              {logs.join('\n')}
            
); }