@remotion/lambda 4.0.495 → 4.0.497
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/deploy-site-from-bundle.d.ts +28 -0
- package/dist/api/deploy-site-from-bundle.js +48 -0
- package/dist/api/deploy-site.d.ts +2 -10
- package/dist/api/deploy-site.js +41 -117
- package/dist/api/upload-dir.js +2 -1
- package/dist/esm/index.mjs +291 -126
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -1
- package/dist/shared/deploy-site-with-bundle.d.ts +31 -0
- package/dist/shared/deploy-site-with-bundle.js +116 -0
- package/dist/shared/get-etag.js +4 -4
- package/dist/shared/multipart-upload-part-size.d.ts +1 -0
- package/dist/shared/multipart-upload-part-size.js +4 -0
- package/dist/shared/validate-bundle-dir.d.ts +1 -0
- package/dist/shared/validate-bundle-dir.js +63 -0
- package/dist/shared/validate-site-name.js +9 -3
- package/package.json +12 -12
- package/remotionlambda-arm64.zip +0 -0
package/dist/esm/index.mjs
CHANGED
|
@@ -8604,7 +8604,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
8604
8604
|
url: "https://github.com/remotion-dev/remotion/tree/main/packages/lambda"
|
|
8605
8605
|
},
|
|
8606
8606
|
name: "@remotion/lambda",
|
|
8607
|
-
version: "4.0.
|
|
8607
|
+
version: "4.0.497",
|
|
8608
8608
|
description: "Render Remotion videos on AWS Lambda",
|
|
8609
8609
|
main: "dist/index.js",
|
|
8610
8610
|
scripts: {
|
|
@@ -9688,6 +9688,9 @@ var makeS3Key = (folder, dir, filePath) => {
|
|
|
9688
9688
|
return `${folder}/${path.relative(dir, filePath).split(path.sep).join("/")}`;
|
|
9689
9689
|
};
|
|
9690
9690
|
|
|
9691
|
+
// src/shared/multipart-upload-part-size.ts
|
|
9692
|
+
var multipartUploadPartSize = 40 * 1024 * 1024;
|
|
9693
|
+
|
|
9691
9694
|
// src/api/upload-dir.ts
|
|
9692
9695
|
async function getFiles(directory, originalDirectory, toUpload) {
|
|
9693
9696
|
const dirents = await fs.readdir(directory, { withFileTypes: true });
|
|
@@ -9745,7 +9748,7 @@ var uploadDir = async ({
|
|
|
9745
9748
|
const parallelUploadsS3 = new Upload({
|
|
9746
9749
|
client,
|
|
9747
9750
|
queueSize: 2,
|
|
9748
|
-
partSize:
|
|
9751
|
+
partSize: multipartUploadPartSize,
|
|
9749
9752
|
params: {
|
|
9750
9753
|
Key,
|
|
9751
9754
|
Bucket: bucket,
|
|
@@ -9798,20 +9801,19 @@ import * as path3 from "node:path";
|
|
|
9798
9801
|
// src/shared/get-etag.ts
|
|
9799
9802
|
import crypto from "node:crypto";
|
|
9800
9803
|
import fs2 from "node:fs";
|
|
9801
|
-
var chunk = 1024 * 1024 * 5;
|
|
9802
9804
|
var md5 = (data) => crypto.createHash("md5").update(data).digest("hex");
|
|
9803
9805
|
var getEtagOfFile = (filePath, onProgress) => {
|
|
9804
9806
|
const calc = async () => {
|
|
9805
9807
|
const size = await fs2.promises.stat(filePath).then((s) => s.size);
|
|
9806
|
-
if (size <=
|
|
9808
|
+
if (size <= multipartUploadPartSize) {
|
|
9807
9809
|
const buffer = await fs2.promises.readFile(filePath);
|
|
9808
9810
|
return `"${md5(buffer)}"`;
|
|
9809
9811
|
}
|
|
9810
9812
|
const stream = fs2.createReadStream(filePath, {
|
|
9811
|
-
highWaterMark:
|
|
9813
|
+
highWaterMark: multipartUploadPartSize
|
|
9812
9814
|
});
|
|
9813
9815
|
const md5Chunks = [];
|
|
9814
|
-
const chunksNumber = Math.ceil(size /
|
|
9816
|
+
const chunksNumber = Math.ceil(size / multipartUploadPartSize);
|
|
9815
9817
|
return new Promise((resolve, reject) => {
|
|
9816
9818
|
stream.on("data", (c) => {
|
|
9817
9819
|
md5Chunks.push(md5(c));
|
|
@@ -10030,12 +10032,16 @@ var deployFunction = ({
|
|
|
10030
10032
|
|
|
10031
10033
|
// src/api/deploy-site.ts
|
|
10032
10034
|
import fs4 from "node:fs";
|
|
10035
|
+
import { LambdaClientInternals as LambdaClientInternals7 } from "@remotion/lambda-client";
|
|
10036
|
+
import { getSitesKey as getSitesKey3 } from "@remotion/lambda-client/constants";
|
|
10037
|
+
import { wrapWithErrorHandling as wrapWithErrorHandling2 } from "@remotion/renderer/error-handling";
|
|
10038
|
+
|
|
10039
|
+
// src/shared/deploy-site-with-bundle.ts
|
|
10033
10040
|
import { LambdaClientInternals as LambdaClientInternals6 } from "@remotion/lambda-client";
|
|
10034
10041
|
import {
|
|
10035
10042
|
getSitesKey as getSitesKey2,
|
|
10036
10043
|
REMOTION_BUCKET_PREFIX as REMOTION_BUCKET_PREFIX3
|
|
10037
10044
|
} from "@remotion/lambda-client/constants";
|
|
10038
|
-
import { wrapWithErrorHandling as wrapWithErrorHandling2 } from "@remotion/renderer/error-handling";
|
|
10039
10045
|
import { validateBucketName, validatePrivacy } from "@remotion/serverless";
|
|
10040
10046
|
|
|
10041
10047
|
// src/shared/get-s3-operations.ts
|
|
@@ -10095,39 +10101,43 @@ var getS3DiffOperations = async ({
|
|
|
10095
10101
|
};
|
|
10096
10102
|
|
|
10097
10103
|
// src/shared/validate-site-name.ts
|
|
10104
|
+
var VALID_SITE_NAME_RE = /^[-0-9a-zA-Z!_.*'()]+$/;
|
|
10098
10105
|
var validateSiteName = (siteName) => {
|
|
10099
10106
|
if (typeof siteName === "undefined") {
|
|
10100
10107
|
return;
|
|
10101
10108
|
}
|
|
10102
10109
|
if (typeof siteName !== "string") {
|
|
10103
|
-
throw new TypeError(`The '
|
|
10110
|
+
throw new TypeError(`The 'siteName' argument must be a string if provided, but is ${JSON.stringify(siteName)}`);
|
|
10104
10111
|
}
|
|
10105
|
-
if (
|
|
10106
|
-
throw new Error("The `siteName` must
|
|
10112
|
+
if (siteName === "." || siteName === "..") {
|
|
10113
|
+
throw new Error("The `siteName` must not be `.` or `..`. You passed: " + siteName + ".");
|
|
10114
|
+
}
|
|
10115
|
+
if (!VALID_SITE_NAME_RE.test(siteName)) {
|
|
10116
|
+
throw new Error("The `siteName` must match the RegExp `/" + VALID_SITE_NAME_RE.source + "/`. You passed: " + siteName + ". Check for invalid characters.");
|
|
10107
10117
|
}
|
|
10108
10118
|
};
|
|
10109
10119
|
|
|
10110
|
-
// src/
|
|
10111
|
-
var
|
|
10120
|
+
// src/shared/deploy-site-with-bundle.ts
|
|
10121
|
+
var deleteConcurrency = 10;
|
|
10122
|
+
var deploySiteWithBundle = async ({
|
|
10112
10123
|
bucketName,
|
|
10113
|
-
|
|
10124
|
+
region,
|
|
10114
10125
|
siteName,
|
|
10115
10126
|
options,
|
|
10116
|
-
region,
|
|
10117
10127
|
privacy,
|
|
10118
|
-
gitSource,
|
|
10119
10128
|
throwIfSiteExists,
|
|
10120
10129
|
providerSpecifics,
|
|
10121
10130
|
forcePathStyle,
|
|
10122
10131
|
fullClientSpecifics,
|
|
10123
|
-
requestHandler
|
|
10132
|
+
requestHandler,
|
|
10133
|
+
getBundle
|
|
10124
10134
|
}) => {
|
|
10125
10135
|
LambdaClientInternals6.validateAwsRegion(region);
|
|
10126
10136
|
validateBucketName({
|
|
10127
10137
|
bucketName,
|
|
10128
10138
|
bucketNamePrefix: REMOTION_BUCKET_PREFIX3,
|
|
10129
10139
|
options: {
|
|
10130
|
-
mustStartWithRemotion: !options
|
|
10140
|
+
mustStartWithRemotion: !options.bypassBucketNameValidation
|
|
10131
10141
|
}
|
|
10132
10142
|
});
|
|
10133
10143
|
validateSiteName(siteName);
|
|
@@ -10144,7 +10154,7 @@ var mandatoryDeploySite = async ({
|
|
|
10144
10154
|
throw new Error(`No bucket with the name ${bucketName} exists`);
|
|
10145
10155
|
}
|
|
10146
10156
|
const subFolder = getSitesKey2(siteName);
|
|
10147
|
-
const [files,
|
|
10157
|
+
const [files, bundleDir] = await Promise.all([
|
|
10148
10158
|
providerSpecifics.listObjects({
|
|
10149
10159
|
bucketName,
|
|
10150
10160
|
expectedBucketOwner: accountId,
|
|
@@ -10153,38 +10163,7 @@ var mandatoryDeploySite = async ({
|
|
|
10153
10163
|
forcePathStyle,
|
|
10154
10164
|
requestHandler
|
|
10155
10165
|
}),
|
|
10156
|
-
|
|
10157
|
-
publicPath: `/${subFolder}/`,
|
|
10158
|
-
webpackOverride: options?.webpackOverride ?? ((f) => f),
|
|
10159
|
-
enableCaching: options?.enableCaching ?? true,
|
|
10160
|
-
publicDir: options?.publicDir ?? null,
|
|
10161
|
-
rootDir: options?.rootDir ?? null,
|
|
10162
|
-
ignoreRegisterRootWarning: options?.ignoreRegisterRootWarning ?? false,
|
|
10163
|
-
onProgress: options?.onBundleProgress ?? (() => {
|
|
10164
|
-
return;
|
|
10165
|
-
}),
|
|
10166
|
-
entryPoint,
|
|
10167
|
-
gitSource,
|
|
10168
|
-
bufferStateDelayInMilliseconds: null,
|
|
10169
|
-
maxTimelineTracks: null,
|
|
10170
|
-
onDirectoryCreated: () => {
|
|
10171
|
-
return;
|
|
10172
|
-
},
|
|
10173
|
-
onPublicDirCopyProgress: () => {
|
|
10174
|
-
return;
|
|
10175
|
-
},
|
|
10176
|
-
onSymlinkDetected: () => {
|
|
10177
|
-
return;
|
|
10178
|
-
},
|
|
10179
|
-
outDir: null,
|
|
10180
|
-
askAIEnabled: options?.askAIEnabled ?? true,
|
|
10181
|
-
interactivityEnabled: options?.interactivityEnabled ?? true,
|
|
10182
|
-
audioLatencyHint: null,
|
|
10183
|
-
keyboardShortcutsEnabled: options?.keyboardShortcutsEnabled ?? true,
|
|
10184
|
-
renderDefaults: null,
|
|
10185
|
-
rspack: options?.rspack ?? false,
|
|
10186
|
-
symlinkPublicDir: false
|
|
10187
|
-
})
|
|
10166
|
+
getBundle()
|
|
10188
10167
|
]);
|
|
10189
10168
|
if (throwIfSiteExists && files.length > 0) {
|
|
10190
10169
|
throw new Error("`throwIfSiteExists` was passed as true, but there are already files in this folder: " + files.slice(0, 5).map((f) => f.Key).join(", "));
|
|
@@ -10193,7 +10172,7 @@ var mandatoryDeploySite = async ({
|
|
|
10193
10172
|
let totalBytes = 0;
|
|
10194
10173
|
const { toDelete, toUpload, existingCount } = await getS3DiffOperations({
|
|
10195
10174
|
objects: files,
|
|
10196
|
-
bundle:
|
|
10175
|
+
bundle: bundleDir,
|
|
10197
10176
|
prefix: subFolder,
|
|
10198
10177
|
onProgress: (bytes) => {
|
|
10199
10178
|
totalBytes = bytes;
|
|
@@ -10202,21 +10181,32 @@ var mandatoryDeploySite = async ({
|
|
|
10202
10181
|
fullClientSpecifics
|
|
10203
10182
|
});
|
|
10204
10183
|
options.onDiffingProgress?.(totalBytes, true);
|
|
10205
|
-
|
|
10206
|
-
|
|
10184
|
+
const indexHtml = "index.html";
|
|
10185
|
+
const assetsToUpload = toUpload.filter((file) => file !== indexHtml);
|
|
10186
|
+
const indexHtmlToUpload = toUpload.filter((file) => file === indexHtml);
|
|
10187
|
+
const upload = (filesToUpload) => {
|
|
10188
|
+
if (filesToUpload.length === 0) {
|
|
10189
|
+
return Promise.resolve();
|
|
10190
|
+
}
|
|
10191
|
+
return fullClientSpecifics.uploadDir({
|
|
10207
10192
|
bucket: bucketName,
|
|
10208
10193
|
region,
|
|
10209
|
-
localDir:
|
|
10210
|
-
onProgress: options
|
|
10194
|
+
localDir: bundleDir,
|
|
10195
|
+
onProgress: options.onUploadProgress ?? (() => {
|
|
10211
10196
|
return;
|
|
10212
10197
|
}),
|
|
10213
10198
|
keyPrefix: subFolder,
|
|
10214
|
-
privacy
|
|
10215
|
-
toUpload,
|
|
10199
|
+
privacy,
|
|
10200
|
+
toUpload: filesToUpload,
|
|
10216
10201
|
forcePathStyle,
|
|
10217
10202
|
requestHandler
|
|
10218
|
-
})
|
|
10219
|
-
|
|
10203
|
+
});
|
|
10204
|
+
};
|
|
10205
|
+
await upload(assetsToUpload);
|
|
10206
|
+
await upload(indexHtmlToUpload);
|
|
10207
|
+
const limit2 = LambdaClientInternals6.pLimit(deleteConcurrency);
|
|
10208
|
+
await Promise.all(toDelete.map((d) => {
|
|
10209
|
+
return limit2(() => {
|
|
10220
10210
|
return providerSpecifics.deleteFile({
|
|
10221
10211
|
bucketName,
|
|
10222
10212
|
customCredentials: null,
|
|
@@ -10225,13 +10215,8 @@ var mandatoryDeploySite = async ({
|
|
|
10225
10215
|
forcePathStyle,
|
|
10226
10216
|
requestHandler
|
|
10227
10217
|
});
|
|
10228
|
-
}))
|
|
10229
|
-
]);
|
|
10230
|
-
if (fs4.existsSync(bundled)) {
|
|
10231
|
-
fs4.rmSync(bundled, {
|
|
10232
|
-
recursive: true
|
|
10233
10218
|
});
|
|
10234
|
-
}
|
|
10219
|
+
}));
|
|
10235
10220
|
return {
|
|
10236
10221
|
serveUrl: LambdaClientInternals6.makeS3ServeUrl({
|
|
10237
10222
|
bucketName,
|
|
@@ -10246,6 +10231,77 @@ var mandatoryDeploySite = async ({
|
|
|
10246
10231
|
}
|
|
10247
10232
|
};
|
|
10248
10233
|
};
|
|
10234
|
+
|
|
10235
|
+
// src/api/deploy-site.ts
|
|
10236
|
+
var mandatoryDeploySite = async ({
|
|
10237
|
+
bucketName,
|
|
10238
|
+
entryPoint,
|
|
10239
|
+
siteName,
|
|
10240
|
+
options,
|
|
10241
|
+
region,
|
|
10242
|
+
privacy,
|
|
10243
|
+
gitSource,
|
|
10244
|
+
throwIfSiteExists,
|
|
10245
|
+
providerSpecifics,
|
|
10246
|
+
forcePathStyle,
|
|
10247
|
+
fullClientSpecifics,
|
|
10248
|
+
requestHandler
|
|
10249
|
+
}) => {
|
|
10250
|
+
let generatedBundleDir = null;
|
|
10251
|
+
const result = await deploySiteWithBundle({
|
|
10252
|
+
bucketName,
|
|
10253
|
+
region,
|
|
10254
|
+
siteName,
|
|
10255
|
+
options,
|
|
10256
|
+
privacy,
|
|
10257
|
+
throwIfSiteExists,
|
|
10258
|
+
providerSpecifics,
|
|
10259
|
+
forcePathStyle,
|
|
10260
|
+
fullClientSpecifics,
|
|
10261
|
+
requestHandler,
|
|
10262
|
+
getBundle: async () => {
|
|
10263
|
+
generatedBundleDir = await fullClientSpecifics.bundleSite({
|
|
10264
|
+
publicPath: `/${getSitesKey3(siteName)}/`,
|
|
10265
|
+
webpackOverride: options.webpackOverride ?? ((f) => f),
|
|
10266
|
+
enableCaching: options.enableCaching ?? true,
|
|
10267
|
+
publicDir: options.publicDir ?? null,
|
|
10268
|
+
rootDir: options.rootDir ?? null,
|
|
10269
|
+
ignoreRegisterRootWarning: options.ignoreRegisterRootWarning ?? false,
|
|
10270
|
+
onProgress: options.onBundleProgress ?? (() => {
|
|
10271
|
+
return;
|
|
10272
|
+
}),
|
|
10273
|
+
entryPoint,
|
|
10274
|
+
gitSource,
|
|
10275
|
+
bufferStateDelayInMilliseconds: null,
|
|
10276
|
+
maxTimelineTracks: null,
|
|
10277
|
+
onDirectoryCreated: () => {
|
|
10278
|
+
return;
|
|
10279
|
+
},
|
|
10280
|
+
onPublicDirCopyProgress: () => {
|
|
10281
|
+
return;
|
|
10282
|
+
},
|
|
10283
|
+
onSymlinkDetected: () => {
|
|
10284
|
+
return;
|
|
10285
|
+
},
|
|
10286
|
+
outDir: null,
|
|
10287
|
+
askAIEnabled: options.askAIEnabled ?? true,
|
|
10288
|
+
interactivityEnabled: options.interactivityEnabled ?? true,
|
|
10289
|
+
audioLatencyHint: null,
|
|
10290
|
+
keyboardShortcutsEnabled: options.keyboardShortcutsEnabled ?? true,
|
|
10291
|
+
renderDefaults: null,
|
|
10292
|
+
rspack: options.rspack ?? false,
|
|
10293
|
+
symlinkPublicDir: false
|
|
10294
|
+
});
|
|
10295
|
+
return generatedBundleDir;
|
|
10296
|
+
}
|
|
10297
|
+
});
|
|
10298
|
+
if (generatedBundleDir && fs4.existsSync(generatedBundleDir)) {
|
|
10299
|
+
fs4.rmSync(generatedBundleDir, {
|
|
10300
|
+
recursive: true
|
|
10301
|
+
});
|
|
10302
|
+
}
|
|
10303
|
+
return result;
|
|
10304
|
+
};
|
|
10249
10305
|
var internalDeploySite = wrapWithErrorHandling2(mandatoryDeploySite);
|
|
10250
10306
|
var deploySite = (args) => {
|
|
10251
10307
|
return internalDeploySite({
|
|
@@ -10255,20 +10311,128 @@ var deploySite = (args) => {
|
|
|
10255
10311
|
gitSource: args.gitSource ?? null,
|
|
10256
10312
|
options: args.options ?? {},
|
|
10257
10313
|
privacy: args.privacy ?? "public",
|
|
10258
|
-
siteName: args.siteName ??
|
|
10314
|
+
siteName: args.siteName ?? LambdaClientInternals7.awsImplementation.randomHash(),
|
|
10259
10315
|
indent: false,
|
|
10260
10316
|
logLevel: "info",
|
|
10261
10317
|
throwIfSiteExists: args.throwIfSiteExists ?? false,
|
|
10262
|
-
providerSpecifics:
|
|
10318
|
+
providerSpecifics: LambdaClientInternals7.awsImplementation,
|
|
10263
10319
|
forcePathStyle: args.forcePathStyle ?? false,
|
|
10264
10320
|
fullClientSpecifics: awsFullClientSpecifics,
|
|
10265
10321
|
requestHandler: args.requestHandler ?? null
|
|
10266
10322
|
});
|
|
10267
10323
|
};
|
|
10268
10324
|
|
|
10269
|
-
// src/api/
|
|
10270
|
-
import path5 from "node:path";
|
|
10325
|
+
// src/api/deploy-site-from-bundle.ts
|
|
10271
10326
|
import { LambdaClientInternals as LambdaClientInternals8 } from "@remotion/lambda-client";
|
|
10327
|
+
import { wrapWithErrorHandling as wrapWithErrorHandling3 } from "@remotion/renderer/error-handling";
|
|
10328
|
+
|
|
10329
|
+
// src/shared/validate-bundle-dir.ts
|
|
10330
|
+
import fs5 from "node:fs";
|
|
10331
|
+
import path5 from "node:path";
|
|
10332
|
+
var getPublicPath = (indexHtml) => {
|
|
10333
|
+
const match = indexHtml.match(/window\.remotion_publicPath\s*=\s*("(?:[^"\\]|\\.)*")\s*;/);
|
|
10334
|
+
if (!match) {
|
|
10335
|
+
return null;
|
|
10336
|
+
}
|
|
10337
|
+
try {
|
|
10338
|
+
return JSON.parse(match[1]);
|
|
10339
|
+
} catch (error) {
|
|
10340
|
+
throw new Error("Could not parse `window.remotion_publicPath` in the bundle index.html.", { cause: error });
|
|
10341
|
+
}
|
|
10342
|
+
};
|
|
10343
|
+
var validateNoDirectorySymlinks = (directory, bundleDir) => {
|
|
10344
|
+
for (const entry of fs5.readdirSync(directory, { withFileTypes: true })) {
|
|
10345
|
+
const entryPath = path5.join(directory, entry.name);
|
|
10346
|
+
if (entry.isSymbolicLink()) {
|
|
10347
|
+
if (fs5.statSync(entryPath).isDirectory()) {
|
|
10348
|
+
throw new Error(`The bundle directory ${bundleDir} contains a symbolic link to a directory at ${path5.relative(bundleDir, entryPath)}. Directory symbolic links are not supported by \`deploySiteFromBundle()\`.`);
|
|
10349
|
+
}
|
|
10350
|
+
continue;
|
|
10351
|
+
}
|
|
10352
|
+
if (entry.isDirectory()) {
|
|
10353
|
+
validateNoDirectorySymlinks(entryPath, bundleDir);
|
|
10354
|
+
}
|
|
10355
|
+
}
|
|
10356
|
+
};
|
|
10357
|
+
var validateBundleDir = (bundleDir) => {
|
|
10358
|
+
if (typeof bundleDir !== "string") {
|
|
10359
|
+
throw new TypeError(`The \`bundleDir\` must be a string, but received ${JSON.stringify(bundleDir)}.`);
|
|
10360
|
+
}
|
|
10361
|
+
const resolvedBundleDir = path5.resolve(bundleDir);
|
|
10362
|
+
if (!fs5.existsSync(resolvedBundleDir)) {
|
|
10363
|
+
throw new Error(`The bundle directory ${resolvedBundleDir} does not exist. Run \`npx remotion bundle\` or pass a valid \`bundleDir\`.`);
|
|
10364
|
+
}
|
|
10365
|
+
if (!fs5.statSync(resolvedBundleDir).isDirectory()) {
|
|
10366
|
+
throw new Error(`The bundle path ${resolvedBundleDir} is not a directory. Pass the directory returned by \`bundle()\` or created by \`npx remotion bundle\`.`);
|
|
10367
|
+
}
|
|
10368
|
+
const indexHtmlPath = path5.join(resolvedBundleDir, "index.html");
|
|
10369
|
+
if (!fs5.existsSync(indexHtmlPath) || !fs5.statSync(indexHtmlPath).isFile()) {
|
|
10370
|
+
throw new Error(`The bundle directory ${resolvedBundleDir} does not contain an index.html file at its root.`);
|
|
10371
|
+
}
|
|
10372
|
+
const bundleScriptPath = path5.join(resolvedBundleDir, "bundle.js");
|
|
10373
|
+
if (!fs5.existsSync(bundleScriptPath) || !fs5.statSync(bundleScriptPath).isFile()) {
|
|
10374
|
+
throw new Error(`The bundle directory ${resolvedBundleDir} does not contain a bundle.js file at its root.`);
|
|
10375
|
+
}
|
|
10376
|
+
const indexHtml = fs5.readFileSync(indexHtmlPath, "utf8");
|
|
10377
|
+
const publicPath = getPublicPath(indexHtml);
|
|
10378
|
+
if (publicPath !== "./") {
|
|
10379
|
+
throw new Error(`The bundle at ${resolvedBundleDir} is not relocatable. Rebuild it using Remotion v4.0.497 or newer.`);
|
|
10380
|
+
}
|
|
10381
|
+
validateNoDirectorySymlinks(resolvedBundleDir, resolvedBundleDir);
|
|
10382
|
+
return resolvedBundleDir;
|
|
10383
|
+
};
|
|
10384
|
+
|
|
10385
|
+
// src/api/deploy-site-from-bundle.ts
|
|
10386
|
+
var mandatoryDeploySiteFromBundle = ({
|
|
10387
|
+
bucketName,
|
|
10388
|
+
bundleDir,
|
|
10389
|
+
region,
|
|
10390
|
+
siteName,
|
|
10391
|
+
options,
|
|
10392
|
+
privacy,
|
|
10393
|
+
throwIfSiteExists,
|
|
10394
|
+
providerSpecifics,
|
|
10395
|
+
forcePathStyle,
|
|
10396
|
+
fullClientSpecifics,
|
|
10397
|
+
requestHandler
|
|
10398
|
+
}) => {
|
|
10399
|
+
const resolvedBundleDir = validateBundleDir(bundleDir);
|
|
10400
|
+
return deploySiteWithBundle({
|
|
10401
|
+
bucketName,
|
|
10402
|
+
region,
|
|
10403
|
+
siteName,
|
|
10404
|
+
options,
|
|
10405
|
+
privacy,
|
|
10406
|
+
throwIfSiteExists,
|
|
10407
|
+
providerSpecifics,
|
|
10408
|
+
forcePathStyle,
|
|
10409
|
+
fullClientSpecifics,
|
|
10410
|
+
requestHandler,
|
|
10411
|
+
getBundle: () => Promise.resolve(resolvedBundleDir)
|
|
10412
|
+
});
|
|
10413
|
+
};
|
|
10414
|
+
var internalDeploySiteFromBundle = wrapWithErrorHandling3(mandatoryDeploySiteFromBundle);
|
|
10415
|
+
var deploySiteFromBundle = (args) => {
|
|
10416
|
+
return internalDeploySiteFromBundle({
|
|
10417
|
+
bucketName: args.bucketName,
|
|
10418
|
+
bundleDir: args.bundleDir,
|
|
10419
|
+
region: args.region,
|
|
10420
|
+
options: args.options ?? {},
|
|
10421
|
+
privacy: args.privacy ?? "public",
|
|
10422
|
+
siteName: args.siteName ?? LambdaClientInternals8.awsImplementation.randomHash(),
|
|
10423
|
+
indent: false,
|
|
10424
|
+
logLevel: args.logLevel ?? "info",
|
|
10425
|
+
throwIfSiteExists: args.throwIfSiteExists ?? false,
|
|
10426
|
+
providerSpecifics: LambdaClientInternals8.awsImplementation,
|
|
10427
|
+
forcePathStyle: args.forcePathStyle ?? false,
|
|
10428
|
+
fullClientSpecifics: awsFullClientSpecifics,
|
|
10429
|
+
requestHandler: args.requestHandler ?? null
|
|
10430
|
+
});
|
|
10431
|
+
};
|
|
10432
|
+
|
|
10433
|
+
// src/api/download-media.ts
|
|
10434
|
+
import path6 from "node:path";
|
|
10435
|
+
import { LambdaClientInternals as LambdaClientInternals10 } from "@remotion/lambda-client";
|
|
10272
10436
|
import { REMOTION_BUCKET_PREFIX as REMOTION_BUCKET_PREFIX4 } from "@remotion/lambda-client/constants";
|
|
10273
10437
|
import { RenderInternals as RenderInternals3 } from "@remotion/renderer";
|
|
10274
10438
|
import {
|
|
@@ -10279,7 +10443,7 @@ import {
|
|
|
10279
10443
|
// src/functions/helpers/read-with-progress.ts
|
|
10280
10444
|
import { GetObjectCommand } from "@aws-sdk/client-s3";
|
|
10281
10445
|
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
|
10282
|
-
import { LambdaClientInternals as
|
|
10446
|
+
import { LambdaClientInternals as LambdaClientInternals9 } from "@remotion/lambda-client";
|
|
10283
10447
|
import { RenderInternals as RenderInternals2 } from "@remotion/renderer";
|
|
10284
10448
|
var lambdaDownloadFileWithProgress = async ({
|
|
10285
10449
|
bucketName,
|
|
@@ -10294,7 +10458,7 @@ var lambdaDownloadFileWithProgress = async ({
|
|
|
10294
10458
|
requestHandler,
|
|
10295
10459
|
abortSignal
|
|
10296
10460
|
}) => {
|
|
10297
|
-
const client =
|
|
10461
|
+
const client = LambdaClientInternals9.getS3Client({
|
|
10298
10462
|
region,
|
|
10299
10463
|
customCredentials,
|
|
10300
10464
|
forcePathStyle,
|
|
@@ -10340,7 +10504,7 @@ var internalDownloadMedia = async (input) => {
|
|
|
10340
10504
|
if (!overallProgress.renderMetadata) {
|
|
10341
10505
|
throw new Error("Render did not finish yet");
|
|
10342
10506
|
}
|
|
10343
|
-
const outputPath =
|
|
10507
|
+
const outputPath = path6.resolve(process.cwd(), input.outPath);
|
|
10344
10508
|
RenderInternals3.ensureOutputDirectory(outputPath);
|
|
10345
10509
|
const { key, renderBucketName, customCredentials } = getExpectedOutName({
|
|
10346
10510
|
renderMetadata: overallProgress.renderMetadata,
|
|
@@ -10371,7 +10535,7 @@ var internalDownloadMedia = async (input) => {
|
|
|
10371
10535
|
var downloadMedia = (input) => {
|
|
10372
10536
|
return internalDownloadMedia({
|
|
10373
10537
|
...input,
|
|
10374
|
-
providerSpecifics:
|
|
10538
|
+
providerSpecifics: LambdaClientInternals10.awsImplementation,
|
|
10375
10539
|
forcePathStyle: false,
|
|
10376
10540
|
onProgress: input.onProgress ?? (() => {
|
|
10377
10541
|
return;
|
|
@@ -10387,7 +10551,7 @@ var downloadMedia = (input) => {
|
|
|
10387
10551
|
import { GetFunctionCommand as GetFunctionCommand2 } from "@aws-sdk/client-lambda";
|
|
10388
10552
|
import {
|
|
10389
10553
|
getFunctionVersion,
|
|
10390
|
-
LambdaClientInternals as
|
|
10554
|
+
LambdaClientInternals as LambdaClientInternals11
|
|
10391
10555
|
} from "@remotion/lambda-client";
|
|
10392
10556
|
import { DEFAULT_EPHEMERAL_STORAGE_IN_MB as DEFAULT_EPHEMERAL_STORAGE_IN_MB2 } from "@remotion/lambda-client/constants";
|
|
10393
10557
|
var getFunctionInfo = async ({
|
|
@@ -10396,9 +10560,9 @@ var getFunctionInfo = async ({
|
|
|
10396
10560
|
logLevel,
|
|
10397
10561
|
requestHandler
|
|
10398
10562
|
}) => {
|
|
10399
|
-
|
|
10563
|
+
LambdaClientInternals11.validateAwsRegion(region);
|
|
10400
10564
|
const [functionInfo, version] = await Promise.all([
|
|
10401
|
-
|
|
10565
|
+
LambdaClientInternals11.getLambdaClient(region, undefined, requestHandler).send(new GetFunctionCommand2({
|
|
10402
10566
|
FunctionName: functionName
|
|
10403
10567
|
})),
|
|
10404
10568
|
getFunctionVersion({
|
|
@@ -10418,14 +10582,14 @@ var getFunctionInfo = async ({
|
|
|
10418
10582
|
};
|
|
10419
10583
|
|
|
10420
10584
|
// src/api/get-or-create-bucket.ts
|
|
10421
|
-
import { LambdaClientInternals as
|
|
10585
|
+
import { LambdaClientInternals as LambdaClientInternals12 } from "@remotion/lambda-client";
|
|
10422
10586
|
import { internalGetOrCreateBucket } from "@remotion/serverless";
|
|
10423
10587
|
var getOrCreateBucket = (options) => {
|
|
10424
10588
|
return internalGetOrCreateBucket({
|
|
10425
10589
|
region: options.region,
|
|
10426
10590
|
enableFolderExpiry: options.enableFolderExpiry ?? null,
|
|
10427
10591
|
customCredentials: options.customCredentials ?? null,
|
|
10428
|
-
providerSpecifics:
|
|
10592
|
+
providerSpecifics: LambdaClientInternals12.awsImplementation,
|
|
10429
10593
|
forcePathStyle: false,
|
|
10430
10594
|
skipPutAcl: false,
|
|
10431
10595
|
requestHandler: options.requestHandler ?? null,
|
|
@@ -10445,14 +10609,14 @@ var getRegions = (options) => {
|
|
|
10445
10609
|
|
|
10446
10610
|
// src/api/iam-validation/simulate.ts
|
|
10447
10611
|
import { GetCallerIdentityCommand } from "@aws-sdk/client-sts";
|
|
10448
|
-
import { LambdaClientInternals as
|
|
10612
|
+
import { LambdaClientInternals as LambdaClientInternals14 } from "@remotion/lambda-client";
|
|
10449
10613
|
|
|
10450
10614
|
// src/api/iam-validation/simulate-rule.ts
|
|
10451
10615
|
import { SimulatePrincipalPolicyCommand } from "@aws-sdk/client-iam";
|
|
10452
|
-
import { LambdaClientInternals as
|
|
10616
|
+
import { LambdaClientInternals as LambdaClientInternals13 } from "@remotion/lambda-client";
|
|
10453
10617
|
var simulateRule = async (options) => {
|
|
10454
10618
|
try {
|
|
10455
|
-
const res = await
|
|
10619
|
+
const res = await LambdaClientInternals13.getIamClient(options.region, options.requestHandler).send(new SimulatePrincipalPolicyCommand({
|
|
10456
10620
|
ActionNames: options.actionNames,
|
|
10457
10621
|
PolicySourceArn: options.arn,
|
|
10458
10622
|
ResourceArns: options.resource
|
|
@@ -10487,7 +10651,7 @@ var logPermissionOutput = (output) => {
|
|
|
10487
10651
|
return [getEmojiForStatus(output.decision), output.name].join(" ");
|
|
10488
10652
|
};
|
|
10489
10653
|
var simulatePermissions = async (options) => {
|
|
10490
|
-
const callerIdentity = await
|
|
10654
|
+
const callerIdentity = await LambdaClientInternals14.getStsClient(options.region, options.requestHandler).send(new GetCallerIdentityCommand({}));
|
|
10491
10655
|
if (!callerIdentity?.Arn) {
|
|
10492
10656
|
throw new Error("No valid AWS Caller Identity detected");
|
|
10493
10657
|
}
|
|
@@ -10528,7 +10692,7 @@ var simulatePermissions = async (options) => {
|
|
|
10528
10692
|
|
|
10529
10693
|
// src/cli/index.ts
|
|
10530
10694
|
import { CliInternals as CliInternals23 } from "@remotion/cli";
|
|
10531
|
-
import { LambdaClientInternals as
|
|
10695
|
+
import { LambdaClientInternals as LambdaClientInternals24 } from "@remotion/lambda-client";
|
|
10532
10696
|
import { BINARY_NAME as BINARY_NAME14 } from "@remotion/lambda-client/constants";
|
|
10533
10697
|
import { RenderInternals as RenderInternals7 } from "@remotion/renderer";
|
|
10534
10698
|
import {
|
|
@@ -10559,29 +10723,29 @@ var forceFlagProvided = parsedLambdaCli.f || parsedLambdaCli.force || parsedLamb
|
|
|
10559
10723
|
import { CliInternals as CliInternals8 } from "@remotion/cli";
|
|
10560
10724
|
import {
|
|
10561
10725
|
getCompositionsOnLambda,
|
|
10562
|
-
LambdaClientInternals as
|
|
10726
|
+
LambdaClientInternals as LambdaClientInternals18
|
|
10563
10727
|
} from "@remotion/lambda-client";
|
|
10564
10728
|
import { BINARY_NAME as BINARY_NAME4 } from "@remotion/lambda-client/constants";
|
|
10565
10729
|
import { BrowserSafeApis } from "@remotion/renderer/client";
|
|
10566
10730
|
|
|
10567
10731
|
// src/cli/get-aws-region.ts
|
|
10568
|
-
import { LambdaClientInternals as
|
|
10732
|
+
import { LambdaClientInternals as LambdaClientInternals15 } from "@remotion/lambda-client";
|
|
10569
10733
|
import { DEFAULT_REGION } from "@remotion/lambda-client/constants";
|
|
10570
10734
|
var getAwsRegion = () => {
|
|
10571
10735
|
if (parsedLambdaCli.region) {
|
|
10572
|
-
|
|
10736
|
+
LambdaClientInternals15.validateAwsRegion(parsedLambdaCli.region);
|
|
10573
10737
|
return parsedLambdaCli.region;
|
|
10574
10738
|
}
|
|
10575
|
-
const envVariable =
|
|
10739
|
+
const envVariable = LambdaClientInternals15.getEnvVariable("REMOTION_AWS_REGION") ?? LambdaClientInternals15.getEnvVariable("AWS_REGION");
|
|
10576
10740
|
if (envVariable) {
|
|
10577
|
-
|
|
10741
|
+
LambdaClientInternals15.validateAwsRegion(envVariable);
|
|
10578
10742
|
return envVariable;
|
|
10579
10743
|
}
|
|
10580
10744
|
return DEFAULT_REGION;
|
|
10581
10745
|
};
|
|
10582
10746
|
|
|
10583
10747
|
// src/cli/helpers/find-function-name.ts
|
|
10584
|
-
import { LambdaClientInternals as
|
|
10748
|
+
import { LambdaClientInternals as LambdaClientInternals17 } from "@remotion/lambda-client";
|
|
10585
10749
|
import { BINARY_NAME as BINARY_NAME3 } from "@remotion/lambda-client/constants";
|
|
10586
10750
|
import { VERSION as VERSION4 } from "remotion/version";
|
|
10587
10751
|
|
|
@@ -10596,7 +10760,7 @@ var quit = (exitCode) => {
|
|
|
10596
10760
|
|
|
10597
10761
|
// src/cli/commands/functions/deploy.ts
|
|
10598
10762
|
import { CliInternals as CliInternals3 } from "@remotion/cli";
|
|
10599
|
-
import { LambdaClientInternals as
|
|
10763
|
+
import { LambdaClientInternals as LambdaClientInternals16 } from "@remotion/lambda-client";
|
|
10600
10764
|
import {
|
|
10601
10765
|
DEFAULT_CLOUDWATCH_RETENTION_PERIOD,
|
|
10602
10766
|
DEFAULT_EPHEMERAL_STORAGE_IN_MB as DEFAULT_EPHEMERAL_STORAGE_IN_MB3,
|
|
@@ -10663,9 +10827,9 @@ var functionsDeploySubcommand = async ({
|
|
|
10663
10827
|
const vpcSubnetIds = parsedLambdaCli["vpc-subnet-ids"] ?? undefined;
|
|
10664
10828
|
const vpcSecurityGroupIds = parsedLambdaCli["vpc-security-group-ids"] ?? undefined;
|
|
10665
10829
|
const runtimePreference = parsedLambdaCli["runtime-preference"] ?? "default";
|
|
10666
|
-
|
|
10830
|
+
LambdaClientInternals16.validateMemorySize(memorySizeInMb);
|
|
10667
10831
|
validateTimeout(timeoutInSeconds);
|
|
10668
|
-
|
|
10832
|
+
LambdaClientInternals16.validateDiskSizeInMb(diskSizeInMb);
|
|
10669
10833
|
validateCustomRoleArn(customRoleArn);
|
|
10670
10834
|
validateVpcSubnetIds(vpcSubnetIds);
|
|
10671
10835
|
validateVpcSecurityGroupIds(vpcSecurityGroupIds);
|
|
@@ -11021,7 +11185,7 @@ var findFunctionName = async ({
|
|
|
11021
11185
|
if (cliFlag) {
|
|
11022
11186
|
const compatibleFunctionExists = lambdasWithMatchingVersion.find((l) => l.functionName === cliFlag);
|
|
11023
11187
|
if (!compatibleFunctionExists) {
|
|
11024
|
-
Log.warn({ indent: false, logLevel }, `The name passed to --function-name "${cliFlag}" does not match the naming convention this version of the CLI expects: ${
|
|
11188
|
+
Log.warn({ indent: false, logLevel }, `The name passed to --function-name "${cliFlag}" does not match the naming convention this version of the CLI expects: ${LambdaClientInternals17.innerSpeculateFunctionName({ diskSizeInMb: "[disk]", memorySizeInMb: "[memory]", timeoutInSeconds: "[timeout]" })}.`);
|
|
11025
11189
|
Log.warn({ indent: false, logLevel }, "Remotion relies on the naming to determine function information. This is an unsupported workflow.");
|
|
11026
11190
|
if (lambdasWithMatchingVersion.length > 0) {
|
|
11027
11191
|
Log.info(logOptions, "The following functions were found:");
|
|
@@ -11123,7 +11287,7 @@ var compositionsCommand = async ({
|
|
|
11123
11287
|
darkMode
|
|
11124
11288
|
};
|
|
11125
11289
|
const region = getAwsRegion();
|
|
11126
|
-
|
|
11290
|
+
LambdaClientInternals18.validateServeUrl(serveUrl);
|
|
11127
11291
|
const functionName = await findFunctionName({ logLevel, providerSpecifics });
|
|
11128
11292
|
const comps = await getCompositionsOnLambda({
|
|
11129
11293
|
functionName,
|
|
@@ -11219,7 +11383,7 @@ import {
|
|
|
11219
11383
|
RequestServiceQuotaIncreaseCommand
|
|
11220
11384
|
} from "@aws-sdk/client-service-quotas";
|
|
11221
11385
|
import {
|
|
11222
|
-
LambdaClientInternals as
|
|
11386
|
+
LambdaClientInternals as LambdaClientInternals19
|
|
11223
11387
|
} from "@remotion/lambda-client";
|
|
11224
11388
|
import {
|
|
11225
11389
|
BINARY_NAME as BINARY_NAME6,
|
|
@@ -11235,15 +11399,15 @@ var makeQuotaUrl = ({
|
|
|
11235
11399
|
async function quotasIncreaseCommand(logLevel, requestHandler) {
|
|
11236
11400
|
const region = getAwsRegion();
|
|
11237
11401
|
const [concurrencyLimit, defaultConcurrencyLimit, changes] = await Promise.all([
|
|
11238
|
-
|
|
11402
|
+
LambdaClientInternals19.getServiceQuotasClient(region, requestHandler).send(new GetServiceQuotaCommand({
|
|
11239
11403
|
QuotaCode: LAMBDA_CONCURRENCY_LIMIT_QUOTA,
|
|
11240
11404
|
ServiceCode: "lambda"
|
|
11241
11405
|
})),
|
|
11242
|
-
|
|
11406
|
+
LambdaClientInternals19.getServiceQuotasClient(region, requestHandler).send(new GetAWSDefaultServiceQuotaCommand({
|
|
11243
11407
|
QuotaCode: LAMBDA_CONCURRENCY_LIMIT_QUOTA,
|
|
11244
11408
|
ServiceCode: "lambda"
|
|
11245
11409
|
})),
|
|
11246
|
-
|
|
11410
|
+
LambdaClientInternals19.getServiceQuotasClient(region, requestHandler).send(new ListRequestedServiceQuotaChangeHistoryByQuotaCommand({
|
|
11247
11411
|
QuotaCode: LAMBDA_CONCURRENCY_LIMIT_QUOTA,
|
|
11248
11412
|
ServiceCode: "lambda"
|
|
11249
11413
|
}))
|
|
@@ -11277,7 +11441,7 @@ async function quotasIncreaseCommand(logLevel, requestHandler) {
|
|
|
11277
11441
|
quit(1);
|
|
11278
11442
|
}
|
|
11279
11443
|
try {
|
|
11280
|
-
await
|
|
11444
|
+
await LambdaClientInternals19.getServiceQuotasClient(region, requestHandler).send(new RequestServiceQuotaIncreaseCommand({
|
|
11281
11445
|
QuotaCode: LAMBDA_CONCURRENCY_LIMIT_QUOTA,
|
|
11282
11446
|
DesiredValue: newLimit,
|
|
11283
11447
|
ServiceCode: "lambda"
|
|
@@ -11303,7 +11467,7 @@ import {
|
|
|
11303
11467
|
ListRequestedServiceQuotaChangeHistoryByQuotaCommand as ListRequestedServiceQuotaChangeHistoryByQuotaCommand2
|
|
11304
11468
|
} from "@aws-sdk/client-service-quotas";
|
|
11305
11469
|
import { CliInternals as CliInternals10 } from "@remotion/cli";
|
|
11306
|
-
import { LambdaClientInternals as
|
|
11470
|
+
import { LambdaClientInternals as LambdaClientInternals20 } from "@remotion/lambda-client";
|
|
11307
11471
|
import {
|
|
11308
11472
|
BINARY_NAME as BINARY_NAME7,
|
|
11309
11473
|
LAMBDA_CONCURRENCY_LIMIT_QUOTA as LAMBDA_CONCURRENCY_LIMIT_QUOTA2
|
|
@@ -11313,15 +11477,15 @@ var quotasListCommand = async (logLevel) => {
|
|
|
11313
11477
|
Log.info({ indent: false, logLevel }, CliInternals10.chalk.gray(`Region = ${region}`));
|
|
11314
11478
|
Log.info({ indent: false, logLevel });
|
|
11315
11479
|
const [concurrencyLimit, defaultConcurrencyLimit, changes] = await Promise.all([
|
|
11316
|
-
|
|
11480
|
+
LambdaClientInternals20.getServiceQuotasClient(region, null).send(new GetServiceQuotaCommand2({
|
|
11317
11481
|
QuotaCode: LAMBDA_CONCURRENCY_LIMIT_QUOTA2,
|
|
11318
11482
|
ServiceCode: "lambda"
|
|
11319
11483
|
})),
|
|
11320
|
-
|
|
11484
|
+
LambdaClientInternals20.getServiceQuotasClient(region, null).send(new GetAWSDefaultServiceQuotaCommand2({
|
|
11321
11485
|
QuotaCode: LAMBDA_CONCURRENCY_LIMIT_QUOTA2,
|
|
11322
11486
|
ServiceCode: "lambda"
|
|
11323
11487
|
})),
|
|
11324
|
-
|
|
11488
|
+
LambdaClientInternals20.getServiceQuotasClient(region, null).send(new ListRequestedServiceQuotaChangeHistoryByQuotaCommand2({
|
|
11325
11489
|
QuotaCode: LAMBDA_CONCURRENCY_LIMIT_QUOTA2,
|
|
11326
11490
|
ServiceCode: "lambda"
|
|
11327
11491
|
}))
|
|
@@ -11377,12 +11541,12 @@ var regionsCommand = (logLevel) => {
|
|
|
11377
11541
|
};
|
|
11378
11542
|
|
|
11379
11543
|
// src/cli/commands/render/render.ts
|
|
11380
|
-
import
|
|
11544
|
+
import path8 from "path";
|
|
11381
11545
|
import { CliInternals as CliInternals14 } from "@remotion/cli";
|
|
11382
11546
|
import { ConfigInternals } from "@remotion/cli/config";
|
|
11383
11547
|
import {
|
|
11384
11548
|
getRenderProgress,
|
|
11385
|
-
LambdaClientInternals as
|
|
11549
|
+
LambdaClientInternals as LambdaClientInternals22
|
|
11386
11550
|
} from "@remotion/lambda-client";
|
|
11387
11551
|
import {
|
|
11388
11552
|
BINARY_NAME as BINARY_NAME9,
|
|
@@ -11421,7 +11585,7 @@ function validateMaxRetries(maxRetries) {
|
|
|
11421
11585
|
}
|
|
11422
11586
|
|
|
11423
11587
|
// src/cli/helpers/get-s3-output-provider-from-cli.ts
|
|
11424
|
-
import { LambdaClientInternals as
|
|
11588
|
+
import { LambdaClientInternals as LambdaClientInternals21 } from "@remotion/lambda-client";
|
|
11425
11589
|
var S3_OUTPUT_PROVIDER_ACCESS_KEY_ID_ENV_NAME = "REMOTION_S3_OUTPUT_PROVIDER_ACCESS_KEY_ID";
|
|
11426
11590
|
var S3_OUTPUT_PROVIDER_SECRET_ACCESS_KEY_ENV_NAME = "REMOTION_S3_OUTPUT_PROVIDER_SECRET_ACCESS_KEY";
|
|
11427
11591
|
var getS3OutputProviderFromCli = ({
|
|
@@ -11438,8 +11602,8 @@ var getS3OutputProviderFromCli = ({
|
|
|
11438
11602
|
}
|
|
11439
11603
|
return {
|
|
11440
11604
|
endpoint,
|
|
11441
|
-
accessKeyId:
|
|
11442
|
-
secretAccessKey:
|
|
11605
|
+
accessKeyId: LambdaClientInternals21.getEnvVariable(S3_OUTPUT_PROVIDER_ACCESS_KEY_ID_ENV_NAME) ?? null,
|
|
11606
|
+
secretAccessKey: LambdaClientInternals21.getEnvVariable(S3_OUTPUT_PROVIDER_SECRET_ACCESS_KEY_ENV_NAME) ?? null,
|
|
11443
11607
|
region,
|
|
11444
11608
|
forcePathStyle
|
|
11445
11609
|
};
|
|
@@ -11466,9 +11630,9 @@ var makeOutNameWithCustomCredentials = ({
|
|
|
11466
11630
|
};
|
|
11467
11631
|
|
|
11468
11632
|
// src/cli/helpers/get-webhook-custom-data.ts
|
|
11469
|
-
import
|
|
11633
|
+
import fs6 from "node:fs";
|
|
11470
11634
|
import os from "node:os";
|
|
11471
|
-
import
|
|
11635
|
+
import path7 from "node:path";
|
|
11472
11636
|
import { BrowserSafeApis as BrowserSafeApis2 } from "@remotion/renderer/client";
|
|
11473
11637
|
var getWebhookCustomData = (logLevel) => {
|
|
11474
11638
|
const flagName = BrowserSafeApis2.options.webhookCustomDataOption.cliFlag;
|
|
@@ -11476,10 +11640,10 @@ var getWebhookCustomData = (logLevel) => {
|
|
|
11476
11640
|
if (!webhookFlag) {
|
|
11477
11641
|
return null;
|
|
11478
11642
|
}
|
|
11479
|
-
const jsonFile =
|
|
11643
|
+
const jsonFile = path7.resolve(process.cwd(), webhookFlag);
|
|
11480
11644
|
try {
|
|
11481
|
-
if (
|
|
11482
|
-
const rawJsonData =
|
|
11645
|
+
if (fs6.existsSync(jsonFile)) {
|
|
11646
|
+
const rawJsonData = fs6.readFileSync(jsonFile, "utf-8");
|
|
11483
11647
|
return JSON.parse(rawJsonData);
|
|
11484
11648
|
}
|
|
11485
11649
|
return JSON.parse(webhookFlag);
|
|
@@ -11832,7 +11996,7 @@ var renderCommand = async ({
|
|
|
11832
11996
|
let composition = args[1];
|
|
11833
11997
|
if (!composition) {
|
|
11834
11998
|
Log.info({ indent: false, logLevel }, "No compositions passed. Fetching compositions...");
|
|
11835
|
-
|
|
11999
|
+
LambdaClientInternals22.validateServeUrl(serveUrl);
|
|
11836
12000
|
if (!serveUrl.startsWith("https://") && !serveUrl.startsWith("http://")) {
|
|
11837
12001
|
throw Error(`Passing the shorthand serve URL without composition name is currently not supported.
|
|
11838
12002
|
Make sure to pass a composition name after the shorthand serve URL or pass the complete serveURL without composition name to get to choose between all compositions.`);
|
|
@@ -11928,7 +12092,7 @@ var renderCommand = async ({
|
|
|
11928
12092
|
const concurrency = parsedLambdaCli["concurrency"] ?? undefined;
|
|
11929
12093
|
const concurrencyPerLambda = parsedLambdaCli["concurrency-per-lambda"] ?? 1;
|
|
11930
12094
|
const webhookCustomData = getWebhookCustomData(logLevel);
|
|
11931
|
-
const res = await
|
|
12095
|
+
const res = await LambdaClientInternals22.internalRenderMediaOnLambdaRaw({
|
|
11932
12096
|
functionName,
|
|
11933
12097
|
serveUrl,
|
|
11934
12098
|
inputProps,
|
|
@@ -12036,7 +12200,7 @@ var renderCommand = async ({
|
|
|
12036
12200
|
fallback: `Render folder: ${res.folderInS3Console}`
|
|
12037
12201
|
}));
|
|
12038
12202
|
}
|
|
12039
|
-
const adheresToFunctionNameConvention =
|
|
12203
|
+
const adheresToFunctionNameConvention = LambdaClientInternals22.parseFunctionName(functionName);
|
|
12040
12204
|
const status = await getRenderProgress({
|
|
12041
12205
|
functionName,
|
|
12042
12206
|
bucketName: res.bucketName,
|
|
@@ -12107,7 +12271,7 @@ var renderCommand = async ({
|
|
|
12107
12271
|
url: newStatus.outputFile
|
|
12108
12272
|
})), CliInternals14.chalk.gray(CliInternals14.formatBytes(newStatus.outputSizeInBytes)));
|
|
12109
12273
|
if (downloadOrNothing) {
|
|
12110
|
-
const relativeOutputPath =
|
|
12274
|
+
const relativeOutputPath = path8.relative(process.cwd(), downloadOrNothing.outputPath);
|
|
12111
12275
|
Log.info({ indent: false, logLevel }, CliInternals14.chalk.blue("↓".padEnd(CliInternals14.LABEL_WIDTH)), CliInternals14.chalk.blue(CliInternals14.makeHyperlink({
|
|
12112
12276
|
url: `file://${downloadOrNothing.outputPath}`,
|
|
12113
12277
|
text: relativeOutputPath,
|
|
@@ -12608,10 +12772,10 @@ var sitesCommand = (args, remotionRoot, logLevel, providerSpecifics) => {
|
|
|
12608
12772
|
};
|
|
12609
12773
|
|
|
12610
12774
|
// src/cli/commands/still.ts
|
|
12611
|
-
import
|
|
12775
|
+
import path9 from "path";
|
|
12612
12776
|
import { CliInternals as CliInternals21 } from "@remotion/cli";
|
|
12613
12777
|
import { ConfigInternals as ConfigInternals3 } from "@remotion/cli/config";
|
|
12614
|
-
import { LambdaClientInternals as
|
|
12778
|
+
import { LambdaClientInternals as LambdaClientInternals23 } from "@remotion/lambda-client";
|
|
12615
12779
|
import {
|
|
12616
12780
|
BINARY_NAME as BINARY_NAME12,
|
|
12617
12781
|
DEFAULT_MAX_RETRIES as DEFAULT_MAX_RETRIES2,
|
|
@@ -12725,7 +12889,7 @@ var stillCommand = async ({
|
|
|
12725
12889
|
}).value;
|
|
12726
12890
|
if (!composition) {
|
|
12727
12891
|
Log.info({ indent: false, logLevel }, "No compositions passed. Fetching compositions...");
|
|
12728
|
-
|
|
12892
|
+
LambdaClientInternals23.validateServeUrl(serveUrl);
|
|
12729
12893
|
if (!serveUrl.startsWith("https://") && !serveUrl.startsWith("http://")) {
|
|
12730
12894
|
throw Error(`Passing the shorthand serve URL without composition name is currently not supported.
|
|
12731
12895
|
Make sure to pass a composition name after the shorthand serve URL or pass the complete serveURL without composition name to get to choose between all compositions.`);
|
|
@@ -12817,7 +12981,7 @@ var stillCommand = async ({
|
|
|
12817
12981
|
const jpegQuality = jpegQualityOption2.getValue({
|
|
12818
12982
|
commandLine: parsedCli
|
|
12819
12983
|
}).value;
|
|
12820
|
-
const res = await
|
|
12984
|
+
const res = await LambdaClientInternals23.internalRenderStillOnLambda({
|
|
12821
12985
|
functionName,
|
|
12822
12986
|
serveUrl,
|
|
12823
12987
|
inputProps,
|
|
@@ -12863,7 +13027,7 @@ var stillCommand = async ({
|
|
|
12863
13027
|
mediaCacheSizeInBytes,
|
|
12864
13028
|
isProduction: parsedLambdaCli[BrowserSafeApis5.options.isProductionOption.cliFlag] ?? true
|
|
12865
13029
|
});
|
|
12866
|
-
Log.info({ indent: false, logLevel }, CliInternals21.chalk.gray(`Render ID: ${CliInternals21.makeHyperlink({ text: res.renderId, fallback: res.renderId, url:
|
|
13030
|
+
Log.info({ indent: false, logLevel }, CliInternals21.chalk.gray(`Render ID: ${CliInternals21.makeHyperlink({ text: res.renderId, fallback: res.renderId, url: LambdaClientInternals23.getS3RenderUrl({ bucketName: res.bucketName, renderId: res.renderId, region: getAwsRegion() }) })}`));
|
|
12867
13031
|
Log.info({ indent: false, logLevel }, CliInternals21.chalk.gray(`Bucket: ${CliInternals21.makeHyperlink({ text: res.bucketName, fallback: res.bucketName, url: `https://${getAwsRegion()}.console.aws.amazon.com/s3/buckets/${res.bucketName}/?region=${getAwsRegion()}` })}`));
|
|
12868
13032
|
const artifactProgress = makeArtifactProgress(res.artifacts);
|
|
12869
13033
|
if (artifactProgress) {
|
|
@@ -12893,7 +13057,7 @@ var stillCommand = async ({
|
|
|
12893
13057
|
},
|
|
12894
13058
|
requestHandler: null
|
|
12895
13059
|
});
|
|
12896
|
-
const relativePath =
|
|
13060
|
+
const relativePath = path9.relative(process.cwd(), outputPath);
|
|
12897
13061
|
Log.info({ indent: false, logLevel }, chalk.blue("↓".padEnd(CliInternals21.LABEL_WIDTH)), chalk.blue(CliInternals21.makeHyperlink({
|
|
12898
13062
|
url: "file://" + outputPath,
|
|
12899
13063
|
text: relativePath,
|
|
@@ -13037,7 +13201,7 @@ var matchCommand = ({
|
|
|
13037
13201
|
};
|
|
13038
13202
|
var executeCommand = async (args, remotionRoot, logLevel, _providerSpecifics, fullClientSpecifics) => {
|
|
13039
13203
|
try {
|
|
13040
|
-
const providerSpecifics = _providerSpecifics ??
|
|
13204
|
+
const providerSpecifics = _providerSpecifics ?? LambdaClientInternals24.awsImplementation;
|
|
13041
13205
|
await matchCommand({
|
|
13042
13206
|
args,
|
|
13043
13207
|
remotionRoot,
|
|
@@ -13081,8 +13245,8 @@ AWS returned an "ConcurrentInvocationLimitExceeded" error message which could me
|
|
|
13081
13245
|
`.trim());
|
|
13082
13246
|
}
|
|
13083
13247
|
if (error.stack?.includes("The security token included in the request is invalid")) {
|
|
13084
|
-
const keyButDoesntStartWithAki =
|
|
13085
|
-
const pureKeyButDoesntStartWithAki =
|
|
13248
|
+
const keyButDoesntStartWithAki = LambdaClientInternals24.getEnvVariable("REMOTION_AWS_ACCESS_KEY_ID") && !LambdaClientInternals24.getEnvVariable("REMOTION_AWS_ACCESS_KEY_ID").startsWith("AKI");
|
|
13249
|
+
const pureKeyButDoesntStartWithAki = LambdaClientInternals24.getEnvVariable("AWS_ACCESS_KEY_ID") && !LambdaClientInternals24.getEnvVariable("AWS_ACCESS_KEY_ID").startsWith("AKI");
|
|
13086
13250
|
if (keyButDoesntStartWithAki || pureKeyButDoesntStartWithAki) {
|
|
13087
13251
|
Log.error({ indent: false, logLevel }, `
|
|
13088
13252
|
AWS returned an error message "The security token included in the request is invalid". A possible reason is that your AWS Access key ID is set but doesn't start with "AKI", which it usually should. The original message is:
|
|
@@ -13154,6 +13318,7 @@ export {
|
|
|
13154
13318
|
getAwsClient,
|
|
13155
13319
|
estimatePrice,
|
|
13156
13320
|
downloadMedia,
|
|
13321
|
+
deploySiteFromBundle,
|
|
13157
13322
|
deploySite,
|
|
13158
13323
|
deployFunction,
|
|
13159
13324
|
deleteSite,
|