import { apiClient } from './client'; import { RunTemplateResponse, TemplateGenerationResponse, RunTemplateData } from '../types/template-run'; import { storage } from '../storage'; export async function runTemplate(templateId: string, data: RunTemplateData): Promise { // 从 storage 获取用户 session 作为 identifier const sessionStr = await storage.getItem('session'); let identifier = 'anonymous'; if (sessionStr) { try { const session = JSON.parse(sessionStr); identifier = session?.user?.id || 'anonymous'; } catch (error) { console.warn('Failed to parse session:', error); } } return apiClient(`/api/templates/${templateId}/run`, { method: 'POST', body: JSON.stringify({ data, identifier, }), }); } export async function getTemplateGeneration(generationId: string): Promise { return apiClient(`/api/template-generations/${generationId}`); } export async function pollTemplateGeneration( generationId: string, onComplete: (result: any) => void, onError: (error: Error) => void, maxAttempts: number = 100, intervalMs: number = 3000 ): Promise { let attempts = 0; const poll = async () => { try { attempts++; if (attempts > maxAttempts) { throw new Error('轮询超时,请稍后重试'); } const response = await getTemplateGeneration(generationId); const generation = response.data; // 检查是否完成 if (generation.status === 'completed') { onComplete(generation); return; } // 检查是否失败 if (generation.status === 'failed') { throw new Error('任务执行失败'); } // 继续轮询 setTimeout(poll, intervalMs); } catch (error) { onError(error as Error); } }; // 开始轮询 setTimeout(poll, intervalMs); }