114 lines
2.9 KiB
JavaScript
114 lines
2.9 KiB
JavaScript
|
|
/**
|
|||
|
|
* 公共 API 服务
|
|||
|
|
* 封装可在 monorepo 各个应用中复用的 API 调用
|
|||
|
|
*
|
|||
|
|
* 使用方式:
|
|||
|
|
* import { createApiService } from '@gold/config/api/services'
|
|||
|
|
*
|
|||
|
|
* const apiService = createApiService({
|
|||
|
|
* http: axiosInstance,
|
|||
|
|
* getAuthHeader: () => 'Bearer token',
|
|||
|
|
* baseUrl: API_BASE.TIKHUB_APP
|
|||
|
|
* })
|
|||
|
|
*
|
|||
|
|
* await apiService.videoToCharacters({ fileLinkList: [...] })
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
import { API_BASE } from '@gold/config/api'
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 创建 API 服务实例
|
|||
|
|
* @param {Object} options - 配置选项
|
|||
|
|
* @param {Object} options.http - HTTP 客户端实例(如 axios)
|
|||
|
|
* @param {Function} options.getAuthHeader - 获取 Authorization header 的函数
|
|||
|
|
* @param {string} options.baseUrl - API 基础 URL(可选,默认使用 TIKHUB_APP)
|
|||
|
|
* @returns {Object} API 服务对象
|
|||
|
|
*/
|
|||
|
|
export function createApiService(options = {}) {
|
|||
|
|
const { http, getAuthHeader, baseUrl } = options
|
|||
|
|
|
|||
|
|
if (!http) {
|
|||
|
|
throw new Error('createApiService: http 实例是必需的')
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 确定 API 基础路径
|
|||
|
|
// 如果没有提供 baseUrl,尝试使用 TIKHUB_APP 或 TIKHUB
|
|||
|
|
const apiBaseUrl = baseUrl || API_BASE.TIKHUB_APP || API_BASE.TIKHUB || ''
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 视频转字符(音频转文字)
|
|||
|
|
* @param {Object} data - 请求数据
|
|||
|
|
* @param {string[]} data.fileLinkList - 音频文件链接列表
|
|||
|
|
* @returns {Promise<Object>} 响应数据
|
|||
|
|
*/
|
|||
|
|
async function videoToCharacters(data) {
|
|||
|
|
const url = `${apiBaseUrl}/videoToCharacters2`
|
|||
|
|
|
|||
|
|
const headers = {
|
|||
|
|
'Content-Type': 'application/json',
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 添加 Authorization header(如果提供了 getAuthHeader 函数)
|
|||
|
|
if (getAuthHeader) {
|
|||
|
|
const authHeader = getAuthHeader()
|
|||
|
|
if (authHeader) {
|
|||
|
|
headers.Authorization = authHeader
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取 tenant-id(从环境变量或默认值)
|
|||
|
|
const tenantId =
|
|||
|
|
(typeof import.meta !== 'undefined' && import.meta.env?.VITE_TENANT_ID) ||
|
|||
|
|
(typeof process !== 'undefined' && process.env?.VITE_TENANT_ID) ||
|
|||
|
|
'1'
|
|||
|
|
|
|||
|
|
if (tenantId) {
|
|||
|
|
headers['tenant-id'] = tenantId
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return await http.post(url, data, { headers })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 调用工作流
|
|||
|
|
* @param {Object} data - 请求数据
|
|||
|
|
* @returns {Promise<Object>} 响应数据
|
|||
|
|
*/
|
|||
|
|
async function callWorkflow(data) {
|
|||
|
|
const url = `${apiBaseUrl}/callWorkflow`
|
|||
|
|
|
|||
|
|
const headers = {
|
|||
|
|
'Content-Type': 'application/json',
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (getAuthHeader) {
|
|||
|
|
const authHeader = getAuthHeader()
|
|||
|
|
if (authHeader) {
|
|||
|
|
headers.Authorization = authHeader
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const tenantId =
|
|||
|
|
(typeof import.meta !== 'undefined' && import.meta.env?.VITE_TENANT_ID) ||
|
|||
|
|
(typeof process !== 'undefined' && process.env?.VITE_TENANT_ID) ||
|
|||
|
|
'1'
|
|||
|
|
|
|||
|
|
if (tenantId) {
|
|||
|
|
headers['tenant-id'] = tenantId
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return await http.post(url, data, { headers })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
videoToCharacters,
|
|||
|
|
callWorkflow,
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 默认导出(便于直接使用)
|
|||
|
|
*/
|
|||
|
|
export default createApiService
|
|||
|
|
|