@ai-sdk/klingai 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/LICENSE +13 -0
- package/README.md +98 -0
- package/dist/index.d.mts +97 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.js +426 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +417 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +72 -0
- package/src/index.ts +7 -0
- package/src/klingai-auth.ts +75 -0
- package/src/klingai-error.ts +14 -0
- package/src/klingai-provider.ts +116 -0
- package/src/klingai-video-model.ts +467 -0
- package/src/klingai-video-settings.ts +1 -0
- package/src/version.ts +3 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
createKlingAI: () => createKlingAI,
|
|
24
|
+
klingai: () => klingai
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(src_exports);
|
|
27
|
+
|
|
28
|
+
// src/klingai-provider.ts
|
|
29
|
+
var import_provider2 = require("@ai-sdk/provider");
|
|
30
|
+
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
|
31
|
+
|
|
32
|
+
// src/klingai-auth.ts
|
|
33
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
34
|
+
var base64url = (str) => btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
35
|
+
async function generateKlingAIAuthToken({
|
|
36
|
+
accessKey,
|
|
37
|
+
secretKey
|
|
38
|
+
}) {
|
|
39
|
+
const ak = (0, import_provider_utils.loadSetting)({
|
|
40
|
+
settingValue: accessKey,
|
|
41
|
+
settingName: "accessKey",
|
|
42
|
+
environmentVariableName: "KLINGAI_ACCESS_KEY",
|
|
43
|
+
description: "KlingAI access key"
|
|
44
|
+
});
|
|
45
|
+
const sk = (0, import_provider_utils.loadSetting)({
|
|
46
|
+
settingValue: secretKey,
|
|
47
|
+
settingName: "secretKey",
|
|
48
|
+
environmentVariableName: "KLINGAI_SECRET_KEY",
|
|
49
|
+
description: "KlingAI secret key"
|
|
50
|
+
});
|
|
51
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
52
|
+
const header = { alg: "HS256", typ: "JWT" };
|
|
53
|
+
const payload = {
|
|
54
|
+
iss: ak,
|
|
55
|
+
exp: now + 1800,
|
|
56
|
+
// Valid for 30 minutes
|
|
57
|
+
nbf: now - 5
|
|
58
|
+
// Valid 5 seconds before current time
|
|
59
|
+
};
|
|
60
|
+
const encoder = new TextEncoder();
|
|
61
|
+
const key = await crypto.subtle.importKey(
|
|
62
|
+
"raw",
|
|
63
|
+
encoder.encode(sk),
|
|
64
|
+
{ name: "HMAC", hash: "SHA-256" },
|
|
65
|
+
false,
|
|
66
|
+
["sign"]
|
|
67
|
+
);
|
|
68
|
+
const signingInput = `${base64url(JSON.stringify(header))}.${base64url(
|
|
69
|
+
JSON.stringify(payload)
|
|
70
|
+
)}`;
|
|
71
|
+
const signature = await crypto.subtle.sign(
|
|
72
|
+
"HMAC",
|
|
73
|
+
key,
|
|
74
|
+
encoder.encode(signingInput)
|
|
75
|
+
);
|
|
76
|
+
const signatureBytes = new Uint8Array(signature);
|
|
77
|
+
const signatureBase64 = base64url(
|
|
78
|
+
String.fromCharCode.apply(null, Array.from(signatureBytes))
|
|
79
|
+
);
|
|
80
|
+
return `${signingInput}.${signatureBase64}`;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/klingai-video-model.ts
|
|
84
|
+
var import_provider = require("@ai-sdk/provider");
|
|
85
|
+
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
86
|
+
var import_v42 = require("zod/v4");
|
|
87
|
+
|
|
88
|
+
// src/klingai-error.ts
|
|
89
|
+
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
|
90
|
+
var import_v4 = require("zod/v4");
|
|
91
|
+
var klingaiErrorDataSchema = import_v4.z.object({
|
|
92
|
+
code: import_v4.z.number(),
|
|
93
|
+
message: import_v4.z.string()
|
|
94
|
+
});
|
|
95
|
+
var klingaiFailedResponseHandler = (0, import_provider_utils2.createJsonErrorResponseHandler)({
|
|
96
|
+
errorSchema: klingaiErrorDataSchema,
|
|
97
|
+
errorToMessage: (data) => data.message
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// src/klingai-video-model.ts
|
|
101
|
+
var modelEndpointMap = {
|
|
102
|
+
"kling-v2.6-motion-control": "/v1/videos/motion-control"
|
|
103
|
+
};
|
|
104
|
+
function getEndpointPath(modelId) {
|
|
105
|
+
const endpoint = modelEndpointMap[modelId];
|
|
106
|
+
if (!endpoint) {
|
|
107
|
+
throw new import_provider.NoSuchModelError({
|
|
108
|
+
modelId,
|
|
109
|
+
modelType: "videoModel"
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return endpoint;
|
|
113
|
+
}
|
|
114
|
+
var klingaiVideoProviderOptionsSchema = (0, import_provider_utils3.lazySchema)(
|
|
115
|
+
() => (0, import_provider_utils3.zodSchema)(
|
|
116
|
+
import_v42.z.object({
|
|
117
|
+
videoUrl: import_v42.z.string(),
|
|
118
|
+
characterOrientation: import_v42.z.enum(["image", "video"]),
|
|
119
|
+
mode: import_v42.z.enum(["std", "pro"]),
|
|
120
|
+
keepOriginalSound: import_v42.z.enum(["yes", "no"]).nullish(),
|
|
121
|
+
watermarkEnabled: import_v42.z.boolean().nullish(),
|
|
122
|
+
pollIntervalMs: import_v42.z.number().positive().nullish(),
|
|
123
|
+
pollTimeoutMs: import_v42.z.number().positive().nullish()
|
|
124
|
+
}).passthrough()
|
|
125
|
+
)
|
|
126
|
+
);
|
|
127
|
+
var KlingAIVideoModel = class {
|
|
128
|
+
constructor(modelId, config) {
|
|
129
|
+
this.modelId = modelId;
|
|
130
|
+
this.config = config;
|
|
131
|
+
this.specificationVersion = "v3";
|
|
132
|
+
this.maxVideosPerCall = 1;
|
|
133
|
+
}
|
|
134
|
+
get provider() {
|
|
135
|
+
return this.config.provider;
|
|
136
|
+
}
|
|
137
|
+
async doGenerate(options) {
|
|
138
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
|
139
|
+
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
140
|
+
const warnings = [];
|
|
141
|
+
const klingaiOptions = await (0, import_provider_utils3.parseProviderOptions)({
|
|
142
|
+
provider: "klingai",
|
|
143
|
+
providerOptions: options.providerOptions,
|
|
144
|
+
schema: klingaiVideoProviderOptionsSchema
|
|
145
|
+
});
|
|
146
|
+
if (!klingaiOptions) {
|
|
147
|
+
throw new import_provider.AISDKError({
|
|
148
|
+
name: "KLINGAI_VIDEO_MISSING_OPTIONS",
|
|
149
|
+
message: "KlingAI requires providerOptions.klingai with videoUrl, characterOrientation, and mode."
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const body = {
|
|
153
|
+
video_url: klingaiOptions.videoUrl,
|
|
154
|
+
character_orientation: klingaiOptions.characterOrientation,
|
|
155
|
+
mode: klingaiOptions.mode
|
|
156
|
+
};
|
|
157
|
+
if (options.prompt != null) {
|
|
158
|
+
body.prompt = options.prompt;
|
|
159
|
+
}
|
|
160
|
+
if (options.image != null) {
|
|
161
|
+
if (options.image.type === "url") {
|
|
162
|
+
body.image_url = options.image.url;
|
|
163
|
+
} else {
|
|
164
|
+
const base64Data = typeof options.image.data === "string" ? options.image.data : (0, import_provider_utils3.convertUint8ArrayToBase64)(options.image.data);
|
|
165
|
+
body.image_url = base64Data;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (klingaiOptions.keepOriginalSound !== void 0 && klingaiOptions.keepOriginalSound !== null) {
|
|
169
|
+
body.keep_original_sound = klingaiOptions.keepOriginalSound;
|
|
170
|
+
}
|
|
171
|
+
if (klingaiOptions.watermarkEnabled !== void 0 && klingaiOptions.watermarkEnabled !== null) {
|
|
172
|
+
body.watermark_info = { enabled: klingaiOptions.watermarkEnabled };
|
|
173
|
+
}
|
|
174
|
+
for (const [key, value] of Object.entries(klingaiOptions)) {
|
|
175
|
+
if (![
|
|
176
|
+
"videoUrl",
|
|
177
|
+
"characterOrientation",
|
|
178
|
+
"mode",
|
|
179
|
+
"keepOriginalSound",
|
|
180
|
+
"watermarkEnabled",
|
|
181
|
+
"pollIntervalMs",
|
|
182
|
+
"pollTimeoutMs"
|
|
183
|
+
].includes(key)) {
|
|
184
|
+
body[key] = value;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (options.aspectRatio) {
|
|
188
|
+
warnings.push({
|
|
189
|
+
type: "unsupported",
|
|
190
|
+
feature: "aspectRatio",
|
|
191
|
+
details: "KlingAI Motion Control does not support aspectRatio. The output dimensions are determined by the reference image/video."
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
if (options.resolution) {
|
|
195
|
+
warnings.push({
|
|
196
|
+
type: "unsupported",
|
|
197
|
+
feature: "resolution",
|
|
198
|
+
details: "KlingAI Motion Control does not support resolution. The output resolution is determined by the reference image/video."
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
if (options.seed) {
|
|
202
|
+
warnings.push({
|
|
203
|
+
type: "unsupported",
|
|
204
|
+
feature: "seed",
|
|
205
|
+
details: "KlingAI Motion Control does not support seed for deterministic generation."
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
if (options.duration) {
|
|
209
|
+
warnings.push({
|
|
210
|
+
type: "unsupported",
|
|
211
|
+
feature: "duration",
|
|
212
|
+
details: "KlingAI Motion Control does not support custom duration. The output duration matches the reference video duration."
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
if (options.fps) {
|
|
216
|
+
warnings.push({
|
|
217
|
+
type: "unsupported",
|
|
218
|
+
feature: "fps",
|
|
219
|
+
details: "KlingAI Motion Control does not support custom FPS."
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
if (options.n != null && options.n > 1) {
|
|
223
|
+
warnings.push({
|
|
224
|
+
type: "unsupported",
|
|
225
|
+
feature: "n",
|
|
226
|
+
details: "KlingAI Motion Control does not support generating multiple videos per call. Only 1 video will be generated."
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
const endpointPath = getEndpointPath(this.modelId);
|
|
230
|
+
const { value: createResponse, responseHeaders: createHeaders } = await (0, import_provider_utils3.postJsonToApi)({
|
|
231
|
+
url: `${this.config.baseURL}${endpointPath}`,
|
|
232
|
+
headers: (0, import_provider_utils3.combineHeaders)(
|
|
233
|
+
await (0, import_provider_utils3.resolve)(this.config.headers),
|
|
234
|
+
options.headers
|
|
235
|
+
),
|
|
236
|
+
body,
|
|
237
|
+
successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
|
|
238
|
+
klingaiCreateTaskSchema
|
|
239
|
+
),
|
|
240
|
+
failedResponseHandler: klingaiFailedResponseHandler,
|
|
241
|
+
abortSignal: options.abortSignal,
|
|
242
|
+
fetch: this.config.fetch
|
|
243
|
+
});
|
|
244
|
+
const taskId = (_d = createResponse.data) == null ? void 0 : _d.task_id;
|
|
245
|
+
if (!taskId) {
|
|
246
|
+
throw new import_provider.AISDKError({
|
|
247
|
+
name: "KLINGAI_VIDEO_GENERATION_ERROR",
|
|
248
|
+
message: `No task_id returned from KlingAI API. Response: ${JSON.stringify(createResponse)}`
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
const pollIntervalMs = (_e = klingaiOptions.pollIntervalMs) != null ? _e : 5e3;
|
|
252
|
+
const pollTimeoutMs = (_f = klingaiOptions.pollTimeoutMs) != null ? _f : 6e5;
|
|
253
|
+
const startTime = Date.now();
|
|
254
|
+
let finalResponse;
|
|
255
|
+
let responseHeaders = createHeaders;
|
|
256
|
+
while (true) {
|
|
257
|
+
await (0, import_provider_utils3.delay)(pollIntervalMs, { abortSignal: options.abortSignal });
|
|
258
|
+
if (Date.now() - startTime > pollTimeoutMs) {
|
|
259
|
+
throw new import_provider.AISDKError({
|
|
260
|
+
name: "KLINGAI_VIDEO_GENERATION_TIMEOUT",
|
|
261
|
+
message: `Video generation timed out after ${pollTimeoutMs}ms`
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
const { value: statusResponse, responseHeaders: pollHeaders } = await (0, import_provider_utils3.getFromApi)({
|
|
265
|
+
url: `${this.config.baseURL}${endpointPath}/${taskId}`,
|
|
266
|
+
headers: (0, import_provider_utils3.combineHeaders)(
|
|
267
|
+
await (0, import_provider_utils3.resolve)(this.config.headers),
|
|
268
|
+
options.headers
|
|
269
|
+
),
|
|
270
|
+
successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
|
|
271
|
+
klingaiTaskStatusSchema
|
|
272
|
+
),
|
|
273
|
+
failedResponseHandler: klingaiFailedResponseHandler,
|
|
274
|
+
abortSignal: options.abortSignal,
|
|
275
|
+
fetch: this.config.fetch
|
|
276
|
+
});
|
|
277
|
+
responseHeaders = pollHeaders;
|
|
278
|
+
const taskStatus = (_g = statusResponse.data) == null ? void 0 : _g.task_status;
|
|
279
|
+
if (taskStatus === "succeed") {
|
|
280
|
+
finalResponse = statusResponse;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
if (taskStatus === "failed") {
|
|
284
|
+
throw new import_provider.AISDKError({
|
|
285
|
+
name: "KLINGAI_VIDEO_GENERATION_FAILED",
|
|
286
|
+
message: `Video generation failed: ${(_i = (_h = statusResponse.data) == null ? void 0 : _h.task_status_msg) != null ? _i : "Unknown error"}`
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (!((_l = (_k = (_j = finalResponse == null ? void 0 : finalResponse.data) == null ? void 0 : _j.task_result) == null ? void 0 : _k.videos) == null ? void 0 : _l.length)) {
|
|
291
|
+
throw new import_provider.AISDKError({
|
|
292
|
+
name: "KLINGAI_VIDEO_GENERATION_ERROR",
|
|
293
|
+
message: `No videos in response. Response: ${JSON.stringify(finalResponse)}`
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
const videos = [];
|
|
297
|
+
const videoMetadata = [];
|
|
298
|
+
for (const video of finalResponse.data.task_result.videos) {
|
|
299
|
+
if (video.url) {
|
|
300
|
+
videos.push({
|
|
301
|
+
type: "url",
|
|
302
|
+
url: video.url,
|
|
303
|
+
mediaType: "video/mp4"
|
|
304
|
+
});
|
|
305
|
+
videoMetadata.push({
|
|
306
|
+
id: (_m = video.id) != null ? _m : "",
|
|
307
|
+
url: video.url,
|
|
308
|
+
...video.watermark_url ? { watermarkUrl: video.watermark_url } : {},
|
|
309
|
+
...video.duration ? { duration: video.duration } : {}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (videos.length === 0) {
|
|
314
|
+
throw new import_provider.AISDKError({
|
|
315
|
+
name: "KLINGAI_VIDEO_GENERATION_ERROR",
|
|
316
|
+
message: "No valid video URLs in response"
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
videos,
|
|
321
|
+
warnings,
|
|
322
|
+
response: {
|
|
323
|
+
timestamp: currentDate,
|
|
324
|
+
modelId: this.modelId,
|
|
325
|
+
headers: responseHeaders
|
|
326
|
+
},
|
|
327
|
+
providerMetadata: {
|
|
328
|
+
klingai: {
|
|
329
|
+
taskId,
|
|
330
|
+
videos: videoMetadata
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
var klingaiCreateTaskSchema = import_v42.z.object({
|
|
337
|
+
code: import_v42.z.number(),
|
|
338
|
+
message: import_v42.z.string(),
|
|
339
|
+
request_id: import_v42.z.string().nullish(),
|
|
340
|
+
data: import_v42.z.object({
|
|
341
|
+
task_id: import_v42.z.string(),
|
|
342
|
+
task_status: import_v42.z.string().nullish(),
|
|
343
|
+
task_info: import_v42.z.object({
|
|
344
|
+
external_task_id: import_v42.z.string().nullish()
|
|
345
|
+
}).nullish(),
|
|
346
|
+
created_at: import_v42.z.number().nullish(),
|
|
347
|
+
updated_at: import_v42.z.number().nullish()
|
|
348
|
+
}).nullish()
|
|
349
|
+
});
|
|
350
|
+
var klingaiTaskStatusSchema = import_v42.z.object({
|
|
351
|
+
code: import_v42.z.number(),
|
|
352
|
+
message: import_v42.z.string(),
|
|
353
|
+
request_id: import_v42.z.string().nullish(),
|
|
354
|
+
data: import_v42.z.object({
|
|
355
|
+
task_id: import_v42.z.string(),
|
|
356
|
+
task_status: import_v42.z.string(),
|
|
357
|
+
task_status_msg: import_v42.z.string().nullish(),
|
|
358
|
+
task_info: import_v42.z.object({
|
|
359
|
+
external_task_id: import_v42.z.string().nullish()
|
|
360
|
+
}).nullish(),
|
|
361
|
+
watermark_info: import_v42.z.object({
|
|
362
|
+
enabled: import_v42.z.boolean().nullish()
|
|
363
|
+
}).nullish(),
|
|
364
|
+
final_unit_deduction: import_v42.z.string().nullish(),
|
|
365
|
+
created_at: import_v42.z.number().nullish(),
|
|
366
|
+
updated_at: import_v42.z.number().nullish(),
|
|
367
|
+
task_result: import_v42.z.object({
|
|
368
|
+
videos: import_v42.z.array(
|
|
369
|
+
import_v42.z.object({
|
|
370
|
+
id: import_v42.z.string().nullish(),
|
|
371
|
+
url: import_v42.z.string().nullish(),
|
|
372
|
+
watermark_url: import_v42.z.string().nullish(),
|
|
373
|
+
duration: import_v42.z.string().nullish()
|
|
374
|
+
})
|
|
375
|
+
).nullish()
|
|
376
|
+
}).nullish()
|
|
377
|
+
}).nullish()
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
// src/version.ts
|
|
381
|
+
var VERSION = "3.0.0";
|
|
382
|
+
|
|
383
|
+
// src/klingai-provider.ts
|
|
384
|
+
var defaultBaseURL = "https://api-singapore.klingai.com";
|
|
385
|
+
function createKlingAI(options = {}) {
|
|
386
|
+
var _a, _b;
|
|
387
|
+
const baseURL = (_b = (0, import_provider_utils4.withoutTrailingSlash)((_a = options.baseURL) != null ? _a : defaultBaseURL)) != null ? _b : defaultBaseURL;
|
|
388
|
+
const getHeaders = async () => {
|
|
389
|
+
const token = await generateKlingAIAuthToken({
|
|
390
|
+
accessKey: options.accessKey,
|
|
391
|
+
secretKey: options.secretKey
|
|
392
|
+
});
|
|
393
|
+
return (0, import_provider_utils4.withUserAgentSuffix)(
|
|
394
|
+
{
|
|
395
|
+
Authorization: `Bearer ${token}`,
|
|
396
|
+
...options.headers
|
|
397
|
+
},
|
|
398
|
+
`ai-sdk/klingai/${VERSION}`
|
|
399
|
+
);
|
|
400
|
+
};
|
|
401
|
+
const createVideoModel = (modelId) => new KlingAIVideoModel(modelId, {
|
|
402
|
+
provider: "klingai.video",
|
|
403
|
+
baseURL,
|
|
404
|
+
headers: getHeaders,
|
|
405
|
+
fetch: options.fetch
|
|
406
|
+
});
|
|
407
|
+
const noSuchModel = (modelId, modelType) => {
|
|
408
|
+
throw new import_provider2.NoSuchModelError({ modelId, modelType });
|
|
409
|
+
};
|
|
410
|
+
const provider = {
|
|
411
|
+
specificationVersion: "v3",
|
|
412
|
+
video: createVideoModel,
|
|
413
|
+
videoModel: createVideoModel,
|
|
414
|
+
languageModel: (modelId) => noSuchModel(modelId, "languageModel"),
|
|
415
|
+
embeddingModel: (modelId) => noSuchModel(modelId, "embeddingModel"),
|
|
416
|
+
imageModel: (modelId) => noSuchModel(modelId, "imageModel")
|
|
417
|
+
};
|
|
418
|
+
return provider;
|
|
419
|
+
}
|
|
420
|
+
var klingai = createKlingAI();
|
|
421
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
422
|
+
0 && (module.exports = {
|
|
423
|
+
createKlingAI,
|
|
424
|
+
klingai
|
|
425
|
+
});
|
|
426
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/klingai-provider.ts","../src/klingai-auth.ts","../src/klingai-video-model.ts","../src/klingai-error.ts","../src/version.ts"],"sourcesContent":["export { createKlingAI, klingai } from './klingai-provider';\nexport type {\n KlingAIProvider,\n KlingAIProviderSettings,\n} from './klingai-provider';\nexport type { KlingAIVideoModelId } from './klingai-video-settings';\nexport type { KlingAIVideoProviderOptions } from './klingai-video-model';\n","import {\n type Experimental_VideoModelV3 as VideoModelV3,\n type ProviderV3,\n NoSuchModelError,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { generateKlingAIAuthToken } from './klingai-auth';\nimport { KlingAIVideoModel } from './klingai-video-model';\nimport type { KlingAIVideoModelId } from './klingai-video-settings';\nimport { VERSION } from './version';\n\nexport interface KlingAIProviderSettings {\n /**\n * KlingAI Access key. Default value is taken from the `KLINGAI_ACCESS_KEY`\n * environment variable.\n */\n accessKey?: string;\n /**\n * KlingAI Secret key. Default value is taken from the `KLINGAI_SECRET_KEY`\n * environment variable.\n */\n secretKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface KlingAIProvider extends ProviderV3 {\n /**\n * Creates a model for video generation.\n */\n video(modelId: KlingAIVideoModelId): VideoModelV3;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: KlingAIVideoModelId): VideoModelV3;\n}\n\nconst defaultBaseURL = 'https://api-singapore.klingai.com';\n\n/**\n * Create a KlingAI provider instance.\n */\nexport function createKlingAI(\n options: KlingAIProviderSettings = {},\n): KlingAIProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL ?? defaultBaseURL) ?? defaultBaseURL;\n\n const getHeaders = async () => {\n const token = await generateKlingAIAuthToken({\n accessKey: options.accessKey,\n secretKey: options.secretKey,\n });\n\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${token}`,\n ...options.headers,\n },\n `ai-sdk/klingai/${VERSION}`,\n );\n };\n\n const createVideoModel = (modelId: KlingAIVideoModelId): VideoModelV3 =>\n new KlingAIVideoModel(modelId, {\n provider: 'klingai.video',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const noSuchModel = (\n modelId: string,\n modelType:\n | 'languageModel'\n | 'embeddingModel'\n | 'imageModel'\n | 'transcriptionModel'\n | 'speechModel'\n | 'rerankingModel',\n ): never => {\n throw new NoSuchModelError({ modelId, modelType });\n };\n\n const provider: KlingAIProvider = {\n specificationVersion: 'v3' as const,\n video: createVideoModel,\n videoModel: createVideoModel,\n languageModel: (modelId: string) => noSuchModel(modelId, 'languageModel'),\n embeddingModel: (modelId: string) => noSuchModel(modelId, 'embeddingModel'),\n imageModel: (modelId: string) => noSuchModel(modelId, 'imageModel'),\n };\n\n return provider;\n}\n\n/**\n * Default KlingAI provider instance.\n */\nexport const klingai = createKlingAI();\n","import { loadSetting } from '@ai-sdk/provider-utils';\n\n/**\n * Encode a string to base64url format (URL-safe base64 without padding).\n */\nconst base64url = (str: string) =>\n btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n\n/**\n * Generate a JWT authentication token for KlingAI API access.\n *\n * Uses HS256 (HMAC-SHA256) signing via the Web Crypto API — no external\n * dependencies required. Compatible with Node.js, Edge, and browser runtimes.\n *\n * @see https://app.klingai.com/global/dev/document-api/quickStart/userManual\n * @see https://app.klingai.com/global/dev/document-api/apiReference/commonInfo\n */\nexport async function generateKlingAIAuthToken({\n accessKey,\n secretKey,\n}: {\n accessKey?: string;\n secretKey?: string;\n}): Promise<string> {\n const ak = loadSetting({\n settingValue: accessKey,\n settingName: 'accessKey',\n environmentVariableName: 'KLINGAI_ACCESS_KEY',\n description: 'KlingAI access key',\n });\n\n const sk = loadSetting({\n settingValue: secretKey,\n settingName: 'secretKey',\n environmentVariableName: 'KLINGAI_SECRET_KEY',\n description: 'KlingAI secret key',\n });\n\n const now = Math.floor(Date.now() / 1000);\n\n const header = { alg: 'HS256', typ: 'JWT' };\n const payload = {\n iss: ak,\n exp: now + 1800, // Valid for 30 minutes\n nbf: now - 5, // Valid 5 seconds before current time\n };\n\n const encoder = new TextEncoder();\n\n // Import the secret key for HMAC-SHA256 signing\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(sk),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n\n const signingInput = `${base64url(JSON.stringify(header))}.${base64url(\n JSON.stringify(payload),\n )}`;\n\n const signature = await crypto.subtle.sign(\n 'HMAC',\n key,\n encoder.encode(signingInput),\n );\n\n const signatureBytes = new Uint8Array(signature);\n const signatureBase64 = base64url(\n String.fromCharCode.apply(null, Array.from(signatureBytes)),\n );\n\n return `${signingInput}.${signatureBase64}`;\n}\n","import {\n AISDKError,\n type Experimental_VideoModelV3,\n NoSuchModelError,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n type Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { klingaiFailedResponseHandler } from './klingai-error';\nimport type { KlingAIVideoModelId } from './klingai-video-settings';\n\n/**\n * Maps known model IDs to their API endpoint paths.\n */\nconst modelEndpointMap: Record<string, string> = {\n 'kling-v2.6-motion-control': '/v1/videos/motion-control',\n};\n\nfunction getEndpointPath(modelId: string): string {\n const endpoint = modelEndpointMap[modelId];\n if (!endpoint) {\n throw new NoSuchModelError({\n modelId,\n modelType: 'videoModel',\n });\n }\n return endpoint;\n}\n\nexport type KlingAIVideoProviderOptions = {\n /**\n * URL of the reference video. The character actions in the generated video\n * are consistent with the reference video.\n *\n * Supports .mp4/.mov, max 100MB, side lengths 340px–3850px,\n * duration 3–30 seconds (depends on `characterOrientation`).\n */\n videoUrl: string;\n\n /**\n * Orientation of the characters in the generated video.\n *\n * - `'image'`: Same orientation as the person in the image.\n * Reference video duration max 10 seconds.\n * - `'video'`: Same orientation as the person in the video.\n * Reference video duration max 30 seconds.\n */\n characterOrientation: 'image' | 'video';\n\n /**\n * Video generation mode.\n *\n * - `'std'`: Standard mode — cost-effective.\n * - `'pro'`: Professional mode — higher quality but longer generation time.\n */\n mode: 'std' | 'pro';\n\n /**\n * Whether to keep the original sound of the reference video.\n * Default: `'yes'`.\n */\n keepOriginalSound?: 'yes' | 'no' | null;\n\n /**\n * Whether to generate watermarked results simultaneously.\n */\n watermarkEnabled?: boolean | null;\n\n /**\n * Polling interval in milliseconds for checking task status.\n * Default: 5000 (5 seconds).\n */\n pollIntervalMs?: number | null;\n\n /**\n * Maximum time in milliseconds to wait for video generation.\n * Default: 600000 (10 minutes).\n */\n pollTimeoutMs?: number | null;\n\n [key: string]: unknown; // For passthrough\n};\n\nconst klingaiVideoProviderOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n videoUrl: z.string(),\n characterOrientation: z.enum(['image', 'video']),\n mode: z.enum(['std', 'pro']),\n keepOriginalSound: z.enum(['yes', 'no']).nullish(),\n watermarkEnabled: z.boolean().nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\n ),\n);\n\ninterface KlingAIVideoModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class KlingAIVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: KlingAIVideoModelId,\n private readonly config: KlingAIVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV3Warning[] = [];\n\n const klingaiOptions = (await parseProviderOptions({\n provider: 'klingai',\n providerOptions: options.providerOptions,\n schema: klingaiVideoProviderOptionsSchema,\n })) as KlingAIVideoProviderOptions | undefined;\n\n if (!klingaiOptions) {\n throw new AISDKError({\n name: 'KLINGAI_VIDEO_MISSING_OPTIONS',\n message:\n 'KlingAI requires providerOptions.klingai with videoUrl, characterOrientation, and mode.',\n });\n }\n\n // Build the request body for the KlingAI Motion Control endpoint\n const body: Record<string, unknown> = {\n video_url: klingaiOptions.videoUrl,\n character_orientation: klingaiOptions.characterOrientation,\n mode: klingaiOptions.mode,\n };\n\n // Map standard SDK prompt option\n if (options.prompt != null) {\n body.prompt = options.prompt;\n }\n\n // Map standard SDK image option to KlingAI's image_url\n if (options.image != null) {\n if (options.image.type === 'url') {\n body.image_url = options.image.url;\n } else {\n // KlingAI accepts raw base64 without the data: prefix\n const base64Data =\n typeof options.image.data === 'string'\n ? options.image.data\n : convertUint8ArrayToBase64(options.image.data);\n body.image_url = base64Data;\n }\n }\n\n // Map KlingAI-specific options\n if (\n klingaiOptions.keepOriginalSound !== undefined &&\n klingaiOptions.keepOriginalSound !== null\n ) {\n body.keep_original_sound = klingaiOptions.keepOriginalSound;\n }\n\n if (\n klingaiOptions.watermarkEnabled !== undefined &&\n klingaiOptions.watermarkEnabled !== null\n ) {\n body.watermark_info = { enabled: klingaiOptions.watermarkEnabled };\n }\n\n // Pass through any additional provider-specific options\n for (const [key, value] of Object.entries(klingaiOptions)) {\n if (\n ![\n 'videoUrl',\n 'characterOrientation',\n 'mode',\n 'keepOriginalSound',\n 'watermarkEnabled',\n 'pollIntervalMs',\n 'pollTimeoutMs',\n ].includes(key)\n ) {\n body[key] = value;\n }\n }\n\n // Warn about unsupported standard options\n if (options.aspectRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'KlingAI Motion Control does not support aspectRatio. ' +\n 'The output dimensions are determined by the reference image/video.',\n });\n }\n\n if (options.resolution) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n 'KlingAI Motion Control does not support resolution. ' +\n 'The output resolution is determined by the reference image/video.',\n });\n }\n\n if (options.seed) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n details:\n 'KlingAI Motion Control does not support seed for deterministic generation.',\n });\n }\n\n if (options.duration) {\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details:\n 'KlingAI Motion Control does not support custom duration. ' +\n 'The output duration matches the reference video duration.',\n });\n }\n\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'KlingAI Motion Control does not support custom FPS.',\n });\n }\n\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'KlingAI Motion Control does not support generating multiple videos per call. ' +\n 'Only 1 video will be generated.',\n });\n }\n\n // Resolve the API endpoint path for this model\n const endpointPath = getEndpointPath(this.modelId);\n\n // Step 1: Create the task\n const { value: createResponse, responseHeaders: createHeaders } =\n await postJsonToApi({\n url: `${this.config.baseURL}${endpointPath}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n successfulResponseHandler: createJsonResponseHandler(\n klingaiCreateTaskSchema,\n ),\n failedResponseHandler: klingaiFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.data?.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'KLINGAI_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from KlingAI API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n // Step 2: Poll for task completion\n const pollIntervalMs = klingaiOptions.pollIntervalMs ?? 5000; // 5 seconds\n const pollTimeoutMs = klingaiOptions.pollTimeoutMs ?? 600000; // 10 minutes\n const startTime = Date.now();\n let finalResponse: KlingAITaskResponse | undefined;\n let responseHeaders: Record<string, string> | undefined = createHeaders;\n\n while (true) {\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'KLINGAI_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}${endpointPath}/${taskId}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n klingaiTaskStatusSchema,\n ),\n failedResponseHandler: klingaiFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const taskStatus = statusResponse.data?.task_status;\n\n if (taskStatus === 'succeed') {\n finalResponse = statusResponse;\n break;\n }\n\n if (taskStatus === 'failed') {\n throw new AISDKError({\n name: 'KLINGAI_VIDEO_GENERATION_FAILED',\n message: `Video generation failed: ${statusResponse.data?.task_status_msg ?? 'Unknown error'}`,\n });\n }\n\n // Continue polling for 'submitted' and 'processing' statuses\n }\n\n if (!finalResponse?.data?.task_result?.videos?.length) {\n throw new AISDKError({\n name: 'KLINGAI_VIDEO_GENERATION_ERROR',\n message: `No videos in response. Response: ${JSON.stringify(finalResponse)}`,\n });\n }\n\n const videos: Array<{ type: 'url'; url: string; mediaType: string }> = [];\n const videoMetadata: Array<{\n id: string;\n url: string;\n watermarkUrl?: string;\n duration?: string;\n }> = [];\n\n for (const video of finalResponse.data.task_result.videos) {\n if (video.url) {\n videos.push({\n type: 'url',\n url: video.url,\n mediaType: 'video/mp4',\n });\n videoMetadata.push({\n id: video.id ?? '',\n url: video.url,\n ...(video.watermark_url ? { watermarkUrl: video.watermark_url } : {}),\n ...(video.duration ? { duration: video.duration } : {}),\n });\n }\n }\n\n if (videos.length === 0) {\n throw new AISDKError({\n name: 'KLINGAI_VIDEO_GENERATION_ERROR',\n message: 'No valid video URLs in response',\n });\n }\n\n return {\n videos,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n klingai: {\n taskId,\n videos: videoMetadata,\n },\n },\n };\n }\n}\n\n// Response schema for task creation (POST)\nconst klingaiCreateTaskSchema = z.object({\n code: z.number(),\n message: z.string(),\n request_id: z.string().nullish(),\n data: z\n .object({\n task_id: z.string(),\n task_status: z.string().nullish(),\n task_info: z\n .object({\n external_task_id: z.string().nullish(),\n })\n .nullish(),\n created_at: z.number().nullish(),\n updated_at: z.number().nullish(),\n })\n .nullish(),\n});\n\n// Response schema for task status query (GET)\nconst klingaiTaskStatusSchema = z.object({\n code: z.number(),\n message: z.string(),\n request_id: z.string().nullish(),\n data: z\n .object({\n task_id: z.string(),\n task_status: z.string(),\n task_status_msg: z.string().nullish(),\n task_info: z\n .object({\n external_task_id: z.string().nullish(),\n })\n .nullish(),\n watermark_info: z\n .object({\n enabled: z.boolean().nullish(),\n })\n .nullish(),\n final_unit_deduction: z.string().nullish(),\n created_at: z.number().nullish(),\n updated_at: z.number().nullish(),\n task_result: z\n .object({\n videos: z\n .array(\n z.object({\n id: z.string().nullish(),\n url: z.string().nullish(),\n watermark_url: z.string().nullish(),\n duration: z.string().nullish(),\n }),\n )\n .nullish(),\n })\n .nullish(),\n })\n .nullish(),\n});\n\ntype KlingAITaskResponse = z.infer<typeof klingaiTaskStatusSchema>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const klingaiErrorDataSchema = z.object({\n code: z.number(),\n message: z.string(),\n});\n\nexport type KlingAIErrorData = z.infer<typeof klingaiErrorDataSchema>;\n\nexport const klingaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: klingaiErrorDataSchema,\n errorToMessage: data => data.message,\n});\n","declare const __PACKAGE_VERSION__: string;\n\nexport const VERSION = __PACKAGE_VERSION__;\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider_utils","import_v4","import_provider_utils"]}
|