/** * 应用层 API 服务 * 封装应用特定的 API 调用,使用 mono 级别的服务 */ import { fetchEventSource } from '@microsoft/fetch-event-source' // 直接使用实例(最简单、最可靠) import tokenManager from '@gold/utils/token-manager' import { TikHubService } from '@gold/api/services' import { API_BASE } from '@gold/config/api' /** * TikHub API 基础路径 */ const TIKHUB_BASE = API_BASE.TIKHUB_APP || API_BASE.TIKHUB || '' /** * 应用层通用服务 */ export const CommonService = { /** * 视频转字符(音频转文字) * 直接使用 mono 级别的 TikHub 服务 */ videoToCharacters(data) { return TikHubService.videoToCharacters(data) }, /** * 调用工作流 */ callWorkflow(data) { return TikHubService.callWorkflow(data) }, /** * 流式调用工作流(SSE) */ async callWorkflowStream(options) { const { data, ctrl, onMessage, onError, onClose } = options || {} const authHeader = tokenManager.getAuthHeader() let retryCount = 0 const maxRetries = 0 return fetchEventSource(`${TIKHUB_BASE}/callWorkflow`, { method: 'post', headers: { 'Content-Type': 'application/json', ...(authHeader ? { Authorization: authHeader } : {}) }, openWhenHidden: true, body: JSON.stringify(data), onmessage: onMessage, onerror: (err) => { retryCount++ console.error('SSE错误,重试次数:', retryCount, err) if (typeof onError === 'function') { onError(err) } if (retryCount > maxRetries) { throw err } }, onclose: () => { if (typeof onClose === 'function') { onClose() } }, signal: ctrl ? ctrl.signal : undefined }) } } export default CommonService