@remotion/lambda 4.0.0-preload.17 → 4.0.0-reorg.10

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 (158) hide show
  1. package/dist/admin/bundle-lambda.js +1 -0
  2. package/dist/admin/make-layer-public.js +3 -3
  3. package/dist/api/bucket-exists.d.ts +1 -1
  4. package/dist/api/clean-items.d.ts +1 -1
  5. package/dist/api/create-bucket.d.ts +1 -1
  6. package/dist/api/create-function.d.ts +4 -3
  7. package/dist/api/create-function.js +3 -2
  8. package/dist/api/delete-function.d.ts +1 -1
  9. package/dist/api/delete-site.d.ts +1 -1
  10. package/dist/api/deploy-function.d.ts +3 -2
  11. package/dist/api/deploy-function.js +3 -0
  12. package/dist/api/deploy-site.d.ts +3 -3
  13. package/dist/api/deploy-site.js +2 -3
  14. package/dist/api/download-media.d.ts +2 -2
  15. package/dist/api/enable-s3-website.d.ts +1 -1
  16. package/dist/api/estimate-price.d.ts +2 -2
  17. package/dist/api/get-aws-client.d.ts +2 -2
  18. package/dist/api/get-aws-client.js +5 -1
  19. package/dist/api/get-buckets.d.ts +1 -1
  20. package/dist/api/get-function-info.d.ts +2 -2
  21. package/dist/api/get-functions.d.ts +2 -2
  22. package/dist/api/get-or-create-bucket.d.ts +1 -1
  23. package/dist/api/get-regions.d.ts +1 -1
  24. package/dist/api/get-render-progress.d.ts +2 -2
  25. package/dist/api/get-sites.d.ts +2 -2
  26. package/dist/api/iam-validation/role-permissions.d.ts +2 -1
  27. package/dist/api/iam-validation/simulate-rule.d.ts +1 -1
  28. package/dist/api/iam-validation/simulate.d.ts +2 -2
  29. package/dist/api/mock-functions.d.ts +3 -3
  30. package/dist/api/presign-url.d.ts +3 -2
  31. package/dist/api/render-media-on-lambda.d.ts +13 -8
  32. package/dist/api/render-media-on-lambda.js +12 -5
  33. package/dist/api/render-still-on-lambda.d.ts +7 -6
  34. package/dist/api/render-still-on-lambda.js +4 -4
  35. package/dist/api/upload-dir.d.ts +2 -2
  36. package/dist/api/upload-dir.js +2 -1
  37. package/dist/cli/args.d.ts +5 -3
  38. package/dist/cli/commands/functions/deploy.js +6 -2
  39. package/dist/cli/commands/render/progress.d.ts +4 -4
  40. package/dist/cli/commands/render/progress.js +11 -3
  41. package/dist/cli/commands/render/render.js +13 -3
  42. package/dist/cli/commands/sites/create.js +2 -3
  43. package/dist/cli/commands/sites/ls.js +1 -2
  44. package/dist/cli/commands/sites/rm.js +2 -3
  45. package/dist/cli/commands/sites/rmall.js +2 -3
  46. package/dist/cli/commands/still.js +1 -2
  47. package/dist/cli/get-aws-region.d.ts +1 -1
  48. package/dist/cli/helpers/get-cloudwatch-stream-url.d.ts +2 -2
  49. package/dist/cli/helpers/progress-bar.js +1 -2
  50. package/dist/cli/index.js +11 -1
  51. package/dist/defaults.js +5 -1
  52. package/dist/functions/chunk-optimization/can-use-optimization.d.ts +1 -1
  53. package/dist/functions/chunk-optimization/collect-data.d.ts +1 -1
  54. package/dist/functions/chunk-optimization/get-frame-ranges-from-profile.d.ts +1 -1
  55. package/dist/functions/chunk-optimization/get-profile-duration.d.ts +1 -1
  56. package/dist/functions/chunk-optimization/is-valid-profile.d.ts +1 -1
  57. package/dist/functions/chunk-optimization/is-valid-profile.js +2 -2
  58. package/dist/functions/chunk-optimization/optimize-invocation-order.d.ts +1 -1
  59. package/dist/functions/chunk-optimization/optimize-profile.d.ts +1 -1
  60. package/dist/functions/chunk-optimization/plan-frame-ranges.d.ts +7 -4
  61. package/dist/functions/chunk-optimization/plan-frame-ranges.js +7 -6
  62. package/dist/functions/chunk-optimization/s3-optimization-file.d.ts +2 -2
  63. package/dist/functions/chunk-optimization/s3-optimization-file.js +1 -0
  64. package/dist/functions/chunk-optimization/simulate-frame-ranges.d.ts +1 -1
  65. package/dist/functions/chunk-optimization/sort-by-duration.d.ts +1 -1
  66. package/dist/functions/chunk-optimization/types.d.ts +2 -1
  67. package/dist/functions/helpers/calculate-chunk-times.d.ts +1 -1
  68. package/dist/functions/helpers/calculate-price-from-bucket.d.ts +4 -4
  69. package/dist/functions/helpers/concat-videos.d.ts +6 -4
  70. package/dist/functions/helpers/concat-videos.js +8 -2
  71. package/dist/functions/helpers/create-post-render-data.d.ts +6 -6
  72. package/dist/functions/helpers/create-post-render-data.js +5 -5
  73. package/dist/functions/helpers/delete-chunks.d.ts +3 -3
  74. package/dist/functions/helpers/expected-out-name.d.ts +1 -1
  75. package/dist/functions/helpers/find-output-file-in-bucket.d.ts +2 -2
  76. package/dist/functions/helpers/format-costs-info.d.ts +1 -1
  77. package/dist/functions/helpers/get-browser-instance.d.ts +2 -1
  78. package/dist/functions/helpers/get-cleanup-progress.d.ts +2 -2
  79. package/dist/functions/helpers/get-current-architecture.d.ts +1 -1
  80. package/dist/functions/helpers/get-encoding-metadata.d.ts +2 -2
  81. package/dist/functions/helpers/get-files-to-delete.js +2 -2
  82. package/dist/functions/helpers/get-final-encoding-status.d.ts +2 -2
  83. package/dist/functions/helpers/get-lambdas-invoked-stats.d.ts +1 -1
  84. package/dist/functions/helpers/get-output-url-from-metadata.d.ts +1 -1
  85. package/dist/functions/helpers/get-post-render-data.d.ts +2 -2
  86. package/dist/functions/helpers/get-progress.d.ts +2 -2
  87. package/dist/functions/helpers/get-progress.js +12 -10
  88. package/dist/functions/helpers/get-render-metadata.d.ts +2 -2
  89. package/dist/functions/helpers/get-retry-stats.d.ts +1 -1
  90. package/dist/functions/helpers/get-time-to-finish.d.ts +1 -1
  91. package/dist/functions/helpers/inspect-errors.d.ts +3 -3
  92. package/dist/functions/helpers/io.d.ts +8 -6
  93. package/dist/functions/helpers/io.js +3 -1
  94. package/dist/functions/helpers/print-cloudwatch-helper.d.ts +1 -1
  95. package/dist/functions/helpers/read-with-progress.d.ts +3 -2
  96. package/dist/functions/helpers/read-with-progress.js +13 -1
  97. package/dist/functions/helpers/validate-composition.d.ts +5 -4
  98. package/dist/functions/helpers/validate-composition.js +2 -1
  99. package/dist/functions/helpers/write-lambda-error.d.ts +1 -1
  100. package/dist/functions/helpers/write-lambda-error.js +1 -0
  101. package/dist/functions/helpers/write-post-render-data.d.ts +2 -2
  102. package/dist/functions/helpers/write-post-render-data.js +1 -0
  103. package/dist/functions/index.d.ts +3 -2
  104. package/dist/functions/index.js +4 -4
  105. package/dist/functions/info.d.ts +1 -1
  106. package/dist/functions/launch.d.ts +1 -1
  107. package/dist/functions/launch.js +28 -16
  108. package/dist/functions/progress.d.ts +1 -1
  109. package/dist/functions/renderer.d.ts +1 -1
  110. package/dist/functions/renderer.js +16 -11
  111. package/dist/functions/start.d.ts +1 -1
  112. package/dist/functions/start.js +5 -2
  113. package/dist/functions/still.d.ts +1 -1
  114. package/dist/functions/still.js +10 -6
  115. package/dist/index.d.ts +33 -18
  116. package/dist/pricing/price-per-1-s.d.ts +1 -1
  117. package/dist/shared/aws-clients.d.ts +1 -1
  118. package/dist/shared/bundle-site.d.ts +1 -6
  119. package/dist/shared/call-lambda.d.ts +3 -3
  120. package/dist/shared/check-credentials.js +2 -2
  121. package/dist/shared/constants.d.ts +27 -11
  122. package/dist/shared/constants.js +1 -1
  123. package/dist/shared/content-disposition-header.d.ts +7 -0
  124. package/dist/shared/content-disposition-header.js +19 -0
  125. package/dist/shared/convert-to-serve-url.d.ts +1 -1
  126. package/dist/shared/get-account-id.d.ts +1 -1
  127. package/dist/shared/get-function-version.d.ts +2 -2
  128. package/dist/shared/get-most-expensive-chunks.d.ts +8 -0
  129. package/dist/shared/get-most-expensive-chunks.js +25 -0
  130. package/dist/shared/hosted-layers.d.ts +2 -2
  131. package/dist/shared/hosted-layers.js +80 -80
  132. package/dist/shared/make-s3-key.d.ts +1 -0
  133. package/dist/shared/make-s3-key.js +11 -0
  134. package/dist/shared/make-s3-url.d.ts +1 -1
  135. package/dist/shared/random-hash.d.ts +2 -2
  136. package/dist/shared/random-hash.js +1 -1
  137. package/dist/shared/return-values.d.ts +7 -7
  138. package/dist/shared/return-values.js +0 -1
  139. package/dist/shared/stream-to-string.d.ts +2 -1
  140. package/dist/shared/truthy.d.ts +3 -0
  141. package/dist/shared/truthy.js +7 -0
  142. package/dist/shared/validate-aws-region.d.ts +1 -1
  143. package/dist/shared/validate-custom-role-arn.d.ts +1 -0
  144. package/dist/shared/validate-custom-role-arn.js +11 -0
  145. package/dist/shared/validate-download-behavior.d.ts +1 -0
  146. package/dist/shared/validate-download-behavior.js +21 -0
  147. package/dist/shared/validate-lambda-codec.d.ts +4 -0
  148. package/dist/shared/validate-lambda-codec.js +29 -0
  149. package/dist/shared/validate-outname.d.ts +1 -1
  150. package/dist/shared/validate-presign-expiration.d.ts +0 -2
  151. package/dist/shared/validate-presign-expiration.js +7 -7
  152. package/dist/shared/validate-privacy.d.ts +1 -1
  153. package/package.json +10 -12
  154. package/remotionlambda.zip +0 -0
  155. package/dist/cli/helpers/format-bytes.d.ts +0 -6
  156. package/dist/cli/helpers/format-bytes.js +0 -103
  157. package/dist/shared/chunk.d.ts +0 -1
  158. package/dist/shared/chunk.js +0 -11
@@ -1,5 +1,5 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { CleanupInfo } from '../../shared/constants';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { CleanupInfo } from '../../shared/constants';
3
3
  export declare const getCleanupProgress: ({ contents, output, chunkCount, renderId, }: {
4
4
  contents: _Object[];
5
5
  output: string | null;
@@ -1,2 +1,2 @@
1
- import { LambdaArchitecture } from '../../shared/validate-architecture';
1
+ import type { LambdaArchitecture } from '../../shared/validate-architecture';
2
2
  export declare const getCurrentArchitecture: () => LambdaArchitecture;
@@ -1,5 +1,5 @@
1
- import { EncodingProgress } from '../../defaults';
2
- import { AwsRegion } from '../../pricing/aws-regions';
1
+ import type { EncodingProgress } from '../../defaults';
2
+ import type { AwsRegion } from '../../pricing/aws-regions';
3
3
  export declare const getEncodingMetadata: ({ exists, bucketName, renderId, region, expectedBucketOwner, }: {
4
4
  exists: boolean;
5
5
  bucketName: string;
@@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getFilesToDelete = void 0;
4
4
  const constants_1 = require("../../shared/constants");
5
5
  const getFilesToDelete = ({ chunkCount, renderId, }) => {
6
- const chunks = new Array(chunkCount).fill(true).map((x, i) => (0, constants_1.chunkKeyForIndex)({
6
+ const chunks = new Array(chunkCount).fill(true).map((_x, i) => (0, constants_1.chunkKeyForIndex)({
7
7
  index: i,
8
8
  renderId,
9
9
  }));
10
10
  const lambdaTimings = new Array(chunkCount)
11
11
  .fill(true)
12
- .map((x, i) => (0, constants_1.lambdaTimingsPrefixForChunk)(renderId, i));
12
+ .map((_x, i) => (0, constants_1.lambdaTimingsPrefixForChunk)(renderId, i));
13
13
  return [
14
14
  {
15
15
  name: (0, constants_1.lambdaInitializedPrefix)(renderId),
@@ -1,5 +1,5 @@
1
- import { EncodingProgress, RenderMetadata } from '../../shared/constants';
2
- import { LambdaInvokeStats } from './get-lambdas-invoked-stats';
1
+ import type { EncodingProgress, RenderMetadata } from '../../shared/constants';
2
+ import type { LambdaInvokeStats } from './get-lambdas-invoked-stats';
3
3
  export declare const getFinalEncodingStatus: ({ encodingStatus: encodingProgress, renderMetadata, outputFileExists, lambdaInvokeStatus, }: {
4
4
  encodingStatus: EncodingProgress | null;
5
5
  renderMetadata: RenderMetadata | null;
@@ -1,4 +1,4 @@
1
- import { _Object } from '@aws-sdk/client-s3';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
2
  export declare type LambdaInvokeStats = {
3
3
  timeToInvokeLambdas: number | null;
4
4
  allLambdasInvoked: boolean;
@@ -1,2 +1,2 @@
1
- import { RenderMetadata } from '../../defaults';
1
+ import type { RenderMetadata } from '../../defaults';
2
2
  export declare const getOutputUrlFromMetadata: (renderMetadata: RenderMetadata, bucketName: string) => string;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
2
- import { PostRenderData } from '../../shared/constants';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { PostRenderData } from '../../shared/constants';
3
3
  export declare const getPostRenderData: ({ bucketName, renderId, region, expectedBucketOwner, }: {
4
4
  bucketName: string;
5
5
  renderId: string;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
2
- import { RenderProgress } from '../../shared/constants';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { RenderProgress } from '../../shared/constants';
3
3
  export declare const getProgress: ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMiliseconds, }: {
4
4
  bucketName: string;
5
5
  renderId: string;
@@ -23,7 +23,7 @@ const get_time_to_finish_1 = require("./get-time-to-finish");
23
23
  const inspect_errors_1 = require("./inspect-errors");
24
24
  const io_1 = require("./io");
25
25
  const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMiliseconds, }) => {
26
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
26
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
27
27
  const postRenderData = await (0, get_post_render_data_1.getPostRenderData)({
28
28
  bucketName,
29
29
  region,
@@ -68,6 +68,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
68
68
  retriesInfo: postRenderData.retriesInfo,
69
69
  outKey: outData.key,
70
70
  outBucket: outData.renderBucketName,
71
+ mostExpensiveFrameRanges: (_a = postRenderData.mostExpensiveFrameRanges) !== null && _a !== void 0 ? _a : null,
71
72
  };
72
73
  }
73
74
  const contents = await (0, io_1.lambdaLs)({
@@ -114,27 +115,27 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
114
115
  memorySizeInMb,
115
116
  outputFileMetadata: outputFile,
116
117
  architecture: (0, get_current_architecture_1.getCurrentArchitecture)(),
117
- lambdasInvoked: (_a = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _a !== void 0 ? _a : 0,
118
+ lambdasInvoked: (_b = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _b !== void 0 ? _b : 0,
118
119
  // We cannot determine the ephemeral storage size, so we
119
120
  // overestimate the price, but will only have a miniscule effect (~0.2%)
120
121
  diskSizeInMb: constants_1.MAX_EPHEMERAL_STORAGE_IN_MB,
121
122
  }));
122
123
  const cleanup = (0, get_cleanup_progress_1.getCleanupProgress)({
123
- chunkCount: (_b = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _b !== void 0 ? _b : 0,
124
+ chunkCount: (_c = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _c !== void 0 ? _c : 0,
124
125
  contents,
125
- output: (_c = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _c !== void 0 ? _c : null,
126
+ output: (_d = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _d !== void 0 ? _d : null,
126
127
  renderId,
127
128
  });
128
129
  const timeToFinish = (0, get_time_to_finish_1.getTimeToFinish)({
129
- lastModified: (_d = outputFile === null || outputFile === void 0 ? void 0 : outputFile.lastModified) !== null && _d !== void 0 ? _d : null,
130
+ lastModified: (_e = outputFile === null || outputFile === void 0 ? void 0 : outputFile.lastModified) !== null && _e !== void 0 ? _e : null,
130
131
  renderMetadata,
131
132
  });
132
133
  const chunks = contents.filter((c) => { var _a; return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.chunkKey)(renderId)); });
133
- const allChunks = chunks.length === ((_e = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _e !== void 0 ? _e : Infinity);
134
+ const allChunks = chunks.length === ((_f = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _f !== void 0 ? _f : Infinity);
134
135
  const renderSize = contents
135
136
  .map((c) => { var _a; return (_a = c.Size) !== null && _a !== void 0 ? _a : 0; })
136
137
  .reduce((a, b) => a + b, 0);
137
- const lambdasInvokedStats = (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)(contents, renderId, (_f = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _f !== void 0 ? _f : null, (_g = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.startedDate) !== null && _g !== void 0 ? _g : null);
138
+ const lambdasInvokedStats = (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)(contents, renderId, (_g = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _g !== void 0 ? _g : null, (_h = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.startedDate) !== null && _h !== void 0 ? _h : null);
138
139
  const retriesInfo = (0, get_retry_stats_1.getRetryStats)({
139
140
  contents,
140
141
  renderId,
@@ -146,7 +147,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
146
147
  lambdaInvokeStatus: lambdasInvokedStats,
147
148
  });
148
149
  const chunkCount = outputFile
149
- ? (_h = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _h !== void 0 ? _h : 0
150
+ ? (_j = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _j !== void 0 ? _j : 0
150
151
  : chunks.length;
151
152
  // We add a 20 second buffer for it, since AWS timeshifts can be quite a lot. Once it's 20sec over the limit, we consider it timed out
152
153
  const isBeyondTimeout = renderMetadata &&
@@ -177,7 +178,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
177
178
  renderId,
178
179
  renderMetadata,
179
180
  bucket: bucketName,
180
- outputFile: (_j = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _j !== void 0 ? _j : null,
181
+ outputFile: (_k = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _k !== void 0 ? _k : null,
181
182
  timeToFinish,
182
183
  errors: allErrors,
183
184
  fatalErrorEncountered: allErrors.some((f) => f.isFatal && !f.willRetry),
@@ -192,7 +193,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
192
193
  type: 'absolute-time',
193
194
  })
194
195
  : null,
195
- timeToInvokeLambdas: (_k = encodingStatus === null || encodingStatus === void 0 ? void 0 : encodingStatus.timeToInvoke) !== null && _k !== void 0 ? _k : lambdasInvokedStats.timeToInvokeLambdas,
196
+ timeToInvokeLambdas: (_l = encodingStatus === null || encodingStatus === void 0 ? void 0 : encodingStatus.timeToInvoke) !== null && _l !== void 0 ? _l : lambdasInvokedStats.timeToInvokeLambdas,
196
197
  overallProgress: (0, get_overall_progress_1.getOverallProgress)({
197
198
  cleanup: cleanup ? cleanup.filesDeleted / cleanup.minFilesToDelete : 0,
198
199
  encoding: finalEncodingStatus && renderMetadata
@@ -212,6 +213,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
212
213
  outBucket: outputFile && renderMetadata
213
214
  ? (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName).renderBucketName
214
215
  : null,
216
+ mostExpensiveFrameRanges: null,
215
217
  };
216
218
  };
217
219
  exports.getProgress = getProgress;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
2
- import { RenderMetadata } from '../../shared/constants';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { RenderMetadata } from '../../shared/constants';
3
3
  export declare const getRenderMetadata: ({ bucketName, renderId, region, expectedBucketOwner, }: {
4
4
  bucketName: string;
5
5
  renderId: string;
@@ -1,4 +1,4 @@
1
- import { _Object } from '@aws-sdk/client-s3';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
2
  export declare type ChunkRetry = {
3
3
  chunk: number;
4
4
  attempt: number;
@@ -1,4 +1,4 @@
1
- import { RenderMetadata } from '../../defaults';
1
+ import type { RenderMetadata } from '../../defaults';
2
2
  export declare const getTimeToFinish: ({ renderMetadata, lastModified, }: {
3
3
  renderMetadata: RenderMetadata | null;
4
4
  lastModified: number | null;
@@ -1,6 +1,6 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { AwsRegion } from '../../pricing/aws-regions';
3
- import { EnhancedErrorInfo } from './write-lambda-error';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { AwsRegion } from '../../pricing/aws-regions';
3
+ import type { EnhancedErrorInfo } from './write-lambda-error';
4
4
  export declare const inspectErrors: ({ contents, bucket, region, renderId, expectedBucketOwner, }: {
5
5
  contents: _Object[];
6
6
  bucket: string;
@@ -1,8 +1,9 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { ReadStream } from 'fs';
3
- import { Readable } from 'stream';
4
- import { AwsRegion } from '../../pricing/aws-regions';
5
- import { Privacy } from '../../shared/constants';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { ReadStream } from 'fs';
3
+ import type { Readable } from 'stream';
4
+ import type { AwsRegion } from '../../pricing/aws-regions';
5
+ import type { Privacy } from '../../shared/constants';
6
+ import type { DownloadBehavior } from '../../shared/content-disposition-header';
6
7
  export declare type LambdaLSInput = {
7
8
  bucketName: string;
8
9
  prefix: string;
@@ -12,13 +13,14 @@ export declare type LambdaLSInput = {
12
13
  };
13
14
  export declare type LambdaLsReturnType = Promise<_Object[]>;
14
15
  export declare const lambdaLs: ({ bucketName, prefix, region, expectedBucketOwner, continuationToken, }: LambdaLSInput) => LambdaLsReturnType;
15
- export declare const lambdaWriteFile: ({ bucketName, key, body, region, privacy, expectedBucketOwner, }: {
16
+ export declare const lambdaWriteFile: ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, }: {
16
17
  bucketName: string;
17
18
  key: string;
18
19
  body: ReadStream | string;
19
20
  region: AwsRegion;
20
21
  privacy: Privacy;
21
22
  expectedBucketOwner: string | null;
23
+ downloadBehavior: DownloadBehavior | null;
22
24
  }) => Promise<void>;
23
25
  export declare const lambdaReadFile: ({ bucketName, key, region, expectedBucketOwner, }: {
24
26
  bucketName: string;
@@ -7,6 +7,7 @@ exports.lambdaReadFile = exports.lambdaWriteFile = exports.lambdaLs = void 0;
7
7
  const client_s3_1 = require("@aws-sdk/client-s3");
8
8
  const mime_types_1 = __importDefault(require("mime-types"));
9
9
  const aws_clients_1 = require("../../shared/aws-clients");
10
+ const content_disposition_header_1 = require("../../shared/content-disposition-header");
10
11
  const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, continuationToken, }) => {
11
12
  var _a, _b, _c;
12
13
  try {
@@ -46,7 +47,7 @@ const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, conti
46
47
  }
47
48
  };
48
49
  exports.lambdaLs = lambdaLs;
49
- const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, }) => {
50
+ const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, }) => {
50
51
  await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.PutObjectCommand({
51
52
  Bucket: bucketName,
52
53
  Key: key,
@@ -54,6 +55,7 @@ const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expecte
54
55
  ACL: privacy === 'private' ? 'private' : 'public-read',
55
56
  ExpectedBucketOwner: expectedBucketOwner !== null && expectedBucketOwner !== void 0 ? expectedBucketOwner : undefined,
56
57
  ContentType: mime_types_1.default.lookup(key) || 'application/octet-stream',
58
+ ContentDisposition: (0, content_disposition_header_1.getContentDispositionHeader)(downloadBehavior),
57
59
  }));
58
60
  };
59
61
  exports.lambdaWriteFile = lambdaWriteFile;
@@ -1,2 +1,2 @@
1
- import { LambdaRoutines } from '../../defaults';
1
+ import type { LambdaRoutines } from '../../defaults';
2
2
  export declare const printCloudwatchHelper: (type: LambdaRoutines, data: Record<string, string>) => void;
@@ -1,8 +1,8 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
2
  export declare type LambdaReadFileProgress = (progress: {
3
3
  totalSize: number;
4
4
  downloaded: number;
5
- progress: number;
5
+ percent: number;
6
6
  }) => unknown;
7
7
  export declare const lambdaDownloadFileWithProgress: ({ bucketName, key, region, expectedBucketOwner, outputPath, onProgress, }: {
8
8
  bucketName: string;
@@ -13,4 +13,5 @@ export declare const lambdaDownloadFileWithProgress: ({ bucketName, key, region,
13
13
  onProgress: LambdaReadFileProgress;
14
14
  }) => Promise<{
15
15
  sizeInBytes: number;
16
+ to: string;
16
17
  }>;
@@ -13,6 +13,18 @@ const lambdaDownloadFileWithProgress = async ({ bucketName, key, region, expecte
13
13
  Key: key,
14
14
  });
15
15
  const presigned = await (0, s3_request_presigner_1.getSignedUrl)(client, command);
16
- return renderer_1.RenderInternals.downloadFile(presigned, outputPath, onProgress);
16
+ const { to, sizeInBytes } = await renderer_1.RenderInternals.downloadFile({
17
+ url: presigned,
18
+ onProgress: ({ downloaded, percent, totalSize }) => {
19
+ // On Lambda, it should always be a number
20
+ onProgress({
21
+ downloaded,
22
+ percent: percent,
23
+ totalSize: totalSize,
24
+ });
25
+ },
26
+ to: () => outputPath,
27
+ });
28
+ return { sizeInBytes, to };
17
29
  };
18
30
  exports.lambdaDownloadFileWithProgress = lambdaDownloadFileWithProgress;
@@ -1,6 +1,6 @@
1
- import { ChromiumOptions, openBrowser } from '@remotion/renderer';
2
- import { FfmpegExecutable, TCompMetadata } from 'remotion';
3
- import { Await } from '../../shared/await';
1
+ import type { ChromiumOptions, FfmpegExecutable, openBrowser } from '@remotion/renderer';
2
+ import type { TCompMetadata } from 'remotion';
3
+ import type { Await } from '../../shared/await';
4
4
  declare type ValidateCompositionOptions = {
5
5
  serveUrl: string;
6
6
  composition: string;
@@ -8,9 +8,10 @@ declare type ValidateCompositionOptions = {
8
8
  inputProps: unknown;
9
9
  envVariables: Record<string, string> | undefined;
10
10
  ffmpegExecutable: FfmpegExecutable;
11
+ ffprobeExecutable: FfmpegExecutable;
11
12
  timeoutInMilliseconds: number;
12
13
  chromiumOptions: ChromiumOptions;
13
14
  port: number | null;
14
15
  };
15
- export declare const validateComposition: ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, chromiumOptions, port, }: ValidateCompositionOptions) => Promise<TCompMetadata>;
16
+ export declare const validateComposition: ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, ffprobeExecutable, chromiumOptions, port, }: ValidateCompositionOptions) => Promise<TCompMetadata>;
16
17
  export {};
@@ -2,12 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateComposition = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
- const validateComposition = async ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, chromiumOptions, port, }) => {
5
+ const validateComposition = async ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, ffprobeExecutable, chromiumOptions, port, }) => {
6
6
  const compositions = await (0, renderer_1.getCompositions)(serveUrl, {
7
7
  puppeteerInstance: browserInstance,
8
8
  inputProps: inputProps,
9
9
  envVariables,
10
10
  ffmpegExecutable,
11
+ ffprobeExecutable,
11
12
  timeoutInMilliseconds,
12
13
  chromiumOptions,
13
14
  port,
@@ -1,4 +1,4 @@
1
- import { FileNameAndSize } from './get-files-in-folder';
1
+ import type { FileNameAndSize } from './get-files-in-folder';
2
2
  export declare type LambdaErrorInfo = {
3
3
  type: 'renderer' | 'browser' | 'stitcher';
4
4
  message: string;
@@ -33,6 +33,7 @@ const writeLambdaError = async ({ bucketName, renderId, errorInfo, expectedBucke
33
33
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
34
34
  privacy: 'private',
35
35
  expectedBucketOwner,
36
+ downloadBehavior: null,
36
37
  });
37
38
  };
38
39
  exports.writeLambdaError = writeLambdaError;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
2
- import { PostRenderData } from '../../shared/constants';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { PostRenderData } from '../../shared/constants';
3
3
  export declare const writePostRenderData: ({ bucketName, renderId, postRenderData, expectedBucketOwner, region, }: {
4
4
  bucketName: string;
5
5
  renderId: string;
@@ -11,6 +11,7 @@ const writePostRenderData = async ({ bucketName, renderId, postRenderData, expec
11
11
  body: JSON.stringify(postRenderData),
12
12
  expectedBucketOwner,
13
13
  region,
14
+ downloadBehavior: null,
14
15
  });
15
16
  };
16
17
  exports.writePostRenderData = writePostRenderData;
@@ -1,5 +1,6 @@
1
- import { LambdaPayload, LambdaRoutines } from '../shared/constants';
2
- import { LambdaReturnValues } from '../shared/return-values';
1
+ import type { LambdaPayload } from '../shared/constants';
2
+ import { LambdaRoutines } from '../shared/constants';
3
+ import type { LambdaReturnValues } from '../shared/return-values';
3
4
  export declare const handler: <T extends LambdaRoutines>(params: LambdaPayload, context: {
4
5
  invokedFunctionArn: string;
5
6
  getRemainingTimeInMillis: () => number;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handler = void 0;
4
- const remotion_1 = require("remotion");
4
+ const renderer_1 = require("@remotion/renderer");
5
5
  const constants_1 = require("../shared/constants");
6
6
  const clean_tmpdir_1 = require("./helpers/clean-tmpdir");
7
7
  const is_warm_1 = require("./helpers/is-warm");
@@ -9,7 +9,7 @@ const print_cloudwatch_helper_1 = require("./helpers/print-cloudwatch-helper");
9
9
  const info_1 = require("./info");
10
10
  const launch_1 = require("./launch");
11
11
  const progress_1 = require("./progress");
12
- const renderer_1 = require("./renderer");
12
+ const renderer_2 = require("./renderer");
13
13
  const start_1 = require("./start");
14
14
  const still_1 = require("./still");
15
15
  const handler = async (params, context) => {
@@ -56,10 +56,10 @@ const handler = async (params, context) => {
56
56
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.renderer, {
57
57
  renderId: params.renderId,
58
58
  chunk: String(params.chunk),
59
- dumpLogs: String(remotion_1.Internals.Logging.isEqualOrBelowLogLevel(params.logLevel, 'verbose')),
59
+ dumpLogs: String(renderer_1.RenderInternals.isEqualOrBelowLogLevel(params.logLevel, 'verbose')),
60
60
  inputProps: JSON.stringify(params.inputProps),
61
61
  });
62
- return (0, renderer_1.rendererHandler)(params, {
62
+ return (0, renderer_2.rendererHandler)(params, {
63
63
  expectedBucketOwner: currentUserId,
64
64
  isWarm,
65
65
  });
@@ -1,4 +1,4 @@
1
- import { LambdaPayload, LambdaVersions } from '../shared/constants';
1
+ import type { LambdaPayload, LambdaVersions } from '../shared/constants';
2
2
  export declare const infoHandler: (lambdaParams: LambdaPayload) => Promise<{
3
3
  version: LambdaVersions;
4
4
  }>;
@@ -1,4 +1,4 @@
1
- import { LambdaPayload } from '../shared/constants';
1
+ import type { LambdaPayload } from '../shared/constants';
2
2
  declare type Options = {
3
3
  expectedBucketOwner: string;
4
4
  };
@@ -46,7 +46,7 @@ const innerLaunchHandler = async (params, options) => {
46
46
  }
47
47
  const startedDate = Date.now();
48
48
  const [browserInstance, optimization] = await Promise.all([
49
- (0, get_browser_instance_1.getBrowserInstance)(remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'), params.chromiumOptions),
49
+ (0, get_browser_instance_1.getBrowserInstance)(renderer_1.RenderInternals.isEqualOrBelowLogLevel(params.logLevel, 'verbose'), params.chromiumOptions),
50
50
  (0, s3_optimization_file_1.getOptimization)({
51
51
  bucketName: params.bucketName,
52
52
  siteId: (0, make_s3_url_1.getServeUrlHash)(params.serveUrl),
@@ -62,19 +62,21 @@ const innerLaunchHandler = async (params, options) => {
62
62
  inputProps: params.inputProps,
63
63
  envVariables: params.envVariables,
64
64
  ffmpegExecutable: null,
65
+ ffprobeExecutable: null,
65
66
  timeoutInMilliseconds: params.timeoutInMilliseconds,
66
67
  chromiumOptions: params.chromiumOptions,
67
68
  port: null,
68
69
  });
69
- remotion_1.Internals.validateDurationInFrames(comp.durationInFrames, 'passed to <Component />');
70
- remotion_1.Internals.validateFps(comp.fps, 'passed to <Component />');
71
- remotion_1.Internals.validateDimension(comp.height, 'height', 'passed to <Component />');
72
- remotion_1.Internals.validateDimension(comp.width, 'width', 'passed to <Component />');
70
+ remotion_1.Internals.validateDurationInFrames(comp.durationInFrames, 'passed to a Lambda render');
71
+ remotion_1.Internals.validateFps(comp.fps, 'passed to a Lambda render', false);
72
+ remotion_1.Internals.validateDimension(comp.height, 'height', 'passed to a Lambda render');
73
+ remotion_1.Internals.validateDimension(comp.width, 'width', 'passed to a Lambda render');
74
+ renderer_1.RenderInternals.validateConcurrency(params.concurrencyPerLambda, 'concurrencyPerLambda');
73
75
  const realFrameRange = renderer_1.RenderInternals.getRealFrameRange(comp.durationInFrames, params.frameRange);
74
- const frameCount = renderer_1.RenderInternals.getDurationFromFrameRange(realFrameRange, 0);
75
- const framesPerLambda = (_a = params.framesPerLambda) !== null && _a !== void 0 ? _a : (0, best_frames_per_lambda_param_1.bestFramesPerLambdaParam)(frameCount);
76
+ const frameCount = renderer_1.RenderInternals.getFramesToRender(realFrameRange, params.everyNthFrame);
77
+ const framesPerLambda = (_a = params.framesPerLambda) !== null && _a !== void 0 ? _a : (0, best_frames_per_lambda_param_1.bestFramesPerLambdaParam)(frameCount.length);
76
78
  (0, validate_frames_per_lambda_1.validateFramesPerLambda)(framesPerLambda);
77
- const chunkCount = Math.ceil(frameCount / framesPerLambda);
79
+ const chunkCount = Math.ceil(frameCount.length / framesPerLambda);
78
80
  if (chunkCount > constants_1.MAX_FUNCTIONS_PER_RENDER) {
79
81
  throw new Error(`Too many functions: This render would cause ${chunkCount} functions to spawn. We limit this amount to ${constants_1.MAX_FUNCTIONS_PER_RENDER} functions as more would result in diminishing returns. Values set: frameCount = ${frameCount}, framesPerLambda=${framesPerLambda}. See ${docs_url_1.DOCS_URL}/docs/lambda/concurrency for how this parameter is calculated.`);
80
82
  }
@@ -82,12 +84,12 @@ const innerLaunchHandler = async (params, options) => {
82
84
  (0, validate_privacy_1.validatePrivacy)(params.privacy);
83
85
  renderer_1.RenderInternals.validatePuppeteerTimeout(params.timeoutInMilliseconds);
84
86
  const { chunks, didUseOptimization } = (0, plan_frame_ranges_1.planFrameRanges)({
85
- chunkCount,
86
87
  framesPerLambda,
87
88
  optimization,
88
89
  // TODO: Re-enable chunk optimization later
89
90
  shouldUseOptimization: false,
90
91
  frameRange: realFrameRange,
92
+ everyNthFrame: params.everyNthFrame,
91
93
  });
92
94
  const sortedChunks = chunks.slice().sort((a, b) => a[0] - b[0]);
93
95
  const invokers = Math.round(Math.sqrt(chunks.length));
@@ -109,18 +111,20 @@ const innerLaunchHandler = async (params, options) => {
109
111
  inputProps: params.inputProps,
110
112
  renderId: params.renderId,
111
113
  imageFormat: params.imageFormat,
112
- codec: params.codec,
114
+ codec: params.codec === 'h264' ? 'h264-mkv' : params.codec,
113
115
  crf: params.crf,
114
116
  envVariables: params.envVariables,
115
117
  pixelFormat: params.pixelFormat,
116
118
  proResProfile: params.proResProfile,
117
119
  quality: params.quality,
118
120
  privacy: params.privacy,
119
- logLevel: (_a = params.logLevel) !== null && _a !== void 0 ? _a : remotion_1.Internals.Logging.DEFAULT_LOG_LEVEL,
121
+ logLevel: (_a = params.logLevel) !== null && _a !== void 0 ? _a : 'info',
120
122
  attempt: 1,
121
123
  timeoutInMilliseconds: params.timeoutInMilliseconds,
122
124
  chromiumOptions: params.chromiumOptions,
123
125
  scale: params.scale,
126
+ everyNthFrame: params.everyNthFrame,
127
+ concurrencyPerLambda: params.concurrencyPerLambda,
124
128
  };
125
129
  return payload;
126
130
  });
@@ -157,6 +161,7 @@ const innerLaunchHandler = async (params, options) => {
157
161
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
158
162
  privacy: 'private',
159
163
  expectedBucketOwner: options.expectedBucketOwner,
164
+ downloadBehavior: null,
160
165
  });
161
166
  await Promise.all(lambdaPayloads.map(async (payload, index) => {
162
167
  const callingLambdaTimer = (0, timer_1.timer)('Calling chunk ' + index);
@@ -172,7 +177,7 @@ const innerLaunchHandler = async (params, options) => {
172
177
  let lastProgressUploaded = 0;
173
178
  let encodingStop = null;
174
179
  const onProgress = (framesEncoded, start) => {
175
- const relativeProgress = framesEncoded / frameCount;
180
+ const relativeProgress = framesEncoded / frameCount.length;
176
181
  const deltaSinceLastProgressUploaded = relativeProgress - lastProgressUploaded;
177
182
  if (relativeProgress === 1) {
178
183
  encodingStop = Date.now();
@@ -183,7 +188,7 @@ const innerLaunchHandler = async (params, options) => {
183
188
  lastProgressUploaded = relativeProgress;
184
189
  const encodingProgress = {
185
190
  framesEncoded,
186
- totalFrames: frameCount,
191
+ totalFrames: frameCount.length,
187
192
  doneIn: encodingStop ? encodingStop - start : null,
188
193
  timeToInvoke: null,
189
194
  };
@@ -194,6 +199,7 @@ const innerLaunchHandler = async (params, options) => {
194
199
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
195
200
  privacy: 'private',
196
201
  expectedBucketOwner: options.expectedBucketOwner,
202
+ downloadBehavior: null,
197
203
  }).catch((err) => {
198
204
  (0, write_lambda_error_1.writeLambdaError)({
199
205
  bucketName: params.bucketName,
@@ -215,15 +221,18 @@ const innerLaunchHandler = async (params, options) => {
215
221
  });
216
222
  });
217
223
  };
224
+ const fps = comp.fps / params.everyNthFrame;
218
225
  const { outfile, cleanupChunksProm, encodingStart } = await (0, concat_videos_1.concatVideosS3)({
219
226
  bucket: params.bucketName,
220
227
  expectedFiles: chunkCount,
221
228
  onProgress,
222
- numberOfFrames: frameCount,
229
+ numberOfFrames: frameCount.length,
223
230
  renderId: params.renderId,
224
231
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
225
232
  codec: params.codec,
226
233
  expectedBucketOwner: options.expectedBucketOwner,
234
+ fps,
235
+ numberOfGifLoops: params.numberOfGifLoops,
227
236
  });
228
237
  if (!encodingStop) {
229
238
  encodingStop = Date.now();
@@ -237,6 +246,7 @@ const innerLaunchHandler = async (params, options) => {
237
246
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
238
247
  privacy: params.privacy,
239
248
  expectedBucketOwner: options.expectedBucketOwner,
249
+ downloadBehavior: params.downloadBehavior,
240
250
  });
241
251
  let chunkProm = Promise.resolve();
242
252
  // TODO: Enable in a later release
@@ -261,6 +271,7 @@ const innerLaunchHandler = async (params, options) => {
261
271
  framesPerLambda,
262
272
  lambdaVersion: constants_1.CURRENT_VERSION,
263
273
  frameRange: realFrameRange,
274
+ everyNthFrame: params.everyNthFrame,
264
275
  },
265
276
  expectedBucketOwner: options.expectedBucketOwner,
266
277
  compositionId: params.composition,
@@ -279,8 +290,8 @@ const innerLaunchHandler = async (params, options) => {
279
290
  }),
280
291
  ]);
281
292
  const finalEncodingProgress = {
282
- framesEncoded: frameCount,
283
- totalFrames: frameCount,
293
+ framesEncoded: frameCount.length,
294
+ totalFrames: frameCount.length,
284
295
  doneIn: encodingStop ? encodingStop - encodingStart : null,
285
296
  timeToInvoke: (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)(contents, params.renderId, renderMetadata.estimatedRenderLambdaInvokations, renderMetadata.startedDate).timeToInvokeLambdas,
286
297
  };
@@ -291,6 +302,7 @@ const innerLaunchHandler = async (params, options) => {
291
302
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
292
303
  privacy: 'private',
293
304
  expectedBucketOwner: options.expectedBucketOwner,
305
+ downloadBehavior: null,
294
306
  });
295
307
  const errorExplanationsProm = (0, inspect_errors_1.inspectErrors)({
296
308
  contents,
@@ -1,4 +1,4 @@
1
- import { LambdaPayload, RenderProgress } from '../shared/constants';
1
+ import type { LambdaPayload, RenderProgress } from '../shared/constants';
2
2
  declare type Options = {
3
3
  expectedBucketOwner: string;
4
4
  timeoutInMiliseconds: number;
@@ -1,4 +1,4 @@
1
- import { LambdaPayload } from '../shared/constants';
1
+ import type { LambdaPayload } from '../shared/constants';
2
2
  declare type Options = {
3
3
  expectedBucketOwner: string;
4
4
  isWarm: boolean;