@remotion/lambda 4.0.163 → 4.0.164

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.
@@ -59,11 +59,11 @@ export declare const internalDeploySite: (args_0: MandatoryParameters & {
59
59
  getValue: ({ commandLine }: {
60
60
  commandLine: Record<string, unknown>;
61
61
  }) => {
62
- value: "verbose" | "info" | "warn" | "error";
62
+ value: "error" | "verbose" | "info" | "warn";
63
63
  source: string;
64
64
  };
65
- setConfig: (newLogLevel: "verbose" | "info" | "warn" | "error") => void;
66
- type: "verbose" | "info" | "warn" | "error";
65
+ setConfig: (newLogLevel: "error" | "verbose" | "info" | "warn") => void;
66
+ type: "error" | "verbose" | "info" | "warn";
67
67
  };
68
68
  readonly throwIfSiteExists: {
69
69
  cliFlag: string;
@@ -36,6 +36,7 @@ type LambdaCommandLineOptions = {
36
36
  [BrowserSafeApis.options.folderExpiryOption.cliFlag]: boolean | undefined;
37
37
  ['vpc-subnet-ids']: string | undefined;
38
38
  ['vpc-security-group-ids']: string | undefined;
39
+ ['compatible-only']: boolean;
39
40
  };
40
41
  export declare const parsedLambdaCli: LambdaCommandLineOptions & import("minimist").ParsedArgs;
41
42
  export declare const forceFlagProvided: boolean;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.functionsLsCommand = exports.FUNCTIONS_LS_SUBCOMMAND = void 0;
4
4
  const cli_1 = require("@remotion/cli");
5
5
  const get_functions_1 = require("../../../api/get-functions");
6
+ const args_1 = require("../../args");
6
7
  const get_aws_region_1 = require("../../get-aws-region");
7
8
  const NAME_COLS = 70;
8
9
  const MEMORY_COLS = 15;
@@ -21,9 +22,10 @@ const functionsLsCommand = async (logLevel) => {
21
22
  indent: false,
22
23
  });
23
24
  fetchingOutput.update('Getting functions...', false);
25
+ const compatibleOnly = args_1.parsedLambdaCli['compatible-only'] || false;
24
26
  const functions = await (0, get_functions_1.getFunctions)({
25
27
  region,
26
- compatibleOnly: false,
28
+ compatibleOnly,
27
29
  });
28
30
  if (cli_1.CliInternals.quietFlagProvided()) {
29
31
  if (functions.length === 0) {
@@ -0,0 +1,6 @@
1
+ import type { OverallRenderProgress } from './overall-render-progress';
2
+ export declare const getOverallProgressS3: ({ renderId, bucketName, expectedBucketOwner, }: {
3
+ renderId: string;
4
+ expectedBucketOwner: string;
5
+ bucketName: string;
6
+ }) => Promise<OverallRenderProgress | null>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOverallProgressS3 = void 0;
4
+ const defaults_1 = require("../../defaults");
5
+ const stream_to_string_1 = require("../../shared/stream-to-string");
6
+ const get_current_region_1 = require("./get-current-region");
7
+ const io_1 = require("./io");
8
+ const getOverallProgressS3 = async ({ renderId, bucketName, expectedBucketOwner, }) => {
9
+ try {
10
+ const Body = await (0, io_1.lambdaReadFile)({
11
+ bucketName,
12
+ key: (0, defaults_1.overallProgressKey)(renderId),
13
+ expectedBucketOwner,
14
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
15
+ });
16
+ const str = await (0, stream_to_string_1.streamToString)(Body);
17
+ return JSON.parse(str);
18
+ }
19
+ catch (err) {
20
+ return null;
21
+ }
22
+ };
23
+ exports.getOverallProgressS3 = getOverallProgressS3;
@@ -3,12 +3,6 @@ import type { CustomCredentials } from '../../shared/aws-clients';
3
3
  import type { PostRenderData, Privacy, RenderMetadata, SerializedInputProps } from '../../shared/constants';
4
4
  import type { DownloadBehavior } from '../../shared/content-disposition-header';
5
5
  import type { LambdaCodec } from '../../shared/validate-lambda-codec';
6
- export type OnAllChunksAvailable = (options: {
7
- inputProps: SerializedInputProps;
8
- serializedResolvedProps: SerializedInputProps;
9
- framesPerLambda: number;
10
- compositionStart: number;
11
- }) => void;
12
6
  export declare const mergeChunksAndFinishRender: (options: {
13
7
  bucketName: string;
14
8
  renderId: string;
@@ -27,7 +21,6 @@ export declare const mergeChunksAndFinishRender: (options: {
27
21
  inputProps: SerializedInputProps;
28
22
  serializedResolvedProps: SerializedInputProps;
29
23
  renderMetadata: RenderMetadata;
30
- onAllChunks: OnAllChunksAvailable;
31
24
  audioBitrate: string | null;
32
25
  logLevel: LogLevel;
33
26
  framesPerLambda: number;
@@ -94,12 +94,6 @@ const mergeChunksAndFinishRender = async (options) => {
94
94
  onErrors,
95
95
  logLevel: options.logLevel,
96
96
  });
97
- options.onAllChunks({
98
- inputProps: options.inputProps,
99
- serializedResolvedProps: options.serializedResolvedProps,
100
- framesPerLambda: options.framesPerLambda,
101
- compositionStart: options.compositionStart,
102
- });
103
97
  const encodingStart = Date.now();
104
98
  if (options.renderMetadata.type === 'still') {
105
99
  throw new Error('Cannot merge stills');
@@ -0,0 +1,27 @@
1
+ import type { AwsRegion } from '../../client';
2
+ export type OverallRenderProgress = {
3
+ chunks: number[];
4
+ framesRendered: number;
5
+ framesEncoded: number;
6
+ combinedFrames: number;
7
+ timeToCombine: number | null;
8
+ };
9
+ export type OverallProgressHelper = {
10
+ upload: () => Promise<void>;
11
+ finishUploading: () => void;
12
+ setFrames: ({ encoded, rendered, index, }: {
13
+ rendered: number;
14
+ encoded: number;
15
+ index: number;
16
+ }) => void;
17
+ addChunkCompleted: (chunkIndex: number) => void;
18
+ setCombinedFrames: (framesEncoded: number) => void;
19
+ setTimeToCombine: (timeToCombine: number) => void;
20
+ };
21
+ export declare const makeOverallRenderProgress: ({ renderId, bucketName, expectedBucketOwner, region, expectedChunks, }: {
22
+ renderId: string;
23
+ bucketName: string;
24
+ expectedBucketOwner: string;
25
+ region: AwsRegion;
26
+ expectedChunks: number;
27
+ }) => OverallProgressHelper;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeOverallRenderProgress = void 0;
4
+ const constants_1 = require("../../shared/constants");
5
+ const io_1 = require("./io");
6
+ const makeOverallRenderProgress = ({ renderId, bucketName, expectedBucketOwner, region, expectedChunks, }) => {
7
+ const framesRendered = new Array(expectedChunks).fill(0);
8
+ const framesEncoded = new Array(expectedChunks).fill(0);
9
+ const renderProgress = {
10
+ chunks: [],
11
+ framesRendered: 0,
12
+ framesEncoded: 0,
13
+ combinedFrames: 0,
14
+ timeToCombine: null,
15
+ };
16
+ let currentUploadPromise = null;
17
+ let lastUpload = null;
18
+ let stopUploading = false;
19
+ const finishUploading = () => {
20
+ stopUploading = true;
21
+ };
22
+ // TODO: What if upload fails?
23
+ const upload = async () => {
24
+ if (stopUploading) {
25
+ return;
26
+ }
27
+ if (lastUpload === JSON.stringify(renderProgress)) {
28
+ return;
29
+ }
30
+ if (currentUploadPromise) {
31
+ currentUploadPromise = currentUploadPromise.then(() => {
32
+ currentUploadPromise = null;
33
+ return upload();
34
+ });
35
+ return;
36
+ }
37
+ currentUploadPromise = (0, io_1.lambdaWriteFile)({
38
+ body: JSON.stringify(renderProgress),
39
+ bucketName,
40
+ customCredentials: null,
41
+ downloadBehavior: null,
42
+ expectedBucketOwner,
43
+ key: (0, constants_1.overallProgressKey)(renderId),
44
+ privacy: 'private',
45
+ region,
46
+ });
47
+ await currentUploadPromise;
48
+ lastUpload = JSON.stringify(renderProgress);
49
+ currentUploadPromise = null;
50
+ };
51
+ return {
52
+ upload,
53
+ finishUploading,
54
+ setFrames: ({ encoded, rendered, index, }) => {
55
+ framesRendered[index] = rendered;
56
+ framesEncoded[index] = encoded;
57
+ renderProgress.framesRendered = framesRendered.reduce((a, b) => a + b, 0);
58
+ renderProgress.framesEncoded = framesEncoded.reduce((a, b) => a + b, 0);
59
+ upload();
60
+ },
61
+ addChunkCompleted: (chunkIndex) => {
62
+ renderProgress.chunks.push(chunkIndex);
63
+ upload();
64
+ },
65
+ setCombinedFrames: (frames) => {
66
+ renderProgress.combinedFrames = frames;
67
+ upload();
68
+ },
69
+ setTimeToCombine: (timeToCombine) => {
70
+ renderProgress.timeToCombine = timeToCombine;
71
+ upload();
72
+ },
73
+ };
74
+ };
75
+ exports.makeOverallRenderProgress = makeOverallRenderProgress;
@@ -0,0 +1,11 @@
1
+ import type { LogLevel } from '@remotion/renderer';
2
+ import type { LambdaPayload } from '../../defaults';
3
+ import type { OverallProgressHelper } from './overall-render-progress';
4
+ export declare const streamRendererFunctionWithRetry: ({ payload, files, functionName, outdir, overallProgress, logLevel, }: {
5
+ payload: LambdaPayload;
6
+ functionName: string;
7
+ outdir: string;
8
+ overallProgress: OverallProgressHelper;
9
+ files: string[];
10
+ logLevel: LogLevel;
11
+ }) => Promise<unknown>;
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.streamRendererFunctionWithRetry = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const defaults_1 = require("../../defaults");
8
+ const call_lambda_1 = require("../../shared/call-lambda");
9
+ const get_current_region_1 = require("./get-current-region");
10
+ const streamRenderer = ({ payload, functionName, outdir, overallProgress, files, logLevel, }) => {
11
+ if (payload.type !== defaults_1.LambdaRoutines.renderer) {
12
+ throw new Error('Expected renderer type');
13
+ }
14
+ return new Promise((resolve) => {
15
+ const receivedStreamingPayload = ({ message }) => {
16
+ if (message.type === 'frames-rendered') {
17
+ overallProgress.setFrames({
18
+ index: payload.chunk,
19
+ encoded: message.payload.encoded,
20
+ rendered: message.payload.rendered,
21
+ });
22
+ return;
23
+ }
24
+ if (message.type === 'video-chunk-rendered') {
25
+ const filename = (0, path_1.join)(outdir, (0, defaults_1.chunkKeyForIndex)({
26
+ index: payload.chunk,
27
+ type: 'video',
28
+ }));
29
+ (0, fs_1.writeFileSync)(filename, message.payload);
30
+ files.push(filename);
31
+ return;
32
+ }
33
+ if (message.type === 'audio-chunk-rendered') {
34
+ const filename = (0, path_1.join)(outdir, (0, defaults_1.chunkKeyForIndex)({
35
+ index: payload.chunk,
36
+ type: 'audio',
37
+ }));
38
+ (0, fs_1.writeFileSync)(filename, message.payload);
39
+ files.push(filename);
40
+ return;
41
+ }
42
+ if (message.type === 'chunk-complete') {
43
+ overallProgress.addChunkCompleted(payload.chunk);
44
+ return;
45
+ }
46
+ if (message.type === 'error-occurred') {
47
+ overallProgress.setFrames({
48
+ encoded: 0,
49
+ index: payload.chunk,
50
+ rendered: 0,
51
+ });
52
+ renderer_1.RenderInternals.Log.error({
53
+ indent: false,
54
+ logLevel,
55
+ }, `Renderer function of chunk ${payload.chunk} failed with error: ${message.payload.error}`);
56
+ renderer_1.RenderInternals.Log.error({
57
+ indent: false,
58
+ logLevel,
59
+ }, `Will retry chunk = ${message.payload.shouldRetry}`);
60
+ resolve({
61
+ type: 'error',
62
+ error: message.payload.error,
63
+ shouldRetry: message.payload.shouldRetry,
64
+ });
65
+ }
66
+ throw new Error(`Unknown message type ${message.type}`);
67
+ };
68
+ (0, call_lambda_1.callLambdaWithStreaming)({
69
+ functionName,
70
+ payload,
71
+ retriesRemaining: 1,
72
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
73
+ timeoutInTest: 12000,
74
+ type: defaults_1.LambdaRoutines.renderer,
75
+ receivedStreamingPayload,
76
+ })
77
+ .then(() => {
78
+ resolve({
79
+ type: 'success',
80
+ });
81
+ })
82
+ .catch((err) => {
83
+ resolve({
84
+ type: 'error',
85
+ error: err.stack,
86
+ shouldRetry: false,
87
+ });
88
+ });
89
+ });
90
+ };
91
+ const streamRendererFunctionWithRetry = async ({ payload, files, functionName, outdir, overallProgress, logLevel, }) => {
92
+ if (payload.type !== defaults_1.LambdaRoutines.renderer) {
93
+ throw new Error('Expected renderer type');
94
+ }
95
+ const result = await streamRenderer({
96
+ files,
97
+ functionName,
98
+ outdir,
99
+ overallProgress,
100
+ payload,
101
+ logLevel,
102
+ });
103
+ if (result.type === 'error') {
104
+ if (!result.shouldRetry) {
105
+ throw result.error;
106
+ }
107
+ return (0, exports.streamRendererFunctionWithRetry)({
108
+ files,
109
+ functionName,
110
+ outdir,
111
+ overallProgress,
112
+ payload: {
113
+ ...payload,
114
+ attempt: payload.attempt + 1,
115
+ retriesLeft: payload.retriesLeft - 1,
116
+ },
117
+ logLevel,
118
+ });
119
+ }
120
+ };
121
+ exports.streamRendererFunctionWithRetry = streamRendererFunctionWithRetry;
@@ -4,16 +4,16 @@ declare const streamingPayloadSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObje
4
4
  type: z.ZodLiteral<"render-id-determined">;
5
5
  renderId: z.ZodString;
6
6
  }, "strip", z.ZodTypeAny, {
7
- renderId: string;
8
7
  type: "render-id-determined";
9
- }, {
10
8
  renderId: string;
9
+ }, {
11
10
  type: "render-id-determined";
11
+ renderId: string;
12
12
  }>]>;
13
13
  export type StreamingPayloads = z.infer<typeof streamingPayloadSchema>;
14
14
  export declare const isStreamingPayload: (str: string) => false | {
15
- renderId: string;
16
15
  type: "render-id-determined";
16
+ renderId: string;
17
17
  };
18
18
  export declare const sendProgressEvent: (responseStream: ResponseStream, payload: StreamingPayloads) => void;
19
19
  export {};
@@ -13,7 +13,6 @@ const streamify_response_1 = require("./helpers/streamify-response");
13
13
  const streaming_payloads_1 = require("./helpers/streaming-payloads");
14
14
  const info_1 = require("./info");
15
15
  const launch_1 = require("./launch");
16
- const merge_1 = require("./merge");
17
16
  const progress_1 = require("./progress");
18
17
  const renderer_2 = require("./renderer");
19
18
  const start_1 = require("./start");
@@ -124,18 +123,6 @@ const innerHandler = async (params, responseStream, context) => {
124
123
  });
125
124
  return;
126
125
  }
127
- if (params.type === constants_1.LambdaRoutines.merge) {
128
- (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.merge, {
129
- renderId: params.renderId,
130
- isWarm,
131
- }, params.logLevel);
132
- const response = await (0, merge_1.mergeHandler)(params, {
133
- expectedBucketOwner: currentUserId,
134
- });
135
- responseStream.write(JSON.stringify(response), () => {
136
- responseStream.end();
137
- });
138
- }
139
126
  if (params.type === constants_1.LambdaRoutines.compositions) {
140
127
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.compositions, {
141
128
  isWarm,
@@ -9,7 +9,6 @@ const aws_clients_1 = require("../shared/aws-clients");
9
9
  const compress_props_1 = require("../shared/compress-props");
10
10
  const constants_1 = require("../shared/constants");
11
11
  const docs_url_1 = require("../shared/docs-url");
12
- const get_aws_urls_1 = require("../shared/get-aws-urls");
13
12
  const invoke_webhook_1 = require("../shared/invoke-webhook");
14
13
  const validate_1 = require("../shared/validate");
15
14
  const validate_frames_per_lambda_1 = require("../shared/validate-frames-per-lambda");
@@ -54,7 +53,7 @@ const callFunctionWithRetry = async ({ payload, retries, functionName, }) => {
54
53
  throw err;
55
54
  }
56
55
  };
57
- const innerLaunchHandler = async ({ functionName, params, options, onAllChunksAvailable, }) => {
56
+ const innerLaunchHandler = async ({ functionName, params, options, }) => {
58
57
  var _a, _b, _c, _d, _e;
59
58
  if (params.type !== constants_1.LambdaRoutines.launch) {
60
59
  throw new Error('Expected launch type');
@@ -288,7 +287,6 @@ const innerLaunchHandler = async ({ functionName, params, options, onAllChunksAv
288
287
  inputProps: params.inputProps,
289
288
  serializedResolvedProps,
290
289
  renderMetadata,
291
- onAllChunks: onAllChunksAvailable,
292
290
  audioBitrate: params.audioBitrate,
293
291
  logLevel: params.logLevel,
294
292
  framesPerLambda,
@@ -303,7 +301,6 @@ const launchHandler = async (params, options) => {
303
301
  if (params.type !== constants_1.LambdaRoutines.launch) {
304
302
  throw new Error('Expected launch type');
305
303
  }
306
- let allChunksAvailable = null;
307
304
  const functionName = (_a = params.rendererFunctionName) !== null && _a !== void 0 ? _a : process.env.AWS_LAMBDA_FUNCTION_NAME;
308
305
  const logOptions = {
309
306
  indent: false,
@@ -311,62 +308,6 @@ const launchHandler = async (params, options) => {
311
308
  };
312
309
  const onTimeout = async () => {
313
310
  var _a;
314
- if (allChunksAvailable) {
315
- renderer_1.RenderInternals.Log.info(logOptions, 'All chunks are available, but the function is about to time out.');
316
- renderer_1.RenderInternals.Log.info(logOptions, 'Spawning another function to merge chunks.');
317
- try {
318
- await callFunctionWithRetry({
319
- functionName,
320
- payload: {
321
- type: constants_1.LambdaRoutines.merge,
322
- renderId: params.renderId,
323
- bucketName: params.bucketName,
324
- outName: params.outName,
325
- serializedResolvedProps: allChunksAvailable.serializedResolvedProps,
326
- inputProps: allChunksAvailable.inputProps,
327
- logLevel: params.logLevel,
328
- framesPerLambda: allChunksAvailable.framesPerLambda,
329
- preferLossless: params.preferLossless,
330
- compositionStart: allChunksAvailable.compositionStart,
331
- },
332
- retries: 2,
333
- });
334
- renderer_1.RenderInternals.Log.info(logOptions, `New function successfully invoked. See the CloudWatch logs for it:`);
335
- renderer_1.RenderInternals.Log.info(logOptions, (0, get_aws_urls_1.getCloudwatchMethodUrl)({
336
- functionName: process.env.AWS_LAMBDA_FUNCTION_NAME,
337
- method: constants_1.LambdaRoutines.merge,
338
- region: (0, get_current_region_1.getCurrentRegionInFunction)(),
339
- rendererFunctionName: params.rendererFunctionName,
340
- renderId: params.renderId,
341
- }));
342
- renderer_1.RenderInternals.Log.info(logOptions, 'This function will now time out.');
343
- }
344
- catch (err) {
345
- if (process.env.NODE_ENV === 'test') {
346
- throw err;
347
- }
348
- renderer_1.RenderInternals.Log.error({ indent: false, logLevel: params.logLevel }, 'Failed to invoke additional function to merge videos:');
349
- renderer_1.RenderInternals.Log.error({ indent: false, logLevel: params.logLevel }, err);
350
- await (0, write_lambda_error_1.writeLambdaError)({
351
- bucketName: params.bucketName,
352
- errorInfo: {
353
- type: 'stitcher',
354
- message: err.message,
355
- name: err.name,
356
- stack: err.stack,
357
- tmpDir: null,
358
- frame: 0,
359
- chunk: 0,
360
- isFatal: false,
361
- attempt: 1,
362
- willRetry: false,
363
- totalAttempts: 1,
364
- },
365
- renderId: params.renderId,
366
- expectedBucketOwner: options.expectedBucketOwner,
367
- });
368
- }
369
- }
370
311
  if (!params.webhook) {
371
312
  return;
372
313
  }
@@ -422,14 +363,6 @@ const launchHandler = async (params, options) => {
422
363
  functionName,
423
364
  params,
424
365
  options,
425
- onAllChunksAvailable: ({ inputProps, serializedResolvedProps, framesPerLambda, compositionStart, }) => {
426
- allChunksAvailable = {
427
- inputProps,
428
- serializedResolvedProps,
429
- framesPerLambda,
430
- compositionStart,
431
- };
432
- },
433
366
  });
434
367
  clearTimeout(webhookDueToTimeout);
435
368
  if (!params.webhook || webhookInvoked) {
@@ -0,0 +1,6 @@
1
+ import type { ResponseStream } from '../helpers/streamify-response';
2
+ export type ResponseStreamWriter = {
3
+ write: (message: Uint8Array) => Promise<void>;
4
+ end: () => Promise<void>;
5
+ };
6
+ export declare const streamWriter: (responseStream: ResponseStream) => ResponseStreamWriter;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.streamWriter = void 0;
4
+ // Ensures that the previous write is finished before the next one is started
5
+ // Genius solution by ChatGPT
6
+ const streamWriter = (responseStream) => {
7
+ let promiseChain = Promise.resolve();
8
+ const write = (message) => {
9
+ promiseChain = promiseChain.then(() => {
10
+ return new Promise((resolve, reject) => {
11
+ responseStream.write(message, (err) => {
12
+ if (err) {
13
+ reject(err);
14
+ }
15
+ else {
16
+ resolve();
17
+ }
18
+ });
19
+ });
20
+ });
21
+ return promiseChain;
22
+ };
23
+ const end = () => {
24
+ promiseChain = promiseChain.then(() => {
25
+ return new Promise((resolve) => {
26
+ responseStream.end(() => {
27
+ resolve();
28
+ });
29
+ });
30
+ });
31
+ return promiseChain;
32
+ };
33
+ return { write, end };
34
+ };
35
+ exports.streamWriter = streamWriter;
@@ -0,0 +1,79 @@
1
+ /// <reference types="node" />
2
+ import type { RenderStillLambdaResponsePayload } from '../still';
3
+ declare const framesRendered: "frames-rendered";
4
+ declare const errorOccurred: "error-occurred";
5
+ declare const renderIdDetermined: "render-id-determined";
6
+ declare const videoChunkRendered: "video-chunk-rendered";
7
+ declare const audioChunkRendered: "audio-chunk-rendered";
8
+ declare const chunkComplete: "chunk-complete";
9
+ declare const stillRendered: "still-rendered";
10
+ declare const messageTypes: {
11
+ readonly '1': {
12
+ readonly type: "frames-rendered";
13
+ };
14
+ readonly '2': {
15
+ readonly type: "error-occurred";
16
+ };
17
+ readonly '3': {
18
+ readonly type: "render-id-determined";
19
+ };
20
+ readonly '4': {
21
+ readonly type: "video-chunk-rendered";
22
+ };
23
+ readonly '5': {
24
+ readonly type: "audio-chunk-rendered";
25
+ };
26
+ readonly '6': {
27
+ readonly type: "still-rendered";
28
+ };
29
+ readonly '7': {
30
+ readonly type: "chunk-complete";
31
+ };
32
+ };
33
+ export type MessageTypeId = keyof typeof messageTypes;
34
+ type MessageType = (typeof messageTypes)[MessageTypeId]['type'];
35
+ export declare const formatMap: {
36
+ [key in MessageType]: 'json' | 'binary';
37
+ };
38
+ export type StreamingPayload = {
39
+ type: typeof framesRendered;
40
+ payload: {
41
+ rendered: number;
42
+ encoded: number;
43
+ };
44
+ } | {
45
+ type: typeof videoChunkRendered;
46
+ payload: Buffer;
47
+ } | {
48
+ type: typeof audioChunkRendered;
49
+ payload: Buffer;
50
+ } | {
51
+ type: typeof errorOccurred;
52
+ payload: {
53
+ error: string;
54
+ shouldRetry: boolean;
55
+ };
56
+ } | {
57
+ type: typeof renderIdDetermined;
58
+ payload: {
59
+ renderId: string;
60
+ };
61
+ } | {
62
+ type: typeof stillRendered;
63
+ payload: RenderStillLambdaResponsePayload;
64
+ } | {
65
+ type: typeof chunkComplete;
66
+ payload: {};
67
+ };
68
+ export declare const messageTypeIdToMessageType: (messageTypeId: MessageTypeId) => MessageType;
69
+ export declare const messageTypeToMessageId: (messageType: MessageType) => MessageTypeId;
70
+ export type StreamingMessage = {
71
+ successType: 'error' | 'success';
72
+ message: StreamingPayload;
73
+ };
74
+ export type OnMessage = (options: StreamingMessage) => void;
75
+ export type OnStream = (payload: StreamingPayload) => void;
76
+ export declare const makeStreamPayload: ({ message }: {
77
+ message: StreamingPayload;
78
+ }) => Uint8Array;
79
+ export {};
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeStreamPayload = exports.messageTypeToMessageId = exports.messageTypeIdToMessageType = exports.formatMap = void 0;
4
+ const client_1 = require("@remotion/renderer/client");
5
+ const framesRendered = 'frames-rendered';
6
+ const errorOccurred = 'error-occurred';
7
+ const renderIdDetermined = 'render-id-determined';
8
+ const videoChunkRendered = 'video-chunk-rendered';
9
+ const audioChunkRendered = 'audio-chunk-rendered';
10
+ const chunkComplete = 'chunk-complete';
11
+ const stillRendered = 'still-rendered';
12
+ const messageTypes = {
13
+ '1': { type: framesRendered },
14
+ '2': { type: errorOccurred },
15
+ '3': { type: renderIdDetermined },
16
+ '4': { type: videoChunkRendered },
17
+ '5': { type: audioChunkRendered },
18
+ '6': { type: stillRendered },
19
+ '7': { type: chunkComplete },
20
+ };
21
+ exports.formatMap = {
22
+ [framesRendered]: 'json',
23
+ [errorOccurred]: 'json',
24
+ [renderIdDetermined]: 'json',
25
+ [videoChunkRendered]: 'binary',
26
+ [audioChunkRendered]: 'binary',
27
+ [stillRendered]: 'json',
28
+ [chunkComplete]: 'json',
29
+ };
30
+ const messageTypeIdToMessageType = (messageTypeId) => {
31
+ const types = messageTypes[messageTypeId];
32
+ if (!types) {
33
+ throw new Error(`Unknown message type id ${messageTypeId}`);
34
+ }
35
+ return types.type;
36
+ };
37
+ exports.messageTypeIdToMessageType = messageTypeIdToMessageType;
38
+ const messageTypeToMessageId = (messageType) => {
39
+ const id = Object.keys(messageTypes).find((key) => messageTypes[key].type === messageType);
40
+ if (!id) {
41
+ throw new Error(`Unknown message type ${messageType}`);
42
+ }
43
+ return id;
44
+ };
45
+ exports.messageTypeToMessageId = messageTypeToMessageId;
46
+ const makeStreamPayload = ({ message }) => {
47
+ const body = exports.formatMap[message.type] === 'json'
48
+ ? Buffer.from(JSON.stringify(message.payload))
49
+ : message.payload;
50
+ return client_1.BrowserSafeApis.makeStreamPayloadMessage({
51
+ body,
52
+ nonce: (0, exports.messageTypeToMessageId)(message.type),
53
+ status: 0,
54
+ });
55
+ };
56
+ exports.makeStreamPayload = makeStreamPayload;
@@ -1,5 +1,5 @@
1
1
  export declare const LambdaInternals: {
2
- executeCommand: (args: string[], remotionRoot: string, logLevel: "verbose" | "info" | "warn" | "error") => Promise<void>;
2
+ executeCommand: (args: string[], remotionRoot: string, logLevel: "error" | "verbose" | "info" | "warn") => Promise<void>;
3
3
  makeLambdaRenderMediaPayload: ({ rendererFunctionName, frameRange, framesPerLambda, forceBucketName: bucketName, codec, composition, serveUrl, imageFormat, inputProps, region, crf, envVariables, pixelFormat, proResProfile, x264Preset, maxRetries, privacy, logLevel, outName, timeoutInMilliseconds, chromiumOptions, scale, everyNthFrame, numberOfGifLoops, audioBitrate, concurrencyPerLambda, audioCodec, forceHeight, forceWidth, webhook, videoBitrate, encodingMaxRate, encodingBufferSize, downloadBehavior, muted, overwrite, jpegQuality, offthreadVideoCacheSizeInBytes, deleteAfter, colorSpace, preferLossless, }: import("./api/make-lambda-payload").InnerRenderMediaOnLambdaInput) => Promise<import("./defaults").LambdaStartPayload>;
4
4
  getRenderProgressPayload: ({ bucketName, renderId, s3OutputProvider, logLevel, }: import(".").GetRenderProgressInput) => import("./defaults").LambdaStatusPayload;
5
5
  makeLambdaRenderStillPayload: ({ serveUrl, inputProps, imageFormat, envVariables, quality, jpegQuality, region, maxRetries, composition, privacy, frame, logLevel, outName, timeoutInMilliseconds, chromiumOptions, scale, downloadBehavior, forceHeight, forceWidth, forceBucketName, offthreadVideoCacheSizeInBytes, deleteAfter, }: import("./api/render-still-on-lambda").RenderStillOnLambdaNonNullInput) => Promise<{
@@ -14,7 +14,7 @@ export declare const LambdaInternals: {
14
14
  maxRetries: number;
15
15
  frame: number;
16
16
  privacy: import("./defaults").Privacy;
17
- logLevel: "verbose" | "info" | "warn" | "error";
17
+ logLevel: "error" | "verbose" | "info" | "warn";
18
18
  outName: import("./defaults").OutNameInput | null;
19
19
  timeoutInMilliseconds: number;
20
20
  chromiumOptions: import("@remotion/renderer").ChromiumOptions;
@@ -56,11 +56,11 @@ export declare const LambdaInternals: {
56
56
  getValue: ({ commandLine }: {
57
57
  commandLine: Record<string, unknown>;
58
58
  }) => {
59
- value: "verbose" | "info" | "warn" | "error";
59
+ value: "error" | "verbose" | "info" | "warn";
60
60
  source: string;
61
61
  };
62
- setConfig: (newLogLevel: "verbose" | "info" | "warn" | "error") => void;
63
- type: "verbose" | "info" | "warn" | "error";
62
+ setConfig: (newLogLevel: "error" | "verbose" | "info" | "warn") => void;
63
+ type: "error" | "verbose" | "info" | "warn";
64
64
  };
65
65
  readonly throwIfSiteExists: {
66
66
  cliFlag: string;
@@ -96,8 +96,7 @@ export declare enum LambdaRoutines {
96
96
  status = "status",
97
97
  renderer = "renderer",
98
98
  still = "still",
99
- compositions = "compositions",
100
- merge = "merge"
99
+ compositions = "compositions"
101
100
  }
102
101
  type Prettify<T> = {
103
102
  [K in keyof T]: T[K];
@@ -301,18 +300,6 @@ export type LambdaPayloads = {
301
300
  bucketName: string | null;
302
301
  offthreadVideoCacheSizeInBytes: number | null;
303
302
  };
304
- merge: {
305
- type: LambdaRoutines.merge;
306
- bucketName: string;
307
- renderId: string;
308
- outName: OutNameInput | null;
309
- inputProps: SerializedInputProps;
310
- serializedResolvedProps: SerializedInputProps;
311
- logLevel: LogLevel;
312
- framesPerLambda: number;
313
- preferLossless: boolean;
314
- compositionStart: number;
315
- };
316
303
  };
317
304
  export type LambdaPayload = LambdaPayloads[LambdaRoutines];
318
305
  export type EncodingProgress = {
@@ -102,6 +102,5 @@ var LambdaRoutines;
102
102
  LambdaRoutines["renderer"] = "renderer";
103
103
  LambdaRoutines["still"] = "still";
104
104
  LambdaRoutines["compositions"] = "compositions";
105
- LambdaRoutines["merge"] = "merge";
106
105
  })(LambdaRoutines || (exports.LambdaRoutines = LambdaRoutines = {}));
107
106
  exports.LAMBDA_CONCURRENCY_LIMIT_QUOTA = 'L-B99A9384';
@@ -1,7 +1,6 @@
1
1
  import type { compositionsHandler } from '../functions/compositions';
2
2
  import type { infoHandler } from '../functions/info';
3
3
  import type { launchHandler } from '../functions/launch';
4
- import type { mergeHandler } from '../functions/merge';
5
4
  import type { progressHandler } from '../functions/progress';
6
5
  import type { rendererHandler } from '../functions/renderer';
7
6
  import type { startHandler } from '../functions/start';
@@ -20,5 +19,4 @@ export interface LambdaReturnValues {
20
19
  [LambdaRoutines.info]: ReturnType<typeof infoHandler>;
21
20
  [LambdaRoutines.still]: ReturnType<typeof stillHandler>;
22
21
  [LambdaRoutines.compositions]: ReturnType<typeof compositionsHandler>;
23
- [LambdaRoutines.merge]: ReturnType<typeof mergeHandler>;
24
22
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/lambda",
3
- "version": "4.0.163",
3
+ "version": "4.0.164",
4
4
  "description": "Distributed renderer for Remotion based on AWS Lambda",
5
5
  "main": "dist/index.js",
6
6
  "sideEffects": false,
@@ -25,10 +25,10 @@
25
25
  "@aws-sdk/s3-request-presigner": "3.382.0",
26
26
  "mime-types": "2.1.34",
27
27
  "zod": "3.22.3",
28
- "@remotion/bundler": "4.0.163",
29
- "@remotion/renderer": "4.0.163",
30
- "@remotion/cli": "4.0.163",
31
- "remotion": "4.0.163"
28
+ "@remotion/bundler": "4.0.164",
29
+ "@remotion/renderer": "4.0.164",
30
+ "@remotion/cli": "4.0.164",
31
+ "remotion": "4.0.164"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@jonny/eslint-config": "3.0.281",
@@ -44,11 +44,11 @@
44
44
  "ts-node": "10.9.2",
45
45
  "vitest": "0.31.1",
46
46
  "zip-lib": "^0.7.2",
47
- "@remotion/compositor-linux-arm64-gnu": "4.0.163",
48
- "@remotion/bundler": "4.0.163"
47
+ "@remotion/bundler": "4.0.164",
48
+ "@remotion/compositor-linux-arm64-gnu": "4.0.164"
49
49
  },
50
50
  "peerDependencies": {
51
- "@remotion/bundler": "4.0.163"
51
+ "@remotion/bundler": "4.0.164"
52
52
  },
53
53
  "publishConfig": {
54
54
  "access": "public"
Binary file