UNPKG

kling-sdk

Version:
391 lines (390 loc) 11.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.KlingClient = void 0; const axios_1 = __importDefault(require("axios")); const auth_1 = require("./auth"); class KlingClient { constructor(config) { this.config = { baseUrl: 'https://api.klingai.com', ...config }; this.auth = new auth_1.Auth(this.config.accessKey, this.config.secretKey); this.client = axios_1.default.create({ baseURL: this.config.baseUrl, headers: { 'Content-Type': 'application/json' } }); // 拦截器:自动添加 Authorization 头 this.client.interceptors.request.use((config) => { if (!config.headers) { config.headers = {}; } config.headers.Authorization = this.auth.getAuthorizationHeader(); return config; }, (error) => Promise.reject(error)); } /** * 查询账号下资源包列表及余量 * @param params 查询参数 * @returns 资源包列表及余量信息 */ async getResourcePacks(params) { try { const response = await this.client.get('/account/costs', { params: params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 创建虚拟试穿任务 * @param params 虚拟试穿参数 * @returns 任务信息 */ async createVirtualTryOn(params) { try { const response = await this.client.post('/v1/images/kolors-virtual-try-on', params); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询单个虚拟试穿任务 * @param taskId 任务ID * @returns 任务详情 */ async getVirtualTryOnTask(taskId) { try { const response = await this.client.get(`/v1/images/kolors-virtual-try-on/${taskId}`); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询虚拟试穿任务列表 * @param params 分页参数 * @returns 任务列表 */ async listVirtualTryOnTasks(params) { try { const response = await this.client.get('/v1/images/kolors-virtual-try-on', { params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 创建图像生成任务 * @param params 图像生成参数 * @returns 任务信息 */ async createImageGeneration(params) { try { const response = await this.client.post('/v1/images/generations', params); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询单个图像生成任务 * @param taskId 任务ID * @returns 任务详情 */ async getImageGenerationTask(taskId) { try { const response = await this.client.get(`/v1/images/generations/${taskId}`); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询图像生成任务列表 * @param params 分页参数 * @returns 任务列表 */ async listImageGenerationTasks(params) { try { const response = await this.client.get('/v1/images/generations', { params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 创建文生视频任务 * @param params 文生视频参数 * @returns 任务信息 */ async createText2Video(params) { try { const response = await this.client.post('/v1/videos/text2video', params); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询单个文生视频任务 * @param params 任务查询参数 * @returns 任务详情 */ async getText2VideoTask(params) { try { const { task_id, external_task_id } = params; let url = '/v1/videos/text2video'; if (task_id) { url += `/${task_id}`; } else if (external_task_id) { url += `?external_task_id=${external_task_id}`; } else { throw new Error('必须提供task_id或external_task_id'); } const response = await this.client.get(url); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询文生视频任务列表 * @param params 分页参数 * @returns 任务列表 */ async listText2VideoTasks(params) { try { const response = await this.client.get('/v1/videos/text2video', { params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 创建图生视频任务 * @param params 图生视频参数 * @returns 任务信息 */ async createImage2Video(params) { try { const response = await this.client.post('/v1/videos/image2video', params); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询单个图生视频任务 * @param params 任务查询参数 * @returns 任务详情 */ async getImage2VideoTask(params) { try { const { task_id, external_task_id } = params; let url = '/v1/videos/image2video'; if (task_id) { url += `/${task_id}`; } else if (external_task_id) { url += `?external_task_id=${external_task_id}`; } else { throw new Error('必须提供task_id或external_task_id'); } const response = await this.client.get(url); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询图生视频任务列表 * @param params 分页参数 * @returns 任务列表 */ async listImage2VideoTasks(params) { try { const response = await this.client.get('/v1/videos/image2video', { params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 创建视频延长任务 * @param params 视频延长参数 * @returns 任务信息 */ async createVideoExtend(params) { try { const response = await this.client.post('/v1/videos/video-extend', params); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询单个视频延长任务 * @param taskId 任务ID * @returns 任务详情 */ async getVideoExtendTask(taskId) { try { const response = await this.client.get(`/v1/videos/video-extend/${taskId}`); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询视频延长任务列表 * @param params 分页参数 * @returns 任务列表 */ async listVideoExtendTasks(params) { try { const response = await this.client.get('/v1/videos/video-extend', { params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 创建视频特效任务 * @param params 视频特效参数 * @returns 任务信息 */ async createVideoEffects(params) { try { const response = await this.client.post('/v1/videos/effects', params); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询单个视频特效任务 * @param params 任务查询参数 * @returns 任务详情 */ async getVideoEffectsTask(params) { try { const { task_id, external_task_id } = params; let url = '/v1/videos/effects'; if (task_id) { url += `/${task_id}`; } else if (external_task_id) { url += `?external_task_id=${external_task_id}`; } else { throw new Error('必须提供task_id或external_task_id'); } const response = await this.client.get(url); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询视频特效任务列表 * @param params 分页参数 * @returns 任务列表 */ async listVideoEffectsTasks(params) { try { const response = await this.client.get('/v1/videos/effects', { params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 创建对口型任务 * @param params 对口型参数 * @returns 任务信息 */ async createLipSync(params) { try { const response = await this.client.post('/v1/videos/lip-sync', params); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询单个对口型任务 * @param taskId 任务ID * @returns 任务详情 */ async getLipSyncTask(taskId) { try { const response = await this.client.get(`/v1/videos/lip-sync/${taskId}`); return response.data; } catch (error) { throw this.handleError(error); } } /** * 查询对口型任务列表 * @param params 分页参数 * @returns 任务列表 */ async listLipSyncTasks(params) { try { const response = await this.client.get('/v1/videos/lip-sync', { params }); return response.data; } catch (error) { throw this.handleError(error); } } /** * 处理API错误 */ handleError(error) { if (axios_1.default.isAxiosError(error) && error.response) { const { status, data } = error.response; // 格式化错误信息 const message = data?.message || '未知错误'; const code = data?.code || 0; return new Error(`API错误 (${status}, ${code}): ${message}`); } return error instanceof Error ? error : new Error('未知错误'); } } exports.KlingClient = KlingClient;