vidspotai-shared 1.0.30 → 1.0.32
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/lib/globals/aiModels/enums.d.ts +40 -0
- package/lib/globals/aiModels/enums.d.ts.map +1 -0
- package/lib/globals/aiModels/enums.js +46 -0
- package/lib/globals/aiModels/index.d.ts +6 -0
- package/lib/globals/aiModels/index.d.ts.map +1 -0
- package/lib/globals/aiModels/index.js +35 -0
- package/lib/globals/aiModels/providers/bytedance.d.ts +4 -0
- package/lib/globals/aiModels/providers/bytedance.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/bytedance.js +65 -0
- package/lib/globals/aiModels/providers/google.d.ts +4 -0
- package/lib/globals/aiModels/providers/google.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/google.js +111 -0
- package/lib/globals/aiModels/providers/kling.d.ts +4 -0
- package/lib/globals/aiModels/providers/kling.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/kling.js +129 -0
- package/lib/globals/aiModels/providers/minimax.d.ts +4 -0
- package/lib/globals/aiModels/providers/minimax.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/minimax.js +66 -0
- package/lib/globals/aiModels/providers/openai.d.ts +4 -0
- package/lib/globals/aiModels/providers/openai.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/openai.js +82 -0
- package/lib/globals/aiModels/providers/pixverse.d.ts +4 -0
- package/lib/globals/aiModels/providers/pixverse.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/pixverse.js +108 -0
- package/lib/globals/aiModels/providers/runway.d.ts +4 -0
- package/lib/globals/aiModels/providers/runway.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/runway.js +52 -0
- package/lib/globals/aiModels/types.d.ts +45 -0
- package/lib/globals/aiModels/types.d.ts.map +1 -0
- package/lib/globals/aiModels/types.js +2 -0
- package/lib/globals/aiModels.d.ts +9 -14
- package/lib/globals/aiModels.d.ts.map +1 -1
- package/lib/globals/aiModels.js +187 -495
- package/lib/globals/ttsModels/index.d.ts +6 -0
- package/lib/globals/ttsModels/index.d.ts.map +1 -0
- package/lib/globals/ttsModels/index.js +25 -0
- package/lib/globals/ttsModels/providers/elevenlabs.d.ts +3 -0
- package/lib/globals/ttsModels/providers/elevenlabs.d.ts.map +1 -0
- package/lib/globals/ttsModels/providers/elevenlabs.js +13 -0
- package/lib/globals/ttsModels/types.d.ts +15 -0
- package/lib/globals/ttsModels/types.d.ts.map +1 -0
- package/lib/globals/ttsModels/types.js +2 -0
- package/lib/globals/ttsModels/voices.d.ts +21 -0
- package/lib/globals/ttsModels/voices.d.ts.map +1 -0
- package/lib/globals/ttsModels/voices.js +135 -0
- package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/bytedance/bytedance.service.js +36 -7
- package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts +9 -0
- package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/pixverse/pixverse.service.js +188 -0
- package/lib/services/tts/index.d.ts +4 -0
- package/lib/services/tts/index.d.ts.map +1 -0
- package/lib/services/tts/index.js +19 -0
- package/lib/services/tts/providers/elevenlabs.service.d.ts +7 -0
- package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -0
- package/lib/services/tts/providers/elevenlabs.service.js +44 -0
- package/lib/services/tts/ttsFactory.service.d.ts +4 -0
- package/lib/services/tts/ttsFactory.service.d.ts.map +1 -0
- package/lib/services/tts/ttsFactory.service.js +12 -0
- package/lib/services/tts/types.d.ts +14 -0
- package/lib/services/tts/types.d.ts.map +1 -0
- package/lib/services/tts/types.js +6 -0
- package/lib/utils/helpers.js +2 -2
- package/lib/utils/logger.d.ts +1 -2
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +0 -2
- package/lib/utils/ttsUtils.d.ts +11 -0
- package/lib/utils/ttsUtils.d.ts.map +1 -0
- package/lib/utils/ttsUtils.js +16 -0
- package/package.json +1 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from "./types";
|
|
2
|
+
export * from "./voices";
|
|
3
|
+
import { TtsProvider, ITtsProviderConfig } from "./types";
|
|
4
|
+
export { elevenlabsConfig } from "./providers/elevenlabs";
|
|
5
|
+
export declare const ttsProviderConfigs: Record<TtsProvider, ITtsProviderConfig>;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/globals/ttsModels/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAEtE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ttsProviderConfigs = exports.elevenlabsConfig = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
__exportStar(require("./voices"), exports);
|
|
20
|
+
const elevenlabs_1 = require("./providers/elevenlabs");
|
|
21
|
+
var elevenlabs_2 = require("./providers/elevenlabs");
|
|
22
|
+
Object.defineProperty(exports, "elevenlabsConfig", { enumerable: true, get: function () { return elevenlabs_2.elevenlabsConfig; } });
|
|
23
|
+
exports.ttsProviderConfigs = {
|
|
24
|
+
elevenlabs: elevenlabs_1.elevenlabsConfig,
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenlabs.d.ts","sourceRoot":"","sources":["../../../../src/globals/ttsModels/providers/elevenlabs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,eAAO,MAAM,gBAAgB,EAAE,kBAS9B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.elevenlabsConfig = void 0;
|
|
4
|
+
exports.elevenlabsConfig = {
|
|
5
|
+
name: "ElevenLabs",
|
|
6
|
+
/** eleven_multilingual_v2 pay-as-you-go rate */
|
|
7
|
+
costPer1KChars: 0.3,
|
|
8
|
+
/** Sarah — neutral, clear default voice */
|
|
9
|
+
defaultVoiceId: "EXAVITQu4vr4xnSDxMaL",
|
|
10
|
+
modelId: "eleven_multilingual_v2",
|
|
11
|
+
/** ~150 words/min = 2.5 words/sec */
|
|
12
|
+
wordsPerSecond: 2.5,
|
|
13
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Union of all supported TTS provider keys. Extend as new providers are added. */
|
|
2
|
+
export type TtsProvider = "elevenlabs";
|
|
3
|
+
export interface ITtsProviderConfig {
|
|
4
|
+
/** Human-readable provider name */
|
|
5
|
+
name: string;
|
|
6
|
+
/** Cost in USD per 1,000 characters (pay-as-you-go rate) */
|
|
7
|
+
costPer1KChars: number;
|
|
8
|
+
/** Default voice ID sent to the provider API */
|
|
9
|
+
defaultVoiceId: string;
|
|
10
|
+
/** Model/engine identifier used by the provider */
|
|
11
|
+
modelId: string;
|
|
12
|
+
/** Average spoken words per second for duration estimation (~150 wpm = 2.5 wps) */
|
|
13
|
+
wordsPerSecond: number;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/globals/ttsModels/types.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ITtsVoice {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
gender: "male" | "female";
|
|
5
|
+
accent: string;
|
|
6
|
+
/** Public preview MP3 hosted by ElevenLabs */
|
|
7
|
+
previewUrl: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Curated list of ElevenLabs voices compatible with eleven_multilingual_v2.
|
|
11
|
+
* Any voice can speak any supported language via the language_code parameter.
|
|
12
|
+
*/
|
|
13
|
+
export declare const ELEVENLABS_VOICES: ITtsVoice[];
|
|
14
|
+
/** Default voice ID — Sarah (female, American) */
|
|
15
|
+
export declare const DEFAULT_ELEVENLABS_VOICE_ID = "EXAVITQu4vr4xnSDxMaL";
|
|
16
|
+
/**
|
|
17
|
+
* Maps frontend language keys → ElevenLabs language_code (ISO 639-1).
|
|
18
|
+
* Used to improve pronunciation when eleven_multilingual_v2 is the model.
|
|
19
|
+
*/
|
|
20
|
+
export declare const LANG_TO_ELEVENLABS_CODE: Record<string, string>;
|
|
21
|
+
//# sourceMappingURL=voices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voices.d.ts","sourceRoot":"","sources":["../../../src/globals/ttsModels/voices.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAuFxC,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiC1D,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LANG_TO_ELEVENLABS_CODE = exports.DEFAULT_ELEVENLABS_VOICE_ID = exports.ELEVENLABS_VOICES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Curated list of ElevenLabs voices compatible with eleven_multilingual_v2.
|
|
6
|
+
* Any voice can speak any supported language via the language_code parameter.
|
|
7
|
+
*/
|
|
8
|
+
exports.ELEVENLABS_VOICES = [
|
|
9
|
+
// ── Female ──────────────────────────────────────────────────────────────
|
|
10
|
+
{
|
|
11
|
+
id: "EXAVITQu4vr4xnSDxMaL",
|
|
12
|
+
name: "Sarah",
|
|
13
|
+
gender: "female",
|
|
14
|
+
accent: "American",
|
|
15
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/EXAVITQu4vr4xnSDxMaL/preview.mp3",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: "21m00Tcm4TlvDq8ikWAM",
|
|
19
|
+
name: "Rachel",
|
|
20
|
+
gender: "female",
|
|
21
|
+
accent: "American",
|
|
22
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/21m00Tcm4TlvDq8ikWAM/preview.mp3",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "XrExE9yKIg1WjnnlVkGX",
|
|
26
|
+
name: "Matilda",
|
|
27
|
+
gender: "female",
|
|
28
|
+
accent: "American",
|
|
29
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/XrExE9yKIg1WjnnlVkGX/preview.mp3",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "9BWtsMINqrJLrRacOk9x",
|
|
33
|
+
name: "Aria",
|
|
34
|
+
gender: "female",
|
|
35
|
+
accent: "American",
|
|
36
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/9BWtsMINqrJLrRacOk9x/preview.mp3",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "XB0fDUnXU5powFXDhCwa",
|
|
40
|
+
name: "Charlotte",
|
|
41
|
+
gender: "female",
|
|
42
|
+
accent: "Swedish",
|
|
43
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/XB0fDUnXU5powFXDhCwa/preview.mp3",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: "ThT5KcBeYPX3keUQqHPh",
|
|
47
|
+
name: "Dorothy",
|
|
48
|
+
gender: "female",
|
|
49
|
+
accent: "British",
|
|
50
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/ThT5KcBeYPX3keUQqHPh/preview.mp3",
|
|
51
|
+
},
|
|
52
|
+
// ── Male ────────────────────────────────────────────────────────────────
|
|
53
|
+
{
|
|
54
|
+
id: "pNInz6obpgDQGcFmaJgB",
|
|
55
|
+
name: "Adam",
|
|
56
|
+
gender: "male",
|
|
57
|
+
accent: "American",
|
|
58
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/pNInz6obpgDQGcFmaJgB/preview.mp3",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "IKne3meq5aSn9XLyUdCD",
|
|
62
|
+
name: "Charlie",
|
|
63
|
+
gender: "male",
|
|
64
|
+
accent: "Australian",
|
|
65
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/IKne3meq5aSn9XLyUdCD/preview.mp3",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: "JBFqnCBsd6RMkjVDRZzb",
|
|
69
|
+
name: "George",
|
|
70
|
+
gender: "male",
|
|
71
|
+
accent: "British",
|
|
72
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/JBFqnCBsd6RMkjVDRZzb/preview.mp3",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "N2lVS1w4EtoT3dr4eOWO",
|
|
76
|
+
name: "Callum",
|
|
77
|
+
gender: "male",
|
|
78
|
+
accent: "American",
|
|
79
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/N2lVS1w4EtoT3dr4eOWO/preview.mp3",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "TX3LPaxmHKxFdv7VOQHJ",
|
|
83
|
+
name: "Liam",
|
|
84
|
+
gender: "male",
|
|
85
|
+
accent: "American",
|
|
86
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/TX3LPaxmHKxFdv7VOQHJ/preview.mp3",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: "onwK4e9ZLuTAKqWW03F9",
|
|
90
|
+
name: "Daniel",
|
|
91
|
+
gender: "male",
|
|
92
|
+
accent: "British",
|
|
93
|
+
previewUrl: "https://storage.googleapis.com/eleven-public-prod/premade/voices/onwK4e9ZLuTAKqWW03F9/preview.mp3",
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
/** Default voice ID — Sarah (female, American) */
|
|
97
|
+
exports.DEFAULT_ELEVENLABS_VOICE_ID = "EXAVITQu4vr4xnSDxMaL";
|
|
98
|
+
/**
|
|
99
|
+
* Maps frontend language keys → ElevenLabs language_code (ISO 639-1).
|
|
100
|
+
* Used to improve pronunciation when eleven_multilingual_v2 is the model.
|
|
101
|
+
*/
|
|
102
|
+
exports.LANG_TO_ELEVENLABS_CODE = {
|
|
103
|
+
en: "en",
|
|
104
|
+
ar: "ar",
|
|
105
|
+
bg: "bg",
|
|
106
|
+
ca: "ca",
|
|
107
|
+
"zh-cn": "zh",
|
|
108
|
+
hr: "hr",
|
|
109
|
+
cs: "cs",
|
|
110
|
+
da: "da",
|
|
111
|
+
nl: "nl",
|
|
112
|
+
tl: "fil",
|
|
113
|
+
fi: "fi",
|
|
114
|
+
fr: "fr",
|
|
115
|
+
de: "de",
|
|
116
|
+
el: "el",
|
|
117
|
+
iw: "he",
|
|
118
|
+
hu: "hu",
|
|
119
|
+
id: "id",
|
|
120
|
+
it: "it",
|
|
121
|
+
ja: "ja",
|
|
122
|
+
ko: "ko",
|
|
123
|
+
ms: "ms",
|
|
124
|
+
no: "no",
|
|
125
|
+
pl: "pl",
|
|
126
|
+
pt: "pt",
|
|
127
|
+
ro: "ro",
|
|
128
|
+
sk: "sk",
|
|
129
|
+
es: "es",
|
|
130
|
+
sv: "sv",
|
|
131
|
+
th: "th",
|
|
132
|
+
tr: "tr",
|
|
133
|
+
uk: "uk",
|
|
134
|
+
vi: "vi",
|
|
135
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytedance.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/bytedance/bytedance.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AASlB,qBAAa,gBAAiB,SAAQ,wBAAwB;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CACsD;IAExE,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"bytedance.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/bytedance/bytedance.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AASlB,qBAAa,gBAAiB,SAAQ,wBAAwB;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CACsD;IAExE,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IA6D3B,gBAAgB,CAAC,EACrB,IAAI,EACJ,cAAc,EACd,cAAyB,GAC1B,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA8FjD,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;CAoCjD"}
|
|
@@ -38,6 +38,7 @@ class ByteDanceService extends baseAiGenProvider_service_1.BaseAiGenProviderServ
|
|
|
38
38
|
const body = {
|
|
39
39
|
model: modelId,
|
|
40
40
|
content,
|
|
41
|
+
generate_audio: params.audio || false,
|
|
41
42
|
ratio: params.aspectRatio, // e.g. 16:9
|
|
42
43
|
resolution: params.resolution, // e.g. 720p
|
|
43
44
|
duration: params.duration, // seconds
|
|
@@ -125,8 +126,10 @@ class ByteDanceService extends baseAiGenProvider_service_1.BaseAiGenProviderServ
|
|
|
125
126
|
contentType: "video/mp4",
|
|
126
127
|
resumable: false,
|
|
127
128
|
metadata: {
|
|
128
|
-
firebaseStorageDownloadTokens: downloadToken,
|
|
129
129
|
cacheControl: "public, max-age=31536000",
|
|
130
|
+
metadata: {
|
|
131
|
+
firebaseStorageDownloadTokens: downloadToken,
|
|
132
|
+
},
|
|
130
133
|
},
|
|
131
134
|
});
|
|
132
135
|
const publicVideoUrl = `https://firebasestorage.googleapis.com/v0/b/${bucket.name}` +
|
|
@@ -138,10 +141,10 @@ class ByteDanceService extends baseAiGenProvider_service_1.BaseAiGenProviderServ
|
|
|
138
141
|
}
|
|
139
142
|
getCreditUsed(params) {
|
|
140
143
|
const modelConfig = aiModels_1.aiModelConfigs[params.modelKey];
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
const per1KTokens = params.audio
|
|
145
|
+
? modelConfig.cost?.audio?.per1KTokens
|
|
146
|
+
: modelConfig.cost?.noAudio?.per1KTokens ?? modelConfig.cost?.per1KTokens;
|
|
147
|
+
if (!per1KTokens || !params.resolution || !params.aspectRatio || !params.duration) {
|
|
145
148
|
logger_1.logger.warn(`Missing cost or parameters for credit calculation. Returning default credits. Params: ${JSON.stringify(params)}, ModelConfig: ${JSON.stringify(modelConfig)}`);
|
|
146
149
|
return 10; // default fallback
|
|
147
150
|
}
|
|
@@ -151,9 +154,35 @@ class ByteDanceService extends baseAiGenProvider_service_1.BaseAiGenProviderServ
|
|
|
151
154
|
return 10; // default fallback
|
|
152
155
|
}
|
|
153
156
|
const FRAME_RATE = 24;
|
|
154
|
-
const tokensConsumed = Math.ceil((dims
|
|
155
|
-
const cost = (
|
|
157
|
+
const tokensConsumed = Math.ceil((dims.width * dims.height * FRAME_RATE * params.duration) / 1024);
|
|
158
|
+
const cost = (per1KTokens * tokensConsumed) / 1000;
|
|
156
159
|
return (0, helpers_2.getCreditsFromCost)(cost);
|
|
157
160
|
}
|
|
158
161
|
}
|
|
159
162
|
exports.ByteDanceService = ByteDanceService;
|
|
163
|
+
const dimensionsMap = {
|
|
164
|
+
"480p": {
|
|
165
|
+
"16:9": { width: 848, height: 480 },
|
|
166
|
+
"9:16": { width: 480, height: 848 },
|
|
167
|
+
"1:1": { width: 480, height: 480 },
|
|
168
|
+
"4:3": { width: 640, height: 480 },
|
|
169
|
+
"3:4": { width: 480, height: 640 },
|
|
170
|
+
"21:9": { width: 1008, height: 432 },
|
|
171
|
+
},
|
|
172
|
+
"720p": {
|
|
173
|
+
"16:9": { width: 1280, height: 720 },
|
|
174
|
+
"9:16": { width: 720, height: 1280 },
|
|
175
|
+
"1:1": { width: 720, height: 720 },
|
|
176
|
+
"4:3": { width: 960, height: 720 },
|
|
177
|
+
"3:4": { width: 720, height: 960 },
|
|
178
|
+
"21:9": { width: 1680, height: 720 },
|
|
179
|
+
},
|
|
180
|
+
"1080p": {
|
|
181
|
+
"16:9": { width: 1920, height: 1080 },
|
|
182
|
+
"9:16": { width: 1080, height: 1920 },
|
|
183
|
+
"1:1": { width: 1080, height: 1080 },
|
|
184
|
+
"4:3": { width: 1440, height: 1080 },
|
|
185
|
+
"3:4": { width: 1080, height: 1440 },
|
|
186
|
+
"21:9": { width: 2520, height: 1080 },
|
|
187
|
+
},
|
|
188
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseAiGenProviderService } from "../baseAiGenProvider.service";
|
|
2
|
+
import { CreditUsageParams, VideoGenerationParams, VideoGenerationResult, VideoStatusParams, VideoStatusResult } from "../types";
|
|
3
|
+
export declare class PixVerseService extends BaseAiGenProviderService {
|
|
4
|
+
private readonly baseUrl;
|
|
5
|
+
generateVideo(params: VideoGenerationParams): Promise<VideoGenerationResult>;
|
|
6
|
+
checkVideoStatus({ task, outputFilename, outputFilePath, }: VideoStatusParams): Promise<VideoStatusResult>;
|
|
7
|
+
getCreditUsed(params: CreditUsageParams): number;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=pixverse.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pixverse.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/pixverse/pixverse.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AASlB,qBAAa,eAAgB,SAAQ,wBAAwB;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAKpE,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAqE3B,gBAAgB,CAAC,EACrB,IAAI,EACJ,cAAc,EACd,cAAyB,GAC1B,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmGjD,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;CA+CjD"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// pixverse.service.ts
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.PixVerseService = void 0;
|
|
8
|
+
const baseAiGenProvider_service_1 = require("../baseAiGenProvider.service");
|
|
9
|
+
const helpers_1 = require("../../helpers");
|
|
10
|
+
const aiModels_1 = require("../../../../globals/aiModels");
|
|
11
|
+
const types_1 = require("../../../../globals/types");
|
|
12
|
+
const firebase_1 = require("../../../../libs/firebase");
|
|
13
|
+
const helpers_2 = require("../../../../utils/helpers");
|
|
14
|
+
const logger_1 = require("../../../../utils/logger");
|
|
15
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
16
|
+
class PixVerseService extends baseAiGenProvider_service_1.BaseAiGenProviderService {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.baseUrl = "https://app-api.pixverse.ai/openapi/v2/video";
|
|
20
|
+
}
|
|
21
|
+
// =========================================================
|
|
22
|
+
// GENERATE VIDEO
|
|
23
|
+
// =========================================================
|
|
24
|
+
async generateVideo(params) {
|
|
25
|
+
(0, helpers_1.validateParams)(params);
|
|
26
|
+
const modelConfig = aiModels_1.aiModelConfigs[params.modelKey];
|
|
27
|
+
const modelId = modelConfig.modelId;
|
|
28
|
+
const traceId = crypto_1.default.randomUUID();
|
|
29
|
+
const body = {
|
|
30
|
+
aspect_ratio: params.aspectRatio,
|
|
31
|
+
duration: params.duration,
|
|
32
|
+
model: modelId,
|
|
33
|
+
prompt: params.prompt,
|
|
34
|
+
quality: params.resolution,
|
|
35
|
+
};
|
|
36
|
+
// Optional negative prompt
|
|
37
|
+
if (params.negativePrompt) {
|
|
38
|
+
body.negative_prompt = params.negativePrompt;
|
|
39
|
+
}
|
|
40
|
+
// Optional audio support (v5.5 / v5.6)
|
|
41
|
+
if (params.audio !== undefined) {
|
|
42
|
+
body.generate_audio_switch = Boolean(params.audio);
|
|
43
|
+
}
|
|
44
|
+
// Multi clip (v5.5 only)
|
|
45
|
+
if (params.multiClip !== undefined) {
|
|
46
|
+
body.generate_multi_clip_switch = Boolean(params.multiClip);
|
|
47
|
+
}
|
|
48
|
+
const resp = await fetch(`${this.baseUrl}/text/generate`, {
|
|
49
|
+
method: "POST",
|
|
50
|
+
headers: {
|
|
51
|
+
"Content-Type": "application/json",
|
|
52
|
+
"API-KEY": process.env.PIXVERSE_API_KEY,
|
|
53
|
+
"Ai-trace-id": traceId,
|
|
54
|
+
},
|
|
55
|
+
body: JSON.stringify(body),
|
|
56
|
+
});
|
|
57
|
+
if (!resp.ok) {
|
|
58
|
+
const errText = await resp.text();
|
|
59
|
+
throw new Error(`PixVerse generateVideo failed (${resp.status}): ${errText}`);
|
|
60
|
+
}
|
|
61
|
+
const data = await resp.json();
|
|
62
|
+
if (data.ErrCode !== 0) {
|
|
63
|
+
throw new Error(`PixVerse API error: ${data.ErrMsg || "Unknown error"}`);
|
|
64
|
+
}
|
|
65
|
+
const videoId = data?.Resp?.video_id;
|
|
66
|
+
if (!videoId) {
|
|
67
|
+
throw new Error("PixVerse API did not return video_id");
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
task: String(videoId),
|
|
71
|
+
status: types_1.EVideoSceneStatus.TRIGGERED,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// =========================================================
|
|
75
|
+
// CHECK STATUS
|
|
76
|
+
// =========================================================
|
|
77
|
+
async checkVideoStatus({ task, outputFilename, outputFilePath = "videos", }) {
|
|
78
|
+
const traceId = crypto_1.default.randomUUID();
|
|
79
|
+
const resp = await fetch(`${this.baseUrl}/result/${task}`, {
|
|
80
|
+
method: "GET",
|
|
81
|
+
headers: {
|
|
82
|
+
"API-KEY": process.env.PIXVERSE_API_KEY,
|
|
83
|
+
"Ai-trace-id": traceId,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
if (!resp.ok) {
|
|
87
|
+
const errText = await resp.text();
|
|
88
|
+
throw new Error(`PixVerse checkVideoStatus failed (${resp.status}): ${errText}`);
|
|
89
|
+
}
|
|
90
|
+
const data = await resp.json();
|
|
91
|
+
if (data.ErrCode !== 0) {
|
|
92
|
+
throw new Error(`PixVerse API error: ${data.ErrMsg || "Unknown error"}`);
|
|
93
|
+
}
|
|
94
|
+
const status = data?.Resp?.status;
|
|
95
|
+
// ---- Status Mapping ----
|
|
96
|
+
switch (status) {
|
|
97
|
+
case 5: // Generating
|
|
98
|
+
return { status: types_1.EVideoSceneStatus.PENDING };
|
|
99
|
+
case 7: // moderation failed
|
|
100
|
+
case 8: // generation failed
|
|
101
|
+
return {
|
|
102
|
+
status: types_1.EVideoSceneStatus.FAILED,
|
|
103
|
+
errorMessage: "PixVerse video generation failed",
|
|
104
|
+
};
|
|
105
|
+
case 1: // success
|
|
106
|
+
break;
|
|
107
|
+
default:
|
|
108
|
+
return {
|
|
109
|
+
status: types_1.EVideoSceneStatus.FAILED,
|
|
110
|
+
errorMessage: `Unknown PixVerse status: ${status}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const sourceVideoUrl = data?.Resp?.url;
|
|
114
|
+
if (!sourceVideoUrl) {
|
|
115
|
+
return {
|
|
116
|
+
status: types_1.EVideoSceneStatus.FAILED,
|
|
117
|
+
errorMessage: "PixVerse response missing video url",
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// Download generated video
|
|
121
|
+
const videoResp = await fetch(sourceVideoUrl);
|
|
122
|
+
if (!videoResp.ok) {
|
|
123
|
+
throw new Error(`Failed to download PixVerse video (${videoResp.status})`);
|
|
124
|
+
}
|
|
125
|
+
const buffer = Buffer.from(await videoResp.arrayBuffer());
|
|
126
|
+
// ---- Upload to Firebase ----
|
|
127
|
+
const filePath = `${outputFilePath}/${outputFilename}.mp4`;
|
|
128
|
+
const bucket = (0, firebase_1.getBucket)();
|
|
129
|
+
const file = bucket.file(filePath);
|
|
130
|
+
const downloadToken = crypto_1.default.randomUUID();
|
|
131
|
+
await file.save(buffer, {
|
|
132
|
+
contentType: "video/mp4",
|
|
133
|
+
resumable: false,
|
|
134
|
+
metadata: {
|
|
135
|
+
cacheControl: "public, max-age=31536000",
|
|
136
|
+
metadata: {
|
|
137
|
+
firebaseStorageDownloadTokens: downloadToken,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
const publicVideoUrl = `https://firebasestorage.googleapis.com/v0/b/${bucket.name}` +
|
|
142
|
+
`/o/${encodeURIComponent(filePath)}?alt=media&token=${downloadToken}`;
|
|
143
|
+
return {
|
|
144
|
+
videoUrl: publicVideoUrl,
|
|
145
|
+
status: types_1.EVideoSceneStatus.COMPLETED,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// =========================================================
|
|
149
|
+
// CREDIT CALCULATION
|
|
150
|
+
// =========================================================
|
|
151
|
+
getCreditUsed(params) {
|
|
152
|
+
const modelConfig = aiModels_1.aiModelConfigs[params.modelKey];
|
|
153
|
+
if (!params.resolution || !params.duration) {
|
|
154
|
+
logger_1.logger.warn(`Missing resolution/duration for PixVerse credit calculation`);
|
|
155
|
+
return 10;
|
|
156
|
+
}
|
|
157
|
+
const hasAudio = Boolean(params.audio);
|
|
158
|
+
const multiClip = Boolean(params.multiClip);
|
|
159
|
+
try {
|
|
160
|
+
let cost;
|
|
161
|
+
if (modelConfig.cost?.audio || modelConfig.cost?.noAudio) {
|
|
162
|
+
const costGroup = hasAudio
|
|
163
|
+
? modelConfig.cost.audio
|
|
164
|
+
: modelConfig.cost.noAudio;
|
|
165
|
+
// v5.5 structure (singleClip / multiClip)
|
|
166
|
+
if ("singleClip" in costGroup) {
|
|
167
|
+
const clipType = multiClip ? "multiClip" : "singleClip";
|
|
168
|
+
cost =
|
|
169
|
+
costGroup[clipType]?.table?.[params.resolution]?.[params.duration];
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// v5 / v5.6 structure
|
|
173
|
+
cost = costGroup?.table?.[params.resolution]?.[params.duration];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (!cost) {
|
|
177
|
+
logger_1.logger.warn(`Unsupported combination for PixVerse credit calc: ${JSON.stringify(params)}`);
|
|
178
|
+
return 10;
|
|
179
|
+
}
|
|
180
|
+
return (0, helpers_2.getCreditsFromCost)(cost);
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
logger_1.logger.error(`PixVerse credit calculation failed`, err);
|
|
184
|
+
return 10;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.PixVerseService = PixVerseService;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tts/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./providers/elevenlabs.service"), exports);
|
|
19
|
+
__exportStar(require("./ttsFactory.service"), exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseTtsProviderService, TtsParams, TtsResult } from "../types";
|
|
2
|
+
export declare class ElevenLabsService extends BaseTtsProviderService {
|
|
3
|
+
private readonly baseUrl;
|
|
4
|
+
constructor();
|
|
5
|
+
generate(params: TtsParams): Promise<TtsResult>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=elevenlabs.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenlabs.service.d.ts","sourceRoot":"","sources":["../../../../src/services/tts/providers/elevenlabs.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExE,qBAAa,iBAAkB,SAAQ,sBAAsB;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;;IASpD,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;CA+BtD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ElevenLabsService = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const elevenlabs_1 = require("../../../globals/ttsModels/providers/elevenlabs");
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
class ElevenLabsService extends types_1.BaseTtsProviderService {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
this.baseUrl = "https://api.elevenlabs.io/v1";
|
|
14
|
+
if (!process.env.ELEVENLABS_API_KEY) {
|
|
15
|
+
throw new Error("Missing ELEVENLABS_API_KEY in environment variables");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async generate(params) {
|
|
19
|
+
const voiceId = params.voiceId ?? elevenlabs_1.elevenlabsConfig.defaultVoiceId;
|
|
20
|
+
const response = await axios_1.default.post(`${this.baseUrl}/text-to-speech/${voiceId}`, {
|
|
21
|
+
text: params.text,
|
|
22
|
+
model_id: elevenlabs_1.elevenlabsConfig.modelId,
|
|
23
|
+
language_code: params.languageCode,
|
|
24
|
+
voice_settings: {
|
|
25
|
+
stability: 0.5,
|
|
26
|
+
similarity_boost: 0.75,
|
|
27
|
+
},
|
|
28
|
+
}, {
|
|
29
|
+
headers: {
|
|
30
|
+
"xi-api-key": process.env.ELEVENLABS_API_KEY,
|
|
31
|
+
"Content-Type": "application/json",
|
|
32
|
+
Accept: "audio/mpeg",
|
|
33
|
+
},
|
|
34
|
+
responseType: "arraybuffer",
|
|
35
|
+
timeout: 60000,
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
audioBuffer: Buffer.from(response.data),
|
|
39
|
+
mimeType: "audio/mpeg",
|
|
40
|
+
extension: "mp3",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.ElevenLabsService = ElevenLabsService;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ttsFactory.service.d.ts","sourceRoot":"","sources":["../../../src/services/tts/ttsFactory.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,WAA0B,GAAG,sBAAsB,CAOlG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTtsProviderService = getTtsProviderService;
|
|
4
|
+
const elevenlabs_service_1 = require("./providers/elevenlabs.service");
|
|
5
|
+
function getTtsProviderService(provider = "elevenlabs") {
|
|
6
|
+
switch (provider) {
|
|
7
|
+
case "elevenlabs":
|
|
8
|
+
return new elevenlabs_service_1.ElevenLabsService();
|
|
9
|
+
default:
|
|
10
|
+
throw new Error(`Unknown TTS provider: ${provider}`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface TtsParams {
|
|
2
|
+
text: string;
|
|
3
|
+
voiceId?: string;
|
|
4
|
+
languageCode?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface TtsResult {
|
|
7
|
+
audioBuffer: Buffer;
|
|
8
|
+
mimeType: string;
|
|
9
|
+
extension: string;
|
|
10
|
+
}
|
|
11
|
+
export declare abstract class BaseTtsProviderService {
|
|
12
|
+
abstract generate(params: TtsParams): Promise<TtsResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|