@remotion/lambda 3.2.22 → 3.2.24
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/bucket-exists.js +1 -1
- package/dist/api/clean-items.js +1 -1
- package/dist/api/create-bucket.js +1 -1
- package/dist/api/delete-render.d.ts +19 -0
- package/dist/api/delete-render.js +66 -0
- package/dist/api/delete-site.js +0 -5
- package/dist/api/download-media.d.ts +13 -0
- package/dist/api/download-media.js +15 -3
- package/dist/api/enable-s3-website.js +1 -1
- package/dist/api/get-aws-client.d.ts +4 -2
- package/dist/api/get-aws-client.js +7 -2
- package/dist/api/get-buckets.js +2 -2
- package/dist/api/get-render-progress.d.ts +4 -1
- package/dist/api/get-render-progress.js +3 -1
- package/dist/api/presign-url.js +1 -1
- package/dist/api/render-media-on-lambda.d.ts +3 -3
- package/dist/api/render-media-on-lambda.js +3 -3
- package/dist/api/upload-dir.js +1 -1
- package/dist/functions/chunk-optimization/plan-frame-ranges.d.ts +1 -4
- package/dist/functions/chunk-optimization/s3-optimization-file.js +1 -0
- package/dist/functions/helpers/expected-out-name.d.ts +4 -2
- package/dist/functions/helpers/expected-out-name.js +26 -5
- package/dist/functions/helpers/find-output-file-in-bucket.d.ts +3 -1
- package/dist/functions/helpers/find-output-file-in-bucket.js +9 -7
- package/dist/functions/helpers/get-custom-out-name.d.ts +6 -0
- package/dist/functions/helpers/get-custom-out-name.js +31 -0
- package/dist/functions/helpers/get-output-url-from-metadata.d.ts +2 -1
- package/dist/functions/helpers/get-output-url-from-metadata.js +2 -2
- package/dist/functions/helpers/get-progress.d.ts +4 -2
- package/dist/functions/helpers/get-progress.js +8 -6
- package/dist/functions/helpers/io.d.ts +5 -2
- package/dist/functions/helpers/io.js +7 -7
- package/dist/functions/helpers/read-with-progress.d.ts +3 -1
- package/dist/functions/helpers/read-with-progress.js +2 -2
- package/dist/functions/helpers/write-lambda-error.js +1 -0
- package/dist/functions/helpers/write-post-render-data.js +1 -0
- package/dist/functions/index.js +2 -2
- package/dist/functions/launch.js +11 -3
- package/dist/functions/progress.d.ts +1 -1
- package/dist/functions/progress.js +3 -1
- package/dist/functions/renderer.js +3 -0
- package/dist/functions/start.js +1 -0
- package/dist/functions/still.js +5 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -1
- package/dist/shared/aws-clients.d.ts +13 -2
- package/dist/shared/aws-clients.js +56 -26
- package/dist/shared/constants.d.ts +11 -1
- package/dist/shared/constants.js +7 -1
- package/dist/shared/validate-outname.d.ts +2 -2
- package/package.json +6 -6
- package/remotionlambda.zip +0 -0
- package/dist/cli/helpers/get-cloudwatch-stream-url.d.ts +0 -8
- package/dist/cli/helpers/get-cloudwatch-stream-url.js +0 -7
|
@@ -6,7 +6,7 @@ const aws_clients_1 = require("../shared/aws-clients");
|
|
|
6
6
|
const bucketExistsInRegion = async ({ bucketName, region, expectedBucketOwner, }) => {
|
|
7
7
|
var _a;
|
|
8
8
|
try {
|
|
9
|
-
const bucket = await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.GetBucketLocationCommand({
|
|
9
|
+
const bucket = await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.GetBucketLocationCommand({
|
|
10
10
|
Bucket: bucketName,
|
|
11
11
|
ExpectedBucketOwner: expectedBucketOwner !== null && expectedBucketOwner !== void 0 ? expectedBucketOwner : undefined,
|
|
12
12
|
}));
|
package/dist/api/clean-items.js
CHANGED
|
@@ -11,7 +11,7 @@ const cleanItems = async ({ bucket, onAfterItemDeleted, onBeforeItemDeleted, reg
|
|
|
11
11
|
bucketName: bucket,
|
|
12
12
|
itemName: object,
|
|
13
13
|
});
|
|
14
|
-
await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.DeleteObjectCommand({
|
|
14
|
+
await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.DeleteObjectCommand({
|
|
15
15
|
Bucket: bucket,
|
|
16
16
|
Key: object,
|
|
17
17
|
}));
|
|
@@ -4,7 +4,7 @@ exports.createBucket = void 0;
|
|
|
4
4
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
5
5
|
const aws_clients_1 = require("../shared/aws-clients");
|
|
6
6
|
const createBucket = async ({ region, bucketName, }) => {
|
|
7
|
-
await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.CreateBucketCommand({
|
|
7
|
+
await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.CreateBucketCommand({
|
|
8
8
|
Bucket: bucketName,
|
|
9
9
|
ACL: 'public-read',
|
|
10
10
|
}));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AwsRegion } from '../client';
|
|
2
|
+
import type { CustomCredentials } from '../shared/aws-clients';
|
|
3
|
+
export declare type DeleteRenderInput = {
|
|
4
|
+
region: AwsRegion;
|
|
5
|
+
bucketName: string;
|
|
6
|
+
renderId: string;
|
|
7
|
+
customCredentials?: CustomCredentials;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* @description Deletes a render artifact and it's metadata given it's renderId.
|
|
11
|
+
* @link https://remotion.dev/docs/lambda/deleterender
|
|
12
|
+
* @param params.region The AWS region in which the media resides.
|
|
13
|
+
* @param params.bucketName The `bucketName` that was specified during the render
|
|
14
|
+
* @param params.renderId The `renderId` that was obtained after triggering the render.
|
|
15
|
+
* @param params.customCredentials If the file was saved to a foreign cloud, pass credentials for reading from it.
|
|
16
|
+
*/
|
|
17
|
+
export declare const deleteRender: (input: DeleteRenderInput) => Promise<{
|
|
18
|
+
freedBytes: number;
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteRender = void 0;
|
|
4
|
+
const defaults_1 = require("../defaults");
|
|
5
|
+
const expected_out_name_1 = require("../functions/helpers/expected-out-name");
|
|
6
|
+
const get_render_metadata_1 = require("../functions/helpers/get-render-metadata");
|
|
7
|
+
const io_1 = require("../functions/helpers/io");
|
|
8
|
+
const get_account_id_1 = require("../shared/get-account-id");
|
|
9
|
+
const clean_items_1 = require("./clean-items");
|
|
10
|
+
/**
|
|
11
|
+
* @description Deletes a render artifact and it's metadata given it's renderId.
|
|
12
|
+
* @link https://remotion.dev/docs/lambda/deleterender
|
|
13
|
+
* @param params.region The AWS region in which the media resides.
|
|
14
|
+
* @param params.bucketName The `bucketName` that was specified during the render
|
|
15
|
+
* @param params.renderId The `renderId` that was obtained after triggering the render.
|
|
16
|
+
* @param params.customCredentials If the file was saved to a foreign cloud, pass credentials for reading from it.
|
|
17
|
+
*/
|
|
18
|
+
const deleteRender = async (input) => {
|
|
19
|
+
var _a;
|
|
20
|
+
const expectedBucketOwner = await (0, get_account_id_1.getAccountId)({
|
|
21
|
+
region: input.region,
|
|
22
|
+
});
|
|
23
|
+
const renderMetadata = await (0, get_render_metadata_1.getRenderMetadata)({
|
|
24
|
+
bucketName: input.bucketName,
|
|
25
|
+
expectedBucketOwner,
|
|
26
|
+
region: input.region,
|
|
27
|
+
renderId: input.renderId,
|
|
28
|
+
});
|
|
29
|
+
const { key, renderBucketName, customCredentials } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, input.bucketName, (_a = input.customCredentials) !== null && _a !== void 0 ? _a : null);
|
|
30
|
+
await (0, io_1.lambdaDeleteFile)({
|
|
31
|
+
bucketName: renderBucketName,
|
|
32
|
+
customCredentials,
|
|
33
|
+
key,
|
|
34
|
+
region: input.region,
|
|
35
|
+
});
|
|
36
|
+
let files = await (0, io_1.lambdaLs)({
|
|
37
|
+
bucketName: input.bucketName,
|
|
38
|
+
prefix: (0, defaults_1.rendersPrefix)(input.renderId),
|
|
39
|
+
region: input.region,
|
|
40
|
+
expectedBucketOwner,
|
|
41
|
+
});
|
|
42
|
+
let totalSize = 0;
|
|
43
|
+
while (files.length > 0) {
|
|
44
|
+
totalSize += files.reduce((a, b) => {
|
|
45
|
+
var _a;
|
|
46
|
+
return a + ((_a = b.Size) !== null && _a !== void 0 ? _a : 0);
|
|
47
|
+
}, 0);
|
|
48
|
+
await (0, clean_items_1.cleanItems)({
|
|
49
|
+
list: files.map((f) => f.Key),
|
|
50
|
+
bucket: input.bucketName,
|
|
51
|
+
onAfterItemDeleted: () => undefined,
|
|
52
|
+
onBeforeItemDeleted: () => undefined,
|
|
53
|
+
region: input.region,
|
|
54
|
+
});
|
|
55
|
+
files = await (0, io_1.lambdaLs)({
|
|
56
|
+
bucketName: input.bucketName,
|
|
57
|
+
prefix: (0, defaults_1.rendersPrefix)(input.renderId),
|
|
58
|
+
region: input.region,
|
|
59
|
+
expectedBucketOwner,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
freedBytes: totalSize,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.deleteRender = deleteRender;
|
package/dist/api/delete-site.js
CHANGED
|
@@ -23,11 +23,6 @@ const deleteSite = async ({ bucketName, siteName, region, onAfterItemDeleted, })
|
|
|
23
23
|
region,
|
|
24
24
|
expectedBucketOwner: accountId,
|
|
25
25
|
});
|
|
26
|
-
if (files.length === 0) {
|
|
27
|
-
return {
|
|
28
|
-
totalSizeInBytes: 0,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
26
|
let totalSize = 0;
|
|
32
27
|
while (files.length > 0) {
|
|
33
28
|
totalSize += files.reduce((a, b) => {
|
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
import type { LambdaReadFileProgress } from '../functions/helpers/read-with-progress';
|
|
2
2
|
import type { AwsRegion } from '../pricing/aws-regions';
|
|
3
|
+
import type { CustomCredentials } from '../shared/aws-clients';
|
|
3
4
|
export declare type DownloadMediaInput = {
|
|
4
5
|
region: AwsRegion;
|
|
5
6
|
bucketName: string;
|
|
6
7
|
renderId: string;
|
|
7
8
|
outPath: string;
|
|
8
9
|
onProgress?: LambdaReadFileProgress;
|
|
10
|
+
customCredentials?: CustomCredentials;
|
|
9
11
|
};
|
|
10
12
|
export declare type DownloadMediaOutput = {
|
|
11
13
|
outputPath: string;
|
|
12
14
|
sizeInBytes: number;
|
|
13
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* @description Triggers a render on a lambda given a composition and a lambda function.
|
|
18
|
+
* @link https://remotion.dev/docs/lambda/downloadmedia
|
|
19
|
+
* @param params.region The AWS region in which the media resides.
|
|
20
|
+
* @param params.bucketName The `bucketName` that was specified during the render.
|
|
21
|
+
* @param params.renderId The `renderId` that was obtained after triggering the render.
|
|
22
|
+
* @param params.outPath Where to save the media.
|
|
23
|
+
* @param params.onProgress Progress callback function - see docs for details.
|
|
24
|
+
* @param params.customCredentials If the file was saved to a foreign cloud, pass credentials for reading from it.
|
|
25
|
+
* @returns {Promise<RenderMediaOnLambdaOutput>} See documentation for detailed structure
|
|
26
|
+
*/
|
|
14
27
|
export declare const downloadMedia: (input: DownloadMediaInput) => Promise<DownloadMediaOutput>;
|
|
15
28
|
/**
|
|
16
29
|
* @deprecated Renamed to downloadMedia()
|
|
@@ -10,8 +10,19 @@ const expected_out_name_1 = require("../functions/helpers/expected-out-name");
|
|
|
10
10
|
const get_render_metadata_1 = require("../functions/helpers/get-render-metadata");
|
|
11
11
|
const read_with_progress_1 = require("../functions/helpers/read-with-progress");
|
|
12
12
|
const get_account_id_1 = require("../shared/get-account-id");
|
|
13
|
+
/**
|
|
14
|
+
* @description Triggers a render on a lambda given a composition and a lambda function.
|
|
15
|
+
* @link https://remotion.dev/docs/lambda/downloadmedia
|
|
16
|
+
* @param params.region The AWS region in which the media resides.
|
|
17
|
+
* @param params.bucketName The `bucketName` that was specified during the render.
|
|
18
|
+
* @param params.renderId The `renderId` that was obtained after triggering the render.
|
|
19
|
+
* @param params.outPath Where to save the media.
|
|
20
|
+
* @param params.onProgress Progress callback function - see docs for details.
|
|
21
|
+
* @param params.customCredentials If the file was saved to a foreign cloud, pass credentials for reading from it.
|
|
22
|
+
* @returns {Promise<RenderMediaOnLambdaOutput>} See documentation for detailed structure
|
|
23
|
+
*/
|
|
13
24
|
const downloadMedia = async (input) => {
|
|
14
|
-
var _a;
|
|
25
|
+
var _a, _b;
|
|
15
26
|
const expectedBucketOwner = await (0, get_account_id_1.getAccountId)({
|
|
16
27
|
region: input.region,
|
|
17
28
|
});
|
|
@@ -23,14 +34,15 @@ const downloadMedia = async (input) => {
|
|
|
23
34
|
});
|
|
24
35
|
const outputPath = path_1.default.resolve(process.cwd(), input.outPath);
|
|
25
36
|
renderer_1.RenderInternals.ensureOutputDirectory(outputPath);
|
|
26
|
-
const { key, renderBucketName } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, input.bucketName);
|
|
37
|
+
const { key, renderBucketName, customCredentials } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, input.bucketName, (_a = input.customCredentials) !== null && _a !== void 0 ? _a : null);
|
|
27
38
|
const { sizeInBytes } = await (0, read_with_progress_1.lambdaDownloadFileWithProgress)({
|
|
28
39
|
bucketName: renderBucketName,
|
|
29
40
|
expectedBucketOwner,
|
|
30
41
|
key,
|
|
31
42
|
region: input.region,
|
|
32
|
-
onProgress: (
|
|
43
|
+
onProgress: (_b = input.onProgress) !== null && _b !== void 0 ? _b : (() => undefined),
|
|
33
44
|
outputPath,
|
|
45
|
+
customCredentials,
|
|
34
46
|
});
|
|
35
47
|
return {
|
|
36
48
|
outputPath,
|
|
@@ -4,7 +4,7 @@ exports.enableS3Website = void 0;
|
|
|
4
4
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
5
5
|
const aws_clients_1 = require("../shared/aws-clients");
|
|
6
6
|
const enableS3Website = async ({ region, bucketName, }) => {
|
|
7
|
-
await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.PutBucketWebsiteCommand({
|
|
7
|
+
await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.PutBucketWebsiteCommand({
|
|
8
8
|
Bucket: bucketName,
|
|
9
9
|
WebsiteConfiguration: {
|
|
10
10
|
IndexDocument: {
|
|
@@ -4,10 +4,11 @@ import * as LambdaSDK from '@aws-sdk/client-lambda';
|
|
|
4
4
|
import * as S3SDK from '@aws-sdk/client-s3';
|
|
5
5
|
import * as ServiceQuotasSDK from '@aws-sdk/client-service-quotas';
|
|
6
6
|
import type { AwsRegion } from '../client';
|
|
7
|
-
import type { ServiceMapping } from '../shared/aws-clients';
|
|
7
|
+
import type { CustomCredentials, ServiceMapping } from '../shared/aws-clients';
|
|
8
8
|
export declare type GetAwsClientInput<T extends keyof ServiceMapping> = {
|
|
9
9
|
region: AwsRegion;
|
|
10
10
|
service: T;
|
|
11
|
+
customCredentials?: CustomCredentials | null;
|
|
11
12
|
};
|
|
12
13
|
declare type SdkMapping = {
|
|
13
14
|
s3: typeof S3SDK;
|
|
@@ -25,7 +26,8 @@ export declare type GetAwsClientOutput<T extends keyof ServiceMapping> = {
|
|
|
25
26
|
* @link https://remotion.dev/docs/lambda/getawsclient
|
|
26
27
|
* @param {AwsRegion} params.region The region in which the S3 bucket resides in.
|
|
27
28
|
* @param {string} params.service One of `iam`, `s3`, `cloudwatch`, `iam` or `servicequotas`
|
|
29
|
+
* @param {CustomCredentials} params.customCredentials Pass endpoint and credentials if you want to connect to a different cloud for S3
|
|
28
30
|
* @returns {GetAwsClientOutput<T>} Returns `client` and `sdk` of a AWS service
|
|
29
31
|
*/
|
|
30
|
-
export declare const getAwsClient: <T extends keyof ServiceMapping>({ region, service, }: GetAwsClientInput<T>) => GetAwsClientOutput<T>;
|
|
32
|
+
export declare const getAwsClient: <T extends keyof ServiceMapping>({ region, service, customCredentials, }: GetAwsClientInput<T>) => GetAwsClientOutput<T>;
|
|
31
33
|
export {};
|
|
@@ -35,11 +35,16 @@ const aws_clients_1 = require("../shared/aws-clients");
|
|
|
35
35
|
* @link https://remotion.dev/docs/lambda/getawsclient
|
|
36
36
|
* @param {AwsRegion} params.region The region in which the S3 bucket resides in.
|
|
37
37
|
* @param {string} params.service One of `iam`, `s3`, `cloudwatch`, `iam` or `servicequotas`
|
|
38
|
+
* @param {CustomCredentials} params.customCredentials Pass endpoint and credentials if you want to connect to a different cloud for S3
|
|
38
39
|
* @returns {GetAwsClientOutput<T>} Returns `client` and `sdk` of a AWS service
|
|
39
40
|
*/
|
|
40
|
-
const getAwsClient = ({ region, service, }) => {
|
|
41
|
+
const getAwsClient = ({ region, service, customCredentials, }) => {
|
|
41
42
|
return {
|
|
42
|
-
client: (0, aws_clients_1.getServiceClient)(
|
|
43
|
+
client: (0, aws_clients_1.getServiceClient)({
|
|
44
|
+
region,
|
|
45
|
+
service,
|
|
46
|
+
customCredentials: customCredentials !== null && customCredentials !== void 0 ? customCredentials : null,
|
|
47
|
+
}),
|
|
43
48
|
sdk: {
|
|
44
49
|
lambda: LambdaSDK,
|
|
45
50
|
cloudwatch: CloudWatchSDK,
|
package/dist/api/get-buckets.js
CHANGED
|
@@ -5,13 +5,13 @@ const client_s3_1 = require("@aws-sdk/client-s3");
|
|
|
5
5
|
const aws_clients_1 = require("../shared/aws-clients");
|
|
6
6
|
const constants_1 = require("../shared/constants");
|
|
7
7
|
const getRemotionS3Buckets = async (region) => {
|
|
8
|
-
const { Buckets } = await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.ListBucketsCommand({}));
|
|
8
|
+
const { Buckets } = await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.ListBucketsCommand({}));
|
|
9
9
|
if (!Buckets) {
|
|
10
10
|
return { remotionBuckets: [] };
|
|
11
11
|
}
|
|
12
12
|
const remotionBuckets = Buckets.filter((b) => { var _a; return (_a = b.Name) === null || _a === void 0 ? void 0 : _a.startsWith(constants_1.REMOTION_BUCKET_PREFIX); });
|
|
13
13
|
const locations = await Promise.all(remotionBuckets.map((bucket) => {
|
|
14
|
-
return (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.GetBucketLocationCommand({
|
|
14
|
+
return (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.GetBucketLocationCommand({
|
|
15
15
|
Bucket: bucket.Name,
|
|
16
16
|
}));
|
|
17
17
|
}));
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { AwsRegion } from '../pricing/aws-regions';
|
|
2
|
+
import type { CustomCredentials } from '../shared/aws-clients';
|
|
2
3
|
import type { RenderProgress } from '../shared/constants';
|
|
3
4
|
export declare type GetRenderInput = {
|
|
4
5
|
functionName: string;
|
|
5
6
|
bucketName: string;
|
|
6
7
|
renderId: string;
|
|
7
8
|
region: AwsRegion;
|
|
9
|
+
s3OutputProvider?: CustomCredentials;
|
|
8
10
|
};
|
|
9
11
|
/**
|
|
10
12
|
* @description Gets the current status of a render originally triggered via renderMediaOnLambda().
|
|
@@ -13,6 +15,7 @@ export declare type GetRenderInput = {
|
|
|
13
15
|
* @param {string} params.bucketName The name of the bucket that was used in the render.
|
|
14
16
|
* @param {string} params.renderId The ID of the render that was returned by `renderMediaOnLambda()`.
|
|
15
17
|
* @param {AwsRegion} params.region The region in which the render was triggered.
|
|
18
|
+
* @param {CustomCredentials} params.s3OutputProvider? Endpoint and credentials if the output file is stored outside of AWS.
|
|
16
19
|
* @returns {Promise<RenderProgress>} See documentation for this function to see all properties on the return object.
|
|
17
20
|
*/
|
|
18
|
-
export declare const getRenderProgress: ({ functionName, bucketName, renderId, region, }: GetRenderInput) => Promise<RenderProgress>;
|
|
21
|
+
export declare const getRenderProgress: ({ functionName, bucketName, renderId, region, s3OutputProvider, }: GetRenderInput) => Promise<RenderProgress>;
|
|
@@ -11,9 +11,10 @@ const constants_1 = require("../shared/constants");
|
|
|
11
11
|
* @param {string} params.bucketName The name of the bucket that was used in the render.
|
|
12
12
|
* @param {string} params.renderId The ID of the render that was returned by `renderMediaOnLambda()`.
|
|
13
13
|
* @param {AwsRegion} params.region The region in which the render was triggered.
|
|
14
|
+
* @param {CustomCredentials} params.s3OutputProvider? Endpoint and credentials if the output file is stored outside of AWS.
|
|
14
15
|
* @returns {Promise<RenderProgress>} See documentation for this function to see all properties on the return object.
|
|
15
16
|
*/
|
|
16
|
-
const getRenderProgress = async ({ functionName, bucketName, renderId, region, }) => {
|
|
17
|
+
const getRenderProgress = async ({ functionName, bucketName, renderId, region, s3OutputProvider, }) => {
|
|
17
18
|
const result = await (0, call_lambda_1.callLambda)({
|
|
18
19
|
functionName,
|
|
19
20
|
type: constants_1.LambdaRoutines.status,
|
|
@@ -21,6 +22,7 @@ const getRenderProgress = async ({ functionName, bucketName, renderId, region, }
|
|
|
21
22
|
bucketName,
|
|
22
23
|
renderId,
|
|
23
24
|
version: version_1.VERSION,
|
|
25
|
+
s3OutputProvider,
|
|
24
26
|
},
|
|
25
27
|
region,
|
|
26
28
|
});
|
package/dist/api/presign-url.js
CHANGED
|
@@ -19,7 +19,7 @@ const validate_presign_expiration_1 = require("../shared/validate-presign-expira
|
|
|
19
19
|
const presignUrl = async ({ region, bucketName, objectKey, checkIfObjectExists = false, expiresInSeconds, }) => {
|
|
20
20
|
(0, validate_bucketname_1.validateBucketName)(bucketName, { mustStartWithRemotion: false });
|
|
21
21
|
(0, validate_presign_expiration_1.validatePresignExpiration)(expiresInSeconds);
|
|
22
|
-
const s3Client = (0, aws_clients_1.getS3Client)(region);
|
|
22
|
+
const s3Client = (0, aws_clients_1.getS3Client)(region, null);
|
|
23
23
|
if (checkIfObjectExists) {
|
|
24
24
|
try {
|
|
25
25
|
await s3Client.send(new client_s3_1.HeadObjectCommand({
|
|
@@ -43,14 +43,14 @@ export declare type RenderMediaOnLambdaOutput = {
|
|
|
43
43
|
* @param params.serveUrl The URL of the deployed project
|
|
44
44
|
* @param params.composition The ID of the composition which should be rendered.
|
|
45
45
|
* @param params.inputProps The input props that should be passed to the composition.
|
|
46
|
-
* @param params.codec The
|
|
46
|
+
* @param params.codec The media codec which should be used for encoding.
|
|
47
47
|
* @param params.imageFormat In which image format the frames should be rendered.
|
|
48
48
|
* @param params.crf The constant rate factor to be used during encoding.
|
|
49
49
|
* @param params.envVariables Object containing environment variables to be inserted into the video environment
|
|
50
50
|
* @param params.proResProfile The ProRes profile if rendering a ProRes video
|
|
51
51
|
* @param params.quality JPEG quality if JPEG was selected as the image format.
|
|
52
|
-
* @param params.region The AWS region in which the
|
|
53
|
-
* @param params.maxRetries How often rendering a chunk may fail before the
|
|
52
|
+
* @param params.region The AWS region in which the media should be rendered.
|
|
53
|
+
* @param params.maxRetries How often rendering a chunk may fail before the media render gets aborted.
|
|
54
54
|
* @param params.logLevel Level of logging that Lambda function should perform. Default "info".
|
|
55
55
|
* @returns {Promise<RenderMediaOnLambdaOutput>} See documentation for detailed structure
|
|
56
56
|
*/
|
|
@@ -17,14 +17,14 @@ const validate_serveurl_1 = require("../shared/validate-serveurl");
|
|
|
17
17
|
* @param params.serveUrl The URL of the deployed project
|
|
18
18
|
* @param params.composition The ID of the composition which should be rendered.
|
|
19
19
|
* @param params.inputProps The input props that should be passed to the composition.
|
|
20
|
-
* @param params.codec The
|
|
20
|
+
* @param params.codec The media codec which should be used for encoding.
|
|
21
21
|
* @param params.imageFormat In which image format the frames should be rendered.
|
|
22
22
|
* @param params.crf The constant rate factor to be used during encoding.
|
|
23
23
|
* @param params.envVariables Object containing environment variables to be inserted into the video environment
|
|
24
24
|
* @param params.proResProfile The ProRes profile if rendering a ProRes video
|
|
25
25
|
* @param params.quality JPEG quality if JPEG was selected as the image format.
|
|
26
|
-
* @param params.region The AWS region in which the
|
|
27
|
-
* @param params.maxRetries How often rendering a chunk may fail before the
|
|
26
|
+
* @param params.region The AWS region in which the media should be rendered.
|
|
27
|
+
* @param params.maxRetries How often rendering a chunk may fail before the media render gets aborted.
|
|
28
28
|
* @param params.logLevel Level of logging that Lambda function should perform. Default "info".
|
|
29
29
|
* @returns {Promise<RenderMediaOnLambdaOutput>} See documentation for detailed structure
|
|
30
30
|
*/
|
package/dist/api/upload-dir.js
CHANGED
|
@@ -37,7 +37,7 @@ const uploadDir = async ({ bucket, region, dir, onProgress, folder, privacy, })
|
|
|
37
37
|
for (const file of files) {
|
|
38
38
|
progresses[file.name] = 0;
|
|
39
39
|
}
|
|
40
|
-
const client = (0, aws_clients_1.getS3Client)(region);
|
|
40
|
+
const client = (0, aws_clients_1.getS3Client)(region, null);
|
|
41
41
|
const uploads = files.map(async (filePath) => {
|
|
42
42
|
const Key = (0, make_s3_key_1.makeS3Key)(folder, dir, filePath.name);
|
|
43
43
|
const Body = (0, fs_1.createReadStream)(filePath.name);
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import type { OutNameOutput, RenderMetadata } from '../../defaults';
|
|
2
|
-
|
|
1
|
+
import type { OutNameInput, OutNameOutput, RenderMetadata } from '../../defaults';
|
|
2
|
+
import type { CustomCredentials } from '../../shared/aws-clients';
|
|
3
|
+
export declare const getCredentialsFromOutName: (name: OutNameInput | null) => CustomCredentials | null;
|
|
4
|
+
export declare const getExpectedOutName: (renderMetadata: RenderMetadata, bucketName: string, customCredentials: CustomCredentials | null) => OutNameOutput;
|
|
@@ -1,24 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getExpectedOutName = void 0;
|
|
3
|
+
exports.getExpectedOutName = exports.getCredentialsFromOutName = void 0;
|
|
4
4
|
const renderer_1 = require("@remotion/renderer");
|
|
5
5
|
const defaults_1 = require("../../defaults");
|
|
6
6
|
const validate_outname_1 = require("../../shared/validate-outname");
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const get_custom_out_name_1 = require("./get-custom-out-name");
|
|
8
|
+
const getCredentialsFromOutName = (name) => {
|
|
9
|
+
var _a;
|
|
10
|
+
if (typeof name === 'string') {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
if (name === null) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
if (typeof name === 'undefined') {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return (_a = name.s3OutputProvider) !== null && _a !== void 0 ? _a : null;
|
|
20
|
+
};
|
|
21
|
+
exports.getCredentialsFromOutName = getCredentialsFromOutName;
|
|
22
|
+
const getExpectedOutName = (renderMetadata, bucketName, customCredentials) => {
|
|
23
|
+
const outNameValue = (0, get_custom_out_name_1.getCustomOutName)({
|
|
24
|
+
customCredentials,
|
|
25
|
+
renderMetadata,
|
|
26
|
+
});
|
|
27
|
+
if (outNameValue) {
|
|
28
|
+
(0, validate_outname_1.validateOutname)(outNameValue);
|
|
29
|
+
return (0, defaults_1.customOutName)(renderMetadata.renderId, bucketName, outNameValue);
|
|
11
30
|
}
|
|
12
31
|
if (renderMetadata.type === 'still') {
|
|
13
32
|
return {
|
|
14
33
|
renderBucketName: bucketName,
|
|
15
34
|
key: (0, defaults_1.outStillName)(renderMetadata.renderId, renderMetadata.imageFormat),
|
|
35
|
+
customCredentials: null,
|
|
16
36
|
};
|
|
17
37
|
}
|
|
18
38
|
if (renderMetadata.type === 'video') {
|
|
19
39
|
return {
|
|
20
40
|
renderBucketName: bucketName,
|
|
21
41
|
key: (0, defaults_1.outName)(renderMetadata.renderId, renderer_1.RenderInternals.getFileExtensionFromCodec(renderMetadata.codec, 'final')),
|
|
42
|
+
customCredentials: null,
|
|
22
43
|
};
|
|
23
44
|
}
|
|
24
45
|
throw new TypeError('no type passed');
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { AwsRegion } from '../..';
|
|
2
|
+
import type { CustomCredentials } from '../../shared/aws-clients';
|
|
2
3
|
import type { RenderMetadata } from '../../shared/constants';
|
|
3
4
|
export declare type OutputFileMetadata = {
|
|
4
5
|
url: string;
|
|
5
6
|
size: number;
|
|
6
7
|
lastModified: number;
|
|
7
8
|
};
|
|
8
|
-
export declare const findOutputFileInBucket: ({ region, renderMetadata, bucketName, }: {
|
|
9
|
+
export declare const findOutputFileInBucket: ({ region, renderMetadata, bucketName, customCredentials, }: {
|
|
9
10
|
region: AwsRegion;
|
|
10
11
|
renderMetadata: RenderMetadata;
|
|
11
12
|
bucketName: string;
|
|
13
|
+
customCredentials: CustomCredentials | null;
|
|
12
14
|
}) => Promise<OutputFileMetadata | null>;
|
|
@@ -6,21 +6,21 @@ const suggested_policy_1 = require("../../api/iam-validation/suggested-policy");
|
|
|
6
6
|
const aws_clients_1 = require("../../shared/aws-clients");
|
|
7
7
|
const expected_out_name_1 = require("./expected-out-name");
|
|
8
8
|
const get_output_url_from_metadata_1 = require("./get-output-url-from-metadata");
|
|
9
|
-
const findOutputFileInBucket = async ({ region, renderMetadata, bucketName, }) => {
|
|
9
|
+
const findOutputFileInBucket = async ({ region, renderMetadata, bucketName, customCredentials, }) => {
|
|
10
10
|
var _a;
|
|
11
11
|
if (!renderMetadata) {
|
|
12
12
|
throw new Error('unexpectedly did not get renderMetadata');
|
|
13
13
|
}
|
|
14
|
-
const
|
|
14
|
+
const { renderBucketName, key } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName, null);
|
|
15
15
|
try {
|
|
16
|
-
const head = await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.HeadObjectCommand({
|
|
17
|
-
Bucket:
|
|
18
|
-
Key:
|
|
16
|
+
const head = await (0, aws_clients_1.getS3Client)(region, customCredentials).send(new client_s3_1.HeadObjectCommand({
|
|
17
|
+
Bucket: renderBucketName,
|
|
18
|
+
Key: key,
|
|
19
19
|
}));
|
|
20
20
|
return {
|
|
21
21
|
lastModified: (_a = head.LastModified) === null || _a === void 0 ? void 0 : _a.getTime(),
|
|
22
22
|
size: head.ContentLength,
|
|
23
|
-
url: (0, get_output_url_from_metadata_1.getOutputUrlFromMetadata)(renderMetadata, bucketName),
|
|
23
|
+
url: (0, get_output_url_from_metadata_1.getOutputUrlFromMetadata)(renderMetadata, bucketName, customCredentials),
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
catch (err) {
|
|
@@ -30,7 +30,9 @@ const findOutputFileInBucket = async ({ region, renderMetadata, bucketName, }) =
|
|
|
30
30
|
if (err.message === 'UnknownError' ||
|
|
31
31
|
err.$metadata
|
|
32
32
|
.httpStatusCode === 403) {
|
|
33
|
-
throw new Error(`Unable to access item "${
|
|
33
|
+
throw new Error(`Unable to access item "${key}" from bucket "${renderBucketName}" ${(customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.endpoint)
|
|
34
|
+
? `(S3 Endpoint = ${customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.endpoint})`
|
|
35
|
+
: ''}. The "${suggested_policy_1.ROLE_NAME}" role must have permission for both "s3:GetObject" and "s3:ListBucket" actions.`);
|
|
34
36
|
}
|
|
35
37
|
throw err;
|
|
36
38
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { OutNameInput, RenderMetadata } from '../../defaults';
|
|
2
|
+
import type { CustomCredentials } from '../../shared/aws-clients';
|
|
3
|
+
export declare const getCustomOutName: ({ renderMetadata, customCredentials, }: {
|
|
4
|
+
renderMetadata: RenderMetadata;
|
|
5
|
+
customCredentials: CustomCredentials | null;
|
|
6
|
+
}) => OutNameInput | null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCustomOutName = void 0;
|
|
4
|
+
const getCustomOutName = ({ renderMetadata, customCredentials, }) => {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
if (!renderMetadata.outName) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
if (typeof renderMetadata.outName === 'string') {
|
|
10
|
+
return renderMetadata.outName;
|
|
11
|
+
}
|
|
12
|
+
if (renderMetadata.outName.s3OutputProvider) {
|
|
13
|
+
if (!customCredentials && renderMetadata.privacy !== 'public') {
|
|
14
|
+
throw new TypeError(`The file was rendered with a custom S3 implementation and is not public, but no custom credentials were passed to downloadMedia().`);
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
bucketName: renderMetadata.outName.bucketName,
|
|
18
|
+
key: renderMetadata.outName.key,
|
|
19
|
+
s3OutputProvider: {
|
|
20
|
+
endpoint: renderMetadata.outName.s3OutputProvider.endpoint,
|
|
21
|
+
accessKeyId: (_a = customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.accessKeyId) !== null && _a !== void 0 ? _a : null,
|
|
22
|
+
secretAccessKey: (_b = customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.secretAccessKey) !== null && _b !== void 0 ? _b : null,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
bucketName: renderMetadata.outName.bucketName,
|
|
28
|
+
key: renderMetadata.outName.key,
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
exports.getCustomOutName = getCustomOutName;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { RenderMetadata } from '../../defaults';
|
|
2
|
-
|
|
2
|
+
import type { CustomCredentials } from '../../shared/aws-clients';
|
|
3
|
+
export declare const getOutputUrlFromMetadata: (renderMetadata: RenderMetadata, bucketName: string, customCredentials: CustomCredentials | null) => string;
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getOutputUrlFromMetadata = void 0;
|
|
4
4
|
const expected_out_name_1 = require("./expected-out-name");
|
|
5
5
|
const get_current_region_1 = require("./get-current-region");
|
|
6
|
-
const getOutputUrlFromMetadata = (renderMetadata, bucketName) => {
|
|
7
|
-
const outname = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName);
|
|
6
|
+
const getOutputUrlFromMetadata = (renderMetadata, bucketName, customCredentials) => {
|
|
7
|
+
const outname = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName, customCredentials);
|
|
8
8
|
return `https://s3.${(0, get_current_region_1.getCurrentRegionInFunction)()}.amazonaws.com/${outname.renderBucketName}/${outname.key}`;
|
|
9
9
|
};
|
|
10
10
|
exports.getOutputUrlFromMetadata = getOutputUrlFromMetadata;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { AwsRegion } from '../../pricing/aws-regions';
|
|
2
|
+
import type { CustomCredentials } from '../../shared/aws-clients';
|
|
2
3
|
import type { RenderProgress } from '../../shared/constants';
|
|
3
|
-
export declare const getProgress: ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb,
|
|
4
|
+
export declare const getProgress: ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMilliseconds, customCredentials, }: {
|
|
4
5
|
bucketName: string;
|
|
5
6
|
renderId: string;
|
|
6
7
|
expectedBucketOwner: string;
|
|
7
8
|
region: AwsRegion;
|
|
8
9
|
memorySizeInMb: number;
|
|
9
|
-
|
|
10
|
+
timeoutInMilliseconds: number;
|
|
11
|
+
customCredentials: CustomCredentials | null;
|
|
10
12
|
}) => Promise<RenderProgress>;
|