getaiapi 2.0.0 → 2.1.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/README.md +176 -1
- package/dist/index.d.ts +273 -1
- package/dist/index.js +374 -72
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ npm install getaiapi
|
|
|
16
16
|
|
|
17
17
|
## Kling AI
|
|
18
18
|
|
|
19
|
-
69 models
|
|
19
|
+
69 generation models plus 45 management, list, and query functions. Each model is a typed function with Kling-native field names.
|
|
20
20
|
|
|
21
21
|
### Setup
|
|
22
22
|
|
|
@@ -535,6 +535,181 @@ 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
|
+
|
|
581
|
+
### Element Library
|
|
582
|
+
|
|
583
|
+
Create reusable characters/objects (elements) from images or video, then reference them in generation tasks via `element_list`.
|
|
584
|
+
|
|
585
|
+
```typescript
|
|
586
|
+
// Create a custom element (async — polls until ready)
|
|
587
|
+
const el = await kling.createElement({
|
|
588
|
+
element_name: 'My Character',
|
|
589
|
+
element_description: 'A hero in a red cape',
|
|
590
|
+
reference_type: 'image_refer',
|
|
591
|
+
element_image_list: {
|
|
592
|
+
frontal_image: 'https://example.com/frontal.jpg',
|
|
593
|
+
refer_images: [{ image_url: 'https://example.com/side.jpg' }],
|
|
594
|
+
},
|
|
595
|
+
})
|
|
596
|
+
|
|
597
|
+
// Use element_id in video generation
|
|
598
|
+
await kling.imageToVideoV2_1Master({
|
|
599
|
+
image: 'https://example.com/scene.jpg',
|
|
600
|
+
prompt: 'Character walks forward',
|
|
601
|
+
element_list: [{ id: el.element_id, image: 'https://example.com/frontal.jpg' }],
|
|
602
|
+
})
|
|
603
|
+
|
|
604
|
+
// List all custom elements (paginated)
|
|
605
|
+
const { elements } = await kling.listElements({ pageNum: 1, pageSize: 30 })
|
|
606
|
+
|
|
607
|
+
// List official preset elements
|
|
608
|
+
const { elements: presets } = await kling.listPresetElements()
|
|
609
|
+
|
|
610
|
+
// Delete a custom element
|
|
611
|
+
await kling.deleteElement({ element_id: el.element_id })
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
**`createElement` input: `CreateElementInput`**
|
|
615
|
+
|
|
616
|
+
```typescript
|
|
617
|
+
{
|
|
618
|
+
element_name: string // required — max 20 chars
|
|
619
|
+
element_description: string // required — max 100 chars
|
|
620
|
+
reference_type: 'image_refer' | 'video_refer' // required
|
|
621
|
+
element_image_list?: { // required when image_refer
|
|
622
|
+
frontal_image: string // front-facing image URL or base64
|
|
623
|
+
refer_images?: Array<{ image_url: string }> // 1–3 additional angles
|
|
624
|
+
}
|
|
625
|
+
element_video_list?: { // required when video_refer
|
|
626
|
+
refer_videos: Array<{ video_url: string }> // 1 video, .mp4/.mov, 3–8s
|
|
627
|
+
}
|
|
628
|
+
element_voice_id?: string
|
|
629
|
+
tag_list?: Array<{ tag_id: string }> // o_101–o_108
|
|
630
|
+
callback_url?: string
|
|
631
|
+
external_task_id?: string
|
|
632
|
+
timeout?: number // poll timeout ms
|
|
633
|
+
}
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
**`createElement` output: `ElementResult`**
|
|
637
|
+
|
|
638
|
+
```typescript
|
|
639
|
+
{
|
|
640
|
+
element_id: string
|
|
641
|
+
element_name: string
|
|
642
|
+
element_description: string
|
|
643
|
+
reference_type: 'image_refer' | 'video_refer'
|
|
644
|
+
status: string
|
|
645
|
+
owned_by?: string
|
|
646
|
+
element_voice_id?: string
|
|
647
|
+
tag_list?: Array<{ tag_id: string; tag_name?: string }>
|
|
648
|
+
element_image_list?: { frontal_image: string; refer_images?: Array<{ image_url: string }> }
|
|
649
|
+
element_video_list?: { refer_videos: Array<{ video_url: string }> }
|
|
650
|
+
}
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
### Voice Management
|
|
654
|
+
|
|
655
|
+
```typescript
|
|
656
|
+
import { kling } from 'getaiapi'
|
|
657
|
+
|
|
658
|
+
// List custom voices (paginated)
|
|
659
|
+
const { voices } = await kling.listVoices({ pageNum: 1, pageSize: 30 })
|
|
660
|
+
|
|
661
|
+
// List preset voices from Kling's library
|
|
662
|
+
const { voices: presets } = await kling.listPresetVoices()
|
|
663
|
+
|
|
664
|
+
// Query a single voice creation task
|
|
665
|
+
const result = await kling.queryVoice('task-id')
|
|
666
|
+
|
|
667
|
+
// Delete a custom voice
|
|
668
|
+
await kling.deleteVoice('voice-id')
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
### Multi-Elements Video Workflow
|
|
672
|
+
|
|
673
|
+
```typescript
|
|
674
|
+
import { kling } from 'getaiapi'
|
|
675
|
+
|
|
676
|
+
// Step 1: Initialize video
|
|
677
|
+
const { session_id } = await kling.initMultiElementsSelection({ video_url: 'https://...' })
|
|
678
|
+
|
|
679
|
+
// Step 2: Click points to select an area
|
|
680
|
+
await kling.addSelectionArea({ session_id, frame_index: 10, points: [{ x: 0.5, y: 0.5 }] })
|
|
681
|
+
|
|
682
|
+
// Step 5: Preview selection
|
|
683
|
+
const preview = await kling.previewSelection({ session_id })
|
|
684
|
+
|
|
685
|
+
// Step 6: Generate edited video (polls until complete)
|
|
686
|
+
const video = await kling.generateMultiElementsVideo({
|
|
687
|
+
session_id,
|
|
688
|
+
edit_mode: 'swap',
|
|
689
|
+
image_list: [{ image: 'https://...' }],
|
|
690
|
+
prompt: 'swap <<<image_1>>> for element from <<<video_1>>>',
|
|
691
|
+
})
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
### List & Query Historical Tasks
|
|
695
|
+
|
|
696
|
+
Every generation endpoint has a list function (paginated) and a single-task query function:
|
|
697
|
+
|
|
698
|
+
```typescript
|
|
699
|
+
// List recent tasks (all generation types)
|
|
700
|
+
const { tasks } = await kling.listImageToVideoTasks({ pageNum: 1, pageSize: 20 })
|
|
701
|
+
const { tasks: videoTasks } = await kling.listTextToAudioTasks()
|
|
702
|
+
|
|
703
|
+
// Query a single task result by ID (returns same typed result as the generation function)
|
|
704
|
+
const video = await kling.getImageToVideoTask('task-id') // KlingVideoResult
|
|
705
|
+
const audio = await kling.getTextToAudioTask('task-id') // KlingAudioResult
|
|
706
|
+
const image = await kling.getImageGenerationTask('task-id') // KlingImageResult
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
Available list functions: `listLipSyncTasks`, `listTextToAudioTasks`, `listVideoEffectsTasks`, `listImageGenerationTasks`, `listOmniVideoTasks`, `listMultiShotTasks`, `listImageToVideoTasks`, `listOmniImageTasks`, `listReferenceToImageTasks`, `listVirtualTryOnTasks`, `listMotionControlTasks`, `listExtendVideoTasks`, `listAvatarTasks`.
|
|
710
|
+
|
|
711
|
+
Available query functions: `getLipSyncTask`, `getTextToAudioTask`, `getVideoEffectsTask`, `getImageGenerationTask`, `getOmniVideoTask`, `getMultiShotTask`, `getImageToVideoTask`, `getOmniImageTask`, `getReferenceToImageTask`, `getVirtualTryOnTask`, `getMotionControlTask`, `getExtendVideoTask`, `getAvatarTask`.
|
|
712
|
+
|
|
538
713
|
## Output Types
|
|
539
714
|
|
|
540
715
|
All functions return typed results based on output modality:
|
package/dist/index.d.ts
CHANGED
|
@@ -261,6 +261,167 @@ interface KlingVideoAudioResult {
|
|
|
261
261
|
duration_wav?: string;
|
|
262
262
|
}>;
|
|
263
263
|
}
|
|
264
|
+
interface CreateElementInput extends PollOptions {
|
|
265
|
+
element_name: string;
|
|
266
|
+
element_description: string;
|
|
267
|
+
/** `"image_refer"` = multi-image based; `"video_refer"` = video character based. */
|
|
268
|
+
reference_type: 'image_refer' | 'video_refer';
|
|
269
|
+
/** Required when reference_type is `"image_refer"`. */
|
|
270
|
+
element_image_list?: {
|
|
271
|
+
frontal_image: string;
|
|
272
|
+
refer_images?: Array<{
|
|
273
|
+
image_url: string;
|
|
274
|
+
}>;
|
|
275
|
+
};
|
|
276
|
+
/** Required when reference_type is `"video_refer"`. */
|
|
277
|
+
element_video_list?: {
|
|
278
|
+
refer_videos: Array<{
|
|
279
|
+
video_url: string;
|
|
280
|
+
}>;
|
|
281
|
+
};
|
|
282
|
+
element_voice_id?: string;
|
|
283
|
+
tag_list?: Array<{
|
|
284
|
+
tag_id: string;
|
|
285
|
+
}>;
|
|
286
|
+
callback_url?: string;
|
|
287
|
+
external_task_id?: string;
|
|
288
|
+
}
|
|
289
|
+
interface ElementTag {
|
|
290
|
+
tag_id: string;
|
|
291
|
+
tag_name?: string;
|
|
292
|
+
}
|
|
293
|
+
interface ElementResult {
|
|
294
|
+
element_id: string;
|
|
295
|
+
element_name: string;
|
|
296
|
+
element_description: string;
|
|
297
|
+
reference_type: 'image_refer' | 'video_refer';
|
|
298
|
+
status: string;
|
|
299
|
+
owned_by?: string;
|
|
300
|
+
element_voice_id?: string;
|
|
301
|
+
tag_list?: ElementTag[];
|
|
302
|
+
element_image_list?: {
|
|
303
|
+
frontal_image: string;
|
|
304
|
+
refer_images?: Array<{
|
|
305
|
+
image_url: string;
|
|
306
|
+
}>;
|
|
307
|
+
};
|
|
308
|
+
element_video_list?: {
|
|
309
|
+
refer_videos: Array<{
|
|
310
|
+
video_url: string;
|
|
311
|
+
}>;
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
interface ElementListInput {
|
|
315
|
+
pageNum?: number;
|
|
316
|
+
pageSize?: number;
|
|
317
|
+
}
|
|
318
|
+
interface ElementListResult {
|
|
319
|
+
elements: ElementResult[];
|
|
320
|
+
}
|
|
321
|
+
interface DeleteElementInput {
|
|
322
|
+
element_id: string;
|
|
323
|
+
}
|
|
324
|
+
interface AccountCostsInput {
|
|
325
|
+
/** Query start time, Unix timestamp in ms. */
|
|
326
|
+
start_time: number;
|
|
327
|
+
/** Query end time, Unix timestamp in ms. */
|
|
328
|
+
end_time: number;
|
|
329
|
+
/** Optional filter by exact resource package name. */
|
|
330
|
+
resource_pack_name?: string;
|
|
331
|
+
}
|
|
332
|
+
interface ResourcePackInfo {
|
|
333
|
+
resource_pack_name: string;
|
|
334
|
+
resource_pack_id: string;
|
|
335
|
+
/** `"decreasing_total"` = fixed pool; `"constant_period"` = periodic refresh. */
|
|
336
|
+
resource_pack_type: 'decreasing_total' | 'constant_period';
|
|
337
|
+
total_quantity: number;
|
|
338
|
+
/** Remaining units — has a 12-hour reporting delay. */
|
|
339
|
+
remaining_quantity: number;
|
|
340
|
+
purchase_time: number;
|
|
341
|
+
effective_time: number;
|
|
342
|
+
invalid_time: number;
|
|
343
|
+
status: 'toBeOnline' | 'online' | 'expired' | 'runOut';
|
|
344
|
+
}
|
|
345
|
+
interface AccountCostsResult {
|
|
346
|
+
resource_pack_subscribe_infos: ResourcePackInfo[];
|
|
347
|
+
}
|
|
348
|
+
interface KlingListParams {
|
|
349
|
+
pageNum?: number;
|
|
350
|
+
pageSize?: number;
|
|
351
|
+
}
|
|
352
|
+
interface VoiceInfo {
|
|
353
|
+
voice_id: string;
|
|
354
|
+
voice_name: string;
|
|
355
|
+
trial_url?: string;
|
|
356
|
+
owned_by?: string;
|
|
357
|
+
status?: string;
|
|
358
|
+
}
|
|
359
|
+
interface KlingVoiceListResult {
|
|
360
|
+
voices: VoiceInfo[];
|
|
361
|
+
}
|
|
362
|
+
interface KlingTaskListResult {
|
|
363
|
+
tasks: Array<Record<string, unknown>>;
|
|
364
|
+
}
|
|
365
|
+
interface MultiElementsInitInput {
|
|
366
|
+
video_id?: string;
|
|
367
|
+
video_url?: string;
|
|
368
|
+
}
|
|
369
|
+
interface MultiElementsInitResult {
|
|
370
|
+
status: number;
|
|
371
|
+
session_id: string;
|
|
372
|
+
fps?: number;
|
|
373
|
+
original_duration?: number;
|
|
374
|
+
width?: number;
|
|
375
|
+
height?: number;
|
|
376
|
+
total_frame?: number;
|
|
377
|
+
normalized_video?: string;
|
|
378
|
+
}
|
|
379
|
+
interface MultiElementsPoint {
|
|
380
|
+
x: number;
|
|
381
|
+
y: number;
|
|
382
|
+
}
|
|
383
|
+
interface MultiElementsAddSelectionInput {
|
|
384
|
+
session_id: string;
|
|
385
|
+
frame_index: number;
|
|
386
|
+
points: MultiElementsPoint[];
|
|
387
|
+
}
|
|
388
|
+
interface MultiElementsSelectionResult {
|
|
389
|
+
rle_mask?: unknown;
|
|
390
|
+
png_mask?: string;
|
|
391
|
+
}
|
|
392
|
+
interface MultiElementsDeleteSelectionInput {
|
|
393
|
+
session_id: string;
|
|
394
|
+
frame_index: number;
|
|
395
|
+
points: MultiElementsPoint[];
|
|
396
|
+
}
|
|
397
|
+
interface MultiElementsClearSelectionInput {
|
|
398
|
+
session_id: string;
|
|
399
|
+
}
|
|
400
|
+
interface MultiElementsPreviewInput {
|
|
401
|
+
session_id: string;
|
|
402
|
+
}
|
|
403
|
+
interface MultiElementsPreviewResult {
|
|
404
|
+
video?: string;
|
|
405
|
+
video_cover?: string;
|
|
406
|
+
tracking_output?: unknown;
|
|
407
|
+
}
|
|
408
|
+
interface MultiElementsGenerateInput extends PollOptions {
|
|
409
|
+
session_id: string;
|
|
410
|
+
edit_mode: 'addition' | 'swap' | 'removal';
|
|
411
|
+
image_list?: Array<{
|
|
412
|
+
image: string;
|
|
413
|
+
}>;
|
|
414
|
+
prompt: string;
|
|
415
|
+
negative_prompt?: string;
|
|
416
|
+
model_name?: string;
|
|
417
|
+
mode?: 'std' | 'pro';
|
|
418
|
+
duration?: '5' | '10';
|
|
419
|
+
watermark_info?: {
|
|
420
|
+
enabled: boolean;
|
|
421
|
+
};
|
|
422
|
+
callback_url?: string;
|
|
423
|
+
external_task_id?: string;
|
|
424
|
+
}
|
|
264
425
|
|
|
265
426
|
declare class KlingError extends Error {
|
|
266
427
|
readonly code: string;
|
|
@@ -271,7 +432,9 @@ declare class KlingAuthError extends KlingError {
|
|
|
271
432
|
}
|
|
272
433
|
declare class KlingRateLimitError extends KlingError {
|
|
273
434
|
readonly retryAfterMs: number;
|
|
274
|
-
|
|
435
|
+
readonly bodyCode: number | undefined;
|
|
436
|
+
readonly detail: string;
|
|
437
|
+
constructor(retryAfterMs: number, bodyCode?: number, detail?: string);
|
|
275
438
|
}
|
|
276
439
|
declare class KlingApiError extends KlingError {
|
|
277
440
|
readonly statusCode: number;
|
|
@@ -303,7 +466,28 @@ declare class KlingClient {
|
|
|
303
466
|
private handleErrors;
|
|
304
467
|
private handleBodyErrors;
|
|
305
468
|
private httpSubmit;
|
|
469
|
+
private httpGet;
|
|
306
470
|
private httpPoll;
|
|
471
|
+
accountCosts(input: AccountCostsInput): Promise<AccountCostsResult>;
|
|
472
|
+
elementList(input: ElementListInput): Promise<ElementListResult>;
|
|
473
|
+
presetElementList(): Promise<ElementListResult>;
|
|
474
|
+
deleteElement(input: DeleteElementInput): Promise<void>;
|
|
475
|
+
/** GET a paginated task list from any endpoint. */
|
|
476
|
+
taskList(endpoint: string, params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
477
|
+
/** GET a single task by ID from any endpoint and run it through an extractor. */
|
|
478
|
+
taskGet<T>(endpoint: string, taskId: string, extractor: Extractor<T>): Promise<T>;
|
|
479
|
+
listVoices(params?: KlingListParams): Promise<KlingVoiceListResult>;
|
|
480
|
+
listPresetVoices(params?: KlingListParams): Promise<KlingVoiceListResult>;
|
|
481
|
+
queryVoice(taskId: string): Promise<KlingVoiceResult>;
|
|
482
|
+
deleteVoice(voiceId: string): Promise<void>;
|
|
483
|
+
getElement(taskId: string): Promise<ElementResult>;
|
|
484
|
+
initMultiElementsSelection(input: MultiElementsInitInput): Promise<MultiElementsInitResult>;
|
|
485
|
+
addSelectionArea(input: MultiElementsAddSelectionInput): Promise<MultiElementsSelectionResult>;
|
|
486
|
+
deleteSelectionArea(input: MultiElementsDeleteSelectionInput): Promise<MultiElementsSelectionResult>;
|
|
487
|
+
clearSelectionArea(input: MultiElementsClearSelectionInput): Promise<void>;
|
|
488
|
+
previewSelection(input: MultiElementsPreviewInput): Promise<MultiElementsPreviewResult>;
|
|
489
|
+
queryMultiElementsTask(taskId: string): Promise<KlingTaskListResult['tasks'][0]>;
|
|
490
|
+
listMultiElementsTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
307
491
|
execute<T, I extends PollOptions & {
|
|
308
492
|
options?: Record<string, unknown>;
|
|
309
493
|
}>(endpoint: string, defaults: Record<string, unknown>, input: I, extractor: Extractor<T>, sync?: boolean): Promise<T>;
|
|
@@ -381,6 +565,50 @@ declare function createClient(config: KlingConfig): {
|
|
|
381
565
|
identifyFace(input: IdentifyFaceInput): Promise<KlingFaceResult>;
|
|
382
566
|
imageRecognize(input: ImageRecognizeInput): Promise<KlingJsonResult>;
|
|
383
567
|
referenceToVideo(input: ReferenceToVideoInput): Promise<KlingVideoResult>;
|
|
568
|
+
accountCosts(input: AccountCostsInput): Promise<AccountCostsResult>;
|
|
569
|
+
createElement(input: CreateElementInput): Promise<ElementResult>;
|
|
570
|
+
listElements(input?: ElementListInput): Promise<ElementListResult>;
|
|
571
|
+
listPresetElements(): Promise<ElementListResult>;
|
|
572
|
+
deleteElement(input: DeleteElementInput): Promise<void>;
|
|
573
|
+
listVoices(params?: KlingListParams): Promise<KlingVoiceListResult>;
|
|
574
|
+
listPresetVoices(params?: KlingListParams): Promise<KlingVoiceListResult>;
|
|
575
|
+
queryVoice(taskId: string): Promise<KlingVoiceResult>;
|
|
576
|
+
deleteVoice(voiceId: string): Promise<void>;
|
|
577
|
+
getElement(taskId: string): Promise<ElementResult>;
|
|
578
|
+
initMultiElementsSelection(input: MultiElementsInitInput): Promise<MultiElementsInitResult>;
|
|
579
|
+
addSelectionArea(input: MultiElementsAddSelectionInput): Promise<MultiElementsSelectionResult>;
|
|
580
|
+
deleteSelectionArea(input: MultiElementsDeleteSelectionInput): Promise<MultiElementsSelectionResult>;
|
|
581
|
+
clearSelectionArea(input: MultiElementsClearSelectionInput): Promise<void>;
|
|
582
|
+
previewSelection(input: MultiElementsPreviewInput): Promise<MultiElementsPreviewResult>;
|
|
583
|
+
generateMultiElementsVideo(input: MultiElementsGenerateInput): Promise<KlingVideoResult>;
|
|
584
|
+
queryMultiElementsTask(taskId: string): Promise<KlingTaskListResult["tasks"][0]>;
|
|
585
|
+
listMultiElementsTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
586
|
+
listLipSyncTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
587
|
+
listTextToAudioTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
588
|
+
listVideoEffectsTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
589
|
+
listImageGenerationTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
590
|
+
listOmniVideoTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
591
|
+
listMultiShotTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
592
|
+
listImageToVideoTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
593
|
+
listOmniImageTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
594
|
+
listReferenceToImageTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
595
|
+
listVirtualTryOnTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
596
|
+
listMotionControlTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
597
|
+
listExtendVideoTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
598
|
+
listAvatarTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
599
|
+
getLipSyncTask(taskId: string): Promise<KlingVideoResult>;
|
|
600
|
+
getTextToAudioTask(taskId: string): Promise<KlingAudioResult>;
|
|
601
|
+
getVideoEffectsTask(taskId: string): Promise<KlingVideoResult>;
|
|
602
|
+
getImageGenerationTask(taskId: string): Promise<KlingImageResult>;
|
|
603
|
+
getOmniVideoTask(taskId: string): Promise<KlingVideoResult>;
|
|
604
|
+
getMultiShotTask(taskId: string): Promise<KlingMultiShotResult>;
|
|
605
|
+
getImageToVideoTask(taskId: string): Promise<KlingVideoResult>;
|
|
606
|
+
getOmniImageTask(taskId: string): Promise<KlingImageResult>;
|
|
607
|
+
getReferenceToImageTask(taskId: string): Promise<KlingImageResult>;
|
|
608
|
+
getVirtualTryOnTask(taskId: string): Promise<KlingImageResult>;
|
|
609
|
+
getMotionControlTask(taskId: string): Promise<KlingVideoResult>;
|
|
610
|
+
getExtendVideoTask(taskId: string): Promise<KlingVideoResult>;
|
|
611
|
+
getAvatarTask(taskId: string): Promise<KlingVideoResult>;
|
|
384
612
|
configure: (c: KlingConfig) => void;
|
|
385
613
|
};
|
|
386
614
|
declare const kling: {
|
|
@@ -454,6 +682,50 @@ declare const kling: {
|
|
|
454
682
|
identifyFace(input: IdentifyFaceInput): Promise<KlingFaceResult>;
|
|
455
683
|
imageRecognize(input: ImageRecognizeInput): Promise<KlingJsonResult>;
|
|
456
684
|
referenceToVideo(input: ReferenceToVideoInput): Promise<KlingVideoResult>;
|
|
685
|
+
accountCosts(input: AccountCostsInput): Promise<AccountCostsResult>;
|
|
686
|
+
createElement(input: CreateElementInput): Promise<ElementResult>;
|
|
687
|
+
listElements(input?: ElementListInput): Promise<ElementListResult>;
|
|
688
|
+
listPresetElements(): Promise<ElementListResult>;
|
|
689
|
+
deleteElement(input: DeleteElementInput): Promise<void>;
|
|
690
|
+
listVoices(params?: KlingListParams): Promise<KlingVoiceListResult>;
|
|
691
|
+
listPresetVoices(params?: KlingListParams): Promise<KlingVoiceListResult>;
|
|
692
|
+
queryVoice(taskId: string): Promise<KlingVoiceResult>;
|
|
693
|
+
deleteVoice(voiceId: string): Promise<void>;
|
|
694
|
+
getElement(taskId: string): Promise<ElementResult>;
|
|
695
|
+
initMultiElementsSelection(input: MultiElementsInitInput): Promise<MultiElementsInitResult>;
|
|
696
|
+
addSelectionArea(input: MultiElementsAddSelectionInput): Promise<MultiElementsSelectionResult>;
|
|
697
|
+
deleteSelectionArea(input: MultiElementsDeleteSelectionInput): Promise<MultiElementsSelectionResult>;
|
|
698
|
+
clearSelectionArea(input: MultiElementsClearSelectionInput): Promise<void>;
|
|
699
|
+
previewSelection(input: MultiElementsPreviewInput): Promise<MultiElementsPreviewResult>;
|
|
700
|
+
generateMultiElementsVideo(input: MultiElementsGenerateInput): Promise<KlingVideoResult>;
|
|
701
|
+
queryMultiElementsTask(taskId: string): Promise<KlingTaskListResult["tasks"][0]>;
|
|
702
|
+
listMultiElementsTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
703
|
+
listLipSyncTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
704
|
+
listTextToAudioTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
705
|
+
listVideoEffectsTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
706
|
+
listImageGenerationTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
707
|
+
listOmniVideoTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
708
|
+
listMultiShotTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
709
|
+
listImageToVideoTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
710
|
+
listOmniImageTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
711
|
+
listReferenceToImageTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
712
|
+
listVirtualTryOnTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
713
|
+
listMotionControlTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
714
|
+
listExtendVideoTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
715
|
+
listAvatarTasks(params?: KlingListParams): Promise<KlingTaskListResult>;
|
|
716
|
+
getLipSyncTask(taskId: string): Promise<KlingVideoResult>;
|
|
717
|
+
getTextToAudioTask(taskId: string): Promise<KlingAudioResult>;
|
|
718
|
+
getVideoEffectsTask(taskId: string): Promise<KlingVideoResult>;
|
|
719
|
+
getImageGenerationTask(taskId: string): Promise<KlingImageResult>;
|
|
720
|
+
getOmniVideoTask(taskId: string): Promise<KlingVideoResult>;
|
|
721
|
+
getMultiShotTask(taskId: string): Promise<KlingMultiShotResult>;
|
|
722
|
+
getImageToVideoTask(taskId: string): Promise<KlingVideoResult>;
|
|
723
|
+
getOmniImageTask(taskId: string): Promise<KlingImageResult>;
|
|
724
|
+
getReferenceToImageTask(taskId: string): Promise<KlingImageResult>;
|
|
725
|
+
getVirtualTryOnTask(taskId: string): Promise<KlingImageResult>;
|
|
726
|
+
getMotionControlTask(taskId: string): Promise<KlingVideoResult>;
|
|
727
|
+
getExtendVideoTask(taskId: string): Promise<KlingVideoResult>;
|
|
728
|
+
getAvatarTask(taskId: string): Promise<KlingVideoResult>;
|
|
457
729
|
configure: (config: KlingConfig) => void;
|
|
458
730
|
};
|
|
459
731
|
|
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 {
|
|
@@ -98,6 +103,84 @@ function buildAuthHeaders(accessKey, secretKey) {
|
|
|
98
103
|
};
|
|
99
104
|
}
|
|
100
105
|
|
|
106
|
+
// src/providers/kling/extract.ts
|
|
107
|
+
function extractVideos(data) {
|
|
108
|
+
const taskResult = data.task_result;
|
|
109
|
+
const videos = taskResult?.videos ?? [];
|
|
110
|
+
return { task_id: data.task_id, videos };
|
|
111
|
+
}
|
|
112
|
+
function extractImages(data) {
|
|
113
|
+
const taskResult = data.task_result;
|
|
114
|
+
const images = taskResult?.images ?? [];
|
|
115
|
+
return { task_id: data.task_id, images };
|
|
116
|
+
}
|
|
117
|
+
function extractAudios(data) {
|
|
118
|
+
const taskResult = data.task_result;
|
|
119
|
+
const rawAudios = taskResult?.audios ?? [];
|
|
120
|
+
const audios = rawAudios.map((a) => ({
|
|
121
|
+
id: a.id,
|
|
122
|
+
url: a.url ?? a.url_mp3 ?? a.url_wav ?? "",
|
|
123
|
+
url_mp3: a.url_mp3,
|
|
124
|
+
url_wav: a.url_wav,
|
|
125
|
+
duration: a.duration ?? a.duration_mp3,
|
|
126
|
+
duration_mp3: a.duration_mp3,
|
|
127
|
+
duration_wav: a.duration_wav
|
|
128
|
+
}));
|
|
129
|
+
return { task_id: data.task_id, audios };
|
|
130
|
+
}
|
|
131
|
+
function extractJson(data) {
|
|
132
|
+
return { task_id: data.task_id, data: data.task_result ?? data };
|
|
133
|
+
}
|
|
134
|
+
function extractFace(data) {
|
|
135
|
+
return {
|
|
136
|
+
session_id: data.session_id,
|
|
137
|
+
face_data: data.face_data ?? []
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function extractMultiShot(data) {
|
|
141
|
+
const taskResult = data.task_result;
|
|
142
|
+
const rawImages = taskResult?.images ?? [];
|
|
143
|
+
const images = rawImages.map((img, i) => ({
|
|
144
|
+
index: img.index ?? i,
|
|
145
|
+
url_1: img.url_1,
|
|
146
|
+
url_2: img.url_2,
|
|
147
|
+
url_3: img.url_3
|
|
148
|
+
}));
|
|
149
|
+
return { task_id: data.task_id, images };
|
|
150
|
+
}
|
|
151
|
+
function extractVoices(data) {
|
|
152
|
+
const taskResult = data.task_result;
|
|
153
|
+
const voices = taskResult?.voices ?? [];
|
|
154
|
+
return { task_id: data.task_id, voices };
|
|
155
|
+
}
|
|
156
|
+
function extractElement(data) {
|
|
157
|
+
return {
|
|
158
|
+
element_id: data.element_id,
|
|
159
|
+
element_name: data.element_name,
|
|
160
|
+
element_description: data.element_description,
|
|
161
|
+
reference_type: data.reference_type,
|
|
162
|
+
status: data.status,
|
|
163
|
+
owned_by: data.owned_by,
|
|
164
|
+
element_voice_id: data.element_voice_id,
|
|
165
|
+
tag_list: data.tag_list,
|
|
166
|
+
element_image_list: data.element_image_list,
|
|
167
|
+
element_video_list: data.element_video_list
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function extractVideoAudio(data) {
|
|
171
|
+
const taskResult = data.task_result;
|
|
172
|
+
const videos = taskResult?.videos ?? [];
|
|
173
|
+
const rawAudios = taskResult?.audios ?? [];
|
|
174
|
+
const audios = rawAudios.map((a) => ({
|
|
175
|
+
id: a.id,
|
|
176
|
+
url_mp3: a.url_mp3,
|
|
177
|
+
url_wav: a.url_wav,
|
|
178
|
+
duration_mp3: a.duration_mp3,
|
|
179
|
+
duration_wav: a.duration_wav
|
|
180
|
+
}));
|
|
181
|
+
return { task_id: data.task_id, videos, audios };
|
|
182
|
+
}
|
|
183
|
+
|
|
101
184
|
// src/providers/kling/client.ts
|
|
102
185
|
var API_BASE = "https://api-singapore.klingai.com";
|
|
103
186
|
var DEFAULT_FETCH_TIMEOUT_MS = 3e4;
|
|
@@ -146,26 +229,35 @@ var KlingClient = class {
|
|
|
146
229
|
// ── HTTP ─────────────────────────────────────────────────────────────────
|
|
147
230
|
async handleErrors(response, endpoint) {
|
|
148
231
|
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
232
|
let raw;
|
|
155
233
|
try {
|
|
156
234
|
raw = await response.json();
|
|
157
235
|
} catch {
|
|
158
236
|
raw = await response.text().catch(() => null);
|
|
159
237
|
}
|
|
238
|
+
console.error(`[kling] ${response.status} on ${endpoint}:`, JSON.stringify(raw));
|
|
239
|
+
if (response.status === 401) throw new KlingAuthError("Kling returned 401 Unauthorized.");
|
|
240
|
+
if (response.status === 429) {
|
|
241
|
+
const body = raw;
|
|
242
|
+
const code = body?.code;
|
|
243
|
+
const message = body?.message ?? "Rate limited";
|
|
244
|
+
const retryAfter = response.headers.get("retry-after");
|
|
245
|
+
throw new KlingRateLimitError(
|
|
246
|
+
retryAfter ? parseInt(retryAfter, 10) * 1e3 : 6e4,
|
|
247
|
+
code,
|
|
248
|
+
message
|
|
249
|
+
);
|
|
250
|
+
}
|
|
160
251
|
throw new KlingApiError(endpoint, response.status, raw);
|
|
161
252
|
}
|
|
162
253
|
handleBodyErrors(json, endpoint) {
|
|
163
254
|
if (json.code === 0) return;
|
|
255
|
+
console.error(`[kling] body error on ${endpoint}: code=${json.code} message=${json.message}`);
|
|
164
256
|
if (json.code >= 1e3 && json.code <= 1004) {
|
|
165
257
|
throw new KlingAuthError(`Kling auth error code ${json.code}: ${json.message}`);
|
|
166
258
|
}
|
|
167
259
|
if (json.code >= 1100 && json.code <= 1102 || json.code >= 1302 && json.code <= 1304) {
|
|
168
|
-
throw new KlingRateLimitError(5e3);
|
|
260
|
+
throw new KlingRateLimitError(5e3, json.code, json.message);
|
|
169
261
|
}
|
|
170
262
|
throw new KlingApiError(endpoint, json.code, json);
|
|
171
263
|
}
|
|
@@ -183,6 +275,19 @@ var KlingClient = class {
|
|
|
183
275
|
this.handleBodyErrors(json, endpoint);
|
|
184
276
|
return json;
|
|
185
277
|
}
|
|
278
|
+
async httpGet(endpoint, params) {
|
|
279
|
+
const auth = this.resolveAuth();
|
|
280
|
+
const qs = new URLSearchParams(params).toString();
|
|
281
|
+
const url = `${API_BASE}/${endpoint}?${qs}`;
|
|
282
|
+
const response = await fetch(url, {
|
|
283
|
+
headers: buildAuthHeaders(auth.accessKey, auth.secretKey),
|
|
284
|
+
signal: AbortSignal.timeout(this.fetchTimeoutMs)
|
|
285
|
+
});
|
|
286
|
+
await this.handleErrors(response, endpoint);
|
|
287
|
+
const json = await response.json();
|
|
288
|
+
this.handleBodyErrors(json, endpoint);
|
|
289
|
+
return json;
|
|
290
|
+
}
|
|
186
291
|
async httpPoll(endpoint, taskId) {
|
|
187
292
|
const auth = this.resolveAuth();
|
|
188
293
|
const url = `${API_BASE}/${endpoint}/${taskId}`;
|
|
@@ -195,6 +300,111 @@ var KlingClient = class {
|
|
|
195
300
|
this.handleBodyErrors(json, endpoint);
|
|
196
301
|
return json;
|
|
197
302
|
}
|
|
303
|
+
// ── Account ──────────────────────────────────────────────────────────────
|
|
304
|
+
async accountCosts(input) {
|
|
305
|
+
const params = {
|
|
306
|
+
start_time: String(input.start_time),
|
|
307
|
+
end_time: String(input.end_time)
|
|
308
|
+
};
|
|
309
|
+
if (input.resource_pack_name !== void 0) {
|
|
310
|
+
params.resource_pack_name = input.resource_pack_name;
|
|
311
|
+
}
|
|
312
|
+
const json = await this.httpGet("account/costs", params);
|
|
313
|
+
const data = json.data;
|
|
314
|
+
return {
|
|
315
|
+
resource_pack_subscribe_infos: data.resource_pack_subscribe_infos ?? []
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
async elementList(input) {
|
|
319
|
+
const params = {};
|
|
320
|
+
if (input.pageNum !== void 0) params.pageNum = String(input.pageNum);
|
|
321
|
+
if (input.pageSize !== void 0) params.pageSize = String(input.pageSize);
|
|
322
|
+
const json = await this.httpGet("v1/general/advanced-custom-elements", params);
|
|
323
|
+
const data = json.data;
|
|
324
|
+
return { elements: data.elements ?? [] };
|
|
325
|
+
}
|
|
326
|
+
async presetElementList() {
|
|
327
|
+
const json = await this.httpGet("v1/general/advanced-presets-elements", {});
|
|
328
|
+
const data = json.data;
|
|
329
|
+
return { elements: data.elements ?? [] };
|
|
330
|
+
}
|
|
331
|
+
async deleteElement(input) {
|
|
332
|
+
await this.httpSubmit("v1/general/delete-elements", { element_id: input.element_id });
|
|
333
|
+
}
|
|
334
|
+
// ── Task list / single-task query helpers ─────────────────────────────────
|
|
335
|
+
/** GET a paginated task list from any endpoint. */
|
|
336
|
+
async taskList(endpoint, params = {}) {
|
|
337
|
+
const p = {};
|
|
338
|
+
if (params.pageNum !== void 0) p.pageNum = String(params.pageNum);
|
|
339
|
+
if (params.pageSize !== void 0) p.pageSize = String(params.pageSize);
|
|
340
|
+
const json = await this.httpGet(endpoint, p);
|
|
341
|
+
const data = json.data;
|
|
342
|
+
return { tasks: data.tasks ?? [] };
|
|
343
|
+
}
|
|
344
|
+
/** GET a single task by ID from any endpoint and run it through an extractor. */
|
|
345
|
+
async taskGet(endpoint, taskId, extractor) {
|
|
346
|
+
const json = await this.httpPoll(endpoint, taskId);
|
|
347
|
+
return extractor(json.data);
|
|
348
|
+
}
|
|
349
|
+
// ── Voice management ──────────────────────────────────────────────────────
|
|
350
|
+
async listVoices(params = {}) {
|
|
351
|
+
const p = {};
|
|
352
|
+
if (params.pageNum !== void 0) p.pageNum = String(params.pageNum);
|
|
353
|
+
if (params.pageSize !== void 0) p.pageSize = String(params.pageSize);
|
|
354
|
+
const json = await this.httpGet("v1/general/custom-voices", p);
|
|
355
|
+
const data = json.data;
|
|
356
|
+
return { voices: data.voices ?? [] };
|
|
357
|
+
}
|
|
358
|
+
async listPresetVoices(params = {}) {
|
|
359
|
+
const p = {};
|
|
360
|
+
if (params.pageNum !== void 0) p.pageNum = String(params.pageNum);
|
|
361
|
+
if (params.pageSize !== void 0) p.pageSize = String(params.pageSize);
|
|
362
|
+
const json = await this.httpGet("v1/general/presets-voices", p);
|
|
363
|
+
const data = json.data;
|
|
364
|
+
return { voices: data.voices ?? [] };
|
|
365
|
+
}
|
|
366
|
+
async queryVoice(taskId) {
|
|
367
|
+
const json = await this.httpPoll("v1/general/custom-voices", taskId);
|
|
368
|
+
return extractVoices(json.data);
|
|
369
|
+
}
|
|
370
|
+
async deleteVoice(voiceId) {
|
|
371
|
+
await this.httpSubmit("v1/general/delete-voices", { voice_id: voiceId });
|
|
372
|
+
}
|
|
373
|
+
// ── Element single-task query ─────────────────────────────────────────────
|
|
374
|
+
async getElement(taskId) {
|
|
375
|
+
const json = await this.httpPoll("v1/general/advanced-custom-elements", taskId);
|
|
376
|
+
return extractElement(json.data);
|
|
377
|
+
}
|
|
378
|
+
// ── Multi-elements video workflow ─────────────────────────────────────────
|
|
379
|
+
async initMultiElementsSelection(input) {
|
|
380
|
+
const body = {};
|
|
381
|
+
if (input.video_id !== void 0) body.video_id = input.video_id;
|
|
382
|
+
if (input.video_url !== void 0) body.video_url = input.video_url;
|
|
383
|
+
const json = await this.httpSubmit("v1/videos/multi-elements/init-selection", body);
|
|
384
|
+
return json.data;
|
|
385
|
+
}
|
|
386
|
+
async addSelectionArea(input) {
|
|
387
|
+
const json = await this.httpSubmit("v1/videos/multi-elements/add-selection", input);
|
|
388
|
+
return json.data;
|
|
389
|
+
}
|
|
390
|
+
async deleteSelectionArea(input) {
|
|
391
|
+
const json = await this.httpSubmit("v1/videos/multi-elements/delete-selection", input);
|
|
392
|
+
return json.data;
|
|
393
|
+
}
|
|
394
|
+
async clearSelectionArea(input) {
|
|
395
|
+
await this.httpSubmit("v1/videos/multi-elements/clear-selection", { session_id: input.session_id });
|
|
396
|
+
}
|
|
397
|
+
async previewSelection(input) {
|
|
398
|
+
const json = await this.httpSubmit("v1/videos/multi-elements/preview-selection", { session_id: input.session_id });
|
|
399
|
+
return json.data;
|
|
400
|
+
}
|
|
401
|
+
async queryMultiElementsTask(taskId) {
|
|
402
|
+
const json = await this.httpPoll("v1/videos/multi-elements", taskId);
|
|
403
|
+
return json.data;
|
|
404
|
+
}
|
|
405
|
+
async listMultiElementsTasks(params = {}) {
|
|
406
|
+
return this.taskList("v1/videos/multi-elements", params);
|
|
407
|
+
}
|
|
198
408
|
// ── Execute ──────────────────────────────────────────────────────────────
|
|
199
409
|
async execute(endpoint, defaults, input, extractor, sync) {
|
|
200
410
|
const { timeout, pollInterval, options, ...params } = input;
|
|
@@ -234,70 +444,6 @@ var KlingClient = class {
|
|
|
234
444
|
}
|
|
235
445
|
};
|
|
236
446
|
|
|
237
|
-
// src/providers/kling/extract.ts
|
|
238
|
-
function extractVideos(data) {
|
|
239
|
-
const taskResult = data.task_result;
|
|
240
|
-
const videos = taskResult?.videos ?? [];
|
|
241
|
-
return { task_id: data.task_id, videos };
|
|
242
|
-
}
|
|
243
|
-
function extractImages(data) {
|
|
244
|
-
const taskResult = data.task_result;
|
|
245
|
-
const images = taskResult?.images ?? [];
|
|
246
|
-
return { task_id: data.task_id, images };
|
|
247
|
-
}
|
|
248
|
-
function extractAudios(data) {
|
|
249
|
-
const taskResult = data.task_result;
|
|
250
|
-
const rawAudios = taskResult?.audios ?? [];
|
|
251
|
-
const audios = rawAudios.map((a) => ({
|
|
252
|
-
id: a.id,
|
|
253
|
-
url: a.url ?? a.url_mp3 ?? a.url_wav ?? "",
|
|
254
|
-
url_mp3: a.url_mp3,
|
|
255
|
-
url_wav: a.url_wav,
|
|
256
|
-
duration: a.duration ?? a.duration_mp3,
|
|
257
|
-
duration_mp3: a.duration_mp3,
|
|
258
|
-
duration_wav: a.duration_wav
|
|
259
|
-
}));
|
|
260
|
-
return { task_id: data.task_id, audios };
|
|
261
|
-
}
|
|
262
|
-
function extractJson(data) {
|
|
263
|
-
return { task_id: data.task_id, data: data.task_result ?? data };
|
|
264
|
-
}
|
|
265
|
-
function extractFace(data) {
|
|
266
|
-
return {
|
|
267
|
-
session_id: data.session_id,
|
|
268
|
-
face_data: data.face_data ?? []
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
function extractMultiShot(data) {
|
|
272
|
-
const taskResult = data.task_result;
|
|
273
|
-
const rawImages = taskResult?.images ?? [];
|
|
274
|
-
const images = rawImages.map((img, i) => ({
|
|
275
|
-
index: img.index ?? i,
|
|
276
|
-
url_1: img.url_1,
|
|
277
|
-
url_2: img.url_2,
|
|
278
|
-
url_3: img.url_3
|
|
279
|
-
}));
|
|
280
|
-
return { task_id: data.task_id, images };
|
|
281
|
-
}
|
|
282
|
-
function extractVoices(data) {
|
|
283
|
-
const taskResult = data.task_result;
|
|
284
|
-
const voices = taskResult?.voices ?? [];
|
|
285
|
-
return { task_id: data.task_id, voices };
|
|
286
|
-
}
|
|
287
|
-
function extractVideoAudio(data) {
|
|
288
|
-
const taskResult = data.task_result;
|
|
289
|
-
const videos = taskResult?.videos ?? [];
|
|
290
|
-
const rawAudios = taskResult?.audios ?? [];
|
|
291
|
-
const audios = rawAudios.map((a) => ({
|
|
292
|
-
id: a.id,
|
|
293
|
-
url_mp3: a.url_mp3,
|
|
294
|
-
url_wav: a.url_wav,
|
|
295
|
-
duration_mp3: a.duration_mp3,
|
|
296
|
-
duration_wav: a.duration_wav
|
|
297
|
-
}));
|
|
298
|
-
return { task_id: data.task_id, videos, audios };
|
|
299
|
-
}
|
|
300
|
-
|
|
301
447
|
// src/providers/kling/models.ts
|
|
302
448
|
function createModels(client) {
|
|
303
449
|
return {
|
|
@@ -531,6 +677,162 @@ function createModels(client) {
|
|
|
531
677
|
// ── reference-to-video (1 model) ──────────────────────────────────────
|
|
532
678
|
referenceToVideo(input) {
|
|
533
679
|
return client.execute("v1/videos/multi-image2video", { model_name: "kling-v1-6" }, input, extractVideos);
|
|
680
|
+
},
|
|
681
|
+
// ── account ───────────────────────────────────────────────────────────
|
|
682
|
+
accountCosts(input) {
|
|
683
|
+
return client.accountCosts(input);
|
|
684
|
+
},
|
|
685
|
+
// ── elements ──────────────────────────────────────────────────────────
|
|
686
|
+
/** Create a custom element (character/object) from images or video. Async — polls until ready. */
|
|
687
|
+
createElement(input) {
|
|
688
|
+
return client.execute("v1/general/advanced-custom-elements", {}, input, extractElement);
|
|
689
|
+
},
|
|
690
|
+
/** List all custom elements under the account. */
|
|
691
|
+
listElements(input = {}) {
|
|
692
|
+
return client.elementList(input);
|
|
693
|
+
},
|
|
694
|
+
/** List official preset elements from the Kling element library. */
|
|
695
|
+
listPresetElements() {
|
|
696
|
+
return client.presetElementList();
|
|
697
|
+
},
|
|
698
|
+
/** Delete a custom element by element_id. */
|
|
699
|
+
deleteElement(input) {
|
|
700
|
+
return client.deleteElement(input);
|
|
701
|
+
},
|
|
702
|
+
// ── voice management ──────────────────────────────────────────────────
|
|
703
|
+
/** List custom voices cloned under the account. */
|
|
704
|
+
listVoices(params = {}) {
|
|
705
|
+
return client.listVoices(params);
|
|
706
|
+
},
|
|
707
|
+
/** List official preset voices from the Kling voice library. */
|
|
708
|
+
listPresetVoices(params = {}) {
|
|
709
|
+
return client.listPresetVoices(params);
|
|
710
|
+
},
|
|
711
|
+
/** Query a single custom voice creation task by task_id. */
|
|
712
|
+
queryVoice(taskId) {
|
|
713
|
+
return client.queryVoice(taskId);
|
|
714
|
+
},
|
|
715
|
+
/** Delete a custom voice by voice_id. */
|
|
716
|
+
deleteVoice(voiceId) {
|
|
717
|
+
return client.deleteVoice(voiceId);
|
|
718
|
+
},
|
|
719
|
+
// ── element single-task query ─────────────────────────────────────────
|
|
720
|
+
/** Query a single custom element creation task by task_id. */
|
|
721
|
+
getElement(taskId) {
|
|
722
|
+
return client.getElement(taskId);
|
|
723
|
+
},
|
|
724
|
+
// ── multi-elements video workflow ──────────────────────────────────────
|
|
725
|
+
/** Step 1: Initialize a video for multi-elements editing. Returns session_id. */
|
|
726
|
+
initMultiElementsSelection(input) {
|
|
727
|
+
return client.initMultiElementsSelection(input);
|
|
728
|
+
},
|
|
729
|
+
/** Step 2: Add a selection area by clicking points on a frame. */
|
|
730
|
+
addSelectionArea(input) {
|
|
731
|
+
return client.addSelectionArea(input);
|
|
732
|
+
},
|
|
733
|
+
/** Step 3: Delete a previously added selection area. */
|
|
734
|
+
deleteSelectionArea(input) {
|
|
735
|
+
return client.deleteSelectionArea(input);
|
|
736
|
+
},
|
|
737
|
+
/** Step 4: Clear all selections for a session. */
|
|
738
|
+
clearSelectionArea(input) {
|
|
739
|
+
return client.clearSelectionArea(input);
|
|
740
|
+
},
|
|
741
|
+
/** Step 5: Preview selection with mask overlay. */
|
|
742
|
+
previewSelection(input) {
|
|
743
|
+
return client.previewSelection(input);
|
|
744
|
+
},
|
|
745
|
+
/** Step 6: Generate the final multi-elements edited video. Polls until complete. */
|
|
746
|
+
generateMultiElementsVideo(input) {
|
|
747
|
+
return client.execute("v1/videos/multi-elements", { model_name: "kling-v1-6" }, input, extractVideos);
|
|
748
|
+
},
|
|
749
|
+
/** Query a single multi-elements generation task by task_id. */
|
|
750
|
+
queryMultiElementsTask(taskId) {
|
|
751
|
+
return client.queryMultiElementsTask(taskId);
|
|
752
|
+
},
|
|
753
|
+
/** List multi-elements generation tasks. */
|
|
754
|
+
listMultiElementsTasks(params = {}) {
|
|
755
|
+
return client.listMultiElementsTasks(params);
|
|
756
|
+
},
|
|
757
|
+
// ── list queries ───────────────────────────────────────────────────────
|
|
758
|
+
listLipSyncTasks(params = {}) {
|
|
759
|
+
return client.taskList("v1/videos/advanced-lip-sync", params);
|
|
760
|
+
},
|
|
761
|
+
listTextToAudioTasks(params = {}) {
|
|
762
|
+
return client.taskList("v1/audio/text-to-audio", params);
|
|
763
|
+
},
|
|
764
|
+
listVideoEffectsTasks(params = {}) {
|
|
765
|
+
return client.taskList("v1/videos/effects", params);
|
|
766
|
+
},
|
|
767
|
+
listImageGenerationTasks(params = {}) {
|
|
768
|
+
return client.taskList("v1/images/generations", params);
|
|
769
|
+
},
|
|
770
|
+
listOmniVideoTasks(params = {}) {
|
|
771
|
+
return client.taskList("v1/videos/omni-video", params);
|
|
772
|
+
},
|
|
773
|
+
listMultiShotTasks(params = {}) {
|
|
774
|
+
return client.taskList("v1/general/ai-multi-shot", params);
|
|
775
|
+
},
|
|
776
|
+
listImageToVideoTasks(params = {}) {
|
|
777
|
+
return client.taskList("v1/videos/image2video", params);
|
|
778
|
+
},
|
|
779
|
+
listOmniImageTasks(params = {}) {
|
|
780
|
+
return client.taskList("v1/images/omni-image", params);
|
|
781
|
+
},
|
|
782
|
+
listReferenceToImageTasks(params = {}) {
|
|
783
|
+
return client.taskList("v1/images/multi-image2image", params);
|
|
784
|
+
},
|
|
785
|
+
listVirtualTryOnTasks(params = {}) {
|
|
786
|
+
return client.taskList("v1/images/kolors-virtual-try-on", params);
|
|
787
|
+
},
|
|
788
|
+
listMotionControlTasks(params = {}) {
|
|
789
|
+
return client.taskList("v1/videos/motion-control", params);
|
|
790
|
+
},
|
|
791
|
+
listExtendVideoTasks(params = {}) {
|
|
792
|
+
return client.taskList("v1/videos/video-extend", params);
|
|
793
|
+
},
|
|
794
|
+
listAvatarTasks(params = {}) {
|
|
795
|
+
return client.taskList("v1/videos/avatar/image2video", params);
|
|
796
|
+
},
|
|
797
|
+
// ── single-task queries ────────────────────────────────────────────────
|
|
798
|
+
getLipSyncTask(taskId) {
|
|
799
|
+
return client.taskGet("v1/videos/advanced-lip-sync", taskId, extractVideos);
|
|
800
|
+
},
|
|
801
|
+
getTextToAudioTask(taskId) {
|
|
802
|
+
return client.taskGet("v1/audio/text-to-audio", taskId, extractAudios);
|
|
803
|
+
},
|
|
804
|
+
getVideoEffectsTask(taskId) {
|
|
805
|
+
return client.taskGet("v1/videos/effects", taskId, extractVideos);
|
|
806
|
+
},
|
|
807
|
+
getImageGenerationTask(taskId) {
|
|
808
|
+
return client.taskGet("v1/images/generations", taskId, extractImages);
|
|
809
|
+
},
|
|
810
|
+
getOmniVideoTask(taskId) {
|
|
811
|
+
return client.taskGet("v1/videos/omni-video", taskId, extractVideos);
|
|
812
|
+
},
|
|
813
|
+
getMultiShotTask(taskId) {
|
|
814
|
+
return client.taskGet("v1/general/ai-multi-shot", taskId, extractMultiShot);
|
|
815
|
+
},
|
|
816
|
+
getImageToVideoTask(taskId) {
|
|
817
|
+
return client.taskGet("v1/videos/image2video", taskId, extractVideos);
|
|
818
|
+
},
|
|
819
|
+
getOmniImageTask(taskId) {
|
|
820
|
+
return client.taskGet("v1/images/omni-image", taskId, extractImages);
|
|
821
|
+
},
|
|
822
|
+
getReferenceToImageTask(taskId) {
|
|
823
|
+
return client.taskGet("v1/images/multi-image2image", taskId, extractImages);
|
|
824
|
+
},
|
|
825
|
+
getVirtualTryOnTask(taskId) {
|
|
826
|
+
return client.taskGet("v1/images/kolors-virtual-try-on", taskId, extractImages);
|
|
827
|
+
},
|
|
828
|
+
getMotionControlTask(taskId) {
|
|
829
|
+
return client.taskGet("v1/videos/motion-control", taskId, extractVideos);
|
|
830
|
+
},
|
|
831
|
+
getExtendVideoTask(taskId) {
|
|
832
|
+
return client.taskGet("v1/videos/video-extend", taskId, extractVideos);
|
|
833
|
+
},
|
|
834
|
+
getAvatarTask(taskId) {
|
|
835
|
+
return client.taskGet("v1/videos/avatar/image2video", taskId, extractVideos);
|
|
534
836
|
}
|
|
535
837
|
};
|
|
536
838
|
}
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAM,aAAN,cAAyB,MAAM;AAAA,EAC3B;AAAA,EACT,YAAY,MAAc,SAAiB;AACzC,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAC7C,YAAY,UAAU,iGAAiG;AACrH,UAAM,cAAc,OAAO;AAC3B,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,WAAW;AAAA,EACzC;AAAA,EACT,YAAY,cAAsB;AAChC,UAAM,cAAc,sCAAsC,YAAY,KAAK;AAC3E,SAAK,OAAO;AACZ,SAAK,eAAe;AAAA,EACtB;AACF;AAEO,IAAM,gBAAN,cAA4B,WAAW;AAAA,EACnC;AAAA,EACA;AAAA,EACT,YAAY,UAAkB,YAAoB,KAAc;AAC9D,UAAM,aAAa,mBAAmB,UAAU,OAAO,QAAQ,GAAG;AAClE,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,MAAM;AAAA,EACb;AACF;AAEO,IAAM,oBAAN,cAAgC,WAAW;AAAA,EACvC;AAAA,EACT,YAAY,WAAmB;AAC7B,UAAM,WAAW,8BAA8B,SAAS,KAAK;AAC7D,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACnB;AACF;AAEO,IAAM,uBAAN,cAAmC,WAAW;AAAA,EAC1C;AAAA,EACT,YAAY,QAAgB,SAAiB;AAC3C,UAAM,eAAe,cAAc,MAAM,YAAY,OAAO,EAAE;AAC9D,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AACF;;;ACpDA,SAAS,kBAAkB;AAGpB,SAAS,YAAY,WAAmB,WAA2B;AACxE,QAAM,SAAS,OAAO,KAAK,KAAK,UAAU,EAAE,KAAK,SAAS,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,WAAW;AAC7F,QAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACxC,QAAM,UAAU,OAAO,KAAK,KAAK,UAAU;AAAA,IACzC,KAAK;AAAA,IACL,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,EACb,CAAC,CAAC,EAAE,SAAS,WAAW;AACxB,QAAM,YAAY,WAAW,UAAU,SAAS,EAC7C,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,EAC7B,OAAO,WAAW;AACrB,SAAO,GAAG,MAAM,IAAI,OAAO,IAAI,SAAS;AAC1C;AAGO,SAAS,iBAAiB,WAAmB,WAA2C;AAC7F,SAAO;AAAA,IACL,eAAe,UAAU,YAAY,WAAW,SAAS,CAAC;AAAA,IAC1D,gBAAgB;AAAA,EAClB;AACF;;;AClBA,IAAM,WAAW;AACjB,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;AAChC,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;AAChC,IAAM,uBAAuB;AAE7B,IAAM,iBAAiB,oBAAI,IAAI,CAAC,gBAAgB,6BAA6B,yBAAyB,CAAC;AAGvG,SAAS,YAAY,OAAyB;AAC5C,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,OAAO,GAAG;AAC1D,WAAO,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,EAChC;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,WAAW;AAAA,EAC9B;AACA,MAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,UAAM,SAAkC,CAAC;AACzC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAgC,GAAG;AACrE,aAAO,CAAC,IAAI,YAAY,CAAC;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,IAAM,cAAN,MAAkB;AAAA,EACf,YAA2B;AAAA,EAC3B,YAA2B;AAAA,EAC3B,iBAAyB;AAAA;AAAA,EAGjC,UAAU,QAA2B;AACnC,SAAK,YAAY,OAAO;AACxB,SAAK,YAAY,OAAO;AACxB,QAAI,OAAO,mBAAmB,QAAW;AACvC,WAAK,iBAAiB,OAAO;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,cAAwD;AAC9D,QAAI,KAAK,aAAa,KAAK,WAAW;AACpC,aAAO,EAAE,WAAW,KAAK,WAAW,WAAW,KAAK,UAAU;AAAA,IAChE;AAEA,UAAM,KAAK,QAAQ,IAAI,kBAAkB,KAAK;AAC9C,UAAM,KAAK,QAAQ,IAAI,kBAAkB,KAAK;AAC9C,QAAI,MAAM,GAAI,QAAO,EAAE,WAAW,IAAI,WAAW,GAAG;AAEpD,UAAM,IAAI,eAAe;AAAA,EAC3B;AAAA;AAAA,EAIA,MAAc,aAAa,UAAoB,UAAiC;AAC9E,QAAI,SAAS,GAAI;AAEjB,QAAI,SAAS,WAAW,IAAK,OAAM,IAAI,eAAe,kCAAkC;AACxF,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AACrD,YAAM,IAAI,oBAAoB,aAAa,SAAS,YAAY,EAAE,IAAI,MAAO,GAAK;AAAA,IACpF;AAEA,QAAI;AACJ,QAAI;AAAE,YAAM,MAAM,SAAS,KAAK;AAAA,IAAE,QAAQ;AAAE,YAAM,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AAAA,IAAE;AAC1F,UAAM,IAAI,cAAc,UAAU,SAAS,QAAQ,GAAG;AAAA,EACxD;AAAA,EAEQ,iBAAiB,MAAwB,UAAwB;AACvE,QAAI,KAAK,SAAS,EAAG;AACrB,QAAI,KAAK,QAAQ,OAAQ,KAAK,QAAQ,MAAM;AAC1C,YAAM,IAAI,eAAe,yBAAyB,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE;AAAA,IAChF;AACA,QAAK,KAAK,QAAQ,QAAQ,KAAK,QAAQ,QAAU,KAAK,QAAQ,QAAQ,KAAK,QAAQ,MAAO;AACxF,YAAM,IAAI,oBAAoB,GAAI;AAAA,IACpC;AACA,UAAM,IAAI,cAAc,UAAU,KAAK,MAAM,IAAI;AAAA,EACnD;AAAA,EAEA,MAAc,WAAW,UAAkB,MAA0D;AACnG,UAAM,OAAO,KAAK,YAAY;AAC9B,UAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ;AACnC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS,iBAAiB,KAAK,WAAW,KAAK,SAAS;AAAA,MACxD,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,QAAQ,YAAY,QAAQ,KAAK,cAAc;AAAA,IACjD,CAAC;AACD,UAAM,KAAK,aAAa,UAAU,QAAQ;AAC1C,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,SAAK,iBAAiB,MAAM,QAAQ;AACpC,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,SAAS,UAAkB,QAA2C;AAClF,UAAM,OAAO,KAAK,YAAY;AAC9B,UAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,IAAI,MAAM;AAC7C,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,SAAS,iBAAiB,KAAK,WAAW,KAAK,SAAS;AAAA,MACxD,QAAQ,YAAY,QAAQ,KAAK,cAAc;AAAA,IACjD,CAAC;AACD,UAAM,KAAK,aAAa,UAAU,QAAQ;AAC1C,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,SAAK,iBAAiB,MAAM,QAAQ;AACpC,WAAO;AAAA,EACT;AAAA;AAAA,EAIA,MAAM,QACJ,UACA,UACA,OACA,WACA,MACY;AACZ,UAAM,EAAE,SAAS,cAAc,SAAS,GAAG,OAAO,IAAI;AACtD,UAAM,YAAY,WAAW;AAC7B,UAAM,oBAAoB,gBAAgB;AAG1C,UAAM,OAAgC,EAAE,GAAG,OAAO;AAClD,QAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,OAAkC,GAAG;AAC3E,YAAI,EAAE,OAAO,MAAO,MAAK,GAAG,IAAI;AAAA,MAClC;AAAA,IACF;AACA,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACjD,UAAI,EAAE,OAAO,MAAO,MAAK,GAAG,IAAI;AAAA,IAClC;AAEA,UAAM,cAAc,YAAY,IAAI;AAGpC,UAAM,eAAe,MAAM,KAAK,WAAW,UAAU,WAAW;AAChE,UAAM,iBAAiB,QAAQ,eAAe,IAAI,QAAQ;AAE1D,QAAI,gBAAgB;AAClB,aAAO,UAAU,aAAa,IAAI;AAAA,IACpC;AAGA,UAAM,SAAS,aAAa,KAAK;AACjC,UAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,QAAI,aAAa;AAEjB,WAAO,KAAK,IAAI,IAAI,UAAU;AAC5B,YAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,UAAU,CAAC;AAC5D,mBAAa,KAAK,IAAI,aAAa,yBAAyB,oBAAoB;AAEhF,YAAM,aAAa,MAAM,KAAK,SAAS,UAAU,MAAM;AACvD,YAAM,SAAS,WAAW,KAAK;AAE/B,UAAI,WAAW,UAAU;AACvB,cAAM,IAAI,qBAAqB,QAAS,WAAW,KAAK,mBAA8B,eAAe;AAAA,MACvG;AAEA,UAAI,WAAW,WAAW;AACxB,eAAO,UAAU,WAAW,IAAI;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,IAAI,kBAAkB,SAAS;AAAA,EACvC;AACF;;;ACpKO,SAAS,cAAc,MAAiD;AAC7E,QAAM,aAAa,KAAK;AACxB,QAAM,SAAU,YAAY,UAAU,CAAC;AACvC,SAAO,EAAE,SAAS,KAAK,SAAmB,OAAO;AACnD;AAEO,SAAS,cAAc,MAAiD;AAC7E,QAAM,aAAa,KAAK;AACxB,QAAM,SAAU,YAAY,UAAU,CAAC;AACvC,SAAO,EAAE,SAAS,KAAK,SAAmB,OAAO;AACnD;AAGO,SAAS,cAAc,MAAiD;AAC7E,QAAM,aAAa,KAAK;AACxB,QAAM,YAAa,YAAY,UAAU,CAAC;AAC1C,QAAM,SAAS,UAAU,IAAI,QAAM;AAAA,IACjC,IAAI,EAAE;AAAA,IACN,KAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW;AAAA,IACzC,SAAS,EAAE;AAAA,IACX,SAAS,EAAE;AAAA,IACX,UAAW,EAAE,YAAY,EAAE;AAAA,IAC3B,cAAc,EAAE;AAAA,IAChB,cAAc,EAAE;AAAA,EAClB,EAAE;AACF,SAAO,EAAE,SAAS,KAAK,SAAmB,OAAO;AACnD;AAEO,SAAS,YAAY,MAAgD;AAC1E,SAAO,EAAE,SAAS,KAAK,SAAmB,MAAM,KAAK,eAAe,KAAK;AAC3E;AAGO,SAAS,YAAY,MAAgD;AAC1E,SAAO;AAAA,IACL,YAAY,KAAK;AAAA,IACjB,WAAY,KAAK,aAAa,CAAC;AAAA,EACjC;AACF;AAGO,SAAS,iBAAiB,MAAqD;AACpF,QAAM,aAAa,KAAK;AACxB,QAAM,YAAa,YAAY,UAAU,CAAC;AAC1C,QAAM,SAAS,UAAU,IAAI,CAAC,KAAK,OAAO;AAAA,IACxC,OAAQ,IAAI,SAAoB;AAAA,IAChC,OAAO,IAAI;AAAA,IACX,OAAO,IAAI;AAAA,IACX,OAAO,IAAI;AAAA,EACb,EAAE;AACF,SAAO,EAAE,SAAS,KAAK,SAAmB,OAAO;AACnD;AAGO,SAAS,cAAc,MAAiD;AAC7E,QAAM,aAAa,KAAK;AACxB,QAAM,SAAU,YAAY,UAAU,CAAC;AACvC,SAAO,EAAE,SAAS,KAAK,SAAmB,OAAO;AACnD;AAGO,SAAS,kBAAkB,MAAsD;AACtF,QAAM,aAAa,KAAK;AACxB,QAAM,SAAU,YAAY,UAAU,CAAC;AACvC,QAAM,YAAa,YAAY,UAAU,CAAC;AAC1C,QAAM,SAAS,UAAU,IAAI,QAAM;AAAA,IACjC,IAAI,EAAE;AAAA,IACN,SAAS,EAAE;AAAA,IACX,SAAS,EAAE;AAAA,IACX,cAAc,EAAE;AAAA,IAChB,cAAc,EAAE;AAAA,EAClB,EAAE;AACF,SAAO,EAAE,SAAS,KAAK,SAAmB,QAAQ,OAAO;AAC3D;;;ACjEO,SAAS,aAAa,QAAqB;AAChD,SAAO;AAAA;AAAA,IAGL,sBAAsB,OAAoD;AACxE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC7G;AAAA,IACA,mBAAmB,OAAoD;AACrE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC/G;AAAA,IACA,wBAAwB,OAAoD;AAC1E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC/G;AAAA,IACA,oBAAoB,OAAoD;AACtE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,kBAAkB,GAAG,OAAO,aAAa;AAAA,IACvG;AAAA,IACA,sBAAsB,OAAoD;AACxE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,oBAAoB,GAAG,OAAO,aAAa;AAAA,IACzG;AAAA,IACA,wBAAwB,OAAoD;AAC1E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,oBAAoB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACrH;AAAA,IACA,mBAAmB,OAAoD;AACrE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC/G;AAAA,IACA,iBAAiB,OAAoD;AACnE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC7G;AAAA,IACA,sBAAsB,OAAoD;AACxE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC7G;AAAA;AAAA,IAIA,uBAAuB,OAAqD;AAC1E,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC9G;AAAA,IACA,oBAAoB,OAAqD;AACvE,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAChH;AAAA,IACA,oBAAoB,OAAqD;AACvE,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAChH;AAAA,IACA,yBAAyB,OAAqD;AAC5E,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAChH;AAAA,IACA,qBAAqB,OAAqD;AACxE,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,kBAAkB,GAAG,OAAO,aAAa;AAAA,IACxG;AAAA,IACA,uBAAuB,OAAqD;AAC1E,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,oBAAoB,GAAG,OAAO,aAAa;AAAA,IAC1G;AAAA,IACA,oBAAoB,OAAqD;AACvE,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAChH;AAAA,IACA,yBAAyB,OAAqD;AAC5E,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAChH;AAAA,IACA,yBAAyB,OAAqD;AAC5E,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,oBAAoB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACtH;AAAA,IACA,8BAA8B,OAAqD;AACjF,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,oBAAoB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACtH;AAAA,IACA,oBAAoB,OAAqD;AACvE,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAChH;AAAA,IACA,kBAAkB,OAAqD;AACrE,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC9G;AAAA,IACA,uBAAuB,OAAqD;AAC1E,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC9G;AAAA;AAAA,IAIA,wBAAwB,OAAkD;AACxE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,GAAG,OAAO,aAAa;AAAA,IACtG;AAAA,IACA,4BAA4B,OAAkD;AAC5E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,GAAG,OAAO,aAAa;AAAA,IACtG;AAAA,IACA,gCAAgC,OAAkD;AAChF,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,kBAAkB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACnH;AAAA,IACA,oCAAoC,OAAkD;AACpF,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,kBAAkB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACnH;AAAA,IACA,6BAA6B,OAAkD;AAC7E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,kBAAkB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACnH;AAAA,IACA,kCAAkC,OAAkD;AAClF,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,kBAAkB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACnH;AAAA,IACA,qBAAqB,OAAkD;AACrE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,GAAG,OAAO,aAAa;AAAA,IACtG;AAAA,IACA,0BAA0B,OAAkD;AAC1E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,GAAG,OAAO,aAAa;AAAA,IACtG;AAAA,IACA,2BAA2B,OAAkD;AAC3E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,+BAA+B,OAAkD;AAC/E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,0BAA0B,OAAkD;AAC1E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,wBAAwB,OAAkD;AACxE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,6BAA6B,OAAkD;AAC7E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,oCAAoC,OAAkD;AACpF,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,+BAA+B,OAAkD;AAC/E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,6BAA6B,OAAkD;AAC7E,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA,IACA,kCAAkC,OAAkD;AAClF,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAClH;AAAA;AAAA,IAIA,mBAAmB,OAAwD;AACzE,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,WAAW,GAAG,OAAO,aAAa;AAAA,IACjG;AAAA,IACA,oBAAoB,OAAwD;AAC1E,aAAO,OAAO,QAAQ,yBAAyB,EAAE,YAAY,WAAW,GAAG,OAAO,aAAa;AAAA,IACjG;AAAA;AAAA,IAIA,QAAQ,OAAkD;AACxD,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,iBAAiB,GAAG,OAAO,aAAa;AAAA,IACtG;AAAA,IACA,mBAAmB,OAAkD;AACnE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,gBAAgB,GAAG,OAAO,aAAa;AAAA,IACrG;AAAA,IACA,oBAAoB,OAAkD;AACpE,aAAO,OAAO,QAAQ,wBAAwB,EAAE,YAAY,gBAAgB,GAAG,OAAO,aAAa;AAAA,IACrG;AAAA;AAAA,IAIA,aAAa,OAAqD;AAChE,aAAO,OAAO,QAAQ,mCAAmC,EAAE,YAAY,6BAA6B,GAAG,OAAO,aAAa;AAAA,IAC7H;AAAA;AAAA,IAIA,YAAY,OAA+C;AACzD,aAAO,OAAO,QAAQ,gCAAgC,EAAE,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC7F;AAAA,IACA,iBAAiB,OAA+C;AAC9D,aAAO,OAAO,QAAQ,gCAAgC,EAAE,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC7F;AAAA,IACA,YAAY,OAA+C;AACzD,aAAO,OAAO,QAAQ,gCAAgC,EAAE,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC7F;AAAA,IACA,iBAAiB,OAA+C;AAC9D,aAAO,OAAO,QAAQ,gCAAgC,EAAE,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IAC7F;AAAA;AAAA,IAIA,oBAAoB,OAAgD;AAClE,aAAO,OAAO,QAAQ,+BAA+B,CAAC,GAAG,OAAO,aAAa;AAAA,IAC/E;AAAA,IACA,mBAAmB,OAAgD;AACjE,aAAO,OAAO,QAAQ,+BAA+B,CAAC,GAAG,OAAO,aAAa;AAAA,IAC/E;AAAA;AAAA,IAIA,kBAAkB,OAAgD;AAChE,aAAO,OAAO,QAAQ,qBAAqB,CAAC,GAAG,OAAO,aAAa;AAAA,IACrE;AAAA,IACA,eAAe,OAAgD;AAC7D,aAAO,OAAO,QAAQ,qBAAqB,CAAC,GAAG,OAAO,aAAa;AAAA,IACrE;AAAA,IACA,eAAe,OAAgD;AAC7D,aAAO,OAAO,QAAQ,qBAAqB,CAAC,GAAG,OAAO,aAAa;AAAA,IACrE;AAAA,IACA,oBAAoB,OAAgD;AAClE,aAAO,OAAO,QAAQ,qBAAqB,CAAC,GAAG,OAAO,aAAa;AAAA,IACrE;AAAA;AAAA,IAIA,qBAAqB,OAAsD;AACzE,aAAO,OAAO,QAAQ,4BAA4B,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACnH;AAAA,IACA,0BAA0B,OAAsD;AAC9E,aAAO,OAAO,QAAQ,4BAA4B,EAAE,YAAY,cAAc,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACnH;AAAA,IACA,mBAAmB,OAAsD;AACvE,aAAO,OAAO,QAAQ,4BAA4B,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACjH;AAAA,IACA,wBAAwB,OAAsD;AAC5E,aAAO,OAAO,QAAQ,4BAA4B,EAAE,YAAY,YAAY,MAAM,MAAM,GAAG,OAAO,aAAa;AAAA,IACjH;AAAA;AAAA,IAIA,IAAI,OAA4C;AAC9C,aAAO,OAAO,QAAQ,gBAAgB,CAAC,GAAG,OAAO,eAAe,IAAI;AAAA,IACtE;AAAA;AAAA,IAIA,aAAa,OAA0D;AACrE,aAAO,OAAO,QAAQ,2BAA2B,CAAC,GAAG,OAAO,iBAAiB;AAAA,IAC/E;AAAA;AAAA,IAIA,YAAY,OAAoD;AAC9D,aAAO,OAAO,QAAQ,0BAA0B,CAAC,GAAG,OAAO,aAAa;AAAA,IAC1E;AAAA;AAAA,IAIA,YAAY,OAAoD;AAC9D,aAAO,OAAO,QAAQ,4BAA4B,CAAC,GAAG,OAAO,aAAa;AAAA,IAC5E;AAAA;AAAA,IAIA,UAAU,OAAsD;AAC9D,aAAO,OAAO,QAAQ,4BAA4B,CAAC,GAAG,OAAO,gBAAgB;AAAA,IAC/E;AAAA;AAAA,IAIA,iBAAiB,OAAyD;AACxE,aAAO,OAAO,QAAQ,+BAA+B,EAAE,YAAY,aAAa,GAAG,OAAO,aAAa;AAAA,IACzG;AAAA;AAAA,IAIA,YAAY,OAAoD;AAC9D,aAAO,OAAO,QAAQ,4BAA4B,CAAC,GAAG,OAAO,aAAa;AAAA,IAC5E;AAAA;AAAA,IAIA,YAAY,OAAoD;AAC9D,aAAO,OAAO,QAAQ,0BAA0B,CAAC,GAAG,OAAO,aAAa;AAAA,IAC1E;AAAA;AAAA,IAIA,aAAa,OAAoD;AAC/D,aAAO,OAAO,QAAQ,2BAA2B,CAAC,GAAG,OAAO,aAAa,IAAI;AAAA,IAC/E;AAAA;AAAA,IAIA,eAAe,OAAsD;AACnE,aAAO,OAAO,QAAQ,6BAA6B,CAAC,GAAG,OAAO,aAAa,IAAI;AAAA,IACjF;AAAA;AAAA,IAIA,iBAAiB,OAAyD;AACxE,aAAO,OAAO,QAAQ,+BAA+B,EAAE,YAAY,aAAa,GAAG,OAAO,aAAa;AAAA,IACzG;AAAA,EACF;AACF;;;AC1QO,SAAS,aAAa,QAAqB;AAChD,QAAM,SAAS,IAAI,YAAY;AAC/B,SAAO,UAAU,MAAM;AACvB,SAAO;AAAA,IACL,WAAW,CAAC,MAAmB,OAAO,UAAU,CAAC;AAAA,IACjD,GAAG,aAAa,MAAM;AAAA,EACxB;AACF;AAGA,IAAM,gBAAgB,IAAI,YAAY;AAE/B,IAAM,QAAQ;AAAA,EACnB,WAAW,CAAC,WAAwB,cAAc,UAAU,MAAM;AAAA,EAClE,GAAG,aAAa,aAAa;AAC/B;;;AClCO,SAAS,UAAU,SAAiC;AACzD,MAAI,QAAQ,MAAM;AAChB,kBAAc,QAAQ,IAAI;AAAA,EAC5B;AACA,MAAI,QAAQ,SAAS;AACnB,qBAAiB,QAAQ,OAAO;AAAA,EAClC;AACA,MAAI,QAAQ,OAAO;AACjB,mBAAe,QAAQ,KAAK;AAAA,EAC9B;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/kling/errors.ts","../src/providers/kling/auth.ts","../src/providers/kling/extract.ts","../src/providers/kling/client.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 {\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n ElementResult,\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/**\n * Extracts element data from poll response.\n * Assumption: element fields (element_id, element_name, etc.) are directly on data,\n * not nested inside data.task_result. Verify against live API if extraction returns undefined.\n */\nexport function extractElement(data: Record<string, unknown>): ElementResult {\n return {\n element_id: data.element_id as string,\n element_name: data.element_name as string,\n element_description: data.element_description as string,\n reference_type: data.reference_type as ElementResult['reference_type'],\n status: data.status as string,\n owned_by: data.owned_by as string | undefined,\n element_voice_id: data.element_voice_id as string | undefined,\n tag_list: data.tag_list as ElementResult['tag_list'],\n element_image_list: data.element_image_list as ElementResult['element_image_list'],\n element_video_list: data.element_video_list as ElementResult['element_video_list'],\n }\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 {\n KlingConfig, KlingApiResponse, PollOptions,\n AccountCostsInput, AccountCostsResult,\n ElementListInput, ElementListResult, DeleteElementInput, ElementResult,\n KlingListParams, KlingVoiceListResult, KlingTaskListResult,\n KlingVoiceResult,\n MultiElementsInitInput, MultiElementsInitResult,\n MultiElementsAddSelectionInput, MultiElementsSelectionResult,\n MultiElementsDeleteSelectionInput, MultiElementsClearSelectionInput,\n MultiElementsPreviewInput, MultiElementsPreviewResult,\n} from './types.js'\nimport { KlingAuthError, KlingRateLimitError, KlingApiError, KlingTimeoutError, KlingTaskFailedError } from './errors.js'\nimport { buildAuthHeaders } from './auth.js'\nimport type { Extractor } from './extract.js'\nimport { extractVoices, extractElement } 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 async elementList(input: ElementListInput): Promise<ElementListResult> {\n const params: Record<string, string> = {}\n if (input.pageNum !== undefined) params.pageNum = String(input.pageNum)\n if (input.pageSize !== undefined) params.pageSize = String(input.pageSize)\n const json = await this.httpGet('v1/general/advanced-custom-elements', params)\n const data = json.data as Record<string, unknown>\n // Assumption: list response uses data.elements — verify key name against live API\n return { elements: (data.elements ?? []) as ElementListResult['elements'] }\n }\n\n async presetElementList(): Promise<ElementListResult> {\n const json = await this.httpGet('v1/general/advanced-presets-elements', {})\n const data = json.data as Record<string, unknown>\n // Assumption: list response uses data.elements — verify key name against live API\n return { elements: (data.elements ?? []) as ElementListResult['elements'] }\n }\n\n async deleteElement(input: DeleteElementInput): Promise<void> {\n await this.httpSubmit('v1/general/delete-elements', { element_id: input.element_id })\n }\n\n // ── Task list / single-task query helpers ─────────────────────────────────\n\n /** GET a paginated task list from any endpoint. */\n async taskList(endpoint: string, params: KlingListParams = {}): Promise<KlingTaskListResult> {\n const p: Record<string, string> = {}\n if (params.pageNum !== undefined) p.pageNum = String(params.pageNum)\n if (params.pageSize !== undefined) p.pageSize = String(params.pageSize)\n const json = await this.httpGet(endpoint, p)\n const data = json.data as Record<string, unknown>\n return { tasks: (data.tasks ?? []) as KlingTaskListResult['tasks'] }\n }\n\n /** GET a single task by ID from any endpoint and run it through an extractor. */\n async taskGet<T>(endpoint: string, taskId: string, extractor: Extractor<T>): Promise<T> {\n const json = await this.httpPoll(endpoint, taskId)\n return extractor(json.data)\n }\n\n // ── Voice management ──────────────────────────────────────────────────────\n\n async listVoices(params: KlingListParams = {}): Promise<KlingVoiceListResult> {\n const p: Record<string, string> = {}\n if (params.pageNum !== undefined) p.pageNum = String(params.pageNum)\n if (params.pageSize !== undefined) p.pageSize = String(params.pageSize)\n const json = await this.httpGet('v1/general/custom-voices', p)\n const data = json.data as Record<string, unknown>\n return { voices: (data.voices ?? []) as KlingVoiceListResult['voices'] }\n }\n\n async listPresetVoices(params: KlingListParams = {}): Promise<KlingVoiceListResult> {\n const p: Record<string, string> = {}\n if (params.pageNum !== undefined) p.pageNum = String(params.pageNum)\n if (params.pageSize !== undefined) p.pageSize = String(params.pageSize)\n const json = await this.httpGet('v1/general/presets-voices', p)\n const data = json.data as Record<string, unknown>\n return { voices: (data.voices ?? []) as KlingVoiceListResult['voices'] }\n }\n\n async queryVoice(taskId: string): Promise<KlingVoiceResult> {\n const json = await this.httpPoll('v1/general/custom-voices', taskId)\n return extractVoices(json.data)\n }\n\n async deleteVoice(voiceId: string): Promise<void> {\n await this.httpSubmit('v1/general/delete-voices', { voice_id: voiceId })\n }\n\n // ── Element single-task query ─────────────────────────────────────────────\n\n async getElement(taskId: string): Promise<ElementResult> {\n const json = await this.httpPoll('v1/general/advanced-custom-elements', taskId)\n return extractElement(json.data)\n }\n\n // ── Multi-elements video workflow ─────────────────────────────────────────\n\n async initMultiElementsSelection(input: MultiElementsInitInput): Promise<MultiElementsInitResult> {\n const body: Record<string, unknown> = {}\n if (input.video_id !== undefined) body.video_id = input.video_id\n if (input.video_url !== undefined) body.video_url = input.video_url\n const json = await this.httpSubmit('v1/videos/multi-elements/init-selection', body)\n return json.data as unknown as MultiElementsInitResult\n }\n\n async addSelectionArea(input: MultiElementsAddSelectionInput): Promise<MultiElementsSelectionResult> {\n const json = await this.httpSubmit('v1/videos/multi-elements/add-selection', input as unknown as Record<string, unknown>)\n return json.data as unknown as MultiElementsSelectionResult\n }\n\n async deleteSelectionArea(input: MultiElementsDeleteSelectionInput): Promise<MultiElementsSelectionResult> {\n const json = await this.httpSubmit('v1/videos/multi-elements/delete-selection', input as unknown as Record<string, unknown>)\n return json.data as unknown as MultiElementsSelectionResult\n }\n\n async clearSelectionArea(input: MultiElementsClearSelectionInput): Promise<void> {\n await this.httpSubmit('v1/videos/multi-elements/clear-selection', { session_id: input.session_id })\n }\n\n async previewSelection(input: MultiElementsPreviewInput): Promise<MultiElementsPreviewResult> {\n const json = await this.httpSubmit('v1/videos/multi-elements/preview-selection', { session_id: input.session_id })\n return json.data as unknown as MultiElementsPreviewResult\n }\n\n async queryMultiElementsTask(taskId: string): Promise<KlingTaskListResult['tasks'][0]> {\n const json = await this.httpPoll('v1/videos/multi-elements', taskId)\n return json.data\n }\n\n async listMultiElementsTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return this.taskList('v1/videos/multi-elements', params)\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 { 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 CreateElementInput, ElementResult, ElementListInput, ElementListResult, DeleteElementInput,\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n KlingListParams, KlingVoiceListResult, KlingTaskListResult,\n MultiElementsInitInput, MultiElementsInitResult,\n MultiElementsAddSelectionInput, MultiElementsSelectionResult,\n MultiElementsDeleteSelectionInput, MultiElementsClearSelectionInput,\n MultiElementsPreviewInput, MultiElementsPreviewResult,\n MultiElementsGenerateInput,\n} from './types.js'\nimport { extractVideos, extractImages, extractAudios, extractJson, extractFace, extractMultiShot, extractVoices, extractVideoAudio, extractElement } 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 // ── elements ──────────────────────────────────────────────────────────\n\n /** Create a custom element (character/object) from images or video. Async — polls until ready. */\n createElement(input: CreateElementInput): Promise<ElementResult> {\n return client.execute('v1/general/advanced-custom-elements', {}, input, extractElement)\n },\n\n /** List all custom elements under the account. */\n listElements(input: ElementListInput = {}): Promise<ElementListResult> {\n return client.elementList(input)\n },\n\n /** List official preset elements from the Kling element library. */\n listPresetElements(): Promise<ElementListResult> {\n return client.presetElementList()\n },\n\n /** Delete a custom element by element_id. */\n deleteElement(input: DeleteElementInput): Promise<void> {\n return client.deleteElement(input)\n },\n\n // ── voice management ──────────────────────────────────────────────────\n\n /** List custom voices cloned under the account. */\n listVoices(params: KlingListParams = {}): Promise<KlingVoiceListResult> {\n return client.listVoices(params)\n },\n\n /** List official preset voices from the Kling voice library. */\n listPresetVoices(params: KlingListParams = {}): Promise<KlingVoiceListResult> {\n return client.listPresetVoices(params)\n },\n\n /** Query a single custom voice creation task by task_id. */\n queryVoice(taskId: string): Promise<KlingVoiceResult> {\n return client.queryVoice(taskId)\n },\n\n /** Delete a custom voice by voice_id. */\n deleteVoice(voiceId: string): Promise<void> {\n return client.deleteVoice(voiceId)\n },\n\n // ── element single-task query ─────────────────────────────────────────\n\n /** Query a single custom element creation task by task_id. */\n getElement(taskId: string): Promise<ElementResult> {\n return client.getElement(taskId)\n },\n\n // ── multi-elements video workflow ──────────────────────────────────────\n\n /** Step 1: Initialize a video for multi-elements editing. Returns session_id. */\n initMultiElementsSelection(input: MultiElementsInitInput): Promise<MultiElementsInitResult> {\n return client.initMultiElementsSelection(input)\n },\n\n /** Step 2: Add a selection area by clicking points on a frame. */\n addSelectionArea(input: MultiElementsAddSelectionInput): Promise<MultiElementsSelectionResult> {\n return client.addSelectionArea(input)\n },\n\n /** Step 3: Delete a previously added selection area. */\n deleteSelectionArea(input: MultiElementsDeleteSelectionInput): Promise<MultiElementsSelectionResult> {\n return client.deleteSelectionArea(input)\n },\n\n /** Step 4: Clear all selections for a session. */\n clearSelectionArea(input: MultiElementsClearSelectionInput): Promise<void> {\n return client.clearSelectionArea(input)\n },\n\n /** Step 5: Preview selection with mask overlay. */\n previewSelection(input: MultiElementsPreviewInput): Promise<MultiElementsPreviewResult> {\n return client.previewSelection(input)\n },\n\n /** Step 6: Generate the final multi-elements edited video. Polls until complete. */\n generateMultiElementsVideo(input: MultiElementsGenerateInput): Promise<KlingVideoResult> {\n return client.execute('v1/videos/multi-elements', { model_name: 'kling-v1-6' }, input, extractVideos)\n },\n\n /** Query a single multi-elements generation task by task_id. */\n queryMultiElementsTask(taskId: string): Promise<KlingTaskListResult['tasks'][0]> {\n return client.queryMultiElementsTask(taskId)\n },\n\n /** List multi-elements generation tasks. */\n listMultiElementsTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.listMultiElementsTasks(params)\n },\n\n // ── list queries ───────────────────────────────────────────────────────\n\n listLipSyncTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/videos/advanced-lip-sync', params)\n },\n listTextToAudioTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/audio/text-to-audio', params)\n },\n listVideoEffectsTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/videos/effects', params)\n },\n listImageGenerationTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/images/generations', params)\n },\n listOmniVideoTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/videos/omni-video', params)\n },\n listMultiShotTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/general/ai-multi-shot', params)\n },\n listImageToVideoTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/videos/image2video', params)\n },\n listOmniImageTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/images/omni-image', params)\n },\n listReferenceToImageTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/images/multi-image2image', params)\n },\n listVirtualTryOnTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/images/kolors-virtual-try-on', params)\n },\n listMotionControlTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/videos/motion-control', params)\n },\n listExtendVideoTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/videos/video-extend', params)\n },\n listAvatarTasks(params: KlingListParams = {}): Promise<KlingTaskListResult> {\n return client.taskList('v1/videos/avatar/image2video', params)\n },\n\n // ── single-task queries ────────────────────────────────────────────────\n\n getLipSyncTask(taskId: string): Promise<KlingVideoResult> {\n return client.taskGet('v1/videos/advanced-lip-sync', taskId, extractVideos)\n },\n getTextToAudioTask(taskId: string): Promise<KlingAudioResult> {\n return client.taskGet('v1/audio/text-to-audio', taskId, extractAudios)\n },\n getVideoEffectsTask(taskId: string): Promise<KlingVideoResult> {\n return client.taskGet('v1/videos/effects', taskId, extractVideos)\n },\n getImageGenerationTask(taskId: string): Promise<KlingImageResult> {\n return client.taskGet('v1/images/generations', taskId, extractImages)\n },\n getOmniVideoTask(taskId: string): Promise<KlingVideoResult> {\n return client.taskGet('v1/videos/omni-video', taskId, extractVideos)\n },\n getMultiShotTask(taskId: string): Promise<KlingMultiShotResult> {\n return client.taskGet('v1/general/ai-multi-shot', taskId, extractMultiShot)\n },\n getImageToVideoTask(taskId: string): Promise<KlingVideoResult> {\n return client.taskGet('v1/videos/image2video', taskId, extractVideos)\n },\n getOmniImageTask(taskId: string): Promise<KlingImageResult> {\n return client.taskGet('v1/images/omni-image', taskId, extractImages)\n },\n getReferenceToImageTask(taskId: string): Promise<KlingImageResult> {\n return client.taskGet('v1/images/multi-image2image', taskId, extractImages)\n },\n getVirtualTryOnTask(taskId: string): Promise<KlingImageResult> {\n return client.taskGet('v1/images/kolors-virtual-try-on', taskId, extractImages)\n },\n getMotionControlTask(taskId: string): Promise<KlingVideoResult> {\n return client.taskGet('v1/videos/motion-control', taskId, extractVideos)\n },\n getExtendVideoTask(taskId: string): Promise<KlingVideoResult> {\n return client.taskGet('v1/videos/video-extend', taskId, extractVideos)\n },\n getAvatarTask(taskId: string): Promise<KlingVideoResult> {\n return client.taskGet('v1/videos/avatar/image2video', taskId, 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, AccountCostsInput, AccountCostsResult, ResourcePackInfo,\n CreateElementInput, ElementResult, ElementListInput, ElementListResult, DeleteElementInput, ElementTag,\n KlingVideoResult, KlingImageResult, KlingAudioResult, KlingJsonResult,\n KlingFaceResult, KlingMultiShotResult, KlingVoiceResult, KlingVideoAudioResult,\n KlingListParams, KlingVoiceListResult, KlingTaskListResult, VoiceInfo,\n MultiElementsInitInput, MultiElementsInitResult, MultiElementsPoint,\n MultiElementsAddSelectionInput, MultiElementsSelectionResult,\n MultiElementsDeleteSelectionInput, MultiElementsClearSelectionInput,\n MultiElementsPreviewInput, MultiElementsPreviewResult,\n MultiElementsGenerateInput,\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":[]}
|