kling-sdk
Version:
Node.js SDK for Kling AI API
391 lines (390 loc) • 11.3 kB
JavaScript
"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;