vidspotai-shared 1.0.4 → 1.0.5
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.d.ts.map +1 -1
- package/lib/globals/aiModels.js +14 -3
- package/lib/globals/types.d.ts +1 -2
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/services/aiGen/helpers.d.ts.map +1 -1
- package/lib/services/aiGen/helpers.js +5 -3
- package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/google.service.js +41 -17
- package/lib/services/aiGen/providers/types.d.ts +1 -0
- package/lib/services/aiGen/providers/types.d.ts.map +1 -1
- package/lib/services/bullmq.service.d.ts +1 -0
- package/lib/services/bullmq.service.d.ts.map +1 -1
- package/lib/utils/helpers.d.ts +1 -0
- package/lib/utils/helpers.d.ts.map +1 -1
- package/lib/utils/helpers.js +11 -0
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiModels.d.ts","sourceRoot":"","sources":["../../src/globals/aiModels.ts"],"names":[],"mappings":"AAwBA,oBAAY,eAAe;IACzB,sBAAsB,2BAA2B;IACjD,4BAA4B,gCAAgC;IAC5D,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IACnC,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,iBAAiB,sBAAsB;CACxC;AAaD,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAaX,oBAAY,cAAc;IAExB,kBAAkB,uBAAuB;CAI1C;AAID,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC;AAG3D,KAAK,cAAc,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,eAAe,CAAC;AAEpB,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;CACH;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAGD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"aiModels.d.ts","sourceRoot":"","sources":["../../src/globals/aiModels.ts"],"names":[],"mappings":"AAwBA,oBAAY,eAAe;IACzB,sBAAsB,2BAA2B;IACjD,4BAA4B,gCAAgC;IAC5D,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IACnC,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,iBAAiB,sBAAsB;CACxC;AAaD,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAaX,oBAAY,cAAc;IAExB,kBAAkB,uBAAuB;CAI1C;AAID,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC;AAG3D,KAAK,cAAc,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,eAAe,CAAC;AAEpB,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;CACH;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAGD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAwc5D,CAAC"}
|
package/lib/globals/aiModels.js
CHANGED
|
@@ -360,7 +360,6 @@ exports.aiModelConfigs = {
|
|
|
360
360
|
// parallelRequests: 1,
|
|
361
361
|
cost: {
|
|
362
362
|
table: {
|
|
363
|
-
"512P": { 6: 0.1, 10: 0.15 },
|
|
364
363
|
"768P": { 6: 0.28, 10: 0.56 },
|
|
365
364
|
"1080P": { 6: 0.49 },
|
|
366
365
|
},
|
|
@@ -485,8 +484,14 @@ exports.aiModelConfigs = {
|
|
|
485
484
|
},
|
|
486
485
|
},
|
|
487
486
|
cost: {
|
|
488
|
-
|
|
487
|
+
table: {
|
|
488
|
+
"720x1280": { 4: 0.4, 8: 0.8, 12: 1.2 },
|
|
489
|
+
"1280x720": { 4: 0.4, 8: 0.8, 12: 1.2 },
|
|
490
|
+
"1024x1792": { 4: 0.4, 8: 0.8, 12: 1.2 },
|
|
491
|
+
"1792x1024": { 4: 0.4, 8: 0.8, 12: 1.2 },
|
|
492
|
+
},
|
|
489
493
|
},
|
|
494
|
+
requestPerMin: 25,
|
|
490
495
|
},
|
|
491
496
|
"openai-sora-2-pro": {
|
|
492
497
|
modelId: "sora-2-pro",
|
|
@@ -503,7 +508,13 @@ exports.aiModelConfigs = {
|
|
|
503
508
|
},
|
|
504
509
|
},
|
|
505
510
|
cost: {
|
|
506
|
-
|
|
511
|
+
table: {
|
|
512
|
+
"720x1280": { 4: 1.2, 8: 2.4, 12: 3.6 },
|
|
513
|
+
"1280x720": { 4: 1.2, 8: 2.4, 12: 3.6 },
|
|
514
|
+
"1024x1792": { 4: 1.2, 8: 2.4, 12: 3.6 },
|
|
515
|
+
"1792x1024": { 4: 1.2, 8: 2.4, 12: 3.6 },
|
|
516
|
+
},
|
|
507
517
|
},
|
|
518
|
+
requestPerMin: 10,
|
|
508
519
|
},
|
|
509
520
|
};
|
package/lib/globals/types.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { GenerateVideosOperation } from "@google/genai";
|
|
2
1
|
import { FieldValue } from "firebase-admin/firestore";
|
|
3
2
|
export interface IDetectLang {
|
|
4
3
|
reliable: boolean;
|
|
@@ -34,7 +33,7 @@ export declare enum EVideoDurationType {
|
|
|
34
33
|
MEDIUM = "medium",
|
|
35
34
|
LONG = "long"
|
|
36
35
|
}
|
|
37
|
-
export type TVideoJobTask =
|
|
36
|
+
export type TVideoJobTask = string;
|
|
38
37
|
export type DeepPartial<T> = {
|
|
39
38
|
[K in keyof T]?: T[K] extends Date | FieldValue ? T[K] : NonNullable<T[K]> extends Array<infer U> ? Array<DeepPartial<U>> : NonNullable<T[K]> extends object ? DeepPartial<NonNullable<T[K]>> : T[K];
|
|
40
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/globals/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/globals/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/services/aiGen/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/services/aiGen/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAsHrE"}
|
|
@@ -24,10 +24,12 @@ function validateParams(params) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
// 2. Type-specific required fields
|
|
27
|
-
if (
|
|
27
|
+
if (params.type === "image-to-video" &&
|
|
28
|
+
(!modelConfig.type.includes("image-to-video") || !params.inputImageUrl)) {
|
|
28
29
|
errors.push(`Model ${params.modelKey} requires imageUrl for image-to-video mode`);
|
|
29
30
|
}
|
|
30
|
-
if (
|
|
31
|
+
if (params.type === "video-to-video" &&
|
|
32
|
+
(modelConfig.type.includes("video-to-video") || !params.inputVideoUrl)) {
|
|
31
33
|
errors.push(`Model ${params.modelKey} requires videoUrl for video-to-video mode`);
|
|
32
34
|
}
|
|
33
35
|
if (modelConfig.type.includes("text-to-video") && !params.prompt) {
|
|
@@ -70,7 +72,7 @@ function validateParams(params) {
|
|
|
70
72
|
}
|
|
71
73
|
// 4. Fail fast if validation fails
|
|
72
74
|
if (errors.length) {
|
|
73
|
-
throw new Error(`Validation failed: ${errors.join("; ")}`);
|
|
75
|
+
throw new Error(`INTERNAL Validation failed: ${errors.join("; ")}`);
|
|
74
76
|
}
|
|
75
77
|
return true;
|
|
76
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/google/google.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"google.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/google/google.service.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAIlB,qBAAa,aAAc,SAAQ,wBAAwB;IACzD,OAAO,CAAC,EAAE,CAAc;;IAOlB,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAqC3B,gBAAgB,CAAC,EACrB,IAAI,EACJ,cAAc,EACd,cAAyB,GAC1B,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmEjD,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAY,EAAE,EAAE,iBAAiB,GAAG,MAAM;CAMrE"}
|
|
@@ -1,29 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.GoogleService = void 0;
|
|
4
7
|
// google.service.ts
|
|
5
8
|
const genai_1 = require("@google/genai");
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
6
10
|
const aiModels_1 = require("../../../../globals/aiModels");
|
|
7
11
|
const types_1 = require("../../../../globals/types");
|
|
8
12
|
const firebase_1 = require("../../../../libs/firebase");
|
|
9
|
-
const baseAiGenProvider_service_1 = require("../baseAiGenProvider.service");
|
|
10
13
|
const helpers_1 = require("../../../../utils/helpers");
|
|
11
14
|
const helpers_2 = require("../../helpers");
|
|
15
|
+
const baseAiGenProvider_service_1 = require("../baseAiGenProvider.service");
|
|
16
|
+
const fs_1 = require("fs");
|
|
17
|
+
const promises_2 = require("stream/promises");
|
|
12
18
|
class GoogleService extends baseAiGenProvider_service_1.BaseAiGenProviderService {
|
|
13
19
|
constructor() {
|
|
14
20
|
super();
|
|
15
|
-
this.ai = new genai_1.GoogleGenAI({});
|
|
21
|
+
this.ai = new genai_1.GoogleGenAI({ apiKey: process.env.GOOGLE_API_KEY });
|
|
16
22
|
}
|
|
17
23
|
async generateVideo(params) {
|
|
18
24
|
(0, helpers_2.validateParams)(params);
|
|
19
25
|
const modelConfig = aiModels_1.aiModelConfigs[params.modelKey];
|
|
20
26
|
const modelId = modelConfig.modelId;
|
|
27
|
+
console.log("GoogleService.generateVideo - modelId:", modelId, params);
|
|
21
28
|
const request = {
|
|
22
29
|
model: modelId,
|
|
23
30
|
prompt: params.prompt,
|
|
31
|
+
// image:
|
|
24
32
|
config: {
|
|
25
33
|
aspectRatio: params.aspectRatio,
|
|
26
34
|
resolution: params.resolution,
|
|
35
|
+
durationSeconds: params.duration,
|
|
27
36
|
},
|
|
28
37
|
};
|
|
29
38
|
if (params.inputImageUrl) {
|
|
@@ -34,17 +43,18 @@ class GoogleService extends baseAiGenProvider_service_1.BaseAiGenProviderService
|
|
|
34
43
|
imageBytes: imgBuffer.toString("base64"),
|
|
35
44
|
};
|
|
36
45
|
}
|
|
37
|
-
const
|
|
38
|
-
|
|
46
|
+
const operation = await this.ai.models.generateVideos(request);
|
|
47
|
+
if (!operation || !operation.name) {
|
|
48
|
+
throw new Error("Failed to initiate video generation task");
|
|
49
|
+
}
|
|
50
|
+
return { task: operation.name, status: types_1.EVideoSceneStatus.TRIGGERED };
|
|
39
51
|
}
|
|
40
|
-
async checkVideoStatus({ task,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
// Poll the SDK for operation status
|
|
52
|
+
async checkVideoStatus({ task, outputFilename, outputFilePath = "videos", }) {
|
|
53
|
+
const operation = new genai_1.GenerateVideosOperation();
|
|
54
|
+
operation.name = task;
|
|
44
55
|
const result = await this.ai.operations.getVideosOperation({
|
|
45
|
-
operation
|
|
56
|
+
operation,
|
|
46
57
|
});
|
|
47
|
-
// const modelConfig = aiModelConfigs[modelKey];
|
|
48
58
|
if (result.done) {
|
|
49
59
|
if (result.error) {
|
|
50
60
|
return {
|
|
@@ -56,20 +66,34 @@ class GoogleService extends baseAiGenProvider_service_1.BaseAiGenProviderService
|
|
|
56
66
|
if (!videoUri) {
|
|
57
67
|
return {
|
|
58
68
|
status: types_1.EVideoSceneStatus.FAILED,
|
|
59
|
-
errorMessage: "No video URL found in response",
|
|
69
|
+
errorMessage: "No video URL or VideoBytes found in response",
|
|
60
70
|
};
|
|
61
71
|
}
|
|
62
|
-
|
|
72
|
+
const video = result.response?.generatedVideos?.[0]?.video;
|
|
73
|
+
const localPath = `${outputFilename}.mp4`; // use /tmp for cloud functions
|
|
63
74
|
const filePath = `${outputFilePath}/${outputFilename}.mp4`;
|
|
64
75
|
const file = (0, firebase_1.getBucket)().file(filePath);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
76
|
+
await this.ai.files.download({
|
|
77
|
+
file: video,
|
|
78
|
+
downloadPath: localPath,
|
|
79
|
+
});
|
|
80
|
+
await (0, helpers_1.waitForFile)(localPath, 20000, 500);
|
|
81
|
+
const readStream = (0, fs_1.createReadStream)(localPath);
|
|
82
|
+
const writeStream = file.createWriteStream({ contentType: "video/mp4" });
|
|
83
|
+
await (0, promises_2.pipeline)(readStream, writeStream);
|
|
68
84
|
const [signedUrl] = await file.getSignedUrl({
|
|
69
85
|
action: "read",
|
|
70
86
|
expires: "03-09-2491",
|
|
71
87
|
});
|
|
72
|
-
//
|
|
88
|
+
// Optionally clean up local file
|
|
89
|
+
await promises_1.default
|
|
90
|
+
.unlink(localPath)
|
|
91
|
+
.then(() => {
|
|
92
|
+
// console.log("Local file deleted:", localPath);
|
|
93
|
+
})
|
|
94
|
+
.catch(() => {
|
|
95
|
+
console.warn("Failed to delete local file:", localPath);
|
|
96
|
+
});
|
|
73
97
|
return {
|
|
74
98
|
videoUrl: signedUrl,
|
|
75
99
|
status: types_1.EVideoSceneStatus.COMPLETED,
|
|
@@ -81,7 +105,7 @@ class GoogleService extends baseAiGenProvider_service_1.BaseAiGenProviderService
|
|
|
81
105
|
const modelConfig = aiModels_1.aiModelConfigs[modelKey];
|
|
82
106
|
return modelConfig.cost?.perSecond
|
|
83
107
|
? (0, helpers_1.getCreditsFromCost)(modelConfig.cost?.perSecond * duration)
|
|
84
|
-
: 0;
|
|
108
|
+
: 0; // should not happen
|
|
85
109
|
}
|
|
86
110
|
}
|
|
87
111
|
exports.GoogleService = GoogleService;
|
|
@@ -12,6 +12,7 @@ export interface VideoGenerationParams {
|
|
|
12
12
|
inputVideoUrl?: string;
|
|
13
13
|
inputImageUrl?: string;
|
|
14
14
|
mode?: EVideoMode;
|
|
15
|
+
type?: "text-to-video" | "image-to-video" | "video-to-video";
|
|
15
16
|
}
|
|
16
17
|
export interface VideoGenerationResult {
|
|
17
18
|
status: EVideoSceneStatus.TRIGGERED;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/aiGen/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/aiGen/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC;IACpC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CAEvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CAMzB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,0BAA0B,EAAE,GAAG,MAAM,CAAC;IAC7C,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,eAAe,GAAG,cAAc,CAAC;IAC3C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;CACzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bullmq.service.d.ts","sourceRoot":"","sources":["../../src/services/bullmq.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE1C,UAAU,oBAAoB;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO;WAQO,WAAW,CAAC,OAAO,EAAE,oBAAoB;IAOvD,sDAAsD;IACtD,iDAAiD;IACpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBlC,gBAAgB;IACH,MAAM,CACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAUpC,YAAY,CACjB,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;CAmDzC;AAQD,eAAO,MAAM,MAAM,eAGjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"bullmq.service.d.ts","sourceRoot":"","sources":["../../src/services/bullmq.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE1C,UAAU,oBAAoB;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO;WAQO,WAAW,CAAC,OAAO,EAAE,oBAAoB;IAOvD,sDAAsD;IACtD,iDAAiD;IACpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBlC,gBAAgB;IACH,MAAM,CACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAUpC,YAAY,CACjB,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;CAmDzC;AAQD,eAAO,MAAM,MAAM,eAGjB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC"}
|
package/lib/utils/helpers.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export declare const getPriceIdByType: (type: ESUBSCRIPTION_PLANS, freq?: ERENEW
|
|
|
5
5
|
export declare const getCreditsFromCost: (cost: number) => number;
|
|
6
6
|
export declare const getTranslationWrapper: (text: string, from: ELANGUAGE_CODE, to?: ELANGUAGE_CODE, version?: "v1" | "v2") => Promise<string>;
|
|
7
7
|
export declare const detectLang: (text: string) => Promise<IDetectLang>;
|
|
8
|
+
export declare function waitForFile(path: string, timeout?: number, interval?: number): Promise<boolean>;
|
|
8
9
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACZ,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,KACd,mBAAmB,GAAG,IASxB,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,kBAAkB,GAAG,IASlE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,mBAAmB,EACzB,OAAM,kBAA+C,WAkBtD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,MAajD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,MAAM,cAAc,EACpB,KAAI,cAAkC,EACtC,UAAS,IAAI,GAAG,IAAW,KAC1B,OAAO,CAAC,MAAM,CAmBhB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,WAAW,CAclE,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAQ,EAAE,QAAQ,SAAM,oBAO9E"}
|
package/lib/utils/helpers.js
CHANGED
|
@@ -4,9 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.detectLang = exports.getTranslationWrapper = exports.getCreditsFromCost = exports.getPriceIdByType = exports.getFreqById = exports.getPlanTypeById = void 0;
|
|
7
|
+
exports.waitForFile = waitForFile;
|
|
7
8
|
const axios_1 = __importDefault(require("axios"));
|
|
8
9
|
const plans_1 = require("../globals/plans");
|
|
9
10
|
const types_1 = require("../globals/types");
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
12
|
const getPlanTypeById = (priceId) => {
|
|
11
13
|
for (const [planType, durations] of Object.entries(plans_1.PAYMENT_PLANS)) {
|
|
12
14
|
for (const [duration, details] of Object.entries(durations)) {
|
|
@@ -83,3 +85,12 @@ const detectLang = async (text) => {
|
|
|
83
85
|
return res.data;
|
|
84
86
|
};
|
|
85
87
|
exports.detectLang = detectLang;
|
|
88
|
+
async function waitForFile(path, timeout = 10000, interval = 300) {
|
|
89
|
+
const start = Date.now();
|
|
90
|
+
while (Date.now() - start < timeout) {
|
|
91
|
+
if (await fs_extra_1.default.pathExists(path))
|
|
92
|
+
return true;
|
|
93
|
+
await new Promise((r) => setTimeout(r, interval));
|
|
94
|
+
}
|
|
95
|
+
throw new Error(`Timeout waiting for file: ${path}`);
|
|
96
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vidspotai-shared",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -18,14 +18,16 @@
|
|
|
18
18
|
"@google/genai": "^1.22.0",
|
|
19
19
|
"@runwayml/sdk": "^2.11.0",
|
|
20
20
|
"axios": "^1.12.2",
|
|
21
|
-
"ioredis": "^5.8.0",
|
|
22
21
|
"bullmq": "^5.61.0",
|
|
23
22
|
"firebase-admin": "^13.5.0",
|
|
23
|
+
"fs-extra": "^11.3.2",
|
|
24
|
+
"ioredis": "^5.8.0",
|
|
24
25
|
"jsonwebtoken": "^9.0.2",
|
|
25
26
|
"openai": "^6.1.0",
|
|
26
27
|
"zod": "^4.1.11"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
30
|
+
"@types/fs-extra": "^11.0.4",
|
|
29
31
|
"@types/jsonwebtoken": "^9.0.10",
|
|
30
32
|
"@types/node": "^24.6.2"
|
|
31
33
|
},
|