@vertesia/workflow 0.78.0 → 0.79.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/activities/advanced/createDocumentTypeFromInteractionRun.js +8 -7
- package/lib/cjs/activities/advanced/createDocumentTypeFromInteractionRun.js.map +1 -1
- package/lib/cjs/activities/advanced/createOrUpdateDocumentFromInteractionRun.js +10 -9
- package/lib/cjs/activities/advanced/createOrUpdateDocumentFromInteractionRun.js.map +1 -1
- package/lib/cjs/activities/advanced/updateDocumentFromInteractionRun.js +2 -1
- package/lib/cjs/activities/advanced/updateDocumentFromInteractionRun.js.map +1 -1
- package/lib/cjs/activities/chunkDocument.js +2 -1
- package/lib/cjs/activities/chunkDocument.js.map +1 -1
- package/lib/cjs/activities/executeInteraction.js +11 -7
- package/lib/cjs/activities/executeInteraction.js.map +1 -1
- package/lib/cjs/activities/generateDocumentProperties.js +11 -6
- package/lib/cjs/activities/generateDocumentProperties.js.map +1 -1
- package/lib/cjs/activities/generateOrAssignContentType.js +12 -10
- package/lib/cjs/activities/generateOrAssignContentType.js.map +1 -1
- package/lib/cjs/activities/index-dsl.js +5 -3
- package/lib/cjs/activities/index-dsl.js.map +1 -1
- package/lib/cjs/activities/media/prepareVideo.js +429 -0
- package/lib/cjs/activities/media/prepareVideo.js.map +1 -0
- package/lib/cjs/activities/media/transcribeMediaWithGladia.js +48 -15
- package/lib/cjs/activities/media/transcribeMediaWithGladia.js.map +1 -1
- package/lib/cjs/activities/notifyWebhook.js +137 -12
- package/lib/cjs/activities/notifyWebhook.js.map +1 -1
- package/lib/cjs/activities/rateLimiter.js +30 -0
- package/lib/cjs/activities/rateLimiter.js.map +1 -0
- package/lib/cjs/conversion/image.js +4 -2
- package/lib/cjs/conversion/image.js.map +1 -1
- package/lib/cjs/dsl/dsl-workflow.js +66 -0
- package/lib/cjs/dsl/dsl-workflow.js.map +1 -1
- package/lib/cjs/dsl/setup/ActivityContext.js +7 -4
- package/lib/cjs/dsl/setup/ActivityContext.js.map +1 -1
- package/lib/cjs/errors.js +22 -1
- package/lib/cjs/errors.js.map +1 -1
- package/lib/cjs/index.js +2 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/extractToc.js +2 -2
- package/lib/cjs/iterative-generation/activities/extractToc.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/finalizeOutput.js +7 -4
- package/lib/cjs/iterative-generation/activities/finalizeOutput.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/generatePart.js +18 -13
- package/lib/cjs/iterative-generation/activities/generatePart.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/generateToc.js +50 -55
- package/lib/cjs/iterative-generation/activities/generateToc.js.map +1 -1
- package/lib/cjs/iterative-generation/utils.js.map +1 -1
- package/lib/cjs/system/notifyWebhookWorkflow.js +10 -3
- package/lib/cjs/system/notifyWebhookWorkflow.js.map +1 -1
- package/lib/cjs/utils/blobs.js +4 -1
- package/lib/cjs/utils/blobs.js.map +1 -1
- package/lib/cjs/utils/client.js +3 -1
- package/lib/cjs/utils/client.js.map +1 -1
- package/lib/esm/activities/advanced/createDocumentTypeFromInteractionRun.js +8 -7
- package/lib/esm/activities/advanced/createDocumentTypeFromInteractionRun.js.map +1 -1
- package/lib/esm/activities/advanced/createOrUpdateDocumentFromInteractionRun.js +10 -9
- package/lib/esm/activities/advanced/createOrUpdateDocumentFromInteractionRun.js.map +1 -1
- package/lib/esm/activities/advanced/updateDocumentFromInteractionRun.js +2 -1
- package/lib/esm/activities/advanced/updateDocumentFromInteractionRun.js.map +1 -1
- package/lib/esm/activities/chunkDocument.js +2 -1
- package/lib/esm/activities/chunkDocument.js.map +1 -1
- package/lib/esm/activities/executeInteraction.js +12 -8
- package/lib/esm/activities/executeInteraction.js.map +1 -1
- package/lib/esm/activities/generateDocumentProperties.js +11 -6
- package/lib/esm/activities/generateDocumentProperties.js.map +1 -1
- package/lib/esm/activities/generateOrAssignContentType.js +12 -10
- package/lib/esm/activities/generateOrAssignContentType.js.map +1 -1
- package/lib/esm/activities/index-dsl.js +2 -1
- package/lib/esm/activities/index-dsl.js.map +1 -1
- package/lib/esm/activities/media/prepareVideo.js +390 -0
- package/lib/esm/activities/media/prepareVideo.js.map +1 -0
- package/lib/esm/activities/media/transcribeMediaWithGladia.js +50 -17
- package/lib/esm/activities/media/transcribeMediaWithGladia.js.map +1 -1
- package/lib/esm/activities/notifyWebhook.js +137 -12
- package/lib/esm/activities/notifyWebhook.js.map +1 -1
- package/lib/esm/activities/rateLimiter.js +27 -0
- package/lib/esm/activities/rateLimiter.js.map +1 -0
- package/lib/esm/conversion/image.js +4 -2
- package/lib/esm/conversion/image.js.map +1 -1
- package/lib/esm/dsl/dsl-workflow.js +68 -2
- package/lib/esm/dsl/dsl-workflow.js.map +1 -1
- package/lib/esm/dsl/setup/ActivityContext.js +10 -7
- package/lib/esm/dsl/setup/ActivityContext.js.map +1 -1
- package/lib/esm/errors.js +19 -0
- package/lib/esm/errors.js.map +1 -1
- package/lib/esm/index.js +2 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/iterative-generation/activities/extractToc.js +3 -3
- package/lib/esm/iterative-generation/activities/extractToc.js.map +1 -1
- package/lib/esm/iterative-generation/activities/finalizeOutput.js +9 -6
- package/lib/esm/iterative-generation/activities/finalizeOutput.js.map +1 -1
- package/lib/esm/iterative-generation/activities/generatePart.js +19 -14
- package/lib/esm/iterative-generation/activities/generatePart.js.map +1 -1
- package/lib/esm/iterative-generation/activities/generateToc.js +50 -55
- package/lib/esm/iterative-generation/activities/generateToc.js.map +1 -1
- package/lib/esm/iterative-generation/utils.js.map +1 -1
- package/lib/esm/system/notifyWebhookWorkflow.js +11 -4
- package/lib/esm/system/notifyWebhookWorkflow.js.map +1 -1
- package/lib/esm/utils/blobs.js +4 -1
- package/lib/esm/utils/blobs.js.map +1 -1
- package/lib/esm/utils/client.js +4 -2
- package/lib/esm/utils/client.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/activities/advanced/createDocumentTypeFromInteractionRun.d.ts.map +1 -1
- package/lib/types/activities/advanced/createOrUpdateDocumentFromInteractionRun.d.ts +1 -1
- package/lib/types/activities/advanced/createOrUpdateDocumentFromInteractionRun.d.ts.map +1 -1
- package/lib/types/activities/advanced/updateDocumentFromInteractionRun.d.ts.map +1 -1
- package/lib/types/activities/chunkDocument.d.ts.map +1 -1
- package/lib/types/activities/executeInteraction.d.ts +5 -1
- package/lib/types/activities/executeInteraction.d.ts.map +1 -1
- package/lib/types/activities/generateDocumentProperties.d.ts.map +1 -1
- package/lib/types/activities/generateOrAssignContentType.d.ts.map +1 -1
- package/lib/types/activities/index-dsl.d.ts +2 -1
- package/lib/types/activities/index-dsl.d.ts.map +1 -1
- package/lib/types/activities/media/prepareVideo.d.ts +30 -0
- package/lib/types/activities/media/prepareVideo.d.ts.map +1 -0
- package/lib/types/activities/media/transcribeMediaWithGladia.d.ts.map +1 -1
- package/lib/types/activities/notifyWebhook.d.ts +14 -3
- package/lib/types/activities/notifyWebhook.d.ts.map +1 -1
- package/lib/types/activities/rateLimiter.d.ts +11 -0
- package/lib/types/activities/rateLimiter.d.ts.map +1 -0
- package/lib/types/conversion/image.d.ts.map +1 -1
- package/lib/types/dsl/dsl-workflow.d.ts.map +1 -1
- package/lib/types/dsl/setup/ActivityContext.d.ts.map +1 -1
- package/lib/types/errors.d.ts +10 -0
- package/lib/types/errors.d.ts.map +1 -1
- package/lib/types/index.d.ts +2 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/extractToc.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/finalizeOutput.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/generatePart.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/generateToc.d.ts.map +1 -1
- package/lib/types/iterative-generation/utils.d.ts +3 -4
- package/lib/types/iterative-generation/utils.d.ts.map +1 -1
- package/lib/types/system/notifyWebhookWorkflow.d.ts +3 -2
- package/lib/types/system/notifyWebhookWorkflow.d.ts.map +1 -1
- package/lib/types/utils/blobs.d.ts.map +1 -1
- package/lib/types/utils/client.d.ts +2 -6
- package/lib/types/utils/client.d.ts.map +1 -1
- package/lib/workflows-bundle.js +8413 -5201
- package/package.json +128 -120
- package/src/activities/advanced/createDocumentTypeFromInteractionRun.ts +9 -8
- package/src/activities/advanced/createOrUpdateDocumentFromInteractionRun.ts +11 -9
- package/src/activities/advanced/updateDocumentFromInteractionRun.ts +2 -1
- package/src/activities/chunkDocument.ts +3 -1
- package/src/activities/executeInteraction.ts +23 -14
- package/src/activities/generateDocumentProperties.ts +12 -7
- package/src/activities/generateOrAssignContentType.ts +16 -11
- package/src/activities/index-dsl.ts +2 -1
- package/src/activities/media/prepareVideo.ts +622 -0
- package/src/activities/media/transcribeMediaWithGladia.ts +52 -21
- package/src/activities/notifyWebhook.test.ts +121 -19
- package/src/activities/notifyWebhook.ts +165 -16
- package/src/activities/rateLimiter.ts +41 -0
- package/src/conversion/image.ts +6 -3
- package/src/dsl/dsl-workflow.ts +86 -0
- package/src/dsl/workflow-exec-child.test.ts +1 -0
- package/src/dsl/workflow.test.ts +1 -0
- package/src/errors.ts +28 -0
- package/src/index.ts +2 -1
- package/src/iterative-generation/activities/generatePart.ts +1 -1
- package/src/iterative-generation/activities/generateToc.ts +7 -2
- package/src/iterative-generation/utils.ts +4 -5
- package/src/system/notifyWebhookWorkflow.ts +15 -6
- package/lib/cjs/activities/identifyTextSections.js +0 -48
- package/lib/cjs/activities/identifyTextSections.js.map +0 -1
- package/lib/esm/activities/identifyTextSections.js +0 -45
- package/lib/esm/activities/identifyTextSections.js.map +0 -1
- package/lib/types/activities/identifyTextSections.d.ts +0 -12
- package/lib/types/activities/identifyTextSections.d.ts.map +0 -1
- package/src/activities/identifyTextSections.ts +0 -71
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeInteraction.js","sourceRoot":"","sources":["../../../src/activities/executeInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"executeInteraction.js","sourceRoot":"","sources":["../../../src/activities/executeInteraction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { log } from "@temporalio/activity";
|
|
2
2
|
import { setupActivity } from "../dsl/setup/ActivityContext.js";
|
|
3
|
+
import { truncByMaxTokens } from "../utils/tokens.js";
|
|
3
4
|
import { executeInteractionFromActivity } from "./executeInteraction.js";
|
|
4
5
|
const INT_EXTRACT_INFORMATION = "sys:ExtractInformation";
|
|
5
6
|
export async function generateDocumentProperties(payload) {
|
|
@@ -27,8 +28,11 @@ export async function generateDocumentProperties(payload) {
|
|
|
27
28
|
log.info(`Object ${objectId} is not an image or pdf`);
|
|
28
29
|
return undefined;
|
|
29
30
|
};
|
|
31
|
+
const content = doc.text
|
|
32
|
+
? truncByMaxTokens(doc.text, params.truncate || 30000)
|
|
33
|
+
: undefined;
|
|
30
34
|
const promptData = {
|
|
31
|
-
content:
|
|
35
|
+
content: content,
|
|
32
36
|
image: getImageRef() ?? undefined,
|
|
33
37
|
human_context: project?.configuration?.human_context ?? undefined,
|
|
34
38
|
};
|
|
@@ -44,11 +48,12 @@ export async function generateDocumentProperties(payload) {
|
|
|
44
48
|
return undefined;
|
|
45
49
|
}
|
|
46
50
|
let text = "";
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
const jsonResult = infoRes.result.object();
|
|
52
|
+
if (jsonResult.title) {
|
|
53
|
+
text += jsonResult.title + "\n";
|
|
49
54
|
}
|
|
50
|
-
if (
|
|
51
|
-
text +=
|
|
55
|
+
if (jsonResult.description) {
|
|
56
|
+
text += jsonResult.description;
|
|
52
57
|
}
|
|
53
58
|
if (text) {
|
|
54
59
|
return text;
|
|
@@ -60,7 +65,7 @@ export async function generateDocumentProperties(payload) {
|
|
|
60
65
|
log.info(`Extracted information from object ${objectId} with type ${type.name}`, { runId: infoRes.id });
|
|
61
66
|
await client.objects.update(doc.id, {
|
|
62
67
|
properties: {
|
|
63
|
-
...infoRes.result,
|
|
68
|
+
...infoRes.result.object(),
|
|
64
69
|
etag: doc.text_etag,
|
|
65
70
|
},
|
|
66
71
|
text: getText(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateDocumentProperties.js","sourceRoot":"","sources":["../../../src/activities/generateDocumentProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"generateDocumentProperties.js","sourceRoot":"","sources":["../../../src/activities/generateDocumentProperties.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,10 +68,11 @@ export async function generateOrAssignContentType(payload) {
|
|
|
68
68
|
content,
|
|
69
69
|
image: fileRef,
|
|
70
70
|
});
|
|
71
|
-
|
|
71
|
+
const jsonResult = res.result.object();
|
|
72
|
+
log.info("Selected Content Type Result: " + JSON.stringify(jsonResult));
|
|
72
73
|
//if type is not identified or not present in the database, generate a new type
|
|
73
74
|
let selectedType = undefined;
|
|
74
|
-
selectedType = types.find((t) => t.name ===
|
|
75
|
+
selectedType = types.find((t) => t.name === jsonResult.document_type);
|
|
75
76
|
if (!selectedType) {
|
|
76
77
|
log.warn("Document type not identified: starting type generation");
|
|
77
78
|
const newType = await generateNewType(context, existing_types, content, fileRef);
|
|
@@ -79,7 +80,7 @@ export async function generateOrAssignContentType(payload) {
|
|
|
79
80
|
}
|
|
80
81
|
if (!selectedType) {
|
|
81
82
|
log.error("Type not found: ", res.result);
|
|
82
|
-
throw new Error("Type not found: " +
|
|
83
|
+
throw new Error("Type not found: " + jsonResult.document_type);
|
|
83
84
|
}
|
|
84
85
|
//update object with selected type
|
|
85
86
|
await client.objects.update(objectId, {
|
|
@@ -102,17 +103,18 @@ async function generateNewType(context, existing_types, content, fileRef) {
|
|
|
102
103
|
human_context: project?.configuration?.human_context ?? undefined,
|
|
103
104
|
image: fileRef ? fileRef : undefined,
|
|
104
105
|
});
|
|
105
|
-
|
|
106
|
+
const jsonResult = genTypeRes.result.object();
|
|
107
|
+
if (!jsonResult.document_type) {
|
|
106
108
|
log.error("No name generated for type", genTypeRes);
|
|
107
109
|
throw new Error("No name generated for type");
|
|
108
110
|
}
|
|
109
|
-
log.info("Generated schema for type",
|
|
111
|
+
log.info("Generated schema for type", jsonResult.metadata_schema);
|
|
110
112
|
const typeData = {
|
|
111
|
-
name:
|
|
112
|
-
description:
|
|
113
|
-
object_schema:
|
|
114
|
-
is_chunkable:
|
|
115
|
-
table_layout:
|
|
113
|
+
name: jsonResult.document_type,
|
|
114
|
+
description: jsonResult.document_type_description,
|
|
115
|
+
object_schema: jsonResult.metadata_schema,
|
|
116
|
+
is_chunkable: jsonResult.is_chunkable,
|
|
117
|
+
table_layout: jsonResult.table_layout,
|
|
116
118
|
};
|
|
117
119
|
const type = await client.types.create(typeData);
|
|
118
120
|
return type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateOrAssignContentType.js","sourceRoot":"","sources":["../../../src/activities/generateOrAssignContentType.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generateOrAssignContentType.js","sourceRoot":"","sources":["../../../src/activities/generateOrAssignContentType.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,8 @@ export { getObjectFromStore } from "./getObjectFromStore.js";
|
|
|
15
15
|
export { handleDslError } from "./handleError.js";
|
|
16
16
|
export { convertPdfToStructuredText } from "./media/processPdfWithTextract.js";
|
|
17
17
|
export { transcribeMedia } from "./media/transcribeMediaWithGladia.js";
|
|
18
|
+
export { prepareVideo } from "./media/prepareVideo.js";
|
|
18
19
|
export { notifyWebhook } from "./notifyWebhook.js";
|
|
19
20
|
export { setDocumentStatus } from "./setDocumentStatus.js";
|
|
20
|
-
export {
|
|
21
|
+
export { checkRateLimit } from "./rateLimiter.js";
|
|
21
22
|
//# sourceMappingURL=index-dsl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-dsl.js","sourceRoot":"","sources":["../../../src/activities/index-dsl.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,oCAAoC,EAAE,MAAM,oDAAoD,CAAC;AAC1G,OAAO,EAAE,wCAAwC,EAAE,MAAM,wDAAwD,CAAC;AAClH,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index-dsl.js","sourceRoot":"","sources":["../../../src/activities/index-dsl.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,oCAAoC,EAAE,MAAM,oDAAoD,CAAC;AAC1G,OAAO,EAAE,wCAAwC,EAAE,MAAM,wDAAwD,CAAC;AAClH,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { log } from '@temporalio/activity';
|
|
2
|
+
import { POSTER_RENDITION_NAME, AUDIO_RENDITION_NAME, WEB_VIDEO_RENDITION_NAME, ContentNature } from '@vertesia/common';
|
|
3
|
+
import { exec } from 'child_process';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import os from 'os';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { promisify } from 'util';
|
|
8
|
+
import { setupActivity } from '../../dsl/setup/ActivityContext.js';
|
|
9
|
+
import { DocumentNotFoundError, InvalidContentTypeError } from '../../errors.js';
|
|
10
|
+
import { saveBlobToTempFile } from '../../utils/blobs.js';
|
|
11
|
+
import { RequestError } from '@vertesia/api-fetch-client';
|
|
12
|
+
const execAsync = promisify(exec);
|
|
13
|
+
// Default configuration constants
|
|
14
|
+
const DEFAULT_MAX_RESOLUTION = 1920; // Max resolution for video rendition (produces 1080p)
|
|
15
|
+
const DEFAULT_THUMBNAIL_SIZE = 256; // Thumbnail longest side in pixels
|
|
16
|
+
const DEFAULT_POSTER_SIZE = 1920; // Poster longest side in pixels
|
|
17
|
+
const DEFAULT_GENERATE_AUDIO = true; // Generate audio-only rendition by default
|
|
18
|
+
// Timestamp calculation constants for screenshots
|
|
19
|
+
const THUMBNAIL_TIMESTAMP_RATIO = 0.25; // Extract thumbnail at 25% of video duration
|
|
20
|
+
const POSTER_TIMESTAMP_RATIO = 0.05; // Extract poster at 5% of video duration
|
|
21
|
+
const POSTER_TIMESTAMP_MAX = 2; // Maximum poster timestamp in seconds
|
|
22
|
+
const MIN_SCREENSHOT_TIMESTAMP = 1; // Minimum timestamp for screenshots in seconds
|
|
23
|
+
// FFmpeg configuration constants
|
|
24
|
+
const FFMPEG_MAX_BUFFER = 1024 * 1024 * 10; // 10MB buffer for ffmpeg output
|
|
25
|
+
const VIDEO_CRF = '23'; // Constant Rate Factor for video quality (18-28, lower = better)
|
|
26
|
+
const AUDIO_BITRATE = '128k'; // Audio bitrate for AAC encoding
|
|
27
|
+
const JPEG_QUALITY = '2'; // JPEG quality for screenshots (1-31, lower = better)
|
|
28
|
+
/**
|
|
29
|
+
* Extract comprehensive video metadata using ffprobe
|
|
30
|
+
*/
|
|
31
|
+
async function getVideoMetadata(videoPath) {
|
|
32
|
+
try {
|
|
33
|
+
const command = `ffprobe -v quiet -print_format json -show_format -show_streams "${videoPath}"`;
|
|
34
|
+
const { stdout } = await execAsync(command);
|
|
35
|
+
const metadata = JSON.parse(stdout);
|
|
36
|
+
const videoStream = metadata.streams.find((stream) => stream.codec_type === 'video');
|
|
37
|
+
if (!videoStream) {
|
|
38
|
+
throw new Error('No video stream found in file');
|
|
39
|
+
}
|
|
40
|
+
const duration = parseFloat(metadata.format.duration ?? '0') || 0;
|
|
41
|
+
const width = videoStream.width || 0;
|
|
42
|
+
const height = videoStream.height || 0;
|
|
43
|
+
const codec = videoStream.codec_name || 'unknown';
|
|
44
|
+
const bitrate = parseInt(metadata.format.bit_rate ?? '0', 10) || 0;
|
|
45
|
+
// Calculate FPS from r_frame_rate (e.g., "30/1" or "24000/1001")
|
|
46
|
+
let fps = 0;
|
|
47
|
+
if (videoStream.r_frame_rate) {
|
|
48
|
+
const [num, den] = videoStream.r_frame_rate.split('/').map(Number);
|
|
49
|
+
fps = den > 0 ? num / den : 0;
|
|
50
|
+
}
|
|
51
|
+
// Check if video has an audio stream
|
|
52
|
+
const audioStream = metadata.streams.find((stream) => stream.codec_type === 'audio');
|
|
53
|
+
const hasAudio = !!audioStream;
|
|
54
|
+
return { duration, width, height, codec, bitrate, fps, hasAudio };
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
log.error(`Failed to get video metadata: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
58
|
+
throw new Error(`Failed to probe video metadata: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Calculate scaled dimensions maintaining aspect ratio
|
|
63
|
+
* Scales based on longest side, ensuring dimensions are even (required for H.264)
|
|
64
|
+
*/
|
|
65
|
+
function calculateScaledDimensions(width, height, maxResolution) {
|
|
66
|
+
const longestSide = Math.max(width, height);
|
|
67
|
+
let newWidth;
|
|
68
|
+
let newHeight;
|
|
69
|
+
if (longestSide > maxResolution) {
|
|
70
|
+
// Scale down if video is larger than max resolution
|
|
71
|
+
const scale = maxResolution / longestSide;
|
|
72
|
+
newWidth = Math.floor(width * scale);
|
|
73
|
+
newHeight = Math.floor(height * scale);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Keep original dimensions if video is smaller
|
|
77
|
+
newWidth = width;
|
|
78
|
+
newHeight = height;
|
|
79
|
+
}
|
|
80
|
+
// Ensure dimensions are divisible by 2 (required for H.264/image processing)
|
|
81
|
+
const adjustedWidth = newWidth % 2 === 0 ? newWidth : newWidth - 1;
|
|
82
|
+
const adjustedHeight = newHeight % 2 === 0 ? newHeight : newHeight - 1;
|
|
83
|
+
return { width: adjustedWidth, height: adjustedHeight };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Generate a video rendition with resolution limited to maxResolution (e.g., 1080p)
|
|
87
|
+
* Uses H.264 codec for broad compatibility
|
|
88
|
+
*/
|
|
89
|
+
async function generateVideoRendition(videoPath, outputDir, metadata, maxResolution) {
|
|
90
|
+
const outputFile = path.join(outputDir, `rendition_${maxResolution}p.mp4`);
|
|
91
|
+
// Calculate scaled dimensions
|
|
92
|
+
const dimensions = calculateScaledDimensions(metadata.width, metadata.height, maxResolution);
|
|
93
|
+
log.info(`Video rendition dimensions: ${metadata.width}x${metadata.height} -> ${dimensions.width}x${dimensions.height}`);
|
|
94
|
+
// Combine scale with color space conversion for maximum web compatibility
|
|
95
|
+
// format=yuv420p converts to 4:2:0 chroma subsampling (from ProRes 4:2:2 or higher)
|
|
96
|
+
const videoFilters = `scale=${dimensions.width}:${dimensions.height},format=yuv420p`;
|
|
97
|
+
const command = [
|
|
98
|
+
'ffmpeg',
|
|
99
|
+
'-y', // Overwrite output
|
|
100
|
+
'-i', `"${videoPath}"`,
|
|
101
|
+
'-vf', `"${videoFilters}"`,
|
|
102
|
+
'-c:v', 'libx264', // H.264 codec
|
|
103
|
+
'-preset', 'medium', // Balance between speed and compression
|
|
104
|
+
'-crf', VIDEO_CRF, // Constant Rate Factor (18-28, lower = better quality)
|
|
105
|
+
'-pix_fmt', 'yuv420p', // Explicitly set pixel format for compatibility
|
|
106
|
+
'-c:a', 'aac', // Audio codec
|
|
107
|
+
'-b:a', AUDIO_BITRATE, // Audio bitrate
|
|
108
|
+
'-movflags', '+faststart', // Enable streaming
|
|
109
|
+
'-max_muxing_queue_size', '1024', // Prevent muxing issues
|
|
110
|
+
`"${outputFile}"`,
|
|
111
|
+
].join(' ');
|
|
112
|
+
log.info(`Generating ${maxResolution}p video rendition`, { command });
|
|
113
|
+
try {
|
|
114
|
+
const { stderr } = await execAsync(command, { maxBuffer: FFMPEG_MAX_BUFFER });
|
|
115
|
+
if (stderr && !stderr.includes('frame=')) {
|
|
116
|
+
log.debug(`FFmpeg stderr for video rendition: ${stderr}`);
|
|
117
|
+
}
|
|
118
|
+
// Verify output file was created
|
|
119
|
+
try {
|
|
120
|
+
await fs.promises.access(outputFile, fs.constants.F_OK);
|
|
121
|
+
log.info(`Generated ${maxResolution}p video rendition: ${outputFile}`);
|
|
122
|
+
return {
|
|
123
|
+
file: outputFile,
|
|
124
|
+
width: dimensions.width,
|
|
125
|
+
height: dimensions.height,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
log.warn(`Video rendition not generated`);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
log.error(`Failed to generate video rendition: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Extract audio track from video as AAC audio file
|
|
140
|
+
*/
|
|
141
|
+
async function generateAudioRendition(videoPath, outputDir) {
|
|
142
|
+
const outputFile = path.join(outputDir, 'audio.m4a');
|
|
143
|
+
const command = [
|
|
144
|
+
'ffmpeg',
|
|
145
|
+
'-y', // Overwrite output
|
|
146
|
+
'-i', `"${videoPath}"`,
|
|
147
|
+
'-vn', // No video
|
|
148
|
+
'-c:a', 'aac', // Audio codec
|
|
149
|
+
'-b:a', AUDIO_BITRATE, // Audio bitrate
|
|
150
|
+
`"${outputFile}"`,
|
|
151
|
+
].join(' ');
|
|
152
|
+
log.info('Generating audio-only rendition', { command });
|
|
153
|
+
try {
|
|
154
|
+
const { stderr } = await execAsync(command, { maxBuffer: FFMPEG_MAX_BUFFER });
|
|
155
|
+
if (stderr && !stderr.includes('frame=')) {
|
|
156
|
+
log.debug(`FFmpeg stderr for audio rendition: ${stderr}`);
|
|
157
|
+
}
|
|
158
|
+
// Verify output file was created
|
|
159
|
+
try {
|
|
160
|
+
await fs.promises.access(outputFile, fs.constants.F_OK);
|
|
161
|
+
log.info(`Generated audio rendition: ${outputFile}`);
|
|
162
|
+
return outputFile;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
log.warn('Audio rendition not generated');
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
log.error(`Failed to generate audio rendition: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Extract a screenshot frame from the video at a specific timestamp
|
|
176
|
+
*/
|
|
177
|
+
async function generateScreenshot(videoPath, outputDir, timestamp, maxSize, name, metadata) {
|
|
178
|
+
const outputFile = path.join(outputDir, `${name}.jpg`);
|
|
179
|
+
// Calculate scaled dimensions
|
|
180
|
+
const dimensions = calculateScaledDimensions(metadata.width, metadata.height, maxSize);
|
|
181
|
+
const scaleFilter = `scale=${dimensions.width}:${dimensions.height}`;
|
|
182
|
+
const command = [
|
|
183
|
+
'ffmpeg',
|
|
184
|
+
'-y',
|
|
185
|
+
'-ss', timestamp.toString(),
|
|
186
|
+
'-i', `"${videoPath}"`,
|
|
187
|
+
'-vframes', '1',
|
|
188
|
+
'-vf', `"${scaleFilter}"`,
|
|
189
|
+
'-q:v', JPEG_QUALITY, // High quality JPEG
|
|
190
|
+
`"${outputFile}"`,
|
|
191
|
+
].join(' ');
|
|
192
|
+
log.info(`Generating ${name} at ${timestamp}s`, { command });
|
|
193
|
+
try {
|
|
194
|
+
const { stderr } = await execAsync(command);
|
|
195
|
+
if (stderr && !stderr.includes('frame=')) {
|
|
196
|
+
log.debug(`FFmpeg stderr for ${name}: ${stderr}`);
|
|
197
|
+
}
|
|
198
|
+
// Verify output file was created
|
|
199
|
+
try {
|
|
200
|
+
await fs.promises.access(outputFile, fs.constants.F_OK);
|
|
201
|
+
log.info(`Generated ${name}: ${outputFile}`);
|
|
202
|
+
return {
|
|
203
|
+
file: outputFile,
|
|
204
|
+
width: dimensions.width,
|
|
205
|
+
height: dimensions.height,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
log.warn(`${name} not generated`);
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
log.error(`Failed to generate ${name}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Upload a file to the storage and return its URI
|
|
220
|
+
*/
|
|
221
|
+
async function uploadFile(client, filePath, mimeType, fileName, storagePath) {
|
|
222
|
+
const { NodeStreamSource } = await import('@vertesia/client/node');
|
|
223
|
+
const fileStream = fs.createReadStream(filePath);
|
|
224
|
+
const source = new NodeStreamSource(fileStream, fileName, mimeType, storagePath);
|
|
225
|
+
const result = await client.files.uploadFile(source);
|
|
226
|
+
log.info(`Uploaded file to ${storagePath}`, { result });
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Upload a media result and create a rendition entry
|
|
231
|
+
*/
|
|
232
|
+
async function uploadMediaAsRendition(client, result, renditionName, fileName, mimeType, etag, pathSegment) {
|
|
233
|
+
const storagePath = `renditions/${etag}/${pathSegment}/${fileName}`;
|
|
234
|
+
const uri = await uploadFile(client, result.file, mimeType, fileName, storagePath);
|
|
235
|
+
return {
|
|
236
|
+
name: renditionName,
|
|
237
|
+
dimensions: {
|
|
238
|
+
width: result.width,
|
|
239
|
+
height: result.height,
|
|
240
|
+
},
|
|
241
|
+
content: {
|
|
242
|
+
source: uri,
|
|
243
|
+
type: mimeType,
|
|
244
|
+
name: fileName,
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Main activity: Prepare video by extracting metadata and generating renditions
|
|
250
|
+
*/
|
|
251
|
+
export async function prepareVideo(payload) {
|
|
252
|
+
const { client, objectId, params, } = await setupActivity(payload);
|
|
253
|
+
const maxResolution = params.maxResolution ?? DEFAULT_MAX_RESOLUTION;
|
|
254
|
+
const thumbnailSize = params.thumbnailSize ?? DEFAULT_THUMBNAIL_SIZE;
|
|
255
|
+
const posterSize = params.posterSize ?? DEFAULT_POSTER_SIZE;
|
|
256
|
+
const generateAudio = params.generateAudio ?? DEFAULT_GENERATE_AUDIO;
|
|
257
|
+
log.info(`Preparing video for ${objectId}`, {
|
|
258
|
+
maxResolution,
|
|
259
|
+
thumbnailSize,
|
|
260
|
+
posterSize,
|
|
261
|
+
});
|
|
262
|
+
// Retrieve the content object
|
|
263
|
+
const inputObject = await client.objects.retrieve(objectId).catch((err) => {
|
|
264
|
+
log.error(`Failed to retrieve document ${objectId}`, { err });
|
|
265
|
+
if (err instanceof RequestError && err.status === 404) {
|
|
266
|
+
throw new DocumentNotFoundError(`Document ${objectId} not found`, [objectId]);
|
|
267
|
+
}
|
|
268
|
+
throw err;
|
|
269
|
+
});
|
|
270
|
+
if (!inputObject.content?.source) {
|
|
271
|
+
log.error(`Document ${objectId} has no source`);
|
|
272
|
+
throw new DocumentNotFoundError(`Document ${objectId} has no source`, [objectId]);
|
|
273
|
+
}
|
|
274
|
+
if (!inputObject.content.type || !inputObject.content.type.startsWith('video/')) {
|
|
275
|
+
log.error(`Document ${objectId} is not a video: ${inputObject.content.type}`);
|
|
276
|
+
throw new InvalidContentTypeError(objectId, 'video/*', inputObject.content.type || 'unknown');
|
|
277
|
+
}
|
|
278
|
+
// Download video to temp file
|
|
279
|
+
const videoFile = await saveBlobToTempFile(client, inputObject.content.source);
|
|
280
|
+
const tempOutputDir = fs.mkdtempSync(path.join(os.tmpdir(), 'prepare-video-'));
|
|
281
|
+
try {
|
|
282
|
+
// Step 1: Extract video metadata
|
|
283
|
+
log.info('Extracting video metadata');
|
|
284
|
+
const metadata = await getVideoMetadata(videoFile);
|
|
285
|
+
// Step 2: Generate video rendition
|
|
286
|
+
log.info('Generating video rendition');
|
|
287
|
+
const renditionResult = await generateVideoRendition(videoFile, tempOutputDir, metadata, maxResolution);
|
|
288
|
+
// Step 3 & 4: Generate thumbnail and poster in parallel
|
|
289
|
+
log.info('Generating thumbnail and poster');
|
|
290
|
+
const thumbnailTimestamp = Math.max(metadata.duration * THUMBNAIL_TIMESTAMP_RATIO, MIN_SCREENSHOT_TIMESTAMP);
|
|
291
|
+
const posterTimestamp = Math.max(Math.min(metadata.duration * POSTER_TIMESTAMP_RATIO, POSTER_TIMESTAMP_MAX), MIN_SCREENSHOT_TIMESTAMP);
|
|
292
|
+
const [thumbnailResult, posterResult] = await Promise.all([
|
|
293
|
+
generateScreenshot(videoFile, tempOutputDir, thumbnailTimestamp, thumbnailSize, 'thumbnail', metadata),
|
|
294
|
+
generateScreenshot(videoFile, tempOutputDir, posterTimestamp, posterSize, 'poster', metadata),
|
|
295
|
+
]);
|
|
296
|
+
// Step 5: Generate audio rendition (if video has audio and requested)
|
|
297
|
+
let audioFile = null;
|
|
298
|
+
if (generateAudio && metadata.hasAudio) {
|
|
299
|
+
log.info('Generating audio rendition');
|
|
300
|
+
audioFile = await generateAudioRendition(videoFile, tempOutputDir);
|
|
301
|
+
}
|
|
302
|
+
else if (generateAudio && !metadata.hasAudio) {
|
|
303
|
+
log.info('Skipping audio rendition - video has no audio track');
|
|
304
|
+
}
|
|
305
|
+
// Step 6: Upload generated files
|
|
306
|
+
const renditions = [];
|
|
307
|
+
const etag = inputObject.content.etag ?? inputObject.id;
|
|
308
|
+
if (renditionResult) {
|
|
309
|
+
const videoRendition = await uploadMediaAsRendition(client, renditionResult, WEB_VIDEO_RENDITION_NAME, `${maxResolution}px.mp4`, 'video/mp4', etag, 'video');
|
|
310
|
+
renditions.push(videoRendition);
|
|
311
|
+
}
|
|
312
|
+
if (thumbnailResult) {
|
|
313
|
+
const fileName = 'thumbnail.jpg';
|
|
314
|
+
const storagePath = `renditions/${etag}/${thumbnailSize}/${fileName}`;
|
|
315
|
+
await uploadFile(client, thumbnailResult.file, 'image/jpeg', fileName, storagePath);
|
|
316
|
+
}
|
|
317
|
+
if (posterResult) {
|
|
318
|
+
const posterRendition = await uploadMediaAsRendition(client, posterResult, POSTER_RENDITION_NAME, 'poster.jpg', 'image/jpeg', etag, `${posterSize}`);
|
|
319
|
+
renditions.push(posterRendition);
|
|
320
|
+
}
|
|
321
|
+
if (audioFile) {
|
|
322
|
+
const audioRendition = await uploadMediaAsRendition(client, { file: audioFile, width: 0, height: 0 }, AUDIO_RENDITION_NAME, 'audio.m4a', 'audio/mp4', etag, 'audio');
|
|
323
|
+
renditions.push(audioRendition);
|
|
324
|
+
}
|
|
325
|
+
// Step 7: Update content object with metadata and renditions
|
|
326
|
+
const videoMetadata = {
|
|
327
|
+
type: ContentNature.Video,
|
|
328
|
+
duration: metadata.duration,
|
|
329
|
+
dimensions: {
|
|
330
|
+
width: metadata.width,
|
|
331
|
+
height: metadata.height,
|
|
332
|
+
},
|
|
333
|
+
renditions,
|
|
334
|
+
hasAudio: metadata.hasAudio,
|
|
335
|
+
generation_runs: inputObject.metadata?.generation_runs || [],
|
|
336
|
+
};
|
|
337
|
+
await client.objects.update(objectId, {
|
|
338
|
+
metadata: videoMetadata,
|
|
339
|
+
});
|
|
340
|
+
log.info(`Successfully prepared video ${objectId}`, {
|
|
341
|
+
duration: metadata.duration,
|
|
342
|
+
dimensions: `${metadata.width}x${metadata.height}`,
|
|
343
|
+
codec: metadata.codec,
|
|
344
|
+
bitrate: metadata.bitrate,
|
|
345
|
+
fps: metadata.fps,
|
|
346
|
+
hasAudio: metadata.hasAudio,
|
|
347
|
+
renditionsGenerated: renditions.length,
|
|
348
|
+
});
|
|
349
|
+
return {
|
|
350
|
+
objectId,
|
|
351
|
+
metadata: {
|
|
352
|
+
duration: metadata.duration,
|
|
353
|
+
width: metadata.width,
|
|
354
|
+
height: metadata.height,
|
|
355
|
+
codec: metadata.codec,
|
|
356
|
+
bitrate: metadata.bitrate,
|
|
357
|
+
fps: metadata.fps,
|
|
358
|
+
hasAudio: metadata.hasAudio,
|
|
359
|
+
},
|
|
360
|
+
renditions: renditions,
|
|
361
|
+
status: 'success',
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
catch (error) {
|
|
365
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
366
|
+
log.error(`Error preparing video: ${errorMessage}`, { error });
|
|
367
|
+
// Re-throw known errors as-is
|
|
368
|
+
if (error instanceof DocumentNotFoundError || error instanceof InvalidContentTypeError) {
|
|
369
|
+
throw error;
|
|
370
|
+
}
|
|
371
|
+
// Wrap unknown errors in Error
|
|
372
|
+
throw new Error(`Failed to prepare video ${objectId}: ${errorMessage}`);
|
|
373
|
+
}
|
|
374
|
+
finally {
|
|
375
|
+
// Clean up temporary files
|
|
376
|
+
const cleanupPromises = [];
|
|
377
|
+
if (videoFile) {
|
|
378
|
+
cleanupPromises.push(fs.promises.unlink(videoFile).catch((err) => {
|
|
379
|
+
log.warn(`Failed to cleanup video file: ${videoFile}`, { err });
|
|
380
|
+
}));
|
|
381
|
+
}
|
|
382
|
+
if (tempOutputDir) {
|
|
383
|
+
cleanupPromises.push(fs.promises.rm(tempOutputDir, { recursive: true, force: true }).catch((err) => {
|
|
384
|
+
log.warn(`Failed to cleanup temp directory: ${tempOutputDir}`, { err });
|
|
385
|
+
}));
|
|
386
|
+
}
|
|
387
|
+
await Promise.allSettled(cleanupPromises);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=prepareVideo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareVideo.js","sourceRoot":"","sources":["../../../../src/activities/media/prepareVideo.ts"],"names":[],"mappings":"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"}
|