getaiapi 2.0.0 → 2.0.1
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/README.md +43 -0
- package/dist/index.d.ts +31 -1
- package/dist/index.js +54 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -535,6 +535,49 @@ const result = await kling.imageRecognize({
|
|
|
535
535
|
}
|
|
536
536
|
```
|
|
537
537
|
|
|
538
|
+
### Account Costs
|
|
539
|
+
|
|
540
|
+
Query resource package balances under your account. Free to call; QPS ≤ 1. Note: `remaining_quantity` has a 12-hour reporting delay.
|
|
541
|
+
|
|
542
|
+
```typescript
|
|
543
|
+
const result = await kling.accountCosts({
|
|
544
|
+
start_time: Date.now() - 86_400_000, // last 24h
|
|
545
|
+
end_time: Date.now(),
|
|
546
|
+
})
|
|
547
|
+
|
|
548
|
+
for (const pack of result.resource_pack_subscribe_infos) {
|
|
549
|
+
console.log(pack.resource_pack_name, pack.remaining_quantity, pack.status)
|
|
550
|
+
}
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
**Input: `AccountCostsInput`**
|
|
554
|
+
|
|
555
|
+
```typescript
|
|
556
|
+
{
|
|
557
|
+
start_time: number // required — Unix ms
|
|
558
|
+
end_time: number // required — Unix ms
|
|
559
|
+
resource_pack_name?: string // optional — filter by exact package name
|
|
560
|
+
}
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
**Output: `AccountCostsResult`**
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
{
|
|
567
|
+
resource_pack_subscribe_infos: Array<{
|
|
568
|
+
resource_pack_name: string
|
|
569
|
+
resource_pack_id: string
|
|
570
|
+
resource_pack_type: 'decreasing_total' | 'constant_period'
|
|
571
|
+
total_quantity: number
|
|
572
|
+
remaining_quantity: number // 12h delay
|
|
573
|
+
purchase_time: number
|
|
574
|
+
effective_time: number
|
|
575
|
+
invalid_time: number
|
|
576
|
+
status: 'toBeOnline' | 'online' | 'expired' | 'runOut'
|
|
577
|
+
}>
|
|
578
|
+
}
|
|
579
|
+
```
|
|
580
|
+
|
|
538
581
|
## Output Types
|
|
539
582
|
|
|
540
583
|
All functions return typed results based on output modality:
|
package/dist/index.d.ts
CHANGED
|
@@ -261,6 +261,30 @@ interface KlingVideoAudioResult {
|
|
|
261
261
|
duration_wav?: string;
|
|
262
262
|
}>;
|
|
263
263
|
}
|
|
264
|
+
interface AccountCostsInput {
|
|
265
|
+
/** Query start time, Unix timestamp in ms. */
|
|
266
|
+
start_time: number;
|
|
267
|
+
/** Query end time, Unix timestamp in ms. */
|
|
268
|
+
end_time: number;
|
|
269
|
+
/** Optional filter by exact resource package name. */
|
|
270
|
+
resource_pack_name?: string;
|
|
271
|
+
}
|
|
272
|
+
interface ResourcePackInfo {
|
|
273
|
+
resource_pack_name: string;
|
|
274
|
+
resource_pack_id: string;
|
|
275
|
+
/** `"decreasing_total"` = fixed pool; `"constant_period"` = periodic refresh. */
|
|
276
|
+
resource_pack_type: 'decreasing_total' | 'constant_period';
|
|
277
|
+
total_quantity: number;
|
|
278
|
+
/** Remaining units — has a 12-hour reporting delay. */
|
|
279
|
+
remaining_quantity: number;
|
|
280
|
+
purchase_time: number;
|
|
281
|
+
effective_time: number;
|
|
282
|
+
invalid_time: number;
|
|
283
|
+
status: 'toBeOnline' | 'online' | 'expired' | 'runOut';
|
|
284
|
+
}
|
|
285
|
+
interface AccountCostsResult {
|
|
286
|
+
resource_pack_subscribe_infos: ResourcePackInfo[];
|
|
287
|
+
}
|
|
264
288
|
|
|
265
289
|
declare class KlingError extends Error {
|
|
266
290
|
readonly code: string;
|
|
@@ -271,7 +295,9 @@ declare class KlingAuthError extends KlingError {
|
|
|
271
295
|
}
|
|
272
296
|
declare class KlingRateLimitError extends KlingError {
|
|
273
297
|
readonly retryAfterMs: number;
|
|
274
|
-
|
|
298
|
+
readonly bodyCode: number | undefined;
|
|
299
|
+
readonly detail: string;
|
|
300
|
+
constructor(retryAfterMs: number, bodyCode?: number, detail?: string);
|
|
275
301
|
}
|
|
276
302
|
declare class KlingApiError extends KlingError {
|
|
277
303
|
readonly statusCode: number;
|
|
@@ -303,7 +329,9 @@ declare class KlingClient {
|
|
|
303
329
|
private handleErrors;
|
|
304
330
|
private handleBodyErrors;
|
|
305
331
|
private httpSubmit;
|
|
332
|
+
private httpGet;
|
|
306
333
|
private httpPoll;
|
|
334
|
+
accountCosts(input: AccountCostsInput): Promise<AccountCostsResult>;
|
|
307
335
|
execute<T, I extends PollOptions & {
|
|
308
336
|
options?: Record<string, unknown>;
|
|
309
337
|
}>(endpoint: string, defaults: Record<string, unknown>, input: I, extractor: Extractor<T>, sync?: boolean): Promise<T>;
|
|
@@ -381,6 +409,7 @@ declare function createClient(config: KlingConfig): {
|
|
|
381
409
|
identifyFace(input: IdentifyFaceInput): Promise<KlingFaceResult>;
|
|
382
410
|
imageRecognize(input: ImageRecognizeInput): Promise<KlingJsonResult>;
|
|
383
411
|
referenceToVideo(input: ReferenceToVideoInput): Promise<KlingVideoResult>;
|
|
412
|
+
accountCosts(input: AccountCostsInput): Promise<AccountCostsResult>;
|
|
384
413
|
configure: (c: KlingConfig) => void;
|
|
385
414
|
};
|
|
386
415
|
declare const kling: {
|
|
@@ -454,6 +483,7 @@ declare const kling: {
|
|
|
454
483
|
identifyFace(input: IdentifyFaceInput): Promise<KlingFaceResult>;
|
|
455
484
|
imageRecognize(input: ImageRecognizeInput): Promise<KlingJsonResult>;
|
|
456
485
|
referenceToVideo(input: ReferenceToVideoInput): Promise<KlingVideoResult>;
|
|
486
|
+
accountCosts(input: AccountCostsInput): Promise<AccountCostsResult>;
|
|
457
487
|
configure: (config: KlingConfig) => void;
|
|
458
488
|
};
|
|
459
489
|
|
package/dist/index.js
CHANGED
|
@@ -45,10 +45,15 @@ var KlingAuthError = class extends KlingError {
|
|
|
45
45
|
};
|
|
46
46
|
var KlingRateLimitError = class extends KlingError {
|
|
47
47
|
retryAfterMs;
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
bodyCode;
|
|
49
|
+
detail;
|
|
50
|
+
constructor(retryAfterMs, bodyCode, detail) {
|
|
51
|
+
const msg = detail ? `Kling 429 (code ${bodyCode ?? "unknown"}): ${detail}. Retry after ${retryAfterMs}ms.` : `Rate limited by Kling. Retry after ${retryAfterMs}ms.`;
|
|
52
|
+
super("RATE_LIMIT", msg);
|
|
50
53
|
this.name = "KlingRateLimitError";
|
|
51
54
|
this.retryAfterMs = retryAfterMs;
|
|
55
|
+
this.bodyCode = bodyCode;
|
|
56
|
+
this.detail = detail ?? "Rate limited";
|
|
52
57
|
}
|
|
53
58
|
};
|
|
54
59
|
var KlingApiError = class extends KlingError {
|
|
@@ -146,26 +151,35 @@ var KlingClient = class {
|
|
|
146
151
|
// ── HTTP ─────────────────────────────────────────────────────────────────
|
|
147
152
|
async handleErrors(response, endpoint) {
|
|
148
153
|
if (response.ok) return;
|
|
149
|
-
if (response.status === 401) throw new KlingAuthError("Kling returned 401 Unauthorized.");
|
|
150
|
-
if (response.status === 429) {
|
|
151
|
-
const retryAfter = response.headers.get("retry-after");
|
|
152
|
-
throw new KlingRateLimitError(retryAfter ? parseInt(retryAfter, 10) * 1e3 : 6e4);
|
|
153
|
-
}
|
|
154
154
|
let raw;
|
|
155
155
|
try {
|
|
156
156
|
raw = await response.json();
|
|
157
157
|
} catch {
|
|
158
158
|
raw = await response.text().catch(() => null);
|
|
159
159
|
}
|
|
160
|
+
console.error(`[kling] ${response.status} on ${endpoint}:`, JSON.stringify(raw));
|
|
161
|
+
if (response.status === 401) throw new KlingAuthError("Kling returned 401 Unauthorized.");
|
|
162
|
+
if (response.status === 429) {
|
|
163
|
+
const body = raw;
|
|
164
|
+
const code = body?.code;
|
|
165
|
+
const message = body?.message ?? "Rate limited";
|
|
166
|
+
const retryAfter = response.headers.get("retry-after");
|
|
167
|
+
throw new KlingRateLimitError(
|
|
168
|
+
retryAfter ? parseInt(retryAfter, 10) * 1e3 : 6e4,
|
|
169
|
+
code,
|
|
170
|
+
message
|
|
171
|
+
);
|
|
172
|
+
}
|
|
160
173
|
throw new KlingApiError(endpoint, response.status, raw);
|
|
161
174
|
}
|
|
162
175
|
handleBodyErrors(json, endpoint) {
|
|
163
176
|
if (json.code === 0) return;
|
|
177
|
+
console.error(`[kling] body error on ${endpoint}: code=${json.code} message=${json.message}`);
|
|
164
178
|
if (json.code >= 1e3 && json.code <= 1004) {
|
|
165
179
|
throw new KlingAuthError(`Kling auth error code ${json.code}: ${json.message}`);
|
|
166
180
|
}
|
|
167
181
|
if (json.code >= 1100 && json.code <= 1102 || json.code >= 1302 && json.code <= 1304) {
|
|
168
|
-
throw new KlingRateLimitError(5e3);
|
|
182
|
+
throw new KlingRateLimitError(5e3, json.code, json.message);
|
|
169
183
|
}
|
|
170
184
|
throw new KlingApiError(endpoint, json.code, json);
|
|
171
185
|
}
|
|
@@ -183,6 +197,19 @@ var KlingClient = class {
|
|
|
183
197
|
this.handleBodyErrors(json, endpoint);
|
|
184
198
|
return json;
|
|
185
199
|
}
|
|
200
|
+
async httpGet(endpoint, params) {
|
|
201
|
+
const auth = this.resolveAuth();
|
|
202
|
+
const qs = new URLSearchParams(params).toString();
|
|
203
|
+
const url = `${API_BASE}/${endpoint}?${qs}`;
|
|
204
|
+
const response = await fetch(url, {
|
|
205
|
+
headers: buildAuthHeaders(auth.accessKey, auth.secretKey),
|
|
206
|
+
signal: AbortSignal.timeout(this.fetchTimeoutMs)
|
|
207
|
+
});
|
|
208
|
+
await this.handleErrors(response, endpoint);
|
|
209
|
+
const json = await response.json();
|
|
210
|
+
this.handleBodyErrors(json, endpoint);
|
|
211
|
+
return json;
|
|
212
|
+
}
|
|
186
213
|
async httpPoll(endpoint, taskId) {
|
|
187
214
|
const auth = this.resolveAuth();
|
|
188
215
|
const url = `${API_BASE}/${endpoint}/${taskId}`;
|
|
@@ -195,6 +222,21 @@ var KlingClient = class {
|
|
|
195
222
|
this.handleBodyErrors(json, endpoint);
|
|
196
223
|
return json;
|
|
197
224
|
}
|
|
225
|
+
// ── Account ──────────────────────────────────────────────────────────────
|
|
226
|
+
async accountCosts(input) {
|
|
227
|
+
const params = {
|
|
228
|
+
start_time: String(input.start_time),
|
|
229
|
+
end_time: String(input.end_time)
|
|
230
|
+
};
|
|
231
|
+
if (input.resource_pack_name !== void 0) {
|
|
232
|
+
params.resource_pack_name = input.resource_pack_name;
|
|
233
|
+
}
|
|
234
|
+
const json = await this.httpGet("account/costs", params);
|
|
235
|
+
const data = json.data;
|
|
236
|
+
return {
|
|
237
|
+
resource_pack_subscribe_infos: data.resource_pack_subscribe_infos ?? []
|
|
238
|
+
};
|
|
239
|
+
}
|
|
198
240
|
// ── Execute ──────────────────────────────────────────────────────────────
|
|
199
241
|
async execute(endpoint, defaults, input, extractor, sync) {
|
|
200
242
|
const { timeout, pollInterval, options, ...params } = input;
|
|
@@ -531,6 +573,10 @@ function createModels(client) {
|
|
|
531
573
|
// ── reference-to-video (1 model) ──────────────────────────────────────
|
|
532
574
|
referenceToVideo(input) {
|
|
533
575
|
return client.execute("v1/videos/multi-image2video", { model_name: "kling-v1-6" }, input, extractVideos);
|
|
576
|
+
},
|
|
577
|
+
// ── account ───────────────────────────────────────────────────────────
|
|
578
|
+
accountCosts(input) {
|
|
579
|
+
return client.accountCosts(input);
|
|
534
580
|
}
|
|
535
581
|
};
|
|
536
582
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/kling/errors.ts","../src/providers/kling/auth.ts","../src/providers/kling/client.ts","../src/providers/kling/extract.ts","../src/providers/kling/models.ts","../src/providers/kling/index.ts","../deprecated/src/configure.ts"],"sourcesContent":["export class KlingError extends Error {\n readonly code: string\n constructor(code: string, message: string) {\n super(message)\n this.name = 'KlingError'\n this.code = code\n }\n}\n\nexport class KlingAuthError extends KlingError {\n constructor(message = 'Missing Kling credentials. Call kling.configure() or set KLING_ACCESS_KEY + KLING_SECRET_KEY.') {\n super('AUTH_ERROR', message)\n this.name = 'KlingAuthError'\n }\n}\n\nexport class KlingRateLimitError extends KlingError {\n readonly retryAfterMs: number\n constructor(retryAfterMs: number) {\n super('RATE_LIMIT', `Rate limited by Kling. Retry after ${retryAfterMs}ms.`)\n this.name = 'KlingRateLimitError'\n this.retryAfterMs = retryAfterMs\n }\n}\n\nexport class KlingApiError extends KlingError {\n readonly statusCode: number\n readonly raw: unknown\n constructor(endpoint: string, statusCode: number, raw: unknown) {\n super('API_ERROR', `Kling API error ${statusCode} on ${endpoint}.`)\n this.name = 'KlingApiError'\n this.statusCode = statusCode\n this.raw = raw\n }\n}\n\nexport class KlingTimeoutError extends KlingError {\n readonly timeoutMs: number\n constructor(timeoutMs: number) {\n super('TIMEOUT', `Kling task timed out after ${timeoutMs}ms.`)\n this.name = 'KlingTimeoutError'\n this.timeoutMs = timeoutMs\n }\n}\n\nexport class KlingTaskFailedError extends KlingError {\n readonly taskId: string\n constructor(taskId: string, message: string) {\n super('TASK_FAILED', `Kling task ${taskId} failed: ${message}`)\n this.name = 'KlingTaskFailedError'\n this.taskId = taskId\n }\n}\n","import { createHmac } from 'crypto'\n\n/** Generates an HS256 JWT for Kling API authentication. */\nexport function generateJwt(accessKey: string, secretKey: string): string {\n const header = Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT' })).toString('base64url')\n const now = Math.floor(Date.now() / 1000)\n const payload = Buffer.from(JSON.stringify({\n iss: accessKey,\n exp: now + 1800,\n nbf: now - 5,\n })).toString('base64url')\n const signature = createHmac('sha256', secretKey)\n .update(`${header}.${payload}`)\n .digest('base64url')\n return `${header}.${payload}.${signature}`\n}\n\n/** Builds Authorization + Content-Type headers for a Kling API call. */\nexport function buildAuthHeaders(accessKey: string, secretKey: string): Record<string, string> {\n return {\n Authorization: `Bearer ${generateJwt(accessKey, secretKey)}`,\n 'Content-Type': 'application/json',\n }\n}\n","import type { KlingConfig, KlingApiResponse, PollOptions } from './types.js'\nimport { KlingAuthError, KlingRateLimitError, KlingApiError, KlingTimeoutError, KlingTaskFailedError } from './errors.js'\nimport { buildAuthHeaders } from './auth.js'\nimport type { Extractor } from './extract.js'\n\nconst API_BASE = 'https://api-singapore.klingai.com'\nconst DEFAULT_FETCH_TIMEOUT_MS = 30_000\nconst DEFAULT_POLL_TIMEOUT_MS = 300_000\nconst DEFAULT_POLL_INTERVAL_MS = 2_000\nconst POLL_BACKOFF_MULTIPLIER = 1.5\nconst MAX_POLL_INTERVAL_MS = 10_000\n\nconst SYNC_ENDPOINTS = new Set(['v1/audio/tts', 'v1/videos/image-recognize', 'v1/videos/identify-face'])\n\n/** Strips data URI prefix from base64 strings. Kling requires raw base64. */\nfunction cleanBase64(value: unknown): unknown {\n if (typeof value === 'string' && value.startsWith('data:')) {\n return value.split(',')[1] ?? value\n }\n if (Array.isArray(value)) {\n return value.map(cleanBase64)\n }\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = cleanBase64(v)\n }\n return result\n }\n return value\n}\n\n/** Kling API client. Holds auth state and HTTP configuration. */\nexport class KlingClient {\n private accessKey: string | null = null\n private secretKey: string | null = null\n private fetchTimeoutMs: number = DEFAULT_FETCH_TIMEOUT_MS\n\n /** Update credentials and settings. */\n configure(config: KlingConfig): void {\n this.accessKey = config.accessKey\n this.secretKey = config.secretKey\n if (config.fetchTimeoutMs !== undefined) {\n this.fetchTimeoutMs = config.fetchTimeoutMs\n }\n }\n\n private resolveAuth(): { accessKey: string; secretKey: string } {\n if (this.accessKey && this.secretKey) {\n return { accessKey: this.accessKey, secretKey: this.secretKey }\n }\n\n const ak = process.env.KLING_ACCESS_KEY?.trim()\n const sk = process.env.KLING_SECRET_KEY?.trim()\n if (ak && sk) return { accessKey: ak, secretKey: sk }\n\n throw new KlingAuthError()\n }\n\n // ── HTTP ─────────────────────────────────────────────────────────────────\n\n private async handleErrors(response: Response, endpoint: string): Promise<void> {\n if (response.ok) return\n\n if (response.status === 401) throw new KlingAuthError('Kling returned 401 Unauthorized.')\n if (response.status === 429) {\n const retryAfter = response.headers.get('retry-after')\n throw new KlingRateLimitError(retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000)\n }\n\n let raw: unknown\n try { raw = await response.json() } catch { raw = await response.text().catch(() => null) }\n throw new KlingApiError(endpoint, response.status, raw)\n }\n\n private handleBodyErrors(json: KlingApiResponse, endpoint: string): void {\n if (json.code === 0) return\n if (json.code >= 1000 && json.code <= 1004) {\n throw new KlingAuthError(`Kling auth error code ${json.code}: ${json.message}`)\n }\n if ((json.code >= 1100 && json.code <= 1102) || (json.code >= 1302 && json.code <= 1304)) {\n throw new KlingRateLimitError(5000)\n }\n throw new KlingApiError(endpoint, json.code, json)\n }\n\n private async httpSubmit(endpoint: string, body: Record<string, unknown>): Promise<KlingApiResponse> {\n const auth = this.resolveAuth()\n const url = `${API_BASE}/${endpoint}`\n const response = await fetch(url, {\n method: 'POST',\n headers: buildAuthHeaders(auth.accessKey, auth.secretKey),\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(this.fetchTimeoutMs),\n })\n await this.handleErrors(response, endpoint)\n const json = await response.json() as KlingApiResponse\n this.handleBodyErrors(json, endpoint)\n return json\n }\n\n private async httpPoll(endpoint: string, taskId: string): Promise<KlingApiResponse> {\n const auth = this.resolveAuth()\n const url = `${API_BASE}/${endpoint}/${taskId}`\n const response = await fetch(url, {\n headers: buildAuthHeaders(auth.accessKey, auth.secretKey),\n signal: AbortSignal.timeout(this.fetchTimeoutMs),\n })\n await this.handleErrors(response, endpoint)\n const json = await response.json() as KlingApiResponse\n this.handleBodyErrors(json, endpoint)\n return json\n }\n\n // ── Execute ──────────────────────────────────────────────────────────────\n\n async execute<T, I extends PollOptions & { options?: Record<string, unknown> }>(\n endpoint: string,\n defaults: Record<string, unknown>,\n input: I,\n extractor: Extractor<T>,\n sync?: boolean,\n ): Promise<T> {\n const { timeout, pollInterval, options, ...params } = input as PollOptions & { options?: Record<string, unknown> } & Record<string, unknown>\n const timeoutMs = timeout ?? DEFAULT_POLL_TIMEOUT_MS\n const initialIntervalMs = pollInterval ?? DEFAULT_POLL_INTERVAL_MS\n\n // Merge: user params > options passthrough > defaults\n const body: Record<string, unknown> = { ...params }\n if (options && typeof options === 'object') {\n for (const [key, val] of Object.entries(options as Record<string, unknown>)) {\n if (!(key in body)) body[key] = val\n }\n }\n for (const [key, val] of Object.entries(defaults)) {\n if (!(key in body)) body[key] = val\n }\n\n const cleanedBody = cleanBase64(body) as Record<string, unknown>\n\n // Submit\n const submitResult = await this.httpSubmit(endpoint, cleanedBody)\n const isSyncEndpoint = sync ?? SYNC_ENDPOINTS.has(endpoint)\n\n if (isSyncEndpoint) {\n return extractor(submitResult.data)\n }\n\n // Poll with exponential backoff\n const taskId = submitResult.data.task_id as string\n const deadline = Date.now() + timeoutMs\n let intervalMs = initialIntervalMs\n\n while (Date.now() < deadline) {\n await new Promise(resolve => setTimeout(resolve, intervalMs))\n intervalMs = Math.min(intervalMs * POLL_BACKOFF_MULTIPLIER, MAX_POLL_INTERVAL_MS)\n\n const pollResult = await this.httpPoll(endpoint, taskId)\n const status = pollResult.data.task_status as string\n\n if (status === 'failed') {\n throw new KlingTaskFailedError(taskId, (pollResult.data.task_status_msg as string) ?? 'Unknown error')\n }\n\n if (status === 'succeed') {\n return extractor(pollResult.data)\n }\n }\n\n throw new KlingTimeoutError(timeoutMs)\n }\n}\n","import type {\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n} from './types.js'\n\nexport type Extractor<T> = (data: Record<string, unknown>) => T\n\nexport function extractVideos(data: Record<string, unknown>): KlingVideoResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const videos = (taskResult?.videos ?? []) as Array<{ id: string; url: string; duration: string }>\n return { task_id: data.task_id as string, videos }\n}\n\nexport function extractImages(data: Record<string, unknown>): KlingImageResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const images = (taskResult?.images ?? []) as Array<{ index: number; url: string }>\n return { task_id: data.task_id as string, images }\n}\n\n/** Extracts audios, normalizing url_mp3/url_wav to url for endpoints that use them. */\nexport function extractAudios(data: Record<string, unknown>): KlingAudioResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const rawAudios = (taskResult?.audios ?? []) as Array<Record<string, unknown>>\n const audios = rawAudios.map(a => ({\n id: a.id as string,\n url: (a.url ?? a.url_mp3 ?? a.url_wav ?? '') as string,\n url_mp3: a.url_mp3 as string | undefined,\n url_wav: a.url_wav as string | undefined,\n duration: (a.duration ?? a.duration_mp3) as string | undefined,\n duration_mp3: a.duration_mp3 as string | undefined,\n duration_wav: a.duration_wav as string | undefined,\n }))\n return { task_id: data.task_id as string, audios }\n}\n\nexport function extractJson(data: Record<string, unknown>): KlingJsonResult {\n return { task_id: data.task_id as string, data: data.task_result ?? data }\n}\n\n/** Extracts identify-face sync response: session_id + face_data[]. */\nexport function extractFace(data: Record<string, unknown>): KlingFaceResult {\n return {\n session_id: data.session_id as string,\n face_data: (data.face_data ?? []) as KlingFaceResult['face_data'],\n }\n}\n\n/** Extracts multi-shot images with url_1, url_2, url_3 per image. */\nexport function extractMultiShot(data: Record<string, unknown>): KlingMultiShotResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const rawImages = (taskResult?.images ?? []) as Array<Record<string, unknown>>\n const images = rawImages.map((img, i) => ({\n index: (img.index as number) ?? i,\n url_1: img.url_1 as string,\n url_2: img.url_2 as string,\n url_3: img.url_3 as string,\n }))\n return { task_id: data.task_id as string, images }\n}\n\n/** Extracts voices[] from create-voice response. */\nexport function extractVoices(data: Record<string, unknown>): KlingVoiceResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const voices = (taskResult?.voices ?? []) as KlingVoiceResult['voices']\n return { task_id: data.task_id as string, voices }\n}\n\n/** Extracts video-to-audio response: both videos[] and audios[]. */\nexport function extractVideoAudio(data: Record<string, unknown>): KlingVideoAudioResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const videos = (taskResult?.videos ?? []) as Array<{ id: string; url: string; duration: string }>\n const rawAudios = (taskResult?.audios ?? []) as Array<Record<string, unknown>>\n const audios = rawAudios.map(a => ({\n id: a.id as string,\n url_mp3: a.url_mp3 as string | undefined,\n url_wav: a.url_wav as string | undefined,\n duration_mp3: a.duration_mp3 as string | undefined,\n duration_wav: a.duration_wav as string | undefined,\n }))\n return { task_id: data.task_id as string, videos, audios }\n}\n","import type { KlingClient } from './client.js'\nimport type {\n TextToVideoInput, ImageToVideoInput, OmniVideoInput,\n ImageGenerationInput, OmniImageInput, VirtualTryOnInput,\n AvatarInput, LipSyncInput, EffectsInput, MotionControlInput,\n TtsInput, VideoToAudioInput, TextToAudioInput, CreateVoiceInput,\n MultiShotInput, ReferenceToImageInput, ExpandImageInput,\n ExtendVideoInput, IdentifyFaceInput, ImageRecognizeInput,\n ReferenceToVideoInput,\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n} from './types.js'\nimport { extractVideos, extractImages, extractAudios, extractJson, extractFace, extractMultiShot, extractVoices, extractVideoAudio } from './extract.js'\n\n/** Builds all 69 typed model functions bound to a client instance. */\nexport function createModels(client: KlingClient) {\n return {\n // ── text2video (9 models) ──────────────────────────────────────────────\n\n textToVideoV1Standard(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v1', mode: 'std' }, input, extractVideos)\n },\n textToVideoV1_6Pro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v1-6', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV1_6Standard(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v1-6', mode: 'std' }, input, extractVideos)\n },\n textToVideoV2Master(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-master' }, input, extractVideos)\n },\n textToVideoV2_1Master(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-1-master' }, input, extractVideos)\n },\n textToVideoV2_5TurboPro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-5-turbo', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV2_6Pro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-6', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV3Pro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v3', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV3Standard(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v3', mode: 'std' }, input, extractVideos)\n },\n\n // ── image2video (13 models) ────────────────────────────────────────────\n\n imageToVideoV1Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV1_5Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1-5', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV1_6Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1-6', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV1_6Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1-6', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV2Master(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-master' }, input, extractVideos)\n },\n imageToVideoV2_1Master(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-1-master' }, input, extractVideos)\n },\n imageToVideoV2_1Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-1', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV2_1Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-1', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV2_5TurboPro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-5-turbo', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV2_5TurboStandard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-5-turbo', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV2_6Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-6', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV3Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v3', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV3Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v3', mode: 'std' }, input, extractVideos)\n },\n\n // ── omni-video (17 models) ─────────────────────────────────────────────\n\n omniVideoO1ImageToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO1ReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO1StandardImageToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1StandardReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1StandardVideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1StandardVideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1VideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO1VideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO3ProImageToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProTextToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProVideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProVideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3StandardReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n omniVideoO3StandardTextToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n omniVideoO3StandardVideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n omniVideoO3StandardVideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n\n // ── images/generations (2 models) ──────────────────────────────────────\n\n imageV3TextToImage(input: ImageGenerationInput): Promise<KlingImageResult> {\n return client.execute('v1/images/generations', { model_name: 'kling-v3' }, input, extractImages)\n },\n imageV3ImageToImage(input: ImageGenerationInput): Promise<KlingImageResult> {\n return client.execute('v1/images/generations', { model_name: 'kling-v3' }, input, extractImages)\n },\n\n // ── images/omni-image (3 models) ───────────────────────────────────────\n\n imageO1(input: OmniImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/omni-image', { model_name: 'kling-image-o1' }, input, extractImages)\n },\n imageO3TextToImage(input: OmniImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/omni-image', { model_name: 'kling-v3-omni' }, input, extractImages)\n },\n imageO3ImageToImage(input: OmniImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/omni-image', { model_name: 'kling-v3-omni' }, input, extractImages)\n },\n\n // ── virtual-try-on (1 model) ───────────────────────────────────────────\n\n virtualTryOn(input: VirtualTryOnInput): Promise<KlingImageResult> {\n return client.execute('v1/images/kolors-virtual-try-on', { model_name: 'kolors-virtual-try-on-v1-5' }, input, extractImages)\n },\n\n // ── avatar (4 models) ──────────────────────────────────────────────────\n\n avatarV2Pro(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'pro' }, input, extractVideos)\n },\n avatarV2Standard(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'std' }, input, extractVideos)\n },\n avatarV1Pro(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'pro' }, input, extractVideos)\n },\n avatarV1Standard(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'std' }, input, extractVideos)\n },\n\n // ── lip-sync (2 models) ────────────────────────────────────────────────\n\n lipSyncAudioToVideo(input: LipSyncInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/advanced-lip-sync', {}, input, extractVideos)\n },\n lipSyncTextToVideo(input: LipSyncInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/advanced-lip-sync', {}, input, extractVideos)\n },\n\n // ── effects (4 models) ─────────────────────────────────────────────────\n\n effectsV1Standard(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n effectsV1_5Pro(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n effectsV1_6Pro(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n effectsV1_6Standard(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n\n // ── motion-control (4 models) ──────────────────────────────────────────\n\n motionControlV2_6Pro(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v2-6', mode: 'pro' }, input, extractVideos)\n },\n motionControlV2_6Standard(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v2-6', mode: 'std' }, input, extractVideos)\n },\n motionControlV3Pro(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v3', mode: 'pro' }, input, extractVideos)\n },\n motionControlV3Standard(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v3', mode: 'std' }, input, extractVideos)\n },\n\n // ── tts (1 model, sync) ────────────────────────────────────────────────\n\n tts(input: TtsInput): Promise<KlingAudioResult> {\n return client.execute('v1/audio/tts', {}, input, extractAudios, true)\n },\n\n // ── video-to-audio (1 model) ───────────────────────────────────────────\n\n videoToAudio(input: VideoToAudioInput): Promise<KlingVideoAudioResult> {\n return client.execute('v1/audio/video-to-audio', {}, input, extractVideoAudio)\n },\n\n // ── text-to-audio (1 model) ────────────────────────────────────────────\n\n textToAudio(input: TextToAudioInput): Promise<KlingAudioResult> {\n return client.execute('v1/audio/text-to-audio', {}, input, extractAudios)\n },\n\n // ── create-voice (1 model) ─────────────────────────────────────────────\n\n createVoice(input: CreateVoiceInput): Promise<KlingVoiceResult> {\n return client.execute('v1/general/custom-voices', {}, input, extractVoices)\n },\n\n // ── multi-shot (1 model) ───────────────────────────────────────────────\n\n multiShot(input: MultiShotInput): Promise<KlingMultiShotResult> {\n return client.execute('v1/general/ai-multi-shot', {}, input, extractMultiShot)\n },\n\n // ── reference-to-image (1 model) ───────────────────────────────────────\n\n referenceToImage(input: ReferenceToImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/multi-image2image', { model_name: 'kling-v2-1' }, input, extractImages)\n },\n\n // ── expand-image (1 model) ─────────────────────────────────────────────\n\n expandImage(input: ExpandImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/editing/expand', {}, input, extractImages)\n },\n\n // ── extend-video (1 model) ─────────────────────────────────────────────\n\n extendVideo(input: ExtendVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/video-extend', {}, input, extractVideos)\n },\n\n // ── identify-face (1 model) ────────────────────────────────────────────\n\n identifyFace(input: IdentifyFaceInput): Promise<KlingFaceResult> {\n return client.execute('v1/videos/identify-face', {}, input, extractFace, true)\n },\n\n // ── image-recognize (1 model, sync) ────────────────────────────────────\n\n imageRecognize(input: ImageRecognizeInput): Promise<KlingJsonResult> {\n return client.execute('v1/videos/image-recognize', {}, input, extractJson, true)\n },\n\n // ── reference-to-video (1 model) ──────────────────────────────────────\n\n referenceToVideo(input: ReferenceToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/multi-image2video', { model_name: 'kling-v1-6' }, input, extractVideos)\n },\n }\n}\n","import type { KlingConfig } from './types.js'\nimport { KlingClient } from './client.js'\nimport { createModels } from './models.js'\n\nexport type { KlingConfig } from './types.js'\nexport type {\n TextToVideoInput, ImageToVideoInput, OmniVideoInput,\n ImageGenerationInput, OmniImageInput, VirtualTryOnInput,\n AvatarInput, LipSyncInput, EffectsInput, MotionControlInput,\n TtsInput, VideoToAudioInput, TextToAudioInput, CreateVoiceInput,\n MultiShotInput, ReferenceToImageInput, ExpandImageInput,\n ExtendVideoInput, IdentifyFaceInput, ImageRecognizeInput,\n ReferenceToVideoInput,\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n} from './types.js'\nexport {\n KlingError, KlingAuthError, KlingRateLimitError,\n KlingApiError, KlingTimeoutError, KlingTaskFailedError,\n} from './errors.js'\nexport { generateJwt } from './auth.js'\nexport { KlingClient } from './client.js'\n\n/** Creates an isolated Kling client with its own credentials and settings. */\nexport function createClient(config: KlingConfig) {\n const client = new KlingClient()\n client.configure(config)\n return {\n configure: (c: KlingConfig) => client.configure(c),\n ...createModels(client),\n }\n}\n\n// Default instance — uses env vars unless configure() is called.\nconst defaultClient = new KlingClient()\n\nexport const kling = {\n configure: (config: KlingConfig) => defaultClient.configure(config),\n ...createModels(defaultClient),\n}\n","import type { ConfigureOptions } from \"./types.js\";\nimport { configureAuth } from \"./auth.js\";\nimport { configureStorage } from \"./storage.js\";\nimport { configureFetch } from \"./fetch.js\";\n\nexport function configure(options: ConfigureOptions): void {\n if (options.keys) {\n configureAuth(options.keys);\n }\n if (options.storage) {\n configureStorage(options.storage);\n }\n if (options.fetch) {\n configureFetch(options.fetch);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/kling/errors.ts","../src/providers/kling/auth.ts","../src/providers/kling/client.ts","../src/providers/kling/extract.ts","../src/providers/kling/models.ts","../src/providers/kling/index.ts","../deprecated/src/configure.ts"],"sourcesContent":["export class KlingError extends Error {\n readonly code: string\n constructor(code: string, message: string) {\n super(message)\n this.name = 'KlingError'\n this.code = code\n }\n}\n\nexport class KlingAuthError extends KlingError {\n constructor(message = 'Missing Kling credentials. Call kling.configure() or set KLING_ACCESS_KEY + KLING_SECRET_KEY.') {\n super('AUTH_ERROR', message)\n this.name = 'KlingAuthError'\n }\n}\n\nexport class KlingRateLimitError extends KlingError {\n readonly retryAfterMs: number\n readonly bodyCode: number | undefined\n readonly detail: string\n constructor(retryAfterMs: number, bodyCode?: number, detail?: string) {\n const msg = detail\n ? `Kling 429 (code ${bodyCode ?? 'unknown'}): ${detail}. Retry after ${retryAfterMs}ms.`\n : `Rate limited by Kling. Retry after ${retryAfterMs}ms.`\n super('RATE_LIMIT', msg)\n this.name = 'KlingRateLimitError'\n this.retryAfterMs = retryAfterMs\n this.bodyCode = bodyCode\n this.detail = detail ?? 'Rate limited'\n }\n}\n\nexport class KlingApiError extends KlingError {\n readonly statusCode: number\n readonly raw: unknown\n constructor(endpoint: string, statusCode: number, raw: unknown) {\n super('API_ERROR', `Kling API error ${statusCode} on ${endpoint}.`)\n this.name = 'KlingApiError'\n this.statusCode = statusCode\n this.raw = raw\n }\n}\n\nexport class KlingTimeoutError extends KlingError {\n readonly timeoutMs: number\n constructor(timeoutMs: number) {\n super('TIMEOUT', `Kling task timed out after ${timeoutMs}ms.`)\n this.name = 'KlingTimeoutError'\n this.timeoutMs = timeoutMs\n }\n}\n\nexport class KlingTaskFailedError extends KlingError {\n readonly taskId: string\n constructor(taskId: string, message: string) {\n super('TASK_FAILED', `Kling task ${taskId} failed: ${message}`)\n this.name = 'KlingTaskFailedError'\n this.taskId = taskId\n }\n}\n","import { createHmac } from 'crypto'\n\n/** Generates an HS256 JWT for Kling API authentication. */\nexport function generateJwt(accessKey: string, secretKey: string): string {\n const header = Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT' })).toString('base64url')\n const now = Math.floor(Date.now() / 1000)\n const payload = Buffer.from(JSON.stringify({\n iss: accessKey,\n exp: now + 1800,\n nbf: now - 5,\n })).toString('base64url')\n const signature = createHmac('sha256', secretKey)\n .update(`${header}.${payload}`)\n .digest('base64url')\n return `${header}.${payload}.${signature}`\n}\n\n/** Builds Authorization + Content-Type headers for a Kling API call. */\nexport function buildAuthHeaders(accessKey: string, secretKey: string): Record<string, string> {\n return {\n Authorization: `Bearer ${generateJwt(accessKey, secretKey)}`,\n 'Content-Type': 'application/json',\n }\n}\n","import type { KlingConfig, KlingApiResponse, PollOptions, AccountCostsInput, AccountCostsResult } from './types.js'\nimport { KlingAuthError, KlingRateLimitError, KlingApiError, KlingTimeoutError, KlingTaskFailedError } from './errors.js'\nimport { buildAuthHeaders } from './auth.js'\nimport type { Extractor } from './extract.js'\n\nconst API_BASE = 'https://api-singapore.klingai.com'\nconst DEFAULT_FETCH_TIMEOUT_MS = 30_000\nconst DEFAULT_POLL_TIMEOUT_MS = 300_000\nconst DEFAULT_POLL_INTERVAL_MS = 2_000\nconst POLL_BACKOFF_MULTIPLIER = 1.5\nconst MAX_POLL_INTERVAL_MS = 10_000\n\nconst SYNC_ENDPOINTS = new Set(['v1/audio/tts', 'v1/videos/image-recognize', 'v1/videos/identify-face'])\n\n/** Strips data URI prefix from base64 strings. Kling requires raw base64. */\nfunction cleanBase64(value: unknown): unknown {\n if (typeof value === 'string' && value.startsWith('data:')) {\n return value.split(',')[1] ?? value\n }\n if (Array.isArray(value)) {\n return value.map(cleanBase64)\n }\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = cleanBase64(v)\n }\n return result\n }\n return value\n}\n\n/** Kling API client. Holds auth state and HTTP configuration. */\nexport class KlingClient {\n private accessKey: string | null = null\n private secretKey: string | null = null\n private fetchTimeoutMs: number = DEFAULT_FETCH_TIMEOUT_MS\n\n /** Update credentials and settings. */\n configure(config: KlingConfig): void {\n this.accessKey = config.accessKey\n this.secretKey = config.secretKey\n if (config.fetchTimeoutMs !== undefined) {\n this.fetchTimeoutMs = config.fetchTimeoutMs\n }\n }\n\n private resolveAuth(): { accessKey: string; secretKey: string } {\n if (this.accessKey && this.secretKey) {\n return { accessKey: this.accessKey, secretKey: this.secretKey }\n }\n\n const ak = process.env.KLING_ACCESS_KEY?.trim()\n const sk = process.env.KLING_SECRET_KEY?.trim()\n if (ak && sk) return { accessKey: ak, secretKey: sk }\n\n throw new KlingAuthError()\n }\n\n // ── HTTP ─────────────────────────────────────────────────────────────────\n\n private async handleErrors(response: Response, endpoint: string): Promise<void> {\n if (response.ok) return\n\n let raw: unknown\n try { raw = await response.json() } catch { raw = await response.text().catch(() => null) }\n\n console.error(`[kling] ${response.status} on ${endpoint}:`, JSON.stringify(raw))\n\n if (response.status === 401) throw new KlingAuthError('Kling returned 401 Unauthorized.')\n if (response.status === 429) {\n const body = raw as Record<string, unknown> | null\n const code = body?.code as number | undefined\n const message = (body?.message as string) ?? 'Rate limited'\n const retryAfter = response.headers.get('retry-after')\n throw new KlingRateLimitError(\n retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000,\n code,\n message,\n )\n }\n\n throw new KlingApiError(endpoint, response.status, raw)\n }\n\n private handleBodyErrors(json: KlingApiResponse, endpoint: string): void {\n if (json.code === 0) return\n console.error(`[kling] body error on ${endpoint}: code=${json.code} message=${json.message}`)\n if (json.code >= 1000 && json.code <= 1004) {\n throw new KlingAuthError(`Kling auth error code ${json.code}: ${json.message}`)\n }\n if ((json.code >= 1100 && json.code <= 1102) || (json.code >= 1302 && json.code <= 1304)) {\n throw new KlingRateLimitError(5000, json.code, json.message)\n }\n throw new KlingApiError(endpoint, json.code, json)\n }\n\n private async httpSubmit(endpoint: string, body: Record<string, unknown>): Promise<KlingApiResponse> {\n const auth = this.resolveAuth()\n const url = `${API_BASE}/${endpoint}`\n const response = await fetch(url, {\n method: 'POST',\n headers: buildAuthHeaders(auth.accessKey, auth.secretKey),\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(this.fetchTimeoutMs),\n })\n await this.handleErrors(response, endpoint)\n const json = await response.json() as KlingApiResponse\n this.handleBodyErrors(json, endpoint)\n return json\n }\n\n private async httpGet(endpoint: string, params: Record<string, string>): Promise<KlingApiResponse> {\n const auth = this.resolveAuth()\n const qs = new URLSearchParams(params).toString()\n const url = `${API_BASE}/${endpoint}?${qs}`\n const response = await fetch(url, {\n headers: buildAuthHeaders(auth.accessKey, auth.secretKey),\n signal: AbortSignal.timeout(this.fetchTimeoutMs),\n })\n await this.handleErrors(response, endpoint)\n const json = await response.json() as KlingApiResponse\n this.handleBodyErrors(json, endpoint)\n return json\n }\n\n private async httpPoll(endpoint: string, taskId: string): Promise<KlingApiResponse> {\n const auth = this.resolveAuth()\n const url = `${API_BASE}/${endpoint}/${taskId}`\n const response = await fetch(url, {\n headers: buildAuthHeaders(auth.accessKey, auth.secretKey),\n signal: AbortSignal.timeout(this.fetchTimeoutMs),\n })\n await this.handleErrors(response, endpoint)\n const json = await response.json() as KlingApiResponse\n this.handleBodyErrors(json, endpoint)\n return json\n }\n\n // ── Account ──────────────────────────────────────────────────────────────\n\n async accountCosts(input: AccountCostsInput): Promise<AccountCostsResult> {\n const params: Record<string, string> = {\n start_time: String(input.start_time),\n end_time: String(input.end_time),\n }\n if (input.resource_pack_name !== undefined) {\n params.resource_pack_name = input.resource_pack_name\n }\n const json = await this.httpGet('account/costs', params)\n const data = json.data as Record<string, unknown>\n return {\n resource_pack_subscribe_infos: (data.resource_pack_subscribe_infos ?? []) as AccountCostsResult['resource_pack_subscribe_infos'],\n }\n }\n\n // ── Execute ──────────────────────────────────────────────────────────────\n\n async execute<T, I extends PollOptions & { options?: Record<string, unknown> }>(\n endpoint: string,\n defaults: Record<string, unknown>,\n input: I,\n extractor: Extractor<T>,\n sync?: boolean,\n ): Promise<T> {\n const { timeout, pollInterval, options, ...params } = input as PollOptions & { options?: Record<string, unknown> } & Record<string, unknown>\n const timeoutMs = timeout ?? DEFAULT_POLL_TIMEOUT_MS\n const initialIntervalMs = pollInterval ?? DEFAULT_POLL_INTERVAL_MS\n\n // Merge: user params > options passthrough > defaults\n const body: Record<string, unknown> = { ...params }\n if (options && typeof options === 'object') {\n for (const [key, val] of Object.entries(options as Record<string, unknown>)) {\n if (!(key in body)) body[key] = val\n }\n }\n for (const [key, val] of Object.entries(defaults)) {\n if (!(key in body)) body[key] = val\n }\n\n const cleanedBody = cleanBase64(body) as Record<string, unknown>\n\n // Submit\n const submitResult = await this.httpSubmit(endpoint, cleanedBody)\n const isSyncEndpoint = sync ?? SYNC_ENDPOINTS.has(endpoint)\n\n if (isSyncEndpoint) {\n return extractor(submitResult.data)\n }\n\n // Poll with exponential backoff\n const taskId = submitResult.data.task_id as string\n const deadline = Date.now() + timeoutMs\n let intervalMs = initialIntervalMs\n\n while (Date.now() < deadline) {\n await new Promise(resolve => setTimeout(resolve, intervalMs))\n intervalMs = Math.min(intervalMs * POLL_BACKOFF_MULTIPLIER, MAX_POLL_INTERVAL_MS)\n\n const pollResult = await this.httpPoll(endpoint, taskId)\n const status = pollResult.data.task_status as string\n\n if (status === 'failed') {\n throw new KlingTaskFailedError(taskId, (pollResult.data.task_status_msg as string) ?? 'Unknown error')\n }\n\n if (status === 'succeed') {\n return extractor(pollResult.data)\n }\n }\n\n throw new KlingTimeoutError(timeoutMs)\n }\n}\n","import type {\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n} from './types.js'\n\nexport type Extractor<T> = (data: Record<string, unknown>) => T\n\nexport function extractVideos(data: Record<string, unknown>): KlingVideoResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const videos = (taskResult?.videos ?? []) as Array<{ id: string; url: string; duration: string }>\n return { task_id: data.task_id as string, videos }\n}\n\nexport function extractImages(data: Record<string, unknown>): KlingImageResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const images = (taskResult?.images ?? []) as Array<{ index: number; url: string }>\n return { task_id: data.task_id as string, images }\n}\n\n/** Extracts audios, normalizing url_mp3/url_wav to url for endpoints that use them. */\nexport function extractAudios(data: Record<string, unknown>): KlingAudioResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const rawAudios = (taskResult?.audios ?? []) as Array<Record<string, unknown>>\n const audios = rawAudios.map(a => ({\n id: a.id as string,\n url: (a.url ?? a.url_mp3 ?? a.url_wav ?? '') as string,\n url_mp3: a.url_mp3 as string | undefined,\n url_wav: a.url_wav as string | undefined,\n duration: (a.duration ?? a.duration_mp3) as string | undefined,\n duration_mp3: a.duration_mp3 as string | undefined,\n duration_wav: a.duration_wav as string | undefined,\n }))\n return { task_id: data.task_id as string, audios }\n}\n\nexport function extractJson(data: Record<string, unknown>): KlingJsonResult {\n return { task_id: data.task_id as string, data: data.task_result ?? data }\n}\n\n/** Extracts identify-face sync response: session_id + face_data[]. */\nexport function extractFace(data: Record<string, unknown>): KlingFaceResult {\n return {\n session_id: data.session_id as string,\n face_data: (data.face_data ?? []) as KlingFaceResult['face_data'],\n }\n}\n\n/** Extracts multi-shot images with url_1, url_2, url_3 per image. */\nexport function extractMultiShot(data: Record<string, unknown>): KlingMultiShotResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const rawImages = (taskResult?.images ?? []) as Array<Record<string, unknown>>\n const images = rawImages.map((img, i) => ({\n index: (img.index as number) ?? i,\n url_1: img.url_1 as string,\n url_2: img.url_2 as string,\n url_3: img.url_3 as string,\n }))\n return { task_id: data.task_id as string, images }\n}\n\n/** Extracts voices[] from create-voice response. */\nexport function extractVoices(data: Record<string, unknown>): KlingVoiceResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const voices = (taskResult?.voices ?? []) as KlingVoiceResult['voices']\n return { task_id: data.task_id as string, voices }\n}\n\n/** Extracts video-to-audio response: both videos[] and audios[]. */\nexport function extractVideoAudio(data: Record<string, unknown>): KlingVideoAudioResult {\n const taskResult = data.task_result as Record<string, unknown> | undefined\n const videos = (taskResult?.videos ?? []) as Array<{ id: string; url: string; duration: string }>\n const rawAudios = (taskResult?.audios ?? []) as Array<Record<string, unknown>>\n const audios = rawAudios.map(a => ({\n id: a.id as string,\n url_mp3: a.url_mp3 as string | undefined,\n url_wav: a.url_wav as string | undefined,\n duration_mp3: a.duration_mp3 as string | undefined,\n duration_wav: a.duration_wav as string | undefined,\n }))\n return { task_id: data.task_id as string, videos, audios }\n}\n","import type { KlingClient } from './client.js'\nimport type {\n TextToVideoInput, ImageToVideoInput, OmniVideoInput,\n ImageGenerationInput, OmniImageInput, VirtualTryOnInput,\n AvatarInput, LipSyncInput, EffectsInput, MotionControlInput,\n TtsInput, VideoToAudioInput, TextToAudioInput, CreateVoiceInput,\n MultiShotInput, ReferenceToImageInput, ExpandImageInput,\n ExtendVideoInput, IdentifyFaceInput, ImageRecognizeInput,\n ReferenceToVideoInput, AccountCostsInput, AccountCostsResult,\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n} from './types.js'\nimport { extractVideos, extractImages, extractAudios, extractJson, extractFace, extractMultiShot, extractVoices, extractVideoAudio } from './extract.js'\n\n/** Builds all 69 typed model functions bound to a client instance. */\nexport function createModels(client: KlingClient) {\n return {\n // ── text2video (9 models) ──────────────────────────────────────────────\n\n textToVideoV1Standard(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v1', mode: 'std' }, input, extractVideos)\n },\n textToVideoV1_6Pro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v1-6', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV1_6Standard(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v1-6', mode: 'std' }, input, extractVideos)\n },\n textToVideoV2Master(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-master' }, input, extractVideos)\n },\n textToVideoV2_1Master(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-1-master' }, input, extractVideos)\n },\n textToVideoV2_5TurboPro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-5-turbo', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV2_6Pro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v2-6', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV3Pro(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v3', mode: 'pro' }, input, extractVideos)\n },\n textToVideoV3Standard(input: TextToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/text2video', { model_name: 'kling-v3', mode: 'std' }, input, extractVideos)\n },\n\n // ── image2video (13 models) ────────────────────────────────────────────\n\n imageToVideoV1Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV1_5Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1-5', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV1_6Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1-6', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV1_6Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v1-6', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV2Master(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-master' }, input, extractVideos)\n },\n imageToVideoV2_1Master(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-1-master' }, input, extractVideos)\n },\n imageToVideoV2_1Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-1', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV2_1Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-1', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV2_5TurboPro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-5-turbo', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV2_5TurboStandard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-5-turbo', mode: 'std' }, input, extractVideos)\n },\n imageToVideoV2_6Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v2-6', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV3Pro(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v3', mode: 'pro' }, input, extractVideos)\n },\n imageToVideoV3Standard(input: ImageToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/image2video', { model_name: 'kling-v3', mode: 'std' }, input, extractVideos)\n },\n\n // ── omni-video (17 models) ─────────────────────────────────────────────\n\n omniVideoO1ImageToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO1ReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO1StandardImageToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1StandardReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1StandardVideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1StandardVideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1', mode: 'std' }, input, extractVideos)\n },\n omniVideoO1VideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO1VideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-video-o1' }, input, extractVideos)\n },\n omniVideoO3ProImageToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProTextToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProVideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3ProVideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'pro' }, input, extractVideos)\n },\n omniVideoO3StandardReferenceToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n omniVideoO3StandardTextToVideo(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n omniVideoO3StandardVideoEdit(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n omniVideoO3StandardVideoReference(input: OmniVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/omni-video', { model_name: 'kling-v3-omni', mode: 'std' }, input, extractVideos)\n },\n\n // ── images/generations (2 models) ──────────────────────────────────────\n\n imageV3TextToImage(input: ImageGenerationInput): Promise<KlingImageResult> {\n return client.execute('v1/images/generations', { model_name: 'kling-v3' }, input, extractImages)\n },\n imageV3ImageToImage(input: ImageGenerationInput): Promise<KlingImageResult> {\n return client.execute('v1/images/generations', { model_name: 'kling-v3' }, input, extractImages)\n },\n\n // ── images/omni-image (3 models) ───────────────────────────────────────\n\n imageO1(input: OmniImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/omni-image', { model_name: 'kling-image-o1' }, input, extractImages)\n },\n imageO3TextToImage(input: OmniImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/omni-image', { model_name: 'kling-v3-omni' }, input, extractImages)\n },\n imageO3ImageToImage(input: OmniImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/omni-image', { model_name: 'kling-v3-omni' }, input, extractImages)\n },\n\n // ── virtual-try-on (1 model) ───────────────────────────────────────────\n\n virtualTryOn(input: VirtualTryOnInput): Promise<KlingImageResult> {\n return client.execute('v1/images/kolors-virtual-try-on', { model_name: 'kolors-virtual-try-on-v1-5' }, input, extractImages)\n },\n\n // ── avatar (4 models) ──────────────────────────────────────────────────\n\n avatarV2Pro(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'pro' }, input, extractVideos)\n },\n avatarV2Standard(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'std' }, input, extractVideos)\n },\n avatarV1Pro(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'pro' }, input, extractVideos)\n },\n avatarV1Standard(input: AvatarInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/avatar/image2video', { mode: 'std' }, input, extractVideos)\n },\n\n // ── lip-sync (2 models) ────────────────────────────────────────────────\n\n lipSyncAudioToVideo(input: LipSyncInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/advanced-lip-sync', {}, input, extractVideos)\n },\n lipSyncTextToVideo(input: LipSyncInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/advanced-lip-sync', {}, input, extractVideos)\n },\n\n // ── effects (4 models) ─────────────────────────────────────────────────\n\n effectsV1Standard(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n effectsV1_5Pro(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n effectsV1_6Pro(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n effectsV1_6Standard(input: EffectsInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/effects', {}, input, extractVideos)\n },\n\n // ── motion-control (4 models) ──────────────────────────────────────────\n\n motionControlV2_6Pro(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v2-6', mode: 'pro' }, input, extractVideos)\n },\n motionControlV2_6Standard(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v2-6', mode: 'std' }, input, extractVideos)\n },\n motionControlV3Pro(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v3', mode: 'pro' }, input, extractVideos)\n },\n motionControlV3Standard(input: MotionControlInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/motion-control', { model_name: 'kling-v3', mode: 'std' }, input, extractVideos)\n },\n\n // ── tts (1 model, sync) ────────────────────────────────────────────────\n\n tts(input: TtsInput): Promise<KlingAudioResult> {\n return client.execute('v1/audio/tts', {}, input, extractAudios, true)\n },\n\n // ── video-to-audio (1 model) ───────────────────────────────────────────\n\n videoToAudio(input: VideoToAudioInput): Promise<KlingVideoAudioResult> {\n return client.execute('v1/audio/video-to-audio', {}, input, extractVideoAudio)\n },\n\n // ── text-to-audio (1 model) ────────────────────────────────────────────\n\n textToAudio(input: TextToAudioInput): Promise<KlingAudioResult> {\n return client.execute('v1/audio/text-to-audio', {}, input, extractAudios)\n },\n\n // ── create-voice (1 model) ─────────────────────────────────────────────\n\n createVoice(input: CreateVoiceInput): Promise<KlingVoiceResult> {\n return client.execute('v1/general/custom-voices', {}, input, extractVoices)\n },\n\n // ── multi-shot (1 model) ───────────────────────────────────────────────\n\n multiShot(input: MultiShotInput): Promise<KlingMultiShotResult> {\n return client.execute('v1/general/ai-multi-shot', {}, input, extractMultiShot)\n },\n\n // ── reference-to-image (1 model) ───────────────────────────────────────\n\n referenceToImage(input: ReferenceToImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/multi-image2image', { model_name: 'kling-v2-1' }, input, extractImages)\n },\n\n // ── expand-image (1 model) ─────────────────────────────────────────────\n\n expandImage(input: ExpandImageInput): Promise<KlingImageResult> {\n return client.execute('v1/images/editing/expand', {}, input, extractImages)\n },\n\n // ── extend-video (1 model) ─────────────────────────────────────────────\n\n extendVideo(input: ExtendVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/video-extend', {}, input, extractVideos)\n },\n\n // ── identify-face (1 model) ────────────────────────────────────────────\n\n identifyFace(input: IdentifyFaceInput): Promise<KlingFaceResult> {\n return client.execute('v1/videos/identify-face', {}, input, extractFace, true)\n },\n\n // ── image-recognize (1 model, sync) ────────────────────────────────────\n\n imageRecognize(input: ImageRecognizeInput): Promise<KlingJsonResult> {\n return client.execute('v1/videos/image-recognize', {}, input, extractJson, true)\n },\n\n // ── reference-to-video (1 model) ──────────────────────────────────────\n\n referenceToVideo(input: ReferenceToVideoInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/multi-image2video', { model_name: 'kling-v1-6' }, input, extractVideos)\n },\n\n // ── account ───────────────────────────────────────────────────────────\n\n accountCosts(input: AccountCostsInput): Promise<AccountCostsResult> {\n return client.accountCosts(input)\n },\n }\n}\n","import type { KlingConfig } from './types.js'\nimport { KlingClient } from './client.js'\nimport { createModels } from './models.js'\n\nexport type { KlingConfig } from './types.js'\nexport type {\n TextToVideoInput, ImageToVideoInput, OmniVideoInput,\n ImageGenerationInput, OmniImageInput, VirtualTryOnInput,\n AvatarInput, LipSyncInput, EffectsInput, MotionControlInput,\n TtsInput, VideoToAudioInput, TextToAudioInput, CreateVoiceInput,\n MultiShotInput, ReferenceToImageInput, ExpandImageInput,\n ExtendVideoInput, IdentifyFaceInput, ImageRecognizeInput,\n ReferenceToVideoInput, AccountCostsInput, AccountCostsResult, ResourcePackInfo,\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n} from './types.js'\nexport {\n KlingError, KlingAuthError, KlingRateLimitError,\n KlingApiError, KlingTimeoutError, KlingTaskFailedError,\n} from './errors.js'\nexport { generateJwt } from './auth.js'\nexport { KlingClient } from './client.js'\n\n/** Creates an isolated Kling client with its own credentials and settings. */\nexport function createClient(config: KlingConfig) {\n const client = new KlingClient()\n client.configure(config)\n return {\n configure: (c: KlingConfig) => client.configure(c),\n ...createModels(client),\n }\n}\n\n// Default instance — uses env vars unless configure() is called.\nconst defaultClient = new KlingClient()\n\nexport const kling = {\n configure: (config: KlingConfig) => defaultClient.configure(config),\n ...createModels(defaultClient),\n}\n","import type { ConfigureOptions } from \"./types.js\";\nimport { configureAuth } from \"./auth.js\";\nimport { configureStorage } from \"./storage.js\";\nimport { configureFetch } from \"./fetch.js\";\n\nexport function configure(options: ConfigureOptions): void {\n if (options.keys) {\n configureAuth(options.keys);\n }\n if (options.storage) {\n configureStorage(options.storage);\n }\n if (options.fetch) {\n configureFetch(options.fetch);\n }\n}\n"],"mappings":"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","names":[]}
|