@remotion/lambda 4.0.188 → 4.0.191
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/dist/api/make-lambda-payload.js +2 -1
- package/dist/functions/helpers/check-if-render-exists.d.ts +3 -0
- package/dist/functions/helpers/check-if-render-exists.js +15 -0
- package/dist/functions/helpers/delete-chunks.d.ts +9 -0
- package/dist/functions/helpers/delete-chunks.js +25 -0
- package/dist/functions/helpers/expected-out-name.d.ts +1 -1
- package/dist/functions/helpers/get-browser-instance.d.ts +2 -3
- package/dist/functions/helpers/get-browser-instance.js +4 -3
- package/dist/functions/helpers/get-cleanup-progress.d.ts +10 -0
- package/dist/functions/helpers/get-cleanup-progress.js +35 -0
- package/dist/functions/helpers/get-custom-out-name.d.ts +1 -1
- package/dist/functions/helpers/get-encoding-metadata.d.ts +7 -0
- package/dist/functions/helpers/get-encoding-metadata.js +15 -0
- package/dist/functions/helpers/get-encoding-progress-step-size.d.ts +1 -0
- package/dist/functions/helpers/get-encoding-progress-step-size.js +7 -0
- package/dist/functions/helpers/get-files-to-delete.d.ts +10 -0
- package/dist/functions/helpers/get-files-to-delete.js +52 -0
- package/dist/functions/helpers/get-final-encoding-status.d.ts +6 -0
- package/dist/functions/helpers/get-final-encoding-status.js +18 -0
- package/dist/functions/helpers/get-folder-size.d.ts +1 -0
- package/dist/functions/helpers/get-folder-size.js +8 -0
- package/dist/functions/helpers/get-lambdas-invoked-stats.d.ts +8 -0
- package/dist/functions/helpers/get-lambdas-invoked-stats.js +14 -0
- package/dist/functions/helpers/get-post-render-data.d.ts +8 -0
- package/dist/functions/helpers/get-post-render-data.js +22 -0
- package/dist/functions/helpers/get-render-metadata.d.ts +8 -0
- package/dist/functions/helpers/get-render-metadata.js +17 -0
- package/dist/functions/helpers/get-rendered-frames-progress.d.ts +8 -0
- package/dist/functions/helpers/get-rendered-frames-progress.js +37 -0
- package/dist/functions/helpers/get-time-to-finish.d.ts +5 -0
- package/dist/functions/helpers/get-time-to-finish.js +13 -0
- package/dist/functions/helpers/io.d.ts +33 -3
- package/dist/functions/helpers/io.js +104 -3
- package/dist/functions/helpers/print-cloudwatch-helper.d.ts +1 -1
- package/dist/functions/helpers/print-cloudwatch-helper.js +3 -3
- package/dist/functions/helpers/streaming-payloads.d.ts +19 -0
- package/dist/functions/helpers/streaming-payloads.js +25 -0
- package/dist/functions/helpers/write-lambda-error.d.ts +3 -2
- package/dist/functions/helpers/write-lambda-error.js +2 -3
- package/dist/functions/helpers/write-post-render-data.d.ts +9 -0
- package/dist/functions/helpers/write-post-render-data.js +18 -0
- package/dist/functions/launch.js +1 -0
- package/dist/functions/merge.d.ts +9 -0
- package/dist/functions/merge.js +61 -0
- package/dist/functions/renderer.js +12 -1
- package/dist/functions/still.js +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/internals.d.ts +2 -0
- package/dist/shared/chunk-progress.d.ts +9 -0
- package/dist/shared/chunk-progress.js +2034 -0
- package/dist/shared/compress-props.d.ts +6 -8
- package/dist/shared/compress-props.js +14 -11
- package/dist/shared/parse-chunk-key.d.ts +5 -0
- package/dist/shared/parse-chunk-key.js +15 -0
- package/dist/shared/parse-lambda-initialized-key.d.ts +5 -0
- package/dist/shared/parse-lambda-initialized-key.js +15 -0
- package/dist/shared/serialize-props.d.ts +14 -0
- package/dist/shared/serialize-props.js +36 -0
- package/package.json +11 -11
- package/remotionlambda-arm64.zip +0 -0
- package/dist/functions/provider-implementation.d.ts +0 -0
- package/dist/functions/provider-implementation.js +0 -1
|
@@ -1,10 +1,111 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.lambdaHeadCommand = void 0;
|
|
6
|
+
exports.lambdaHeadCommand = exports.lambdaReadFile = exports.lambdaWriteFile = exports.lambdaDeleteFile = exports.lambdaLs = void 0;
|
|
4
7
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
5
|
-
const
|
|
8
|
+
const mime_types_1 = __importDefault(require("mime-types"));
|
|
9
|
+
const aws_clients_1 = require("../../shared/aws-clients");
|
|
10
|
+
const content_disposition_header_1 = require("../../shared/content-disposition-header");
|
|
11
|
+
const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, continuationToken, }) => {
|
|
12
|
+
var _a, _b, _c;
|
|
13
|
+
try {
|
|
14
|
+
const list = await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.ListObjectsV2Command({
|
|
15
|
+
Bucket: bucketName,
|
|
16
|
+
Prefix: prefix,
|
|
17
|
+
ExpectedBucketOwner: expectedBucketOwner !== null && expectedBucketOwner !== void 0 ? expectedBucketOwner : undefined,
|
|
18
|
+
ContinuationToken: continuationToken,
|
|
19
|
+
}));
|
|
20
|
+
if (list.NextContinuationToken) {
|
|
21
|
+
return [
|
|
22
|
+
...((_a = list.Contents) !== null && _a !== void 0 ? _a : []),
|
|
23
|
+
...(await (0, exports.lambdaLs)({
|
|
24
|
+
bucketName,
|
|
25
|
+
prefix,
|
|
26
|
+
expectedBucketOwner,
|
|
27
|
+
region,
|
|
28
|
+
continuationToken: list.NextContinuationToken,
|
|
29
|
+
})),
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
return (_b = list.Contents) !== null && _b !== void 0 ? _b : [];
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (!expectedBucketOwner) {
|
|
36
|
+
throw err;
|
|
37
|
+
}
|
|
38
|
+
// Prevent from accessing a foreign bucket, retry without ExpectedBucketOwner and see if it works. If it works then it's an owner mismatch.
|
|
39
|
+
if ((_c = err.stack) === null || _c === void 0 ? void 0 : _c.includes('AccessDenied')) {
|
|
40
|
+
await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.ListObjectsV2Command({
|
|
41
|
+
Bucket: bucketName,
|
|
42
|
+
Prefix: prefix,
|
|
43
|
+
}));
|
|
44
|
+
throw new Error(`Bucket owner mismatch: Expected the bucket ${bucketName} to be owned by you (AWS Account ID: ${expectedBucketOwner}) but it's not the case. Did you accidentially specify the wrong bucket?`);
|
|
45
|
+
}
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
exports.lambdaLs = lambdaLs;
|
|
50
|
+
const lambdaDeleteFile = async ({ bucketName, key, region, customCredentials, }) => {
|
|
51
|
+
await (0, aws_clients_1.getS3Client)(region, customCredentials).send(new client_s3_1.DeleteObjectCommand({
|
|
52
|
+
Bucket: bucketName,
|
|
53
|
+
Key: key,
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
exports.lambdaDeleteFile = lambdaDeleteFile;
|
|
57
|
+
const tryLambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, customCredentials, }) => {
|
|
58
|
+
await (0, aws_clients_1.getS3Client)(region, customCredentials).send(new client_s3_1.PutObjectCommand({
|
|
59
|
+
Bucket: bucketName,
|
|
60
|
+
Key: key,
|
|
61
|
+
Body: body,
|
|
62
|
+
ACL: privacy === 'no-acl'
|
|
63
|
+
? undefined
|
|
64
|
+
: privacy === 'private'
|
|
65
|
+
? 'private'
|
|
66
|
+
: 'public-read',
|
|
67
|
+
ExpectedBucketOwner: customCredentials
|
|
68
|
+
? undefined
|
|
69
|
+
: expectedBucketOwner !== null && expectedBucketOwner !== void 0 ? expectedBucketOwner : undefined,
|
|
70
|
+
ContentType: mime_types_1.default.lookup(key) || 'application/octet-stream',
|
|
71
|
+
ContentDisposition: (0, content_disposition_header_1.getContentDispositionHeader)(downloadBehavior),
|
|
72
|
+
}));
|
|
73
|
+
};
|
|
74
|
+
const lambdaWriteFile = async (params) => {
|
|
75
|
+
var _a;
|
|
76
|
+
const remainingRetries = (_a = params.retries) !== null && _a !== void 0 ? _a : 2;
|
|
77
|
+
try {
|
|
78
|
+
await tryLambdaWriteFile(params);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (remainingRetries === 0) {
|
|
82
|
+
throw err;
|
|
83
|
+
}
|
|
84
|
+
const backoff = 2 ** (2 - remainingRetries) * 2000;
|
|
85
|
+
await new Promise((resolve) => {
|
|
86
|
+
setTimeout(resolve, backoff);
|
|
87
|
+
});
|
|
88
|
+
console.warn('Failed to write file to Lambda:');
|
|
89
|
+
console.warn(err);
|
|
90
|
+
console.warn(`Retrying (${remainingRetries} retries remaining)...`);
|
|
91
|
+
return (0, exports.lambdaWriteFile)({
|
|
92
|
+
...params,
|
|
93
|
+
retries: remainingRetries - 1,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
exports.lambdaWriteFile = lambdaWriteFile;
|
|
98
|
+
const lambdaReadFile = async ({ bucketName, key, region, expectedBucketOwner, }) => {
|
|
99
|
+
const { Body } = await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.GetObjectCommand({
|
|
100
|
+
Bucket: bucketName,
|
|
101
|
+
Key: key,
|
|
102
|
+
ExpectedBucketOwner: expectedBucketOwner,
|
|
103
|
+
}));
|
|
104
|
+
return Body;
|
|
105
|
+
};
|
|
106
|
+
exports.lambdaReadFile = lambdaReadFile;
|
|
6
107
|
const lambdaHeadCommand = async ({ bucketName, key, region, customCredentials, }) => {
|
|
7
|
-
const head = await (0,
|
|
108
|
+
const head = await (0, aws_clients_1.getS3Client)(region, customCredentials).send(new client_s3_1.HeadObjectCommand({
|
|
8
109
|
Bucket: bucketName,
|
|
9
110
|
Key: key,
|
|
10
111
|
}));
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LogLevel } from '@remotion/renderer';
|
|
2
2
|
import type { ServerlessRoutines } from '@remotion/serverless/client';
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const printLoggingGrepHelper: (type: ServerlessRoutines, data: Record<string, string | boolean>, logLevel: LogLevel) => void;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.printLoggingGrepHelper = void 0;
|
|
4
4
|
const renderer_1 = require("@remotion/renderer");
|
|
5
|
-
const
|
|
5
|
+
const printLoggingGrepHelper = (type, data, logLevel) => {
|
|
6
6
|
const d = Object.keys(data).reduce((a, b) => {
|
|
7
7
|
return [...a, `${b}=${data[b]}`];
|
|
8
8
|
}, []);
|
|
9
9
|
const msg = [`method=${type}`, ...d].join(',');
|
|
10
10
|
renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, msg);
|
|
11
11
|
};
|
|
12
|
-
exports.
|
|
12
|
+
exports.printLoggingGrepHelper = printLoggingGrepHelper;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ResponseStream } from './streamify-response';
|
|
3
|
+
declare const streamingPayloadSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
4
|
+
type: z.ZodLiteral<"render-id-determined">;
|
|
5
|
+
renderId: z.ZodString;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
type: "render-id-determined";
|
|
8
|
+
renderId: string;
|
|
9
|
+
}, {
|
|
10
|
+
type: "render-id-determined";
|
|
11
|
+
renderId: string;
|
|
12
|
+
}>]>;
|
|
13
|
+
export type StreamingPayloads = z.infer<typeof streamingPayloadSchema>;
|
|
14
|
+
export declare const isStreamingPayload: (str: string) => false | {
|
|
15
|
+
type: "render-id-determined";
|
|
16
|
+
renderId: string;
|
|
17
|
+
};
|
|
18
|
+
export declare const sendProgressEvent: (responseStream: ResponseStream, payload: StreamingPayloads) => void;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendProgressEvent = exports.isStreamingPayload = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const streamingPayloadSchema = zod_1.z.discriminatedUnion('type', [
|
|
6
|
+
zod_1.z.object({
|
|
7
|
+
type: zod_1.z.literal('render-id-determined'),
|
|
8
|
+
renderId: zod_1.z.string(),
|
|
9
|
+
}),
|
|
10
|
+
]);
|
|
11
|
+
const isStreamingPayload = (str) => {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(str);
|
|
14
|
+
return streamingPayloadSchema.parse(parsed);
|
|
15
|
+
}
|
|
16
|
+
catch (_a) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.isStreamingPayload = isStreamingPayload;
|
|
21
|
+
const sendProgressEvent = (responseStream, payload) => {
|
|
22
|
+
const stringified = JSON.stringify(payload);
|
|
23
|
+
responseStream.write(stringified);
|
|
24
|
+
};
|
|
25
|
+
exports.sendProgressEvent = sendProgressEvent;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ProviderSpecifics } from '@remotion/serverless';
|
|
2
|
+
import type { FileNameAndSize } from '@remotion/serverless/client';
|
|
2
3
|
export type LambdaErrorInfo = {
|
|
3
4
|
type: 'renderer' | 'browser' | 'stitcher' | 'webhook' | 'artifact';
|
|
4
5
|
message: string;
|
|
@@ -15,7 +16,7 @@ export type LambdaErrorInfo = {
|
|
|
15
16
|
total: number;
|
|
16
17
|
} | null;
|
|
17
18
|
};
|
|
18
|
-
export declare const getTmpDirStateIfENoSp: (err: string) => LambdaErrorInfo['tmpDir'];
|
|
19
|
+
export declare const getTmpDirStateIfENoSp: <Region extends string>(err: string, providerSpecifics: ProviderSpecifics<Region>) => LambdaErrorInfo['tmpDir'];
|
|
19
20
|
export type EnhancedErrorInfo = LambdaErrorInfo & {
|
|
20
21
|
/**
|
|
21
22
|
* @deprecated Will always be an empty string.
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getTmpDirStateIfENoSp = void 0;
|
|
4
|
-
const get_files_in_folder_1 = require("./get-files-in-folder");
|
|
5
4
|
const is_enosp_err_1 = require("./is-enosp-err");
|
|
6
|
-
const getTmpDirStateIfENoSp = (err) => {
|
|
5
|
+
const getTmpDirStateIfENoSp = (err, providerSpecifics) => {
|
|
7
6
|
if (!(0, is_enosp_err_1.errorIsOutOfSpaceError)(err)) {
|
|
8
7
|
return null;
|
|
9
8
|
}
|
|
10
|
-
const files =
|
|
9
|
+
const files = providerSpecifics.getFolderFiles('/tmp');
|
|
11
10
|
return {
|
|
12
11
|
files: files
|
|
13
12
|
.slice(0)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AwsRegion } from '../../pricing/aws-regions';
|
|
2
|
+
import type { PostRenderData } from '../../shared/constants';
|
|
3
|
+
export declare const writePostRenderData: ({ bucketName, renderId, postRenderData, expectedBucketOwner, region, }: {
|
|
4
|
+
bucketName: string;
|
|
5
|
+
renderId: string;
|
|
6
|
+
postRenderData: PostRenderData;
|
|
7
|
+
expectedBucketOwner: string;
|
|
8
|
+
region: AwsRegion;
|
|
9
|
+
}) => Promise<void>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writePostRenderData = void 0;
|
|
4
|
+
const constants_1 = require("../../shared/constants");
|
|
5
|
+
const io_1 = require("./io");
|
|
6
|
+
const writePostRenderData = async ({ bucketName, renderId, postRenderData, expectedBucketOwner, region, }) => {
|
|
7
|
+
await (0, io_1.lambdaWriteFile)({
|
|
8
|
+
bucketName,
|
|
9
|
+
key: (0, constants_1.postRenderDataKey)(renderId),
|
|
10
|
+
privacy: 'private',
|
|
11
|
+
body: JSON.stringify(postRenderData),
|
|
12
|
+
expectedBucketOwner,
|
|
13
|
+
region,
|
|
14
|
+
downloadBehavior: null,
|
|
15
|
+
customCredentials: null,
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
exports.writePostRenderData = writePostRenderData;
|
package/dist/functions/launch.js
CHANGED
|
@@ -222,6 +222,7 @@ const innerLaunchHandler = async ({ functionName, params, options, overallProgre
|
|
|
222
222
|
downloadBehavior: params.downloadBehavior,
|
|
223
223
|
audioBitrate: params.audioBitrate,
|
|
224
224
|
muted: params.muted,
|
|
225
|
+
functionName: process.env.AWS_LAMBDA_FUNCTION_NAME,
|
|
225
226
|
};
|
|
226
227
|
const { key, renderBucketName, customCredentials } = (0, client_1.getExpectedOutName)(renderMetadata, params.bucketName, typeof params.outName === 'string' || typeof params.outName === 'undefined'
|
|
227
228
|
? null
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LambdaPayload, PostRenderData } from '../defaults';
|
|
2
|
+
type Options = {
|
|
3
|
+
expectedBucketOwner: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const mergeHandler: (params: LambdaPayload, options: Options) => Promise<{
|
|
6
|
+
type: 'success';
|
|
7
|
+
postRenderData: PostRenderData;
|
|
8
|
+
}>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeHandler = void 0;
|
|
4
|
+
const renderer_1 = require("@remotion/renderer");
|
|
5
|
+
const defaults_1 = require("../defaults");
|
|
6
|
+
const expected_out_name_1 = require("./helpers/expected-out-name");
|
|
7
|
+
const get_current_region_1 = require("./helpers/get-current-region");
|
|
8
|
+
const get_render_metadata_1 = require("./helpers/get-render-metadata");
|
|
9
|
+
const merge_chunks_1 = require("./helpers/merge-chunks");
|
|
10
|
+
const mergeHandler = async (params, options) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
if (params.type !== defaults_1.LambdaRoutines.merge) {
|
|
13
|
+
throw new Error('Expected launch type');
|
|
14
|
+
}
|
|
15
|
+
renderer_1.RenderInternals.Log.info({ indent: false, logLevel: params.logLevel }, 'This function has been started because the previous main function has timed out while merging together the chunks.');
|
|
16
|
+
renderer_1.RenderInternals.Log.info({ indent: false, logLevel: params.logLevel }, 'The merging of chunks will now restart.');
|
|
17
|
+
const renderMetadata = await (0, get_render_metadata_1.getRenderMetadata)({
|
|
18
|
+
bucketName: params.bucketName,
|
|
19
|
+
expectedBucketOwner: options.expectedBucketOwner,
|
|
20
|
+
region: (0, get_current_region_1.getCurrentRegionInFunction)(),
|
|
21
|
+
renderId: params.renderId,
|
|
22
|
+
});
|
|
23
|
+
if (!renderMetadata.codec) {
|
|
24
|
+
throw new Error('expected codec');
|
|
25
|
+
}
|
|
26
|
+
const { key, renderBucketName, customCredentials } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, params.bucketName, typeof params.outName === 'string' || typeof params.outName === 'undefined'
|
|
27
|
+
? null
|
|
28
|
+
: (_b = (_a = params.outName) === null || _a === void 0 ? void 0 : _a.s3OutputProvider) !== null && _b !== void 0 ? _b : null);
|
|
29
|
+
const frameCount = renderer_1.RenderInternals.getFramesToRender(renderMetadata.frameRange, renderMetadata.everyNthFrame);
|
|
30
|
+
const fps = renderMetadata.videoConfig.fps / renderMetadata.everyNthFrame;
|
|
31
|
+
const postRenderData = await (0, merge_chunks_1.mergeChunksAndFinishRender)({
|
|
32
|
+
audioCodec: renderMetadata.audioCodec,
|
|
33
|
+
bucketName: params.bucketName,
|
|
34
|
+
chunkCount: renderMetadata.totalChunks,
|
|
35
|
+
codec: renderMetadata.codec,
|
|
36
|
+
customCredentials,
|
|
37
|
+
downloadBehavior: renderMetadata.downloadBehavior,
|
|
38
|
+
expectedBucketOwner: options.expectedBucketOwner,
|
|
39
|
+
fps,
|
|
40
|
+
numberOfFrames: frameCount.length,
|
|
41
|
+
inputProps: params.inputProps,
|
|
42
|
+
key,
|
|
43
|
+
numberOfGifLoops: renderMetadata.numberOfGifLoops,
|
|
44
|
+
privacy: renderMetadata.privacy,
|
|
45
|
+
renderBucketName,
|
|
46
|
+
renderId: params.renderId,
|
|
47
|
+
renderMetadata,
|
|
48
|
+
serializedResolvedProps: params.serializedResolvedProps,
|
|
49
|
+
onAllChunks: () => {
|
|
50
|
+
renderer_1.RenderInternals.Log.info({ indent: false, logLevel: params.logLevel }, 'All chunks have been downloaded now.');
|
|
51
|
+
},
|
|
52
|
+
audioBitrate: renderMetadata.audioBitrate,
|
|
53
|
+
logLevel: params.logLevel,
|
|
54
|
+
framesPerLambda: params.framesPerLambda,
|
|
55
|
+
binariesDirectory: null,
|
|
56
|
+
preferLossless: params.preferLossless,
|
|
57
|
+
compositionStart: params.compositionStart,
|
|
58
|
+
});
|
|
59
|
+
return { type: 'success', postRenderData };
|
|
60
|
+
};
|
|
61
|
+
exports.mergeHandler = mergeHandler;
|
|
@@ -265,6 +265,7 @@ const rendererHandler = async ({ onStream, options, params, providerSpecifics, r
|
|
|
265
265
|
}
|
|
266
266
|
const logs = [];
|
|
267
267
|
const leakDetection = (0, why_is_node_running_1.enableNodeIntrospection)(ENABLE_SLOW_LEAK_DETECTION);
|
|
268
|
+
let shouldKeepBrowserOpen = true;
|
|
268
269
|
try {
|
|
269
270
|
await renderHandler({
|
|
270
271
|
params,
|
|
@@ -285,6 +286,9 @@ const rendererHandler = async ({ onStream, options, params, providerSpecifics, r
|
|
|
285
286
|
// If this error is encountered, we can just retry as it
|
|
286
287
|
// is a very rare error to occur
|
|
287
288
|
const isRetryableError = (0, is_flaky_error_1.isFlakyError)(err);
|
|
289
|
+
if (isRetryableError) {
|
|
290
|
+
shouldKeepBrowserOpen = false;
|
|
291
|
+
}
|
|
288
292
|
const shouldNotRetry = err.name === 'CancelledError';
|
|
289
293
|
const shouldRetry = isRetryableError && params.retriesLeft > 0 && !shouldNotRetry;
|
|
290
294
|
renderer_1.RenderInternals.Log.error({ indent: false, logLevel: params.logLevel }, `Error occurred (will retry = ${String(shouldRetry)})`);
|
|
@@ -312,7 +316,14 @@ const rendererHandler = async ({ onStream, options, params, providerSpecifics, r
|
|
|
312
316
|
throw err;
|
|
313
317
|
}
|
|
314
318
|
finally {
|
|
315
|
-
|
|
319
|
+
if (shouldKeepBrowserOpen) {
|
|
320
|
+
(0, serverless_1.forgetBrowserEventLoop)(params.logLevel);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
renderer_1.RenderInternals.Log.info({ indent: false, logLevel: params.logLevel }, 'Lambda did not succeed with flaky error, not keeping browser open.');
|
|
324
|
+
renderer_1.RenderInternals.Log.info({ indent: false, logLevel: params.logLevel }, 'Quitting Lambda forcefully now to force not keeping the Lambda warm.');
|
|
325
|
+
process.exit(0);
|
|
326
|
+
}
|
|
316
327
|
if (ENABLE_SLOW_LEAK_DETECTION) {
|
|
317
328
|
(0, leak_detection_1.startLeakDetection)(leakDetection, requestContext.awsRequestId);
|
|
318
329
|
}
|
package/dist/functions/still.js
CHANGED
|
@@ -125,6 +125,7 @@ const innerStillHandler = async ({ params: lambdaParams, expectedBucketOwner, re
|
|
|
125
125
|
numberOfGifLoops: null,
|
|
126
126
|
downloadBehavior: lambdaParams.downloadBehavior,
|
|
127
127
|
audioBitrate: null,
|
|
128
|
+
functionName: process.env.AWS_LAMBDA_FUNCTION_NAME,
|
|
128
129
|
};
|
|
129
130
|
const still = (0, overall_render_progress_1.makeInitialOverallRenderProgress)(timeoutInMilliseconds);
|
|
130
131
|
still.renderMetadata = renderMetadata;
|
package/dist/index.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ import type { RenderMediaOnLambdaInput, RenderMediaOnLambdaOutput } from './api/
|
|
|
34
34
|
import { renderVideoOnLambda } from './api/render-media-on-lambda';
|
|
35
35
|
import type { RenderStillOnLambdaInput, RenderStillOnLambdaOutput } from './api/render-still-on-lambda';
|
|
36
36
|
import { validateWebhookSignature } from './api/validate-webhook-signature';
|
|
37
|
-
import { LambdaInternals } from './internals';
|
|
37
|
+
import { LambdaInternals, _InternalAwsProvider, _InternalOverallRenderProgress } from './internals';
|
|
38
38
|
import type { AwsRegion } from './regions';
|
|
39
39
|
import type { RenderProgress } from './shared/constants';
|
|
40
40
|
import type { WebhookPayload } from './shared/invoke-webhook';
|
|
@@ -56,3 +56,4 @@ declare const presignUrl: <CheckIfObjectExists extends boolean = false>({ region
|
|
|
56
56
|
declare const getSites: ({ region, forceBucketName, }: GetSitesInput) => Promise<GetSitesOutput>;
|
|
57
57
|
export { LambdaInternals, deleteFunction, deleteRender, deleteSite, deployFunction, deploySite, downloadMedia, estimatePrice, getAwsClient, getCompositionsOnLambda, getFunctionInfo, getFunctions, getOrCreateBucket, getRegions, getRenderProgress, getRolePolicy, getSites, getUserPolicy, presignUrl, renderMediaOnLambda, renderStillOnLambda, renderVideoOnLambda, simulatePermissions, validateWebhookSignature, };
|
|
58
58
|
export type { AwsRegion, CustomCredentials, DeleteFunctionInput, DeleteRenderInput, DeleteSiteInput, DeleteSiteOutput, DeployFunctionInput, DeployFunctionOutput, DeploySiteInput, DeploySiteOutput, DownloadMediaInput, DownloadMediaOutput, EnhancedErrorInfo, EstimatePriceInput, FunctionInfo, GetAwsClientInput, GetAwsClientOutput, GetCompositionsOnLambdaInput, GetCompositionsOnLambdaOutput, GetFunctionInfoInput, GetFunctionsInput, GetOrCreateBucketInput, GetOrCreateBucketOutput, GetRenderProgressInput, GetSitesInput, GetSitesOutput, LambdaErrorInfo, RenderMediaOnLambdaInput, RenderMediaOnLambdaOutput, RenderProgress, RenderStillOnLambdaInput, RenderStillOnLambdaOutput, SimulatePermissionsInput, SimulatePermissionsOutput, WebhookPayload, };
|
|
59
|
+
export { _InternalAwsProvider, _InternalOverallRenderProgress };
|
package/dist/internals.d.ts
CHANGED
|
@@ -90,3 +90,5 @@ export declare const LambdaInternals: {
|
|
|
90
90
|
};
|
|
91
91
|
}>;
|
|
92
92
|
};
|
|
93
|
+
export { AwsProvider as _InternalAwsProvider } from './functions/aws-implementation';
|
|
94
|
+
export { OverallRenderProgress as _InternalOverallRenderProgress } from './functions/helpers/overall-render-progress';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const writeLambdaInitializedFile: ({ bucketName, expectedBucketOwner, attempt, chunk, renderId, framesRendered, }: {
|
|
2
|
+
bucketName: string;
|
|
3
|
+
expectedBucketOwner: string;
|
|
4
|
+
renderId: string;
|
|
5
|
+
chunk: number;
|
|
6
|
+
attempt: number;
|
|
7
|
+
framesRendered: number;
|
|
8
|
+
}) => Promise<void>;
|
|
9
|
+
export declare const getProgressOfChunk: (etag: string) => number;
|