Showing
1 changed file
with
16 additions
and
3 deletions
| @@ -36,6 +36,9 @@ export const pollVideoStatus = ( | @@ -36,6 +36,9 @@ export const pollVideoStatus = ( | ||
| 36 | onStatusUpdate: (status: VideoStatus) => void | 36 | onStatusUpdate: (status: VideoStatus) => void |
| 37 | ): Promise<VideoStatus> => { | 37 | ): Promise<VideoStatus> => { |
| 38 | return new Promise((resolve, reject) => { | 38 | return new Promise((resolve, reject) => { |
| 39 | + let processingStartTime: number | null = null; | ||
| 40 | + const PROCESSING_TIMEOUT_MS = 8 * 60 * 1000; // 8 minutes limit for processing | ||
| 41 | + | ||
| 39 | const interval = setInterval(async () => { | 42 | const interval = setInterval(async () => { |
| 40 | try { | 43 | try { |
| 41 | const res = await fetch(`${TURBO_DIFFUSION_API_URL}/status/${taskId}`); | 44 | const res = await fetch(`${TURBO_DIFFUSION_API_URL}/status/${taskId}`); |
| @@ -49,6 +52,17 @@ export const pollVideoStatus = ( | @@ -49,6 +52,17 @@ export const pollVideoStatus = ( | ||
| 49 | const data: VideoStatus = await res.json(); | 52 | const data: VideoStatus = await res.json(); |
| 50 | onStatusUpdate(data); | 53 | onStatusUpdate(data); |
| 51 | 54 | ||
| 55 | + // Track processing time | ||
| 56 | + if (data.status === 'processing') { | ||
| 57 | + if (processingStartTime === null) { | ||
| 58 | + processingStartTime = Date.now(); | ||
| 59 | + } else if (Date.now() - processingStartTime > PROCESSING_TIMEOUT_MS) { | ||
| 60 | + clearInterval(interval); | ||
| 61 | + reject(new Error("Video generation timed out (8 minutes processing limit).")); | ||
| 62 | + return; | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + | ||
| 52 | if (data.status === 'complete' || data.status === 'failed') { | 66 | if (data.status === 'complete' || data.status === 'failed') { |
| 53 | clearInterval(interval); | 67 | clearInterval(interval); |
| 54 | if (data.status === 'failed') { | 68 | if (data.status === 'failed') { |
| @@ -58,9 +72,8 @@ export const pollVideoStatus = ( | @@ -58,9 +72,8 @@ export const pollVideoStatus = ( | ||
| 58 | } | 72 | } |
| 59 | } | 73 | } |
| 60 | } catch (error) { | 74 | } catch (error) { |
| 61 | - clearInterval(interval); | ||
| 62 | - console.error('Polling error:', error); | ||
| 63 | - reject(error); | 75 | + // Don't stop polling on transient network errors |
| 76 | + console.warn('Polling transient error:', error); | ||
| 64 | } | 77 | } |
| 65 | }, 2000); // Poll every 2 seconds | 78 | }, 2000); // Poll every 2 seconds |
| 66 | }); | 79 | }); |
-
Please register or login to post a comment