@remotion/lambda 4.0.0-umungobongo.5 → 4.0.0-webhook.26

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 (99) hide show
  1. package/dist/admin/make-layer-public.js +5 -5
  2. package/dist/api/bucket-exists.js +1 -1
  3. package/dist/api/clean-items.js +1 -1
  4. package/dist/api/create-bucket.js +1 -1
  5. package/dist/api/delete-render.d.ts +19 -0
  6. package/dist/api/delete-render.js +66 -0
  7. package/dist/api/delete-site.js +0 -5
  8. package/dist/api/deploy-function.js +4 -2
  9. package/dist/api/deploy-site.d.ts +2 -0
  10. package/dist/api/deploy-site.js +2 -0
  11. package/dist/api/download-media.d.ts +13 -0
  12. package/dist/api/download-media.js +15 -3
  13. package/dist/api/enable-s3-website.js +1 -1
  14. package/dist/api/get-aws-client.d.ts +4 -2
  15. package/dist/api/get-aws-client.js +7 -2
  16. package/dist/api/get-buckets.js +2 -2
  17. package/dist/api/get-function-info.d.ts +1 -2
  18. package/dist/api/get-functions.js +2 -1
  19. package/dist/api/get-render-progress.d.ts +4 -1
  20. package/dist/api/get-render-progress.js +5 -1
  21. package/dist/api/mock-functions.d.ts +4 -5
  22. package/dist/api/presign-url.js +6 -1
  23. package/dist/api/render-media-on-lambda.d.ts +18 -10
  24. package/dist/api/render-media-on-lambda.js +65 -40
  25. package/dist/api/render-still-on-lambda.d.ts +1 -0
  26. package/dist/api/render-still-on-lambda.js +48 -30
  27. package/dist/api/upload-dir.js +1 -1
  28. package/dist/api/validate-webhook-signature.d.ts +13 -0
  29. package/dist/api/validate-webhook-signature.js +32 -0
  30. package/dist/cli/args.d.ts +2 -0
  31. package/dist/cli/commands/functions/deploy.js +2 -1
  32. package/dist/cli/commands/render/render.js +24 -15
  33. package/dist/cli/commands/still.js +20 -16
  34. package/dist/cli/get-aws-region.js +2 -1
  35. package/dist/cli/helpers/determine-image-format.d.ts +10 -0
  36. package/dist/cli/helpers/determine-image-format.js +47 -0
  37. package/dist/cli/helpers/find-function-name.js +3 -2
  38. package/dist/cli/helpers/webhook-types.d.ts +6 -0
  39. package/dist/cli/helpers/webhook-types.js +2 -0
  40. package/dist/cli/index.js +1 -1
  41. package/dist/client.d.ts +4 -2
  42. package/dist/client.js +3 -1
  43. package/dist/functions/chunk-optimization/can-use-optimization.js +2 -2
  44. package/dist/functions/chunk-optimization/s3-optimization-file.js +1 -0
  45. package/dist/functions/chunk-optimization/types.d.ts +1 -2
  46. package/dist/functions/helpers/check-if-render-exists.d.ts +3 -0
  47. package/dist/functions/helpers/check-if-render-exists.js +14 -0
  48. package/dist/functions/helpers/expected-out-name.d.ts +4 -2
  49. package/dist/functions/helpers/expected-out-name.js +26 -5
  50. package/dist/functions/helpers/find-output-file-in-bucket.d.ts +3 -1
  51. package/dist/functions/helpers/find-output-file-in-bucket.js +17 -13
  52. package/dist/functions/helpers/get-custom-out-name.d.ts +6 -0
  53. package/dist/functions/helpers/get-custom-out-name.js +31 -0
  54. package/dist/functions/helpers/get-files-to-delete.js +1 -1
  55. package/dist/functions/helpers/get-lambdas-invoked-stats.js +1 -1
  56. package/dist/functions/helpers/get-output-url-from-metadata.d.ts +2 -1
  57. package/dist/functions/helpers/get-output-url-from-metadata.js +2 -2
  58. package/dist/functions/helpers/get-progress.d.ts +4 -2
  59. package/dist/functions/helpers/get-progress.js +13 -6
  60. package/dist/functions/helpers/get-retry-stats.js +1 -1
  61. package/dist/functions/helpers/io.d.ts +17 -1
  62. package/dist/functions/helpers/io.js +21 -6
  63. package/dist/functions/helpers/read-with-progress.d.ts +3 -1
  64. package/dist/functions/helpers/read-with-progress.js +2 -2
  65. package/dist/functions/helpers/write-lambda-error.d.ts +1 -1
  66. package/dist/functions/helpers/write-lambda-error.js +1 -0
  67. package/dist/functions/helpers/write-post-render-data.js +1 -0
  68. package/dist/functions/index.js +4 -4
  69. package/dist/functions/info.d.ts +2 -2
  70. package/dist/functions/info.js +2 -1
  71. package/dist/functions/launch.js +206 -13
  72. package/dist/functions/progress.d.ts +1 -1
  73. package/dist/functions/progress.js +10 -1
  74. package/dist/functions/renderer.js +104 -74
  75. package/dist/functions/start.d.ts +5 -1
  76. package/dist/functions/start.js +23 -1
  77. package/dist/functions/still.js +17 -4
  78. package/dist/index.d.ts +6 -2
  79. package/dist/index.js +5 -1
  80. package/dist/shared/aws-clients.d.ts +13 -2
  81. package/dist/shared/aws-clients.js +56 -26
  82. package/dist/shared/bundle-site.d.ts +2 -1
  83. package/dist/shared/constants.d.ts +31 -6
  84. package/dist/shared/constants.js +14 -7
  85. package/dist/shared/get-cloudwatch-stream-url.d.ts +8 -0
  86. package/dist/shared/get-cloudwatch-stream-url.js +7 -0
  87. package/dist/shared/get-function-version.d.ts +1 -2
  88. package/dist/shared/hosted-layers.js +60 -60
  89. package/dist/shared/invoke-webhook.d.ts +59 -0
  90. package/dist/shared/invoke-webhook.js +103 -0
  91. package/dist/shared/is-in-lambda.js +5 -1
  92. package/dist/shared/lambda-version-string.d.ts +1 -0
  93. package/dist/shared/lambda-version-string.js +7 -0
  94. package/dist/shared/validate-frames-per-lambda.d.ts +4 -1
  95. package/dist/shared/validate-frames-per-lambda.js +4 -3
  96. package/dist/shared/validate-outname.d.ts +3 -2
  97. package/dist/shared/validate-outname.js +5 -1
  98. package/package.json +9 -9
  99. package/remotionlambda.zip +0 -0
package/dist/client.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFunctions = exports.getRenderProgress = exports.renderStillOnLambda = exports.renderMediaOnLambda = exports.renderVideoOnLambda = void 0;
3
+ exports.validateWebhookSignature = exports.getFunctions = exports.getRenderProgress = exports.renderStillOnLambda = exports.renderMediaOnLambda = exports.renderVideoOnLambda = void 0;
4
4
  const get_functions_1 = require("./api/get-functions");
5
5
  Object.defineProperty(exports, "getFunctions", { enumerable: true, get: function () { return get_functions_1.getFunctions; } });
6
6
  const get_render_progress_1 = require("./api/get-render-progress");
@@ -10,3 +10,5 @@ Object.defineProperty(exports, "renderMediaOnLambda", { enumerable: true, get: f
10
10
  Object.defineProperty(exports, "renderVideoOnLambda", { enumerable: true, get: function () { return render_media_on_lambda_1.renderVideoOnLambda; } });
11
11
  const render_still_on_lambda_1 = require("./api/render-still-on-lambda");
12
12
  Object.defineProperty(exports, "renderStillOnLambda", { enumerable: true, get: function () { return render_still_on_lambda_1.renderStillOnLambda; } });
13
+ const validate_webhook_signature_1 = require("./api/validate-webhook-signature");
14
+ Object.defineProperty(exports, "validateWebhookSignature", { enumerable: true, get: function () { return validate_webhook_signature_1.validateWebhookSignature; } });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.canUseOptimization = void 0;
4
- const defaults_1 = require("../../defaults");
4
+ const version_1 = require("remotion/version");
5
5
  const canUseOptimization = ({ optimization, framesPerLambda, frameRange, }) => {
6
6
  if (!optimization) {
7
7
  return false;
@@ -9,7 +9,7 @@ const canUseOptimization = ({ optimization, framesPerLambda, frameRange, }) => {
9
9
  if (optimization.framesPerLambda !== framesPerLambda) {
10
10
  return false;
11
11
  }
12
- if (optimization.lambdaVersion !== defaults_1.CURRENT_VERSION) {
12
+ if (optimization.lambdaVersion !== version_1.VERSION) {
13
13
  return false;
14
14
  }
15
15
  if (optimization.frameRange[0] !== frameRange[0]) {
@@ -13,6 +13,7 @@ const writeOptimization = async ({ bucketName, optimization, compositionId, site
13
13
  privacy: 'private',
14
14
  expectedBucketOwner,
15
15
  downloadBehavior: null,
16
+ customCredentials: null,
16
17
  });
17
18
  };
18
19
  exports.writeOptimization = writeOptimization;
@@ -1,4 +1,3 @@
1
- import type { LambdaVersions } from '../../shared/constants';
2
1
  export declare type ObjectChunkTimingData = {
3
2
  chunk: number;
4
3
  frameRange: [number, number];
@@ -18,6 +17,6 @@ export declare type OptimizationProfile = {
18
17
  newTiming: number;
19
18
  createdFromRenderId: string;
20
19
  framesPerLambda: number;
21
- lambdaVersion: LambdaVersions;
20
+ lambdaVersion: string;
22
21
  everyNthFrame: number;
23
22
  };
@@ -0,0 +1,3 @@
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { AwsRegion } from '../../client';
3
+ export declare const checkIfRenderExists: (contents: _Object[], renderId: string, bucketName: string, region: AwsRegion) => void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkIfRenderExists = void 0;
4
+ const constants_1 = require("../../shared/constants");
5
+ const checkIfRenderExists = (contents, renderId, bucketName, region) => {
6
+ const initializedExists = Boolean(contents.find((c) => {
7
+ var _a;
8
+ return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.initalizedMetadataKey)(renderId));
9
+ }));
10
+ if (!initializedExists) {
11
+ throw new TypeError(`No render with ID "${renderId}" found in bucket ${bucketName} and region ${region}`);
12
+ }
13
+ };
14
+ exports.checkIfRenderExists = checkIfRenderExists;
@@ -1,2 +1,4 @@
1
- import type { OutNameOutput, RenderMetadata } from '../../defaults';
2
- export declare const getExpectedOutName: (renderMetadata: RenderMetadata, bucketName: string) => OutNameOutput;
1
+ import type { OutNameInput, OutNameOutput, RenderMetadata } from '../../defaults';
2
+ import type { CustomCredentials } from '../../shared/aws-clients';
3
+ export declare const getCredentialsFromOutName: (name: OutNameInput | null) => CustomCredentials | null;
4
+ export declare const getExpectedOutName: (renderMetadata: RenderMetadata, bucketName: string, customCredentials: CustomCredentials | null) => OutNameOutput;
@@ -1,24 +1,45 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getExpectedOutName = void 0;
3
+ exports.getExpectedOutName = exports.getCredentialsFromOutName = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
5
  const defaults_1 = require("../../defaults");
6
6
  const validate_outname_1 = require("../../shared/validate-outname");
7
- const getExpectedOutName = (renderMetadata, bucketName) => {
8
- if (renderMetadata.outName) {
9
- (0, validate_outname_1.validateOutname)(renderMetadata.outName);
10
- return (0, defaults_1.customOutName)(renderMetadata.renderId, bucketName, renderMetadata.outName);
7
+ const get_custom_out_name_1 = require("./get-custom-out-name");
8
+ const getCredentialsFromOutName = (name) => {
9
+ var _a;
10
+ if (typeof name === 'string') {
11
+ return null;
12
+ }
13
+ if (name === null) {
14
+ return null;
15
+ }
16
+ if (typeof name === 'undefined') {
17
+ return null;
18
+ }
19
+ return (_a = name.s3OutputProvider) !== null && _a !== void 0 ? _a : null;
20
+ };
21
+ exports.getCredentialsFromOutName = getCredentialsFromOutName;
22
+ const getExpectedOutName = (renderMetadata, bucketName, customCredentials) => {
23
+ const outNameValue = (0, get_custom_out_name_1.getCustomOutName)({
24
+ customCredentials,
25
+ renderMetadata,
26
+ });
27
+ if (outNameValue) {
28
+ (0, validate_outname_1.validateOutname)(outNameValue);
29
+ return (0, defaults_1.customOutName)(renderMetadata.renderId, bucketName, outNameValue);
11
30
  }
12
31
  if (renderMetadata.type === 'still') {
13
32
  return {
14
33
  renderBucketName: bucketName,
15
34
  key: (0, defaults_1.outStillName)(renderMetadata.renderId, renderMetadata.imageFormat),
35
+ customCredentials: null,
16
36
  };
17
37
  }
18
38
  if (renderMetadata.type === 'video') {
19
39
  return {
20
40
  renderBucketName: bucketName,
21
41
  key: (0, defaults_1.outName)(renderMetadata.renderId, renderer_1.RenderInternals.getFileExtensionFromCodec(renderMetadata.codec, 'final')),
42
+ customCredentials: null,
22
43
  };
23
44
  }
24
45
  throw new TypeError('no type passed');
@@ -1,12 +1,14 @@
1
1
  import type { AwsRegion } from '../..';
2
+ import type { CustomCredentials } from '../../shared/aws-clients';
2
3
  import type { RenderMetadata } from '../../shared/constants';
3
4
  export declare type OutputFileMetadata = {
4
5
  url: string;
5
6
  size: number;
6
7
  lastModified: number;
7
8
  };
8
- export declare const findOutputFileInBucket: ({ region, renderMetadata, bucketName, }: {
9
+ export declare const findOutputFileInBucket: ({ region, renderMetadata, bucketName, customCredentials, }: {
9
10
  region: AwsRegion;
10
11
  renderMetadata: RenderMetadata;
11
12
  bucketName: string;
13
+ customCredentials: CustomCredentials | null;
12
14
  }) => Promise<OutputFileMetadata | null>;
@@ -1,34 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.findOutputFileInBucket = void 0;
4
- const client_s3_1 = require("@aws-sdk/client-s3");
5
- const aws_clients_1 = require("../../shared/aws-clients");
4
+ const suggested_policy_1 = require("../../api/iam-validation/suggested-policy");
6
5
  const expected_out_name_1 = require("./expected-out-name");
7
6
  const get_output_url_from_metadata_1 = require("./get-output-url-from-metadata");
8
- const findOutputFileInBucket = async ({ region, renderMetadata, bucketName, }) => {
9
- var _a, _b;
7
+ const io_1 = require("./io");
8
+ const findOutputFileInBucket = async ({ region, renderMetadata, bucketName, customCredentials, }) => {
9
+ var _a;
10
10
  if (!renderMetadata) {
11
11
  throw new Error('unexpectedly did not get renderMetadata');
12
12
  }
13
- const expectedOutData = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName);
13
+ const { renderBucketName, key } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName, null);
14
14
  try {
15
- const head = await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.HeadObjectCommand({
16
- Bucket: expectedOutData.renderBucketName,
17
- Key: expectedOutData.key,
18
- }));
15
+ const head = await (0, io_1.lambdaHeadCommand)({
16
+ bucketName,
17
+ key,
18
+ region,
19
+ });
19
20
  return {
20
21
  lastModified: (_a = head.LastModified) === null || _a === void 0 ? void 0 : _a.getTime(),
21
22
  size: head.ContentLength,
22
- url: (0, get_output_url_from_metadata_1.getOutputUrlFromMetadata)(renderMetadata, bucketName),
23
+ url: (0, get_output_url_from_metadata_1.getOutputUrlFromMetadata)(renderMetadata, bucketName, customCredentials),
23
24
  };
24
25
  }
25
26
  catch (err) {
26
27
  if (err.name === 'NotFound') {
27
28
  return null;
28
29
  }
29
- if ((_b = err.stack) === null || _b === void 0 ? void 0 : _b.includes('UnknownError')) {
30
- console.log('got unknown error', { expectedOutData });
31
- return null;
30
+ if (err.message === 'UnknownError' ||
31
+ err.$metadata
32
+ .httpStatusCode === 403) {
33
+ throw new Error(`Unable to access item "${key}" from bucket "${renderBucketName}" ${(customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.endpoint)
34
+ ? `(S3 Endpoint = ${customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.endpoint})`
35
+ : ''}. The "${suggested_policy_1.ROLE_NAME}" role must have permission for both "s3:GetObject" and "s3:ListBucket" actions.`);
32
36
  }
33
37
  throw err;
34
38
  }
@@ -0,0 +1,6 @@
1
+ import type { OutNameInput, RenderMetadata } from '../../defaults';
2
+ import type { CustomCredentials } from '../../shared/aws-clients';
3
+ export declare const getCustomOutName: ({ renderMetadata, customCredentials, }: {
4
+ renderMetadata: RenderMetadata;
5
+ customCredentials: CustomCredentials | null;
6
+ }) => OutNameInput | null;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCustomOutName = void 0;
4
+ const getCustomOutName = ({ renderMetadata, customCredentials, }) => {
5
+ var _a, _b;
6
+ if (!renderMetadata.outName) {
7
+ return null;
8
+ }
9
+ if (typeof renderMetadata.outName === 'string') {
10
+ return renderMetadata.outName;
11
+ }
12
+ if (renderMetadata.outName.s3OutputProvider) {
13
+ if (!customCredentials && renderMetadata.privacy !== 'public') {
14
+ throw new TypeError(`The file was rendered with a custom S3 implementation and is not public, but no custom credentials were passed to downloadMedia().`);
15
+ }
16
+ return {
17
+ bucketName: renderMetadata.outName.bucketName,
18
+ key: renderMetadata.outName.key,
19
+ s3OutputProvider: {
20
+ endpoint: renderMetadata.outName.s3OutputProvider.endpoint,
21
+ accessKeyId: (_a = customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.accessKeyId) !== null && _a !== void 0 ? _a : null,
22
+ secretAccessKey: (_b = customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.secretAccessKey) !== null && _b !== void 0 ? _b : null,
23
+ },
24
+ };
25
+ }
26
+ return {
27
+ bucketName: renderMetadata.outName.bucketName,
28
+ key: renderMetadata.outName.key,
29
+ };
30
+ };
31
+ exports.getCustomOutName = getCustomOutName;
@@ -12,7 +12,7 @@ const getFilesToDelete = ({ chunkCount, renderId, }) => {
12
12
  .map((_x, i) => (0, constants_1.lambdaTimingsPrefixForChunk)(renderId, i));
13
13
  return [
14
14
  {
15
- name: (0, constants_1.lambdaInitializedPrefix)(renderId),
15
+ name: (0, constants_1.lambdaChunkInitializedPrefix)(renderId),
16
16
  type: 'prefix',
17
17
  },
18
18
  ...chunks.map((i) => {
@@ -7,7 +7,7 @@ const min_max_1 = require("./min-max");
7
7
  const getLambdasInvokedStats = ({ contents, renderId, estimatedRenderLambdaInvokations, startDate, checkIfAllLambdasWereInvoked, }) => {
8
8
  var _a;
9
9
  const lambdasInvoked = contents
10
- .filter((c) => { var _a; return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.lambdaInitializedPrefix)(renderId)); })
10
+ .filter((c) => { var _a; return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.lambdaChunkInitializedPrefix)(renderId)); })
11
11
  .filter((c) => (0, parse_lambda_initialized_key_1.parseLambdaInitializedKey)(c.Key).attempt === 1);
12
12
  const allLambdasInvoked = !checkIfAllLambdasWereInvoked ||
13
13
  lambdasInvoked.length === estimatedRenderLambdaInvokations;
@@ -1,2 +1,3 @@
1
1
  import type { RenderMetadata } from '../../defaults';
2
- export declare const getOutputUrlFromMetadata: (renderMetadata: RenderMetadata, bucketName: string) => string;
2
+ import type { CustomCredentials } from '../../shared/aws-clients';
3
+ export declare const getOutputUrlFromMetadata: (renderMetadata: RenderMetadata, bucketName: string, customCredentials: CustomCredentials | null) => string;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getOutputUrlFromMetadata = void 0;
4
4
  const expected_out_name_1 = require("./expected-out-name");
5
5
  const get_current_region_1 = require("./get-current-region");
6
- const getOutputUrlFromMetadata = (renderMetadata, bucketName) => {
7
- const outname = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName);
6
+ const getOutputUrlFromMetadata = (renderMetadata, bucketName, customCredentials) => {
7
+ const outname = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName, customCredentials);
8
8
  return `https://s3.${(0, get_current_region_1.getCurrentRegionInFunction)()}.amazonaws.com/${outname.renderBucketName}/${outname.key}`;
9
9
  };
10
10
  exports.getOutputUrlFromMetadata = getOutputUrlFromMetadata;
@@ -1,10 +1,12 @@
1
1
  import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { CustomCredentials } from '../../shared/aws-clients';
2
3
  import type { RenderProgress } from '../../shared/constants';
3
- export declare const getProgress: ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMiliseconds, }: {
4
+ export declare const getProgress: ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMilliseconds, customCredentials, }: {
4
5
  bucketName: string;
5
6
  renderId: string;
6
7
  expectedBucketOwner: string;
7
8
  region: AwsRegion;
8
9
  memorySizeInMb: number;
9
- timeoutInMiliseconds: number;
10
+ timeoutInMilliseconds: number;
11
+ customCredentials: CustomCredentials | null;
10
12
  }) => Promise<RenderProgress>;
@@ -6,6 +6,7 @@ const constants_1 = require("../../shared/constants");
6
6
  const docs_url_1 = require("../../shared/docs-url");
7
7
  const calculate_chunk_times_1 = require("./calculate-chunk-times");
8
8
  const calculate_price_from_bucket_1 = require("./calculate-price-from-bucket");
9
+ const check_if_render_exists_1 = require("./check-if-render-exists");
9
10
  const expected_out_name_1 = require("./expected-out-name");
10
11
  const find_output_file_in_bucket_1 = require("./find-output-file-in-bucket");
11
12
  const format_costs_info_1 = require("./format-costs-info");
@@ -22,7 +23,7 @@ const get_retry_stats_1 = require("./get-retry-stats");
22
23
  const get_time_to_finish_1 = require("./get-time-to-finish");
23
24
  const inspect_errors_1 = require("./inspect-errors");
24
25
  const io_1 = require("./io");
25
- const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMiliseconds, }) => {
26
+ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMilliseconds, customCredentials, }) => {
26
27
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
27
28
  const postRenderData = await (0, get_post_render_data_1.getPostRenderData)({
28
29
  bucketName,
@@ -31,7 +32,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
31
32
  expectedBucketOwner,
32
33
  });
33
34
  if (postRenderData) {
34
- const outData = (0, expected_out_name_1.getExpectedOutName)(postRenderData.renderMetadata, bucketName);
35
+ const outData = (0, expected_out_name_1.getExpectedOutName)(postRenderData.renderMetadata, bucketName, customCredentials);
35
36
  return {
36
37
  bucket: bucketName,
37
38
  renderSize: postRenderData.renderSize,
@@ -77,6 +78,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
77
78
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
78
79
  expectedBucketOwner,
79
80
  });
81
+ (0, check_if_render_exists_1.checkIfRenderExists)(contents, renderId, bucketName, (0, get_current_region_1.getCurrentRegionInFunction)());
80
82
  const renderMetadataExists = Boolean(contents.find((c) => c.Key === (0, constants_1.renderMetadataKey)(renderId)));
81
83
  const [encodingStatus, renderMetadata, errorExplanations] = await Promise.all([
82
84
  (0, get_encoding_metadata_1.getEncodingMetadata)({
@@ -102,11 +104,15 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
102
104
  expectedBucketOwner,
103
105
  }),
104
106
  ]);
107
+ if ((renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.type) === 'still') {
108
+ throw new Error("You don't need to call getRenderProgress() on a still render. Once you have obtained the `renderId`, the render is already done! 😉");
109
+ }
105
110
  const outputFile = renderMetadata
106
111
  ? await (0, find_output_file_in_bucket_1.findOutputFileInBucket)({
107
112
  bucketName,
108
113
  renderMetadata,
109
114
  region,
115
+ customCredentials,
110
116
  })
111
117
  : null;
112
118
  const accruedSoFar = Number((0, calculate_price_from_bucket_1.estimatePriceFromBucket)({
@@ -157,13 +163,13 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
157
163
  : chunks.length;
158
164
  // 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
159
165
  const isBeyondTimeout = renderMetadata &&
160
- Date.now() > renderMetadata.startedDate + timeoutInMiliseconds + 20000;
166
+ Date.now() > renderMetadata.startedDate + timeoutInMilliseconds + 20000;
161
167
  const allErrors = [
162
168
  isBeyondTimeout
163
169
  ? {
164
170
  attempt: 1,
165
171
  chunk: null,
166
- explanation: `The main function timed out after ${timeoutInMiliseconds}ms. Consider increasing the timeout of your function. You can use the "--timeout" parameter when deploying a function via CLI, or the "timeoutInSeconds" parameter when using the deployFunction API. ${docs_url_1.DOCS_URL}/docs/lambda/cli/functions#deploy`,
172
+ explanation: `The main function timed out after ${timeoutInMilliseconds}ms. Consider increasing the timeout of your function. You can use the "--timeout" parameter when deploying a function via CLI, or the "timeoutInSeconds" parameter when using the deployFunction API. ${docs_url_1.DOCS_URL}/docs/lambda/cli/functions#deploy`,
167
173
  frame: null,
168
174
  isFatal: true,
169
175
  s3Location: '',
@@ -214,10 +220,11 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
214
220
  }),
215
221
  retriesInfo,
216
222
  outKey: outputFile && renderMetadata
217
- ? (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName).key
223
+ ? (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName, customCredentials).key
218
224
  : null,
219
225
  outBucket: outputFile && renderMetadata
220
- ? (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName).renderBucketName
226
+ ? (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName, customCredentials)
227
+ .renderBucketName
221
228
  : null,
222
229
  mostExpensiveFrameRanges: null,
223
230
  };
@@ -5,7 +5,7 @@ const constants_1 = require("../../shared/constants");
5
5
  const parse_lambda_initialized_key_1 = require("../../shared/parse-lambda-initialized-key");
6
6
  const getRetryStats = ({ contents, renderId, }) => {
7
7
  const retries = contents
8
- .filter((c) => { var _a; return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.lambdaInitializedPrefix)(renderId)); })
8
+ .filter((c) => { var _a; return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.lambdaChunkInitializedPrefix)(renderId)); })
9
9
  .filter((c) => (0, parse_lambda_initialized_key_1.parseLambdaInitializedKey)(c.Key).attempt !== 1);
10
10
  return retries.map((retry) => {
11
11
  var _a;
@@ -2,6 +2,7 @@ import type { _Object } from '@aws-sdk/client-s3';
2
2
  import type { ReadStream } from 'fs';
3
3
  import type { Readable } from 'stream';
4
4
  import type { AwsRegion } from '../../pricing/aws-regions';
5
+ import type { CustomCredentials } from '../../shared/aws-clients';
5
6
  import type { Privacy } from '../../shared/constants';
6
7
  import type { DownloadBehavior } from '../../shared/content-disposition-header';
7
8
  export declare type LambdaLSInput = {
@@ -13,7 +14,13 @@ export declare type LambdaLSInput = {
13
14
  };
14
15
  export declare type LambdaLsReturnType = Promise<_Object[]>;
15
16
  export declare const lambdaLs: ({ bucketName, prefix, region, expectedBucketOwner, continuationToken, }: LambdaLSInput) => LambdaLsReturnType;
16
- export declare const lambdaWriteFile: ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, }: {
17
+ export declare const lambdaDeleteFile: ({ bucketName, key, region, customCredentials, }: {
18
+ region: AwsRegion;
19
+ bucketName: string;
20
+ key: string;
21
+ customCredentials: CustomCredentials | null;
22
+ }) => Promise<void>;
23
+ export declare const lambdaWriteFile: ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, customCredentials, }: {
17
24
  bucketName: string;
18
25
  key: string;
19
26
  body: ReadStream | string;
@@ -21,6 +28,7 @@ export declare const lambdaWriteFile: ({ bucketName, key, body, region, privacy,
21
28
  privacy: Privacy;
22
29
  expectedBucketOwner: string | null;
23
30
  downloadBehavior: DownloadBehavior | null;
31
+ customCredentials: CustomCredentials | null;
24
32
  }) => Promise<void>;
25
33
  export declare const lambdaReadFile: ({ bucketName, key, region, expectedBucketOwner, }: {
26
34
  bucketName: string;
@@ -28,3 +36,11 @@ export declare const lambdaReadFile: ({ bucketName, key, region, expectedBucketO
28
36
  region: AwsRegion;
29
37
  expectedBucketOwner: string;
30
38
  }) => Promise<Readable>;
39
+ export declare const lambdaHeadCommand: ({ bucketName, key, region, }: {
40
+ bucketName: string;
41
+ key: string;
42
+ region: AwsRegion;
43
+ }) => Promise<{
44
+ LastModified?: Date | undefined;
45
+ ContentLength?: number | undefined;
46
+ }>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.lambdaReadFile = exports.lambdaWriteFile = exports.lambdaLs = void 0;
6
+ exports.lambdaHeadCommand = exports.lambdaReadFile = exports.lambdaWriteFile = exports.lambdaDeleteFile = 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");
@@ -11,7 +11,7 @@ const content_disposition_header_1 = require("../../shared/content-disposition-h
11
11
  const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, continuationToken, }) => {
12
12
  var _a, _b, _c;
13
13
  try {
14
- const list = await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.ListObjectsV2Command({
14
+ const list = await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.ListObjectsV2Command({
15
15
  Bucket: bucketName,
16
16
  Prefix: prefix,
17
17
  ExpectedBucketOwner: expectedBucketOwner !== null && expectedBucketOwner !== void 0 ? expectedBucketOwner : undefined,
@@ -37,7 +37,7 @@ const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, conti
37
37
  }
38
38
  // Prevent from accessing a foreign bucket, retry without ExpectedBucketOwner and see if it works. If it works then it's an owner mismatch.
39
39
  if ((_c = err.stack) === null || _c === void 0 ? void 0 : _c.includes('AccessDenied')) {
40
- await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.ListObjectsV2Command({
40
+ await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.ListObjectsV2Command({
41
41
  Bucket: bucketName,
42
42
  Prefix: prefix,
43
43
  }));
@@ -47,8 +47,15 @@ const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, conti
47
47
  }
48
48
  };
49
49
  exports.lambdaLs = lambdaLs;
50
- const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, }) => {
51
- await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.PutObjectCommand({
50
+ const lambdaDeleteFile = async ({ bucketName, key, region, customCredentials, }) => {
51
+ await (0, aws_clients_1.getS3Client)(region, customCredentials).send(new client_s3_1.DeleteObjectCommand({
52
+ Bucket: bucketName,
53
+ Key: key,
54
+ }));
55
+ };
56
+ exports.lambdaDeleteFile = lambdaDeleteFile;
57
+ const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, customCredentials, }) => {
58
+ await (0, aws_clients_1.getS3Client)(region, customCredentials).send(new client_s3_1.PutObjectCommand({
52
59
  Bucket: bucketName,
53
60
  Key: key,
54
61
  Body: body,
@@ -64,7 +71,7 @@ const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expecte
64
71
  };
65
72
  exports.lambdaWriteFile = lambdaWriteFile;
66
73
  const lambdaReadFile = async ({ bucketName, key, region, expectedBucketOwner, }) => {
67
- const { Body } = await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.GetObjectCommand({
74
+ const { Body } = await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.GetObjectCommand({
68
75
  Bucket: bucketName,
69
76
  Key: key,
70
77
  ExpectedBucketOwner: expectedBucketOwner,
@@ -72,3 +79,11 @@ const lambdaReadFile = async ({ bucketName, key, region, expectedBucketOwner, })
72
79
  return Body;
73
80
  };
74
81
  exports.lambdaReadFile = lambdaReadFile;
82
+ const lambdaHeadCommand = async ({ bucketName, key, region, }) => {
83
+ const head = await (0, aws_clients_1.getS3Client)(region, null).send(new client_s3_1.HeadObjectCommand({
84
+ Bucket: bucketName,
85
+ Key: key,
86
+ }));
87
+ return head;
88
+ };
89
+ exports.lambdaHeadCommand = lambdaHeadCommand;
@@ -1,16 +1,18 @@
1
1
  import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { CustomCredentials } from '../../shared/aws-clients';
2
3
  export declare type LambdaReadFileProgress = (progress: {
3
4
  totalSize: number;
4
5
  downloaded: number;
5
6
  percent: number;
6
7
  }) => unknown;
7
- export declare const lambdaDownloadFileWithProgress: ({ bucketName, key, region, expectedBucketOwner, outputPath, onProgress, }: {
8
+ export declare const lambdaDownloadFileWithProgress: ({ bucketName, key, region, expectedBucketOwner, outputPath, onProgress, customCredentials, }: {
8
9
  bucketName: string;
9
10
  key: string;
10
11
  region: AwsRegion;
11
12
  expectedBucketOwner: string;
12
13
  outputPath: string;
13
14
  onProgress: LambdaReadFileProgress;
15
+ customCredentials: CustomCredentials | null;
14
16
  }) => Promise<{
15
17
  sizeInBytes: number;
16
18
  to: string;
@@ -5,8 +5,8 @@ const client_s3_1 = require("@aws-sdk/client-s3");
5
5
  const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
6
6
  const renderer_1 = require("@remotion/renderer");
7
7
  const aws_clients_1 = require("../../shared/aws-clients");
8
- const lambdaDownloadFileWithProgress = async ({ bucketName, key, region, expectedBucketOwner, outputPath, onProgress, }) => {
9
- const client = (0, aws_clients_1.getS3Client)(region);
8
+ const lambdaDownloadFileWithProgress = async ({ bucketName, key, region, expectedBucketOwner, outputPath, onProgress, customCredentials, }) => {
9
+ const client = (0, aws_clients_1.getS3Client)(region, customCredentials);
10
10
  const command = new client_s3_1.GetObjectCommand({
11
11
  Bucket: bucketName,
12
12
  ExpectedBucketOwner: expectedBucketOwner,
@@ -1,6 +1,6 @@
1
1
  import type { FileNameAndSize } from './get-files-in-folder';
2
2
  export declare type LambdaErrorInfo = {
3
- type: 'renderer' | 'browser' | 'stitcher';
3
+ type: 'renderer' | 'browser' | 'stitcher' | 'webhook';
4
4
  message: string;
5
5
  name: string;
6
6
  stack: string;
@@ -34,6 +34,7 @@ const writeLambdaError = async ({ bucketName, renderId, errorInfo, expectedBucke
34
34
  privacy: 'private',
35
35
  expectedBucketOwner,
36
36
  downloadBehavior: null,
37
+ customCredentials: null,
37
38
  });
38
39
  };
39
40
  exports.writeLambdaError = writeLambdaError;
@@ -12,6 +12,7 @@ const writePostRenderData = async ({ bucketName, renderId, postRenderData, expec
12
12
  expectedBucketOwner,
13
13
  region,
14
14
  downloadBehavior: null,
15
+ customCredentials: null,
15
16
  });
16
17
  };
17
18
  exports.writePostRenderData = writePostRenderData;
@@ -13,8 +13,8 @@ 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) => {
16
- process.env.REMOTION_LAMBDA = 'true';
17
- const timeoutInMiliseconds = context.getRemainingTimeInMillis();
16
+ process.env.__RESERVED_IS_INSIDE_REMOTION_LAMBDA = 'true';
17
+ const timeoutInMilliseconds = context.getRemainingTimeInMillis();
18
18
  if (!context || !context.invokedFunctionArn) {
19
19
  throw new Error('Lambda function unexpectedly does not have context.invokedFunctionArn');
20
20
  }
@@ -36,7 +36,7 @@ const handler = async (params, context) => {
36
36
  inputProps: JSON.stringify(params.inputProps),
37
37
  isWarm,
38
38
  });
39
- return (0, start_1.startHandler)(params);
39
+ return (0, start_1.startHandler)(params, { expectedBucketOwner: currentUserId });
40
40
  }
41
41
  if (params.type === constants_1.LambdaRoutines.launch) {
42
42
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.launch, {
@@ -53,7 +53,7 @@ const handler = async (params, context) => {
53
53
  });
54
54
  return (0, progress_1.progressHandler)(params, {
55
55
  expectedBucketOwner: currentUserId,
56
- timeoutInMiliseconds,
56
+ timeoutInMilliseconds,
57
57
  });
58
58
  }
59
59
  if (params.type === constants_1.LambdaRoutines.renderer) {
@@ -1,4 +1,4 @@
1
- import type { LambdaPayload, LambdaVersions } from '../shared/constants';
1
+ import type { LambdaPayload } from '../shared/constants';
2
2
  export declare const infoHandler: (lambdaParams: LambdaPayload) => Promise<{
3
- version: LambdaVersions;
3
+ version: string;
4
4
  }>;
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.infoHandler = void 0;
4
+ const version_1 = require("remotion/version");
4
5
  const constants_1 = require("../shared/constants");
5
6
  const infoHandler = (lambdaParams) => {
6
7
  if (lambdaParams.type !== constants_1.LambdaRoutines.info) {
7
8
  throw new TypeError('Expected info type');
8
9
  }
9
10
  const returnValue = {
10
- version: constants_1.CURRENT_VERSION,
11
+ version: version_1.VERSION,
11
12
  };
12
13
  return Promise.resolve(returnValue);
13
14
  };