@remotion/lambda-client 4.0.261

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/.turbo/turbo-make.log +6 -0
  2. package/LICENSE.md +49 -0
  3. package/README.md +5 -0
  4. package/bundle.ts +20 -0
  5. package/dist/app-router-webhook.d.ts +10 -0
  6. package/dist/app-router-webhook.js +43 -0
  7. package/dist/apply-lifecycle.d.ts +8 -0
  8. package/dist/apply-lifecycle.js +18 -0
  9. package/dist/aws-clients.d.ts +11 -0
  10. package/dist/aws-clients.js +51 -0
  11. package/dist/aws-provider.d.ts +23 -0
  12. package/dist/aws-provider.js +94 -0
  13. package/dist/bucket-exists.d.ts +3 -0
  14. package/dist/bucket-exists.js +26 -0
  15. package/dist/call-lambda-async.d.ts +2 -0
  16. package/dist/call-lambda-async.js +20 -0
  17. package/dist/call-lambda-streaming.d.ts +6 -0
  18. package/dist/call-lambda-streaming.js +125 -0
  19. package/dist/call-lambda-sync.d.ts +2 -0
  20. package/dist/call-lambda-sync.js +30 -0
  21. package/dist/check-credentials.d.ts +1 -0
  22. package/dist/check-credentials.js +39 -0
  23. package/dist/clean-items.d.ts +16 -0
  24. package/dist/clean-items.js +25 -0
  25. package/dist/constants.d.ts +25 -0
  26. package/dist/constants.js +26 -0
  27. package/dist/content-disposition-header.d.ts +2 -0
  28. package/dist/content-disposition-header.js +50 -0
  29. package/dist/convert-to-serve-url.d.ts +6 -0
  30. package/dist/convert-to-serve-url.js +14 -0
  31. package/dist/create-bucket.d.ts +3 -0
  32. package/dist/create-bucket.js +45 -0
  33. package/dist/delete-file.d.ts +3 -0
  34. package/dist/delete-file.js +12 -0
  35. package/dist/delete-function.d.ts +4 -0
  36. package/dist/delete-function.js +15 -0
  37. package/dist/delete-render.d.ts +20 -0
  38. package/dist/delete-render.js +84 -0
  39. package/dist/encode-aws-url-params.d.ts +1 -0
  40. package/dist/encode-aws-url-params.js +7 -0
  41. package/dist/esm/constants.mjs +45 -0
  42. package/dist/esm/index.mjs +6516 -0
  43. package/dist/esm/regions.mjs +50 -0
  44. package/dist/estimate-price.d.ts +17 -0
  45. package/dist/estimate-price.js +45 -0
  46. package/dist/express-webhook.d.ts +3 -0
  47. package/dist/express-webhook.js +46 -0
  48. package/dist/get-account-id.d.ts +3 -0
  49. package/dist/get-account-id.js +15 -0
  50. package/dist/get-aws-client.d.ts +30 -0
  51. package/dist/get-aws-client.js +56 -0
  52. package/dist/get-aws-urls.d.ts +25 -0
  53. package/dist/get-aws-urls.js +31 -0
  54. package/dist/get-buckets.d.ts +9 -0
  55. package/dist/get-buckets.js +62 -0
  56. package/dist/get-compositions-on-lambda.d.ts +18 -0
  57. package/dist/get-compositions-on-lambda.js +59 -0
  58. package/dist/get-credentials.d.ts +9 -0
  59. package/dist/get-credentials.js +55 -0
  60. package/dist/get-env-variable.d.ts +1 -0
  61. package/dist/get-env-variable.js +15 -0
  62. package/dist/get-function-name.d.ts +8 -0
  63. package/dist/get-function-name.js +17 -0
  64. package/dist/get-function-version.d.ts +7 -0
  65. package/dist/get-function-version.js +32 -0
  66. package/dist/get-functions.d.ts +8 -0
  67. package/dist/get-functions.js +77 -0
  68. package/dist/get-output-url-from-metadata.d.ts +3 -0
  69. package/dist/get-output-url-from-metadata.js +18 -0
  70. package/dist/get-render-progress.d.ts +15 -0
  71. package/dist/get-render-progress.js +45 -0
  72. package/dist/get-s3-client.d.ts +9 -0
  73. package/dist/get-s3-client.js +14 -0
  74. package/dist/get-service-client.d.ts +23 -0
  75. package/dist/get-service-client.js +120 -0
  76. package/dist/get-sites.d.ts +29 -0
  77. package/dist/get-sites.js +79 -0
  78. package/dist/head-file.d.ts +3 -0
  79. package/dist/head-file.js +17 -0
  80. package/dist/index.d.ts +123 -0
  81. package/dist/index.js +104 -0
  82. package/dist/is-cli.d.ts +2 -0
  83. package/dist/is-cli.js +10 -0
  84. package/dist/is-flaky-error.d.ts +1 -0
  85. package/dist/is-flaky-error.js +77 -0
  86. package/dist/is-in-lambda.d.ts +1 -0
  87. package/dist/is-in-lambda.js +9 -0
  88. package/dist/is-likely-to-have-aws-profile.d.ts +1 -0
  89. package/dist/is-likely-to-have-aws-profile.js +50 -0
  90. package/dist/lambda-version-string.d.ts +1 -0
  91. package/dist/lambda-version-string.js +7 -0
  92. package/dist/lifecycle-rules.d.ts +10 -0
  93. package/dist/lifecycle-rules.js +61 -0
  94. package/dist/lifecycle.d.ts +7 -0
  95. package/dist/lifecycle.js +24 -0
  96. package/dist/list-objects.d.ts +3 -0
  97. package/dist/list-objects.js +67 -0
  98. package/dist/make-lambda-payload.d.ts +54 -0
  99. package/dist/make-lambda-payload.js +148 -0
  100. package/dist/make-s3-url.d.ts +6 -0
  101. package/dist/make-s3-url.js +7 -0
  102. package/dist/p-limit.d.ts +1 -0
  103. package/dist/p-limit.js +57 -0
  104. package/dist/pages-router-webhook.d.ts +5 -0
  105. package/dist/pages-router-webhook.js +48 -0
  106. package/dist/parse-function-name.d.ts +8 -0
  107. package/dist/parse-function-name.js +17 -0
  108. package/dist/presign-url.d.ts +14 -0
  109. package/dist/presign-url.js +64 -0
  110. package/dist/price-per-1s.d.ts +37 -0
  111. package/dist/price-per-1s.js +822 -0
  112. package/dist/random-hash.d.ts +1 -0
  113. package/dist/random-hash.js +13 -0
  114. package/dist/read-file.d.ts +9 -0
  115. package/dist/read-file.js +18 -0
  116. package/dist/regions.d.ts +3 -0
  117. package/dist/regions.js +48 -0
  118. package/dist/render-media-on-lambda.d.ts +61 -0
  119. package/dist/render-media-on-lambda.js +127 -0
  120. package/dist/render-still-on-lambda.d.ts +53 -0
  121. package/dist/render-still-on-lambda.js +118 -0
  122. package/dist/runtime-preference.d.ts +2 -0
  123. package/dist/runtime-preference.js +8 -0
  124. package/dist/speculate-function-name.d.ts +6 -0
  125. package/dist/speculate-function-name.js +20 -0
  126. package/dist/test/encode-aws-url.test.d.ts +1 -0
  127. package/dist/test/encode-aws-url.test.js +8 -0
  128. package/dist/test/price-calculation.test.d.ts +1 -0
  129. package/dist/test/price-calculation.test.js +61 -0
  130. package/dist/test/pricing.test.d.ts +1 -0
  131. package/dist/test/pricing.test.js +27 -0
  132. package/dist/test/validate-disk-size-in-mb.test.d.ts +1 -0
  133. package/dist/test/validate-disk-size-in-mb.test.js +14 -0
  134. package/dist/validate-aws-region.d.ts +2 -0
  135. package/dist/validate-aws-region.js +9 -0
  136. package/dist/validate-bucketname.d.ts +4 -0
  137. package/dist/validate-bucketname.js +15 -0
  138. package/dist/validate-disk-size-in-mb.d.ts +1 -0
  139. package/dist/validate-disk-size-in-mb.js +23 -0
  140. package/dist/validate-lambda-codec.d.ts +2 -0
  141. package/dist/validate-lambda-codec.js +21 -0
  142. package/dist/validate-memory-size.d.ts +1 -0
  143. package/dist/validate-memory-size.js +22 -0
  144. package/dist/validate-presign-expiration.d.ts +1 -0
  145. package/dist/validate-presign-expiration.js +29 -0
  146. package/dist/validate-serveurl.d.ts +1 -0
  147. package/dist/validate-serveurl.js +9 -0
  148. package/dist/validate-webhook-signature.d.ts +5 -0
  149. package/dist/validate-webhook-signature.js +28 -0
  150. package/dist/write-file.d.ts +5 -0
  151. package/dist/write-file.js +56 -0
  152. package/eslint.config.mjs +5 -0
  153. package/package.json +71 -0
  154. package/src/app-router-webhook.ts +64 -0
  155. package/src/apply-lifecycle.ts +30 -0
  156. package/src/aws-clients.ts +60 -0
  157. package/src/aws-provider.ts +135 -0
  158. package/src/bucket-exists.ts +28 -0
  159. package/src/call-lambda-async.ts +39 -0
  160. package/src/call-lambda-streaming.ts +219 -0
  161. package/src/call-lambda-sync.ts +55 -0
  162. package/src/check-credentials.ts +51 -0
  163. package/src/clean-items.ts +47 -0
  164. package/src/constants.ts +38 -0
  165. package/src/content-disposition-header.ts +64 -0
  166. package/src/convert-to-serve-url.ts +24 -0
  167. package/src/create-bucket.ts +67 -0
  168. package/src/delete-file.ts +30 -0
  169. package/src/delete-function.ts +24 -0
  170. package/src/delete-render.ts +107 -0
  171. package/src/encode-aws-url-params.ts +3 -0
  172. package/src/estimate-price.ts +95 -0
  173. package/src/express-webhook.ts +50 -0
  174. package/src/get-account-id.ts +22 -0
  175. package/src/get-aws-client.ts +59 -0
  176. package/src/get-aws-urls.ts +85 -0
  177. package/src/get-buckets.ts +81 -0
  178. package/src/get-compositions-on-lambda.ts +104 -0
  179. package/src/get-credentials.ts +81 -0
  180. package/src/get-env-variable.ts +15 -0
  181. package/src/get-function-name.ts +24 -0
  182. package/src/get-function-version.ts +43 -0
  183. package/src/get-functions.ts +103 -0
  184. package/src/get-output-url-from-metadata.ts +23 -0
  185. package/src/get-render-progress.ts +62 -0
  186. package/src/get-s3-client.ts +22 -0
  187. package/src/get-service-client.ts +178 -0
  188. package/src/get-sites.ts +128 -0
  189. package/src/head-file.ts +28 -0
  190. package/src/index.ts +147 -0
  191. package/src/is-cli.ts +7 -0
  192. package/src/is-flaky-error.ts +101 -0
  193. package/src/is-in-lambda.ts +5 -0
  194. package/src/is-likely-to-have-aws-profile.ts +55 -0
  195. package/src/lambda-version-string.ts +5 -0
  196. package/src/lifecycle-rules.ts +104 -0
  197. package/src/lifecycle.ts +44 -0
  198. package/src/list-objects.ts +83 -0
  199. package/src/make-lambda-payload.ts +317 -0
  200. package/src/make-s3-url.ts +13 -0
  201. package/src/p-limit.ts +75 -0
  202. package/src/pages-router-webhook.ts +58 -0
  203. package/src/parse-function-name.ts +24 -0
  204. package/src/presign-url.ts +110 -0
  205. package/src/price-per-1s.ts +863 -0
  206. package/src/random-hash.ts +10 -0
  207. package/src/read-file.ts +31 -0
  208. package/src/regions.ts +48 -0
  209. package/src/render-media-on-lambda.ts +216 -0
  210. package/src/render-still-on-lambda.ts +195 -0
  211. package/src/runtime-preference.ts +7 -0
  212. package/src/speculate-function-name.ts +27 -0
  213. package/src/test/encode-aws-url.test.ts +7 -0
  214. package/src/test/price-calculation.test.ts +61 -0
  215. package/src/test/pricing.test.ts +32 -0
  216. package/src/test/validate-disk-size-in-mb.test.ts +15 -0
  217. package/src/validate-aws-region.ts +14 -0
  218. package/src/validate-bucketname.ts +24 -0
  219. package/src/validate-disk-size-in-mb.ts +37 -0
  220. package/src/validate-lambda-codec.ts +28 -0
  221. package/src/validate-memory-size.ts +31 -0
  222. package/src/validate-presign-expiration.ts +46 -0
  223. package/src/validate-serveurl.ts +9 -0
  224. package/src/validate-webhook-signature.ts +42 -0
  225. package/src/write-file.ts +74 -0
  226. package/tsconfig.json +9 -0
  227. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanItems = void 0;
4
+ const p_limit_1 = require("./p-limit");
5
+ const limit = (0, p_limit_1.pLimit)(10);
6
+ const cleanItems = ({ bucket, onAfterItemDeleted, onBeforeItemDeleted, region, list, providerSpecifics, forcePathStyle, }) => {
7
+ return Promise.all(list.map((object) => limit(async () => {
8
+ onBeforeItemDeleted({
9
+ bucketName: bucket,
10
+ itemName: object,
11
+ });
12
+ await providerSpecifics.deleteFile({
13
+ bucketName: bucket,
14
+ key: object,
15
+ region,
16
+ customCredentials: null,
17
+ forcePathStyle,
18
+ });
19
+ onAfterItemDeleted({
20
+ bucketName: bucket,
21
+ itemName: object,
22
+ });
23
+ })));
24
+ };
25
+ exports.cleanItems = cleanItems;
@@ -0,0 +1,25 @@
1
+ import type { GenericRenderProgress, Privacy } from '@remotion/serverless-client';
2
+ import type { AwsProvider } from './aws-provider';
3
+ import type { AwsRegion } from './regions';
4
+ export declare const MIN_MEMORY = 512;
5
+ export declare const MAX_MEMORY = 10240;
6
+ export declare const DEFAULT_MEMORY_SIZE = 2048;
7
+ export declare const DEFAULT_TIMEOUT = 120;
8
+ export declare const MIN_TIMEOUT = 15;
9
+ export declare const MAX_TIMEOUT = 900;
10
+ export declare const DEFAULT_FRAMES_PER_LAMBDA = 20;
11
+ export declare const BINARY_NAME = "remotion lambda";
12
+ export declare const DEFAULT_REGION: AwsRegion;
13
+ export declare const DEFAULT_MAX_RETRIES = 1;
14
+ export declare const MAX_EPHEMERAL_STORAGE_IN_MB = 10240;
15
+ export declare const DEFAULT_EPHEMERAL_STORAGE_IN_MB = 2048;
16
+ export declare const MIN_EPHEMERAL_STORAGE_IN_MB = 512;
17
+ export declare const DEFAULT_OUTPUT_PRIVACY: Privacy;
18
+ export declare const DEFAULT_CLOUDWATCH_RETENTION_PERIOD = 14;
19
+ export declare const RENDER_FN_PREFIX = "remotion-render-";
20
+ export declare const LOG_GROUP_PREFIX = "/aws/lambda/";
21
+ export declare const LAMBDA_INSIGHTS_PREFIX = "/aws/lambda-insights";
22
+ export declare const getSitesKey: (siteId: string) => string;
23
+ export type RenderProgress = GenericRenderProgress<AwsProvider>;
24
+ export declare const LAMBDA_CONCURRENCY_LIMIT_QUOTA = "L-B99A9384";
25
+ export declare const REMOTION_BUCKET_PREFIX = "remotionlambda-";
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REMOTION_BUCKET_PREFIX = exports.LAMBDA_CONCURRENCY_LIMIT_QUOTA = exports.getSitesKey = exports.LAMBDA_INSIGHTS_PREFIX = exports.LOG_GROUP_PREFIX = exports.RENDER_FN_PREFIX = exports.DEFAULT_CLOUDWATCH_RETENTION_PERIOD = exports.DEFAULT_OUTPUT_PRIVACY = exports.MIN_EPHEMERAL_STORAGE_IN_MB = exports.DEFAULT_EPHEMERAL_STORAGE_IN_MB = exports.MAX_EPHEMERAL_STORAGE_IN_MB = exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_REGION = exports.BINARY_NAME = exports.DEFAULT_FRAMES_PER_LAMBDA = exports.MAX_TIMEOUT = exports.MIN_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.DEFAULT_MEMORY_SIZE = exports.MAX_MEMORY = exports.MIN_MEMORY = void 0;
4
+ exports.MIN_MEMORY = 512;
5
+ exports.MAX_MEMORY = 10240;
6
+ exports.DEFAULT_MEMORY_SIZE = 2048;
7
+ exports.DEFAULT_TIMEOUT = 120;
8
+ exports.MIN_TIMEOUT = 15;
9
+ exports.MAX_TIMEOUT = 900;
10
+ exports.DEFAULT_FRAMES_PER_LAMBDA = 20;
11
+ exports.BINARY_NAME = 'remotion lambda';
12
+ exports.DEFAULT_REGION = 'us-east-1';
13
+ exports.DEFAULT_MAX_RETRIES = 1;
14
+ exports.MAX_EPHEMERAL_STORAGE_IN_MB = 10240;
15
+ // TODO: In V5, Enable set this to 10240
16
+ exports.DEFAULT_EPHEMERAL_STORAGE_IN_MB = 2048;
17
+ exports.MIN_EPHEMERAL_STORAGE_IN_MB = 512;
18
+ exports.DEFAULT_OUTPUT_PRIVACY = 'public';
19
+ exports.DEFAULT_CLOUDWATCH_RETENTION_PERIOD = 14;
20
+ exports.RENDER_FN_PREFIX = 'remotion-render-';
21
+ exports.LOG_GROUP_PREFIX = '/aws/lambda/';
22
+ exports.LAMBDA_INSIGHTS_PREFIX = '/aws/lambda-insights';
23
+ const getSitesKey = (siteId) => `sites/${siteId}`;
24
+ exports.getSitesKey = getSitesKey;
25
+ exports.LAMBDA_CONCURRENCY_LIMIT_QUOTA = 'L-B99A9384';
26
+ exports.REMOTION_BUCKET_PREFIX = 'remotionlambda-';
@@ -0,0 +1,2 @@
1
+ import type { DownloadBehavior } from '@remotion/serverless-client';
2
+ export declare const getContentDispositionHeader: (behavior: DownloadBehavior | null) => string | undefined;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getContentDispositionHeader = void 0;
4
+ // By setting the Content-Disposition header in an S3 object,
5
+ // you can control if the user downloads the item if you
6
+ // visit the link
7
+ const problematicCharacters = {
8
+ '%3A': ':',
9
+ '%2F': '/',
10
+ '%3F': '?',
11
+ '%23': '#',
12
+ '%5B': '[',
13
+ '%5D': ']',
14
+ '%40': '@',
15
+ '%21': '!',
16
+ '%24': '$',
17
+ '%26': '&',
18
+ '%27': "'",
19
+ '%28': '(',
20
+ '%29': ')',
21
+ '%2A': '*',
22
+ '%2B': '+',
23
+ '%2C': ',',
24
+ '%3B': ';',
25
+ };
26
+ const includesHexOfUnsafeChar = (path) => {
27
+ for (const key of Object.keys(problematicCharacters)) {
28
+ if (path.includes(key)) {
29
+ return { containsHex: true };
30
+ }
31
+ }
32
+ return { containsHex: false };
33
+ };
34
+ const getContentDispositionHeader = (behavior) => {
35
+ if (behavior === null) {
36
+ return undefined;
37
+ }
38
+ if (behavior.type === 'play-in-browser') {
39
+ return undefined;
40
+ }
41
+ if (behavior.fileName === null) {
42
+ return `attachment`;
43
+ }
44
+ const { containsHex } = includesHexOfUnsafeChar(behavior.fileName);
45
+ if (containsHex) {
46
+ return `attachment; filename="${behavior.fileName}"`;
47
+ }
48
+ return `attachment; filename="${encodeURIComponent(behavior.fileName)}"`;
49
+ };
50
+ exports.getContentDispositionHeader = getContentDispositionHeader;
@@ -0,0 +1,6 @@
1
+ import type { AwsRegion } from './regions';
2
+ export declare const convertToServeUrlImplementation: ({ urlOrId, region, bucketName, }: {
3
+ urlOrId: string;
4
+ region: AwsRegion;
5
+ bucketName: string;
6
+ }) => string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertToServeUrlImplementation = void 0;
4
+ const serverless_client_1 = require("@remotion/serverless-client");
5
+ const convertToServeUrlImplementation = ({ urlOrId, region, bucketName, }) => {
6
+ if (urlOrId.startsWith('src/')) {
7
+ throw new Error(`Remotion Lambda can only render based on a URL in the cloud. It seems like you passed a local file: ${urlOrId}. Read the setup guide for Remotion Lambda ${serverless_client_1.DOCS_URL}/docs/lambda/setup`);
8
+ }
9
+ if (urlOrId.startsWith('http://') || urlOrId.startsWith('https://')) {
10
+ return urlOrId;
11
+ }
12
+ return `https://${bucketName}.s3.${region}.amazonaws.com/sites/${urlOrId}/index.html`;
13
+ };
14
+ exports.convertToServeUrlImplementation = convertToServeUrlImplementation;
@@ -0,0 +1,3 @@
1
+ import type { ProviderSpecifics } from '@remotion/serverless-client';
2
+ import type { AwsProvider } from './aws-provider';
3
+ export declare const createBucket: ProviderSpecifics<AwsProvider>['createBucket'];
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBucket = void 0;
4
+ const client_s3_1 = require("@aws-sdk/client-s3");
5
+ const get_s3_client_1 = require("./get-s3-client");
6
+ const createBucket = async ({ region, bucketName, forcePathStyle }) => {
7
+ await (0, get_s3_client_1.getS3Client)({ region, customCredentials: null, forcePathStyle }).send(new client_s3_1.CreateBucketCommand({
8
+ Bucket: bucketName,
9
+ }));
10
+ try {
11
+ await (0, get_s3_client_1.getS3Client)({ region, customCredentials: null, forcePathStyle }).send(new client_s3_1.DeleteBucketOwnershipControlsCommand({
12
+ Bucket: bucketName,
13
+ }));
14
+ }
15
+ catch (err) {
16
+ if (err.message.includes('Access Denied')) {
17
+ throw new Error('Since April 2023, more AWS permissions are required to create an S3 bucket. You need to update your user policy to continue. See https://remotion.dev/docs/lambda/s3-public-access for instructions on how to resolve this issue.');
18
+ }
19
+ throw err;
20
+ }
21
+ try {
22
+ await (0, get_s3_client_1.getS3Client)({ region, customCredentials: null, forcePathStyle }).send(new client_s3_1.DeletePublicAccessBlockCommand({
23
+ Bucket: bucketName,
24
+ }));
25
+ }
26
+ catch (err) {
27
+ if (err.message.includes('Access Denied')) {
28
+ throw new Error('PARTIAL SUCCESS: The s3:PutBucketOwnershipControls was found, but the s3:PutBucketPublicAccessBlock permission is not given. Since April 2023, more AWS permissions are required to create an S3 bucket. You need to update your user policy to continue. You need to update your user policy to continue. See https://remotion.dev/docs/lambda/s3-public-access for instructions on how to resolve this issue.');
29
+ }
30
+ throw err;
31
+ }
32
+ try {
33
+ await (0, get_s3_client_1.getS3Client)({ region, customCredentials: null, forcePathStyle }).send(new client_s3_1.PutBucketAclCommand({
34
+ Bucket: bucketName,
35
+ ACL: 'public-read',
36
+ }));
37
+ }
38
+ catch (err) {
39
+ if (err.message.includes('The bucket does not allow ACLs')) {
40
+ throw new Error(`Could not add an ACL to the bucket. This might have happened because the bucket was already successfully created before but then failed to configure correctly. We recommend to delete the bucket (${bucketName}) if it is empty and start over to fix the problem.`);
41
+ }
42
+ throw err;
43
+ }
44
+ };
45
+ exports.createBucket = createBucket;
@@ -0,0 +1,3 @@
1
+ import type { ProviderSpecifics } from '@remotion/serverless-client';
2
+ import type { AwsProvider } from './aws-provider';
3
+ export declare const lambdaDeleteFileImplementation: ProviderSpecifics<AwsProvider>['deleteFile'];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lambdaDeleteFileImplementation = void 0;
4
+ const client_s3_1 = require("@aws-sdk/client-s3");
5
+ const get_s3_client_1 = require("./get-s3-client");
6
+ const lambdaDeleteFileImplementation = async ({ bucketName, key, region, customCredentials, forcePathStyle, }) => {
7
+ await (0, get_s3_client_1.getS3Client)({ region, customCredentials, forcePathStyle }).send(new client_s3_1.DeleteObjectCommand({
8
+ Bucket: bucketName,
9
+ Key: key,
10
+ }));
11
+ };
12
+ exports.lambdaDeleteFileImplementation = lambdaDeleteFileImplementation;
@@ -0,0 +1,4 @@
1
+ import type { DeleteFunction, DeleteFunctionInput as GenericDeleteFunctionInput } from '@remotion/serverless-client';
2
+ import type { AwsProvider } from './aws-provider';
3
+ export type DeleteFunctionInput = GenericDeleteFunctionInput<AwsProvider>;
4
+ export declare const deleteFunction: DeleteFunction<AwsProvider>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteFunction = void 0;
4
+ const client_lambda_1 = require("@aws-sdk/client-lambda");
5
+ const aws_clients_1 = require("./aws-clients");
6
+ /*
7
+ * @description Deletes a deployed Lambda function based on its name.
8
+ * @see [Documentation](https://remotion.dev/docs/lambda/deletefunction)
9
+ */
10
+ const deleteFunction = async ({ region, functionName, }) => {
11
+ await (0, aws_clients_1.getLambdaClient)(region).send(new client_lambda_1.DeleteFunctionCommand({
12
+ FunctionName: functionName,
13
+ }));
14
+ };
15
+ exports.deleteFunction = deleteFunction;
@@ -0,0 +1,20 @@
1
+ import type { ProviderSpecifics } from '@remotion/serverless-client';
2
+ import { type CustomCredentials } from '@remotion/serverless-client';
3
+ import type { AwsProvider } from './aws-provider';
4
+ import type { AwsRegion } from './regions';
5
+ export type DeleteRenderInput = {
6
+ region: AwsRegion;
7
+ bucketName: string;
8
+ renderId: string;
9
+ customCredentials?: CustomCredentials<AwsProvider>;
10
+ forcePathStyle?: boolean;
11
+ };
12
+ export declare const internalDeleteRender: (input: DeleteRenderInput & {
13
+ providerSpecifics: ProviderSpecifics<AwsProvider>;
14
+ forcePathStyle: boolean;
15
+ }) => Promise<{
16
+ freedBytes: number;
17
+ }>;
18
+ export declare const deleteRender: (input: DeleteRenderInput) => Promise<{
19
+ freedBytes: number;
20
+ }>;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteRender = exports.internalDeleteRender = void 0;
4
+ const serverless_client_1 = require("@remotion/serverless-client");
5
+ const aws_provider_1 = require("./aws-provider");
6
+ const clean_items_1 = require("./clean-items");
7
+ const constants_1 = require("./constants");
8
+ const internalDeleteRender = async (input) => {
9
+ var _a;
10
+ const expectedBucketOwner = await input.providerSpecifics.getAccountId({
11
+ region: input.region,
12
+ });
13
+ const progress = await (0, serverless_client_1.getOverallProgressFromStorage)({
14
+ bucketName: input.bucketName,
15
+ expectedBucketOwner,
16
+ region: input.region,
17
+ renderId: input.renderId,
18
+ providerSpecifics: input.providerSpecifics,
19
+ forcePathStyle: input.forcePathStyle,
20
+ });
21
+ // Render did not start yet
22
+ if (progress.renderMetadata === null) {
23
+ return { freedBytes: 0 };
24
+ }
25
+ const { key, renderBucketName, customCredentials } = (0, serverless_client_1.getExpectedOutName)({
26
+ renderMetadata: progress.renderMetadata,
27
+ bucketName: input.bucketName,
28
+ customCredentials: (_a = input.customCredentials) !== null && _a !== void 0 ? _a : null,
29
+ bucketNamePrefix: constants_1.REMOTION_BUCKET_PREFIX,
30
+ });
31
+ await input.providerSpecifics.deleteFile({
32
+ bucketName: renderBucketName,
33
+ customCredentials,
34
+ key,
35
+ region: input.region,
36
+ forcePathStyle: input.forcePathStyle,
37
+ });
38
+ let files = await input.providerSpecifics.listObjects({
39
+ bucketName: input.bucketName,
40
+ prefix: (0, serverless_client_1.rendersPrefix)(input.renderId),
41
+ region: input.region,
42
+ expectedBucketOwner,
43
+ forcePathStyle: input.forcePathStyle,
44
+ });
45
+ let totalSize = 0;
46
+ while (files.length > 0) {
47
+ totalSize += files.reduce((a, b) => {
48
+ var _a;
49
+ return a + ((_a = b.Size) !== null && _a !== void 0 ? _a : 0);
50
+ }, 0);
51
+ await (0, clean_items_1.cleanItems)({
52
+ list: files.map((f) => f.Key),
53
+ bucket: input.bucketName,
54
+ onAfterItemDeleted: () => undefined,
55
+ onBeforeItemDeleted: () => undefined,
56
+ region: input.region,
57
+ providerSpecifics: input.providerSpecifics,
58
+ forcePathStyle: input.forcePathStyle,
59
+ });
60
+ files = await input.providerSpecifics.listObjects({
61
+ bucketName: input.bucketName,
62
+ prefix: (0, serverless_client_1.rendersPrefix)(input.renderId),
63
+ region: input.region,
64
+ expectedBucketOwner,
65
+ forcePathStyle: input.forcePathStyle,
66
+ });
67
+ }
68
+ return {
69
+ freedBytes: totalSize,
70
+ };
71
+ };
72
+ exports.internalDeleteRender = internalDeleteRender;
73
+ /*
74
+ * @description Deletes a rendered video, audio or still and its associated metadata.
75
+ * @see [Documentation](https://remotion.dev/docs/lambda/deleterender)
76
+ */
77
+ const deleteRender = (input) => {
78
+ return (0, exports.internalDeleteRender)({
79
+ ...input,
80
+ providerSpecifics: aws_provider_1.awsImplementation,
81
+ forcePathStyle: false,
82
+ });
83
+ };
84
+ exports.deleteRender = deleteRender;
@@ -0,0 +1 @@
1
+ export declare const encodeAwsUrlParams: (input: string) => string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeAwsUrlParams = void 0;
4
+ const encodeAwsUrlParams = (input) => {
5
+ return encodeURIComponent(input).replace(/%/g, '$25');
6
+ };
7
+ exports.encodeAwsUrlParams = encodeAwsUrlParams;
@@ -0,0 +1,45 @@
1
+ // src/constants.ts
2
+ var MIN_MEMORY = 512;
3
+ var MAX_MEMORY = 10240;
4
+ var DEFAULT_MEMORY_SIZE = 2048;
5
+ var DEFAULT_TIMEOUT = 120;
6
+ var MIN_TIMEOUT = 15;
7
+ var MAX_TIMEOUT = 900;
8
+ var DEFAULT_FRAMES_PER_LAMBDA = 20;
9
+ var BINARY_NAME = "remotion lambda";
10
+ var DEFAULT_REGION = "us-east-1";
11
+ var DEFAULT_MAX_RETRIES = 1;
12
+ var MAX_EPHEMERAL_STORAGE_IN_MB = 10240;
13
+ var DEFAULT_EPHEMERAL_STORAGE_IN_MB = 2048;
14
+ var MIN_EPHEMERAL_STORAGE_IN_MB = 512;
15
+ var DEFAULT_OUTPUT_PRIVACY = "public";
16
+ var DEFAULT_CLOUDWATCH_RETENTION_PERIOD = 14;
17
+ var RENDER_FN_PREFIX = "remotion-render-";
18
+ var LOG_GROUP_PREFIX = "/aws/lambda/";
19
+ var LAMBDA_INSIGHTS_PREFIX = "/aws/lambda-insights";
20
+ var getSitesKey = (siteId) => `sites/${siteId}`;
21
+ var LAMBDA_CONCURRENCY_LIMIT_QUOTA = "L-B99A9384";
22
+ var REMOTION_BUCKET_PREFIX = "remotionlambda-";
23
+ export {
24
+ getSitesKey,
25
+ RENDER_FN_PREFIX,
26
+ REMOTION_BUCKET_PREFIX,
27
+ MIN_TIMEOUT,
28
+ MIN_MEMORY,
29
+ MIN_EPHEMERAL_STORAGE_IN_MB,
30
+ MAX_TIMEOUT,
31
+ MAX_MEMORY,
32
+ MAX_EPHEMERAL_STORAGE_IN_MB,
33
+ LOG_GROUP_PREFIX,
34
+ LAMBDA_INSIGHTS_PREFIX,
35
+ LAMBDA_CONCURRENCY_LIMIT_QUOTA,
36
+ DEFAULT_TIMEOUT,
37
+ DEFAULT_REGION,
38
+ DEFAULT_OUTPUT_PRIVACY,
39
+ DEFAULT_MEMORY_SIZE,
40
+ DEFAULT_MAX_RETRIES,
41
+ DEFAULT_FRAMES_PER_LAMBDA,
42
+ DEFAULT_EPHEMERAL_STORAGE_IN_MB,
43
+ DEFAULT_CLOUDWATCH_RETENTION_PERIOD,
44
+ BINARY_NAME
45
+ };