@remotion/serverless 4.0.244 → 4.0.246

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.
Files changed (122) hide show
  1. package/.turbo/turbo-make.log +1 -1
  2. package/LICENSE.md +1 -1
  3. package/dist/best-frames-per-function-param.d.ts +1 -0
  4. package/dist/best-frames-per-function-param.js +17 -0
  5. package/dist/calculate-chunk-times.d.ts +5 -0
  6. package/dist/calculate-chunk-times.js +29 -0
  7. package/dist/can-concat-seamlessly.d.ts +3 -0
  8. package/dist/can-concat-seamlessly.js +17 -0
  9. package/dist/cleanup-props.d.ts +9 -0
  10. package/dist/cleanup-props.js +23 -0
  11. package/dist/cleanup-serialized-input-props.d.ts +15 -0
  12. package/dist/cleanup-serialized-input-props.js +34 -0
  13. package/dist/client.d.ts +9 -0
  14. package/dist/client.js +30 -12
  15. package/dist/compress-props.d.ts +6 -2
  16. package/dist/compress-props.js +5 -3
  17. package/dist/concat-videos.d.ts +25 -0
  18. package/dist/concat-videos.js +53 -0
  19. package/dist/constants.d.ts +39 -3
  20. package/dist/constants.js +8 -1
  21. package/dist/create-post-render-data.d.ts +20 -0
  22. package/dist/create-post-render-data.js +68 -0
  23. package/dist/docs-url.d.ts +1 -0
  24. package/dist/docs-url.js +4 -0
  25. package/dist/estimate-price-from-bucket.d.ts +15 -0
  26. package/dist/estimate-price-from-bucket.js +31 -0
  27. package/dist/expected-out-name.d.ts +1 -1
  28. package/dist/find-output-file-in-bucket.d.ts +16 -0
  29. package/dist/find-output-file-in-bucket.js +41 -0
  30. package/dist/format-costs-info.d.ts +2 -0
  31. package/dist/format-costs-info.js +23 -0
  32. package/dist/get-browser-instance.d.ts +5 -12
  33. package/dist/get-browser-instance.js +8 -7
  34. package/dist/get-custom-out-name.d.ts +1 -1
  35. package/dist/get-or-create-bucket.d.ts +1 -1
  36. package/dist/get-overall-progress-from-storage.d.ts +11 -0
  37. package/dist/get-overall-progress-from-storage.js +25 -0
  38. package/dist/get-overall-progress.d.ts +9 -0
  39. package/dist/get-overall-progress.js +23 -0
  40. package/dist/handlers/check-version-mismatch.d.ts +8 -0
  41. package/dist/handlers/check-version-mismatch.js +23 -0
  42. package/dist/handlers/compositions.d.ts +16 -0
  43. package/dist/handlers/compositions.js +81 -0
  44. package/dist/handlers/launch.d.ts +18 -0
  45. package/dist/handlers/launch.js +600 -0
  46. package/dist/handlers/progress.d.ts +16 -0
  47. package/dist/handlers/progress.js +54 -0
  48. package/dist/handlers/renderer.d.ts +24 -0
  49. package/dist/handlers/renderer.js +344 -0
  50. package/dist/handlers/start.d.ts +19 -0
  51. package/dist/handlers/start.js +104 -0
  52. package/dist/handlers/still.d.ts +21 -0
  53. package/dist/handlers/still.js +335 -0
  54. package/dist/index.d.ts +21 -5
  55. package/dist/index.js +54 -7
  56. package/dist/info.d.ts +1 -1
  57. package/dist/inner-routine.d.ts +22 -0
  58. package/dist/inner-routine.js +267 -0
  59. package/dist/inspect-error.d.ts +4 -0
  60. package/dist/inspect-error.js +39 -0
  61. package/dist/invoke-webhook.d.ts +42 -0
  62. package/dist/invoke-webhook.js +116 -0
  63. package/dist/is-warm.d.ts +2 -0
  64. package/dist/is-warm.js +10 -0
  65. package/dist/leak-detection.d.ts +4 -0
  66. package/dist/leak-detection.js +40 -0
  67. package/dist/make-bucket-name.d.ts +1 -1
  68. package/dist/make-timeout-error.d.ts +13 -0
  69. package/dist/make-timeout-error.js +32 -0
  70. package/dist/make-timeout-message.d.ts +12 -0
  71. package/dist/make-timeout-message.js +76 -0
  72. package/dist/merge-chunks.d.ts +38 -0
  73. package/dist/merge-chunks.js +92 -0
  74. package/dist/min-max.d.ts +2 -0
  75. package/dist/min-max.js +33 -0
  76. package/dist/most-expensive-chunks.d.ts +13 -0
  77. package/dist/most-expensive-chunks.js +28 -0
  78. package/dist/on-downloads-helpers.d.ts +2 -0
  79. package/dist/on-downloads-helpers.js +29 -0
  80. package/dist/overall-render-progress.d.ts +59 -0
  81. package/dist/overall-render-progress.js +180 -0
  82. package/dist/plan-frame-ranges.d.ts +7 -0
  83. package/dist/plan-frame-ranges.js +17 -0
  84. package/dist/print-logging-grep-helper.d.ts +4 -0
  85. package/dist/print-logging-grep-helper.js +12 -0
  86. package/dist/progress.d.ts +16 -0
  87. package/dist/progress.js +254 -0
  88. package/dist/provider-implementation.d.ts +152 -3
  89. package/dist/render-has-audio-video.d.ts +6 -0
  90. package/dist/render-has-audio-video.js +21 -0
  91. package/dist/render-metadata.d.ts +1 -1
  92. package/dist/render-progress.d.ts +51 -0
  93. package/dist/return-values.d.ts +38 -0
  94. package/dist/return-values.js +2 -0
  95. package/dist/stackback.d.ts +6 -0
  96. package/dist/stackback.js +59 -0
  97. package/dist/stream-renderer.d.ts +17 -0
  98. package/dist/stream-renderer.js +148 -0
  99. package/dist/streaming/streaming.d.ts +6 -6
  100. package/dist/streaming/streaming.js +3 -3
  101. package/dist/types.d.ts +55 -0
  102. package/dist/types.js +2 -0
  103. package/dist/validate-composition.d.ts +1 -1
  104. package/dist/validate-composition.js +11 -1
  105. package/dist/validate-download-behavior.d.ts +1 -0
  106. package/dist/validate-download-behavior.js +21 -0
  107. package/dist/validate-frames-per-function.d.ts +4 -0
  108. package/dist/validate-frames-per-function.js +29 -0
  109. package/dist/validate-privacy.d.ts +2 -0
  110. package/dist/validate-privacy.js +14 -0
  111. package/dist/validate.d.ts +4 -0
  112. package/dist/validate.js +8 -0
  113. package/dist/why-is-node-running.d.ts +15 -0
  114. package/dist/why-is-node-running.js +89 -0
  115. package/dist/{write-lambda-error.d.ts → write-error-to-storage.d.ts} +4 -4
  116. package/package.json +6 -5
  117. package/tsconfig.tsbuildinfo +1 -1
  118. package/dist/compositions.d.ts +0 -11
  119. package/dist/compositions.js +0 -82
  120. package/dist/still.d.ts +0 -28
  121. /package/dist/{still.js → render-progress.js} +0 -0
  122. /package/dist/{write-lambda-error.js → write-error-to-storage.js} +0 -0
@@ -0,0 +1,38 @@
1
+ import type { AudioCodec, LogLevel } from '@remotion/renderer';
2
+ import type { CustomCredentials, DownloadBehavior, PostRenderData, Privacy, SerializedInputProps, ServerlessCodec } from './constants';
3
+ import type { OverallProgressHelper } from './overall-render-progress';
4
+ import type { InsideFunctionSpecifics, ProviderSpecifics } from './provider-implementation';
5
+ import type { RenderMetadata } from './render-metadata';
6
+ import type { CloudProvider } from './types';
7
+ export declare const mergeChunksAndFinishRender: <Provider extends CloudProvider>(options: {
8
+ bucketName: string;
9
+ renderId: string;
10
+ expectedBucketOwner: string;
11
+ numberOfFrames: number;
12
+ codec: ServerlessCodec;
13
+ chunkCount: number;
14
+ fps: number;
15
+ numberOfGifLoops: number | null;
16
+ audioCodec: AudioCodec | null;
17
+ renderBucketName: string;
18
+ customCredentials: CustomCredentials<Provider> | null;
19
+ downloadBehavior: DownloadBehavior;
20
+ key: string;
21
+ privacy: Privacy;
22
+ inputProps: SerializedInputProps;
23
+ serializedResolvedProps: SerializedInputProps;
24
+ renderMetadata: RenderMetadata<Provider>;
25
+ audioBitrate: string | null;
26
+ logLevel: LogLevel;
27
+ framesPerLambda: number;
28
+ binariesDirectory: string | null;
29
+ preferLossless: boolean;
30
+ compositionStart: number;
31
+ outdir: string;
32
+ files: string[];
33
+ overallProgress: OverallProgressHelper<Provider>;
34
+ startTime: number;
35
+ providerSpecifics: ProviderSpecifics<Provider>;
36
+ insideFunctionSpecifics: InsideFunctionSpecifics;
37
+ forcePathStyle: boolean;
38
+ }) => Promise<PostRenderData<Provider>>;
@@ -0,0 +1,92 @@
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.mergeChunksAndFinishRender = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const cleanup_props_1 = require("./cleanup-props");
9
+ const concat_videos_1 = require("./concat-videos");
10
+ const create_post_render_data_1 = require("./create-post-render-data");
11
+ const inspect_error_1 = require("./inspect-error");
12
+ const mergeChunksAndFinishRender = async (options) => {
13
+ const onProgress = (framesEncoded) => {
14
+ options.overallProgress.setCombinedFrames(framesEncoded);
15
+ };
16
+ const encodingStart = Date.now();
17
+ if (options.renderMetadata.type === 'still') {
18
+ throw new Error('Cannot merge stills');
19
+ }
20
+ if (options.files.length === 0) {
21
+ throw new Error('No files to merge');
22
+ }
23
+ const { outfile, cleanupChunksProm } = await (0, concat_videos_1.concatVideos)({
24
+ onProgress,
25
+ numberOfFrames: options.numberOfFrames,
26
+ codec: options.codec,
27
+ fps: options.fps,
28
+ numberOfGifLoops: options.numberOfGifLoops,
29
+ files: options.files,
30
+ outdir: options.outdir,
31
+ audioCodec: options.audioCodec,
32
+ audioBitrate: options.audioBitrate,
33
+ logLevel: options.logLevel,
34
+ framesPerLambda: options.framesPerLambda,
35
+ binariesDirectory: options.binariesDirectory,
36
+ cancelSignal: undefined,
37
+ preferLossless: options.preferLossless,
38
+ muted: options.renderMetadata.muted,
39
+ metadata: options.renderMetadata.metadata,
40
+ insideFunctionSpecifics: options.insideFunctionSpecifics,
41
+ });
42
+ const encodingStop = Date.now();
43
+ options.overallProgress.setTimeToCombine(encodingStop - encodingStart);
44
+ const outputSize = fs_1.default.statSync(outfile).size;
45
+ const writeToBucket = options.insideFunctionSpecifics.timer(`Writing to bucket (${outputSize} bytes)`, options.logLevel);
46
+ await options.providerSpecifics.writeFile({
47
+ bucketName: options.renderBucketName,
48
+ key: options.key,
49
+ body: fs_1.default.createReadStream(outfile),
50
+ region: options.providerSpecifics.getCurrentRegionInFunction(),
51
+ privacy: options.privacy,
52
+ expectedBucketOwner: options.expectedBucketOwner,
53
+ downloadBehavior: options.downloadBehavior,
54
+ customCredentials: options.customCredentials,
55
+ forcePathStyle: options.forcePathStyle,
56
+ });
57
+ writeToBucket.end();
58
+ const errorExplanations = (0, inspect_error_1.inspectErrors)({
59
+ errors: options.overallProgress.get().errors,
60
+ });
61
+ const cleanupProm = (0, cleanup_props_1.cleanupProps)({
62
+ inputProps: options.inputProps,
63
+ serializedResolvedProps: options.serializedResolvedProps,
64
+ providerSpecifics: options.providerSpecifics,
65
+ forcePathStyle: options.forcePathStyle,
66
+ });
67
+ const { url: outputUrl } = options.providerSpecifics.getOutputUrl({
68
+ bucketName: options.renderBucketName,
69
+ currentRegion: options.providerSpecifics.getCurrentRegionInFunction(),
70
+ customCredentials: options.customCredentials,
71
+ renderMetadata: options.renderMetadata,
72
+ });
73
+ const postRenderData = (0, create_post_render_data_1.createPostRenderData)({
74
+ region: options.providerSpecifics.getCurrentRegionInFunction(),
75
+ memorySizeInMb: options.insideFunctionSpecifics.getCurrentMemorySizeInMb(),
76
+ renderMetadata: options.renderMetadata,
77
+ errorExplanations,
78
+ timeToDelete: (await cleanupProm).reduce((a, b) => Math.max(a, b), 0),
79
+ outputFile: {
80
+ url: outputUrl,
81
+ },
82
+ outputSize,
83
+ timeToCombine: encodingStop - encodingStart,
84
+ overallProgress: options.overallProgress.get(),
85
+ timeToFinish: Date.now() - options.startTime,
86
+ providerSpecifics: options.providerSpecifics,
87
+ });
88
+ options.overallProgress.setPostRenderData(postRenderData);
89
+ await Promise.all([cleanupChunksProm, fs_1.default.promises.rm(outfile)]);
90
+ return postRenderData;
91
+ };
92
+ exports.mergeChunksAndFinishRender = mergeChunksAndFinishRender;
@@ -0,0 +1,2 @@
1
+ export declare const min: (arr: number[]) => number;
2
+ export declare const max: (arr: number[]) => number;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // Standard library Math.min and Math.max can throw
3
+ // if array length is very long. Fixing this with own implementation
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.max = exports.min = void 0;
6
+ const min = (arr) => {
7
+ if (arr.length === 0) {
8
+ throw new Error('Array of 0 length');
9
+ }
10
+ let smallest = arr[0];
11
+ for (let i = 0; i < arr.length; i++) {
12
+ const elem = arr[i];
13
+ if (elem < smallest) {
14
+ smallest = elem;
15
+ }
16
+ }
17
+ return smallest;
18
+ };
19
+ exports.min = min;
20
+ const max = (arr) => {
21
+ if (arr.length === 0) {
22
+ throw new Error('Array of 0 length');
23
+ }
24
+ let biggest = arr[0];
25
+ for (let i = 0; i < arr.length; i++) {
26
+ const elem = arr[i];
27
+ if (elem > biggest) {
28
+ biggest = elem;
29
+ }
30
+ }
31
+ return biggest;
32
+ };
33
+ exports.max = max;
@@ -0,0 +1,13 @@
1
+ import type { ParsedTiming } from './types';
2
+ export declare const OVERHEAD_TIME_PER_LAMBDA = 100;
3
+ export type ExpensiveChunk = {
4
+ chunk: number;
5
+ frameRange: [number, number];
6
+ timeInMilliseconds: number;
7
+ };
8
+ export declare const getMostExpensiveChunks: ({ parsedTimings, framesPerFunction: framesPerLambda, firstFrame, lastFrame, }: {
9
+ parsedTimings: ParsedTiming[];
10
+ framesPerFunction: number;
11
+ firstFrame: number;
12
+ lastFrame: number;
13
+ }) => ExpensiveChunk[];
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMostExpensiveChunks = exports.OVERHEAD_TIME_PER_LAMBDA = void 0;
4
+ exports.OVERHEAD_TIME_PER_LAMBDA = 100;
5
+ const getMostExpensiveChunks = ({ parsedTimings, framesPerFunction: framesPerLambda, firstFrame, lastFrame, }) => {
6
+ const mostExpensiveChunks = parsedTimings
7
+ .slice(0)
8
+ .sort((a, b) => {
9
+ const durA = a.rendered - a.start;
10
+ const durB = b.rendered - b.start;
11
+ return durB - durA;
12
+ })
13
+ .slice(0, 5);
14
+ return mostExpensiveChunks.map((c) => {
15
+ const isLastChunk = c.chunk === parsedTimings.length - 1;
16
+ return {
17
+ timeInMilliseconds: c.rendered - c.start,
18
+ chunk: c.chunk,
19
+ frameRange: [
20
+ framesPerLambda * c.chunk + firstFrame,
21
+ isLastChunk
22
+ ? lastFrame
23
+ : framesPerLambda * (c.chunk + 1) - 1 + firstFrame,
24
+ ],
25
+ };
26
+ });
27
+ };
28
+ exports.getMostExpensiveChunks = getMostExpensiveChunks;
@@ -0,0 +1,2 @@
1
+ import type { LogLevel, RenderMediaOnDownload } from '@remotion/renderer';
2
+ export declare const onDownloadsHelper: (logLevel: LogLevel) => RenderMediaOnDownload;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onDownloadsHelper = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const onDownloadsHelper = (logLevel) => {
6
+ const downloads = {};
7
+ return (src) => {
8
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Downloading', src);
9
+ downloads[src] = 0;
10
+ return ({ percent, downloaded }) => {
11
+ if (percent === null) {
12
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `Download progress (${src}): ${downloaded} bytes. Don't know final size of download, no Content-Length header.`);
13
+ return;
14
+ }
15
+ if (
16
+ // Only report every 10% change
17
+ downloads[src] > percent - 0.1 &&
18
+ percent !== 1) {
19
+ return;
20
+ }
21
+ downloads[src] = percent;
22
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `Download progress (${src}): ${downloaded} bytes, ${(percent * 100).toFixed(1)}%`);
23
+ if (percent === 1) {
24
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `Download complete: ${src}`);
25
+ }
26
+ };
27
+ };
28
+ };
29
+ exports.onDownloadsHelper = onDownloadsHelper;
@@ -0,0 +1,59 @@
1
+ import type { LogLevel } from '@remotion/renderer';
2
+ import type { PostRenderData } from './constants';
3
+ import type { ProviderSpecifics } from './provider-implementation';
4
+ import type { RenderMetadata } from './render-metadata';
5
+ import type { ChunkRetry, CloudProvider, ParsedTiming, ReceivedArtifact } from './types';
6
+ import type { FunctionErrorInfo } from './write-error-to-storage';
7
+ export type OverallRenderProgress<Provider extends CloudProvider> = {
8
+ chunks: number[];
9
+ framesRendered: number;
10
+ framesEncoded: number;
11
+ combinedFrames: number;
12
+ timeToCombine: number | null;
13
+ timeToEncode: number | null;
14
+ timeToRenderFrames: number | null;
15
+ lambdasInvoked: number;
16
+ retries: ChunkRetry[];
17
+ postRenderData: PostRenderData<Provider> | null;
18
+ timings: ParsedTiming[];
19
+ renderMetadata: RenderMetadata<Provider> | null;
20
+ errors: FunctionErrorInfo[];
21
+ timeoutTimestamp: number;
22
+ functionLaunched: number;
23
+ serveUrlOpened: number | null;
24
+ compositionValidated: number | null;
25
+ receivedArtifact: ReceivedArtifact<Provider>[];
26
+ };
27
+ export type OverallProgressHelper<Provider extends CloudProvider> = {
28
+ upload: () => Promise<void>;
29
+ setFrames: ({ encoded, rendered, index, }: {
30
+ rendered: number;
31
+ encoded: number;
32
+ index: number;
33
+ }) => void;
34
+ setLambdaInvoked: (chunk: number) => void;
35
+ addChunkCompleted: (chunkIndex: number, start: number, rendered: number) => void;
36
+ setCombinedFrames: (framesEncoded: number) => void;
37
+ setTimeToCombine: (timeToCombine: number) => void;
38
+ addRetry: (retry: ChunkRetry) => void;
39
+ setPostRenderData: (postRenderData: PostRenderData<Provider>) => void;
40
+ setRenderMetadata: (renderMetadata: RenderMetadata<Provider>) => void;
41
+ addErrorWithoutUpload: (errorInfo: FunctionErrorInfo) => void;
42
+ setExpectedChunks: (expectedChunks: number) => void;
43
+ get: () => OverallRenderProgress<Provider>;
44
+ setServeUrlOpened: (timestamp: number) => void;
45
+ setCompositionValidated: (timestamp: number) => void;
46
+ addReceivedArtifact: (asset: ReceivedArtifact<Provider>) => void;
47
+ getReceivedArtifacts: () => ReceivedArtifact<Provider>[];
48
+ };
49
+ export declare const makeInitialOverallRenderProgress: <Provider extends CloudProvider>(timeoutTimestamp: number) => OverallRenderProgress<Provider>;
50
+ export declare const makeOverallRenderProgress: <Provider extends CloudProvider>({ renderId, bucketName, expectedBucketOwner, region, timeoutTimestamp, logLevel, providerSpecifics, forcePathStyle, }: {
51
+ renderId: string;
52
+ bucketName: string;
53
+ expectedBucketOwner: string;
54
+ region: Provider["region"];
55
+ timeoutTimestamp: number;
56
+ logLevel: LogLevel;
57
+ providerSpecifics: ProviderSpecifics<Provider>;
58
+ forcePathStyle: boolean;
59
+ }) => OverallProgressHelper<Provider>;
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeOverallRenderProgress = exports.makeInitialOverallRenderProgress = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const constants_1 = require("./constants");
6
+ const makeInitialOverallRenderProgress = (timeoutTimestamp) => {
7
+ return {
8
+ chunks: [],
9
+ framesRendered: 0,
10
+ framesEncoded: 0,
11
+ combinedFrames: 0,
12
+ timeToCombine: null,
13
+ timeToEncode: null,
14
+ lambdasInvoked: 0,
15
+ retries: [],
16
+ postRenderData: null,
17
+ timings: [],
18
+ renderMetadata: null,
19
+ errors: [],
20
+ timeToRenderFrames: null,
21
+ timeoutTimestamp,
22
+ functionLaunched: Date.now(),
23
+ serveUrlOpened: null,
24
+ compositionValidated: null,
25
+ receivedArtifact: [],
26
+ };
27
+ };
28
+ exports.makeInitialOverallRenderProgress = makeInitialOverallRenderProgress;
29
+ const makeOverallRenderProgress = ({ renderId, bucketName, expectedBucketOwner, region, timeoutTimestamp, logLevel, providerSpecifics, forcePathStyle, }) => {
30
+ let framesRendered = [];
31
+ let framesEncoded = [];
32
+ let lambdasInvoked = [];
33
+ const renderProgress = (0, exports.makeInitialOverallRenderProgress)(timeoutTimestamp);
34
+ let currentUploadPromise = null;
35
+ const getCurrentProgress = () => renderProgress;
36
+ let latestUploadRequest = 0;
37
+ const getLatestRequestId = () => latestUploadRequest;
38
+ let encodeStartTime = null;
39
+ let renderFramesStartTime = null;
40
+ const upload = async () => {
41
+ const uploadRequestId = ++latestUploadRequest;
42
+ if (currentUploadPromise) {
43
+ await currentUploadPromise;
44
+ }
45
+ // If request has been replaced by a new one
46
+ if (getLatestRequestId() !== uploadRequestId) {
47
+ return;
48
+ }
49
+ const toWrite = JSON.stringify(getCurrentProgress());
50
+ const start = Date.now();
51
+ currentUploadPromise = providerSpecifics
52
+ .writeFile({
53
+ body: toWrite,
54
+ bucketName,
55
+ customCredentials: null,
56
+ downloadBehavior: null,
57
+ expectedBucketOwner,
58
+ key: (0, constants_1.overallProgressKey)(renderId),
59
+ privacy: 'private',
60
+ region,
61
+ forcePathStyle,
62
+ })
63
+ .then(() => {
64
+ // By default, upload is way too fast (~20 requests per second)
65
+ // Space out the requests a bit
66
+ return new Promise((resolve) => {
67
+ setTimeout(resolve, 250 - (Date.now() - start));
68
+ });
69
+ })
70
+ .catch((err) => {
71
+ // If an error occurs in uploading the state that contains the errors,
72
+ // that is unfortunate. We just log it.
73
+ renderer_1.RenderInternals.Log.error({ indent: false, logLevel }, 'Error uploading progress', err);
74
+ });
75
+ await currentUploadPromise;
76
+ currentUploadPromise = null;
77
+ };
78
+ return {
79
+ upload,
80
+ setFrames: ({ encoded, rendered, index, }) => {
81
+ if (framesRendered.length === 0) {
82
+ throw new Error('Expected chunks to be set before frames are set');
83
+ }
84
+ if (framesEncoded.length === 0) {
85
+ throw new Error('Expected chunks to be set before frames are set');
86
+ }
87
+ framesRendered[index] = rendered;
88
+ framesEncoded[index] = encoded;
89
+ const totalFramesEncoded = framesEncoded.reduce((a, b) => a + b, 0);
90
+ const totalFramesRendered = framesRendered.reduce((a, b) => a + b, 0);
91
+ if (renderProgress.framesEncoded === 0 && totalFramesEncoded > 0) {
92
+ encodeStartTime = Date.now();
93
+ }
94
+ if (renderProgress.framesRendered === 0 && totalFramesRendered > 0) {
95
+ renderFramesStartTime = Date.now();
96
+ }
97
+ if (renderProgress.timeToRenderFrames === null) {
98
+ const frameCount = renderProgress.renderMetadata &&
99
+ renderProgress.renderMetadata.type === 'video'
100
+ ? renderer_1.RenderInternals.getFramesToRender(renderProgress.renderMetadata.frameRange, renderProgress.renderMetadata.everyNthFrame).length
101
+ : null;
102
+ if (frameCount === totalFramesRendered) {
103
+ const timeToRenderFrames = Date.now() - (renderFramesStartTime !== null && renderFramesStartTime !== void 0 ? renderFramesStartTime : Date.now());
104
+ renderProgress.timeToRenderFrames = timeToRenderFrames;
105
+ }
106
+ }
107
+ renderProgress.framesRendered = totalFramesRendered;
108
+ renderProgress.framesEncoded = totalFramesEncoded;
109
+ upload();
110
+ },
111
+ addChunkCompleted: (chunkIndex, start, rendered) => {
112
+ var _a;
113
+ renderProgress.chunks.push(chunkIndex);
114
+ if (renderProgress.chunks.length ===
115
+ ((_a = renderProgress.renderMetadata) === null || _a === void 0 ? void 0 : _a.totalChunks)) {
116
+ const timeToEncode = Date.now() - (encodeStartTime !== null && encodeStartTime !== void 0 ? encodeStartTime : Date.now());
117
+ renderProgress.timeToEncode = timeToEncode;
118
+ }
119
+ renderProgress.timings.push({
120
+ chunk: chunkIndex,
121
+ start,
122
+ rendered,
123
+ });
124
+ upload();
125
+ },
126
+ setCombinedFrames: (frames) => {
127
+ renderProgress.combinedFrames = frames;
128
+ upload();
129
+ },
130
+ setTimeToCombine: (timeToCombine) => {
131
+ renderProgress.timeToCombine = timeToCombine;
132
+ upload();
133
+ },
134
+ setLambdaInvoked(chunk) {
135
+ if (lambdasInvoked.length === 0) {
136
+ throw new Error('Expected chunks to be set before lambdas are set');
137
+ }
138
+ lambdasInvoked[chunk] = true;
139
+ renderProgress.lambdasInvoked = lambdasInvoked.reduce((a, b) => a + Number(b), 0);
140
+ upload();
141
+ },
142
+ setPostRenderData(postRenderData) {
143
+ renderProgress.postRenderData = postRenderData;
144
+ upload();
145
+ },
146
+ setRenderMetadata: (renderMetadata) => {
147
+ renderProgress.renderMetadata = renderMetadata;
148
+ upload();
149
+ },
150
+ addErrorWithoutUpload: (errorInfo) => {
151
+ renderProgress.errors.push(errorInfo);
152
+ },
153
+ setExpectedChunks: (expectedChunks) => {
154
+ framesRendered = new Array(expectedChunks).fill(0);
155
+ framesEncoded = new Array(expectedChunks).fill(0);
156
+ lambdasInvoked = new Array(expectedChunks).fill(false);
157
+ },
158
+ setCompositionValidated(timestamp) {
159
+ renderProgress.compositionValidated = timestamp;
160
+ upload();
161
+ },
162
+ setServeUrlOpened(timestamp) {
163
+ renderProgress.serveUrlOpened = timestamp;
164
+ upload();
165
+ },
166
+ addRetry(retry) {
167
+ renderProgress.retries.push(retry);
168
+ upload();
169
+ },
170
+ addReceivedArtifact(asset) {
171
+ renderProgress.receivedArtifact.push(asset);
172
+ upload();
173
+ },
174
+ getReceivedArtifacts() {
175
+ return renderProgress.receivedArtifact;
176
+ },
177
+ get: () => renderProgress,
178
+ };
179
+ };
180
+ exports.makeOverallRenderProgress = makeOverallRenderProgress;
@@ -0,0 +1,7 @@
1
+ export declare const planFrameRanges: ({ framesPerFunction, frameRange, everyNthFrame, }: {
2
+ framesPerFunction: number;
3
+ frameRange: [number, number];
4
+ everyNthFrame: number;
5
+ }) => {
6
+ chunks: [number, number][];
7
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.planFrameRanges = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const planFrameRanges = ({ framesPerFunction, frameRange, everyNthFrame, }) => {
6
+ const framesToRender = renderer_1.RenderInternals.getFramesToRender(frameRange, everyNthFrame);
7
+ const chunkCount = Math.ceil(framesToRender.length / framesPerFunction);
8
+ const firstFrame = frameRange[0];
9
+ return {
10
+ chunks: new Array(chunkCount).fill(1).map((_, i) => {
11
+ const start = i * framesPerFunction * everyNthFrame + firstFrame;
12
+ const end = Math.min(framesToRender[framesToRender.length - 1], (i + 1) * framesPerFunction * everyNthFrame - 1 + firstFrame);
13
+ return [start, end];
14
+ }),
15
+ };
16
+ };
17
+ exports.planFrameRanges = planFrameRanges;
@@ -0,0 +1,4 @@
1
+ import type { LogLevel } from '@remotion/renderer';
2
+ import type { ServerlessRoutines } from './constants';
3
+ export type PrintLoggingHelper = (type: ServerlessRoutines, data: Record<string, string | boolean>, logLevel: LogLevel) => void;
4
+ export declare const printLoggingGrepHelper: PrintLoggingHelper;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printLoggingGrepHelper = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const printLoggingGrepHelper = (type, data, logLevel) => {
6
+ const d = Object.keys(data).reduce((a, b) => {
7
+ return [...a, `${b}=${data[b]}`];
8
+ }, []);
9
+ const msg = [`method=${type}`, ...d].join(',');
10
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, msg);
11
+ };
12
+ exports.printLoggingGrepHelper = printLoggingGrepHelper;
@@ -0,0 +1,16 @@
1
+ import type { CustomCredentials } from './constants';
2
+ import type { ProviderSpecifics } from './provider-implementation';
3
+ import type { GenericRenderProgress } from './render-progress';
4
+ import type { CloudProvider } from './types';
5
+ export declare const getProgress: <Provider extends CloudProvider>({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMilliseconds, customCredentials, providerSpecifics, forcePathStyle, functionName, }: {
6
+ bucketName: string;
7
+ renderId: string;
8
+ expectedBucketOwner: string | null;
9
+ region: Provider["region"];
10
+ memorySizeInMb: number;
11
+ timeoutInMilliseconds: number;
12
+ customCredentials: CustomCredentials<Provider> | null;
13
+ providerSpecifics: ProviderSpecifics<Provider>;
14
+ forcePathStyle: boolean;
15
+ functionName: string;
16
+ }) => Promise<GenericRenderProgress<Provider>>;