@remotion/lambda-client 4.0.379 → 4.0.380

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 (141) hide show
  1. package/dist/app-router-webhook.d.ts +10 -0
  2. package/dist/app-router-webhook.js +43 -0
  3. package/dist/apply-lifecycle.d.ts +8 -0
  4. package/dist/apply-lifecycle.js +18 -0
  5. package/dist/aws-clients.d.ts +12 -0
  6. package/dist/aws-clients.js +56 -0
  7. package/dist/aws-provider.d.ts +27 -0
  8. package/dist/aws-provider.js +94 -0
  9. package/dist/bucket-exists.d.ts +3 -0
  10. package/dist/bucket-exists.js +27 -0
  11. package/dist/call-lambda-async.d.ts +2 -0
  12. package/dist/call-lambda-async.js +20 -0
  13. package/dist/call-lambda-streaming.d.ts +6 -0
  14. package/dist/call-lambda-streaming.js +126 -0
  15. package/dist/call-lambda-sync.d.ts +2 -0
  16. package/dist/call-lambda-sync.js +30 -0
  17. package/dist/check-credentials.d.ts +1 -0
  18. package/dist/check-credentials.js +39 -0
  19. package/dist/cjs/index.js +33 -33
  20. package/dist/clean-items.d.ts +17 -0
  21. package/dist/clean-items.js +26 -0
  22. package/dist/constants.d.ts +25 -0
  23. package/dist/constants.js +26 -0
  24. package/dist/content-disposition-header.d.ts +2 -0
  25. package/dist/content-disposition-header.js +50 -0
  26. package/dist/convert-to-serve-url.d.ts +6 -0
  27. package/dist/convert-to-serve-url.js +14 -0
  28. package/dist/create-bucket.d.ts +3 -0
  29. package/dist/create-bucket.js +65 -0
  30. package/dist/delete-file.d.ts +3 -0
  31. package/dist/delete-file.js +17 -0
  32. package/dist/delete-function.d.ts +7 -0
  33. package/dist/delete-function.js +15 -0
  34. package/dist/delete-render.d.ts +22 -0
  35. package/dist/delete-render.js +90 -0
  36. package/dist/encode-aws-url-params.d.ts +1 -0
  37. package/dist/encode-aws-url-params.js +7 -0
  38. package/dist/esm/index.mjs +20 -20
  39. package/dist/estimate-price.d.ts +17 -0
  40. package/dist/estimate-price.js +45 -0
  41. package/dist/express-webhook.d.ts +3 -0
  42. package/dist/express-webhook.js +46 -0
  43. package/dist/get-account-id.d.ts +3 -0
  44. package/dist/get-account-id.js +15 -0
  45. package/dist/get-aws-client.d.ts +32 -0
  46. package/dist/get-aws-client.js +67 -0
  47. package/dist/get-aws-urls.d.ts +25 -0
  48. package/dist/get-aws-urls.js +31 -0
  49. package/dist/get-buckets.d.ts +9 -0
  50. package/dist/get-buckets.js +64 -0
  51. package/dist/get-compositions-on-lambda.d.ts +20 -0
  52. package/dist/get-compositions-on-lambda.js +62 -0
  53. package/dist/get-credentials.d.ts +9 -0
  54. package/dist/get-credentials.js +55 -0
  55. package/dist/get-env-variable.d.ts +1 -0
  56. package/dist/get-env-variable.js +15 -0
  57. package/dist/get-function-name.d.ts +8 -0
  58. package/dist/get-function-name.js +17 -0
  59. package/dist/get-function-version.d.ts +9 -0
  60. package/dist/get-function-version.js +35 -0
  61. package/dist/get-functions.d.ts +10 -0
  62. package/dist/get-functions.js +80 -0
  63. package/dist/get-output-url-from-metadata.d.ts +3 -0
  64. package/dist/get-output-url-from-metadata.js +18 -0
  65. package/dist/get-render-progress.d.ts +17 -0
  66. package/dist/get-render-progress.js +47 -0
  67. package/dist/get-s3-client.d.ts +11 -0
  68. package/dist/get-s3-client.js +15 -0
  69. package/dist/get-service-client.d.ts +25 -0
  70. package/dist/get-service-client.js +131 -0
  71. package/dist/get-sites.d.ts +31 -0
  72. package/dist/get-sites.js +83 -0
  73. package/dist/head-file.d.ts +3 -0
  74. package/dist/head-file.js +18 -0
  75. package/dist/index.d.ts +129 -0
  76. package/dist/index.js +108 -0
  77. package/dist/is-cli.d.ts +2 -0
  78. package/dist/is-cli.js +10 -0
  79. package/dist/is-flaky-error.d.ts +1 -0
  80. package/dist/is-flaky-error.js +78 -0
  81. package/dist/is-in-lambda.d.ts +1 -0
  82. package/dist/is-in-lambda.js +9 -0
  83. package/dist/is-likely-to-have-aws-profile.d.ts +1 -0
  84. package/dist/is-likely-to-have-aws-profile.js +50 -0
  85. package/dist/lambda-version-string.d.ts +1 -0
  86. package/dist/lambda-version-string.js +7 -0
  87. package/dist/lifecycle-rules.d.ts +12 -0
  88. package/dist/lifecycle-rules.js +73 -0
  89. package/dist/lifecycle.d.ts +7 -0
  90. package/dist/lifecycle.js +24 -0
  91. package/dist/list-objects.d.ts +3 -0
  92. package/dist/list-objects.js +70 -0
  93. package/dist/make-lambda-payload.d.ts +59 -0
  94. package/dist/make-lambda-payload.js +150 -0
  95. package/dist/make-s3-url.d.ts +6 -0
  96. package/dist/make-s3-url.js +7 -0
  97. package/dist/p-limit.d.ts +1 -0
  98. package/dist/p-limit.js +57 -0
  99. package/dist/pages-router-webhook.d.ts +5 -0
  100. package/dist/pages-router-webhook.js +48 -0
  101. package/dist/parse-function-name.d.ts +8 -0
  102. package/dist/parse-function-name.js +17 -0
  103. package/dist/presign-url.d.ts +17 -0
  104. package/dist/presign-url.js +66 -0
  105. package/dist/price-per-1s.d.ts +37 -0
  106. package/dist/price-per-1s.js +822 -0
  107. package/dist/random-hash.d.ts +1 -0
  108. package/dist/random-hash.js +13 -0
  109. package/dist/read-file.d.ts +11 -0
  110. package/dist/read-file.js +19 -0
  111. package/dist/regions.d.ts +3 -0
  112. package/dist/regions.js +48 -0
  113. package/dist/render-media-on-lambda.d.ts +66 -0
  114. package/dist/render-media-on-lambda.js +133 -0
  115. package/dist/render-still-on-lambda.d.ts +61 -0
  116. package/dist/render-still-on-lambda.js +121 -0
  117. package/dist/runtime-preference.d.ts +2 -0
  118. package/dist/runtime-preference.js +8 -0
  119. package/dist/speculate-function-name.d.ts +7 -0
  120. package/dist/speculate-function-name.js +39 -0
  121. package/dist/types.d.ts +4 -0
  122. package/dist/types.js +2 -0
  123. package/dist/validate-aws-region.d.ts +2 -0
  124. package/dist/validate-aws-region.js +9 -0
  125. package/dist/validate-bucketname.d.ts +4 -0
  126. package/dist/validate-bucketname.js +15 -0
  127. package/dist/validate-disk-size-in-mb.d.ts +1 -0
  128. package/dist/validate-disk-size-in-mb.js +23 -0
  129. package/dist/validate-lambda-codec.d.ts +2 -0
  130. package/dist/validate-lambda-codec.js +21 -0
  131. package/dist/validate-memory-size.d.ts +1 -0
  132. package/dist/validate-memory-size.js +22 -0
  133. package/dist/validate-presign-expiration.d.ts +1 -0
  134. package/dist/validate-presign-expiration.js +29 -0
  135. package/dist/validate-serveurl.d.ts +1 -0
  136. package/dist/validate-serveurl.js +9 -0
  137. package/dist/validate-webhook-signature.d.ts +5 -0
  138. package/dist/validate-webhook-signature.js +28 -0
  139. package/dist/write-file.d.ts +5 -0
  140. package/dist/write-file.js +83 -0
  141. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ export declare const validateMemorySize: (memorySizeInMb: unknown) => void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateMemorySize = void 0;
4
+ const constants_1 = require("./constants");
5
+ const validateMemorySize = (memorySizeInMb) => {
6
+ if (typeof memorySizeInMb !== 'number') {
7
+ throw new TypeError(`parameter 'memorySizeInMb' must be a number, got a ${typeof memorySizeInMb}`);
8
+ }
9
+ if (Number.isNaN(memorySizeInMb)) {
10
+ throw new TypeError(`parameter 'memorySizeInMb' must not be NaN, but is`);
11
+ }
12
+ if (!Number.isFinite(memorySizeInMb)) {
13
+ throw new TypeError(`parameter 'memorySizeInMb' must be finite, but is ${memorySizeInMb}`);
14
+ }
15
+ if (memorySizeInMb < constants_1.MIN_MEMORY || memorySizeInMb > constants_1.MAX_MEMORY) {
16
+ throw new TypeError(`parameter 'memorySizeInMb' must be between ${constants_1.MIN_MEMORY} and ${constants_1.MAX_MEMORY}, but got ${memorySizeInMb}`);
17
+ }
18
+ if (memorySizeInMb % 1 !== 0) {
19
+ throw new TypeError(`parameter 'memorySizeInMb' must be an integer but got ${memorySizeInMb}`);
20
+ }
21
+ };
22
+ exports.validateMemorySize = validateMemorySize;
@@ -0,0 +1 @@
1
+ export declare const validatePresignExpiration: (presignExpiration: unknown) => void;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validatePresignExpiration = void 0;
4
+ const MAX_PRESIGN_EXPIRATION = 604800;
5
+ const MIN_PRESIGN_EXPIRATION = 1;
6
+ const validatePresignExpiration = (presignExpiration) => {
7
+ if (typeof presignExpiration === 'undefined' || presignExpiration === null) {
8
+ return;
9
+ }
10
+ if (typeof presignExpiration !== 'number') {
11
+ throw new TypeError(`'expiresIn' should be a number, but is ${JSON.stringify(presignExpiration)}`);
12
+ }
13
+ if (Number.isNaN(presignExpiration)) {
14
+ throw new TypeError(`'expiresIn' should not be NaN, but is NaN`);
15
+ }
16
+ if (!Number.isFinite(presignExpiration)) {
17
+ throw new TypeError(`'expiresIn' should be finite but is ${presignExpiration}`);
18
+ }
19
+ if (presignExpiration % 1 !== 0) {
20
+ throw new TypeError(`'expiresIn' should be an integer but is ${JSON.stringify(presignExpiration)}`);
21
+ }
22
+ if (presignExpiration > MAX_PRESIGN_EXPIRATION) {
23
+ throw new TypeError(`The 'expiresIn' parameter must be less or equal than ${MAX_PRESIGN_EXPIRATION} (7 days) as enforced by AWS`);
24
+ }
25
+ if (presignExpiration < MIN_PRESIGN_EXPIRATION) {
26
+ throw new TypeError(`The 'expiresIn' parameter must be greater or equal than ${MIN_PRESIGN_EXPIRATION}`);
27
+ }
28
+ };
29
+ exports.validatePresignExpiration = validatePresignExpiration;
@@ -0,0 +1 @@
1
+ export declare const validateServeUrl: (serveUrl: unknown) => void;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateServeUrl = void 0;
4
+ const validateServeUrl = (serveUrl) => {
5
+ if (typeof serveUrl !== 'string') {
6
+ throw new TypeError(`"serveURL" parameter must be a string, but is ${JSON.stringify(serveUrl)}`);
7
+ }
8
+ };
9
+ exports.validateServeUrl = validateServeUrl;
@@ -0,0 +1,5 @@
1
+ export declare const validateWebhookSignature: ({ secret, body, signatureHeader, }: {
2
+ secret: string;
3
+ body: unknown;
4
+ signatureHeader: string;
5
+ }) => void;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateWebhookSignature = void 0;
4
+ /*
5
+ * @description Validates that the signature received by a webhook endpoint is authentic. If validation fails, an error is thrown.
6
+ * @see [Documentation](https://remotion.dev/docs/lambda/validatewebhooksignature)
7
+ */
8
+ const validateWebhookSignature = ({ secret, body, signatureHeader, }) => {
9
+ if (!secret) {
10
+ throw new TypeError("No 'secret' was provided to validateWebhookSignature().");
11
+ }
12
+ if (!body) {
13
+ throw new TypeError("No 'body' was provided to validateWebhookSignature().");
14
+ }
15
+ if (typeof require === 'undefined') {
16
+ throw new Error('validateWebhookSignature can only be called from Node.JS');
17
+ }
18
+ const Crypto = require('crypto');
19
+ const hmac = Crypto.createHmac('sha512', secret);
20
+ const signature = `sha512=${hmac.update(JSON.stringify(body)).digest('hex')}`;
21
+ if (!signatureHeader || signatureHeader === 'NO_SECRET_PROVIDED') {
22
+ throw new Error('No webhook signature was provided');
23
+ }
24
+ if (signatureHeader !== signature) {
25
+ throw new Error('Signatures do not match');
26
+ }
27
+ };
28
+ exports.validateWebhookSignature = validateWebhookSignature;
@@ -0,0 +1,5 @@
1
+ import type { WriteFileInput } from '@remotion/serverless-client';
2
+ import type { AwsProvider } from './aws-provider';
3
+ export declare const lambdaWriteFileImplementation: (params: WriteFileInput<AwsProvider> & {
4
+ retries?: number;
5
+ }) => Promise<void>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.lambdaWriteFileImplementation = void 0;
7
+ const client_s3_1 = require("@aws-sdk/client-s3");
8
+ const lib_storage_1 = require("@aws-sdk/lib-storage");
9
+ const mime_types_1 = __importDefault(require("mime-types"));
10
+ const content_disposition_header_1 = require("./content-disposition-header");
11
+ const get_s3_client_1 = require("./get-s3-client");
12
+ // Files larger than 100MB will use multipart upload
13
+ const MULTIPART_THRESHOLD = 100 * 1024 * 1024; // 5MB in bytes
14
+ const tryLambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, customCredentials, forcePathStyle, storageClass, requestHandler, }) => {
15
+ const client = (0, get_s3_client_1.getS3Client)({
16
+ region,
17
+ customCredentials: customCredentials,
18
+ forcePathStyle,
19
+ requestHandler,
20
+ });
21
+ const params = {
22
+ Bucket: bucketName,
23
+ Key: key,
24
+ Body: body,
25
+ ACL: privacy === 'no-acl'
26
+ ? undefined
27
+ : (privacy === 'private'
28
+ ? 'private'
29
+ : 'public-read'),
30
+ ExpectedBucketOwner: customCredentials
31
+ ? undefined
32
+ : (expectedBucketOwner !== null && expectedBucketOwner !== void 0 ? expectedBucketOwner : undefined),
33
+ ContentType: mime_types_1.default.lookup(key) || 'application/octet-stream',
34
+ ContentDisposition: (0, content_disposition_header_1.getContentDispositionHeader)(downloadBehavior),
35
+ StorageClass: storageClass !== null && storageClass !== void 0 ? storageClass : undefined,
36
+ };
37
+ // Determine file size
38
+ const size = body instanceof Buffer || body instanceof Uint8Array
39
+ ? body.length
40
+ : body instanceof Blob
41
+ ? body.size
42
+ : typeof body === 'string'
43
+ ? Buffer.from(body).length
44
+ : null;
45
+ // Use multipart upload for large files or streams (where we can't determine size)
46
+ if (size === null || size > MULTIPART_THRESHOLD) {
47
+ const upload = new lib_storage_1.Upload({
48
+ client,
49
+ params,
50
+ queueSize: 4, // number of concurrent uploads
51
+ partSize: 5 * 1024 * 1024, // chunk size of 5MB
52
+ });
53
+ await upload.done();
54
+ }
55
+ else {
56
+ // Use regular PutObject for small files
57
+ await client.send(new client_s3_1.PutObjectCommand(params));
58
+ }
59
+ };
60
+ const lambdaWriteFileImplementation = async (params) => {
61
+ var _a;
62
+ const remainingRetries = (_a = params.retries) !== null && _a !== void 0 ? _a : 2;
63
+ try {
64
+ await tryLambdaWriteFile(params);
65
+ }
66
+ catch (err) {
67
+ if (remainingRetries === 0) {
68
+ throw err;
69
+ }
70
+ const backoff = 2 ** (2 - remainingRetries) * 2000;
71
+ await new Promise((resolve) => {
72
+ setTimeout(resolve, backoff);
73
+ });
74
+ console.warn('Failed to write file to storage:');
75
+ console.warn(err);
76
+ console.warn(`Retrying (${remainingRetries} retries remaining)...`);
77
+ return (0, exports.lambdaWriteFileImplementation)({
78
+ ...params,
79
+ retries: remainingRetries - 1,
80
+ });
81
+ }
82
+ };
83
+ exports.lambdaWriteFileImplementation = lambdaWriteFileImplementation;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/lambda-client"
4
4
  },
5
5
  "name": "@remotion/lambda-client",
6
- "version": "4.0.379",
6
+ "version": "4.0.380",
7
7
  "main": "dist/cjs/index.js",
8
8
  "sideEffects": false,
9
9
  "scripts": {
@@ -26,10 +26,10 @@
26
26
  "@aws-sdk/lib-storage": "3.936.0",
27
27
  "mime-types": "2.1.34",
28
28
  "@aws-sdk/credential-provider-ini": "3.936.0",
29
- "@remotion/serverless-client": "4.0.379",
29
+ "@remotion/serverless-client": "4.0.380",
30
30
  "@types/express": "^5.0.0",
31
31
  "express": "4.21.0",
32
- "@remotion/eslint-config-internal": "4.0.379",
32
+ "@remotion/eslint-config-internal": "4.0.380",
33
33
  "eslint": "9.19.0",
34
34
  "next": "16.0.0",
35
35
  "@types/mime-types": "2.1.1"