@remotion/serverless 4.0.188

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 (67) hide show
  1. package/.eslintrc +3 -0
  2. package/LICENSE.md +49 -0
  3. package/README.md +18 -0
  4. package/dist/await.d.ts +1 -0
  5. package/dist/await.js +2 -0
  6. package/dist/client.d.ts +14 -0
  7. package/dist/client.js +40 -0
  8. package/dist/compositions.d.ts +11 -0
  9. package/dist/compositions.js +79 -0
  10. package/dist/compress-props.d.ts +23 -0
  11. package/dist/compress-props.js +90 -0
  12. package/dist/constants.d.ts +266 -0
  13. package/dist/constants.js +58 -0
  14. package/dist/error-category.d.ts +3 -0
  15. package/dist/error-category.js +16 -0
  16. package/dist/expected-out-name.d.ts +5 -0
  17. package/dist/expected-out-name.js +52 -0
  18. package/dist/get-browser-instance.d.ts +16 -0
  19. package/dist/get-browser-instance.js +104 -0
  20. package/dist/get-custom-out-name.d.ts +7 -0
  21. package/dist/get-custom-out-name.js +32 -0
  22. package/dist/get-files-in-folder.d.ts +5 -0
  23. package/dist/get-files-in-folder.js +2 -0
  24. package/dist/get-or-create-bucket.d.ts +20 -0
  25. package/dist/get-or-create-bucket.js +37 -0
  26. package/dist/index.d.ts +15 -0
  27. package/dist/index.js +32 -0
  28. package/dist/info.d.ts +6 -0
  29. package/dist/info.js +16 -0
  30. package/dist/input-props-keys.d.ts +2 -0
  31. package/dist/input-props-keys.js +11 -0
  32. package/dist/make-bucket-name.d.ts +3 -0
  33. package/dist/make-bucket-name.js +8 -0
  34. package/dist/provider-implementation.d.ts +105 -0
  35. package/dist/provider-implementation.js +2 -0
  36. package/dist/random-hash.d.ts +3 -0
  37. package/dist/random-hash.js +14 -0
  38. package/dist/region.d.ts +3 -0
  39. package/dist/region.js +45 -0
  40. package/dist/render-metadata.d.ts +37 -0
  41. package/dist/render-metadata.js +2 -0
  42. package/dist/serialize-artifact.d.ts +9 -0
  43. package/dist/serialize-artifact.js +37 -0
  44. package/dist/still.d.ts +28 -0
  45. package/dist/still.js +2 -0
  46. package/dist/stream-to-string.d.ts +4 -0
  47. package/dist/stream-to-string.js +15 -0
  48. package/dist/streaming/response-stream.d.ts +20 -0
  49. package/dist/streaming/response-stream.js +64 -0
  50. package/dist/streaming/stream-writer.d.ts +6 -0
  51. package/dist/streaming/stream-writer.js +35 -0
  52. package/dist/streaming/streaming.d.ts +102 -0
  53. package/dist/streaming/streaming.js +61 -0
  54. package/dist/truthy.d.ts +3 -0
  55. package/dist/truthy.js +7 -0
  56. package/dist/validate-bucket-name.d.ts +3 -0
  57. package/dist/validate-bucket-name.js +17 -0
  58. package/dist/validate-composition.d.ts +25 -0
  59. package/dist/validate-composition.js +31 -0
  60. package/dist/validate-outname.d.ts +8 -0
  61. package/dist/validate-outname.js +37 -0
  62. package/dist/validate-webhook.d.ts +3 -0
  63. package/dist/validate-webhook.js +16 -0
  64. package/dist/write-lambda-error.d.ts +27 -0
  65. package/dist/write-lambda-error.js +19 -0
  66. package/package.json +41 -0
  67. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.artifactName = exports.overallProgressKey = exports.customOutName = exports.outName = exports.outStillName = exports.rendersPrefix = exports.REMOTION_BUCKET_PREFIX = exports.serverlessCodecs = exports.ServerlessRoutines = exports.expiryDays = void 0;
4
+ // Needs to be in sync with renderer/src/options/delete-after.ts#L7
5
+ exports.expiryDays = {
6
+ '1-day': 1,
7
+ '3-days': 3,
8
+ '7-days': 7,
9
+ '30-days': 30,
10
+ };
11
+ var ServerlessRoutines;
12
+ (function (ServerlessRoutines) {
13
+ ServerlessRoutines["info"] = "info";
14
+ ServerlessRoutines["start"] = "start";
15
+ ServerlessRoutines["launch"] = "launch";
16
+ ServerlessRoutines["status"] = "status";
17
+ ServerlessRoutines["renderer"] = "renderer";
18
+ ServerlessRoutines["still"] = "still";
19
+ ServerlessRoutines["compositions"] = "compositions";
20
+ })(ServerlessRoutines || (exports.ServerlessRoutines = ServerlessRoutines = {}));
21
+ exports.serverlessCodecs = [
22
+ 'h264',
23
+ 'h265',
24
+ 'vp8',
25
+ 'vp9',
26
+ 'mp3',
27
+ 'aac',
28
+ 'wav',
29
+ 'gif',
30
+ 'prores',
31
+ ];
32
+ exports.REMOTION_BUCKET_PREFIX = 'remotionlambda-';
33
+ const rendersPrefix = (renderId) => `renders/${renderId}`;
34
+ exports.rendersPrefix = rendersPrefix;
35
+ const outStillName = (renderId, imageFormat) => `${(0, exports.rendersPrefix)(renderId)}/out.${imageFormat}`;
36
+ exports.outStillName = outStillName;
37
+ const outName = (renderId, extension) => `${(0, exports.rendersPrefix)(renderId)}/out.${extension}`;
38
+ exports.outName = outName;
39
+ const customOutName = (renderId, bucketName, name) => {
40
+ var _a;
41
+ if (typeof name === 'string') {
42
+ return {
43
+ renderBucketName: bucketName,
44
+ key: `${(0, exports.rendersPrefix)(renderId)}/${name}`,
45
+ customCredentials: null,
46
+ };
47
+ }
48
+ return {
49
+ key: name.key,
50
+ renderBucketName: name.bucketName,
51
+ customCredentials: (_a = name.s3OutputProvider) !== null && _a !== void 0 ? _a : null,
52
+ };
53
+ };
54
+ exports.customOutName = customOutName;
55
+ const overallProgressKey = (renderId) => `${(0, exports.rendersPrefix)(renderId)}/progress.json`;
56
+ exports.overallProgressKey = overallProgressKey;
57
+ const artifactName = (renderId, name) => `${(0, exports.rendersPrefix)(renderId)}/artifacts/${name}`;
58
+ exports.artifactName = artifactName;
@@ -0,0 +1,3 @@
1
+ export declare const errorIsOutOfSpaceError: (err: string) => boolean;
2
+ export declare const isErrInsufficientResourcesErr: (err: string) => boolean;
3
+ export declare const isBrowserCrashedError: (err: string) => boolean;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBrowserCrashedError = exports.isErrInsufficientResourcesErr = exports.errorIsOutOfSpaceError = void 0;
4
+ const errorIsOutOfSpaceError = (err) => {
5
+ return (err.includes('ENOSPC') ||
6
+ err.toLowerCase().includes('no space left on device'));
7
+ };
8
+ exports.errorIsOutOfSpaceError = errorIsOutOfSpaceError;
9
+ const isErrInsufficientResourcesErr = (err) => {
10
+ return err.includes('net::ERR_INSUFFICIENT_RESOURCES');
11
+ };
12
+ exports.isErrInsufficientResourcesErr = isErrInsufficientResourcesErr;
13
+ const isBrowserCrashedError = (err) => {
14
+ return err.includes('Target closed.') || err.includes('Session closed');
15
+ };
16
+ exports.isBrowserCrashedError = isBrowserCrashedError;
@@ -0,0 +1,5 @@
1
+ import { type CustomCredentials, type OutNameInput, type OutNameOutput } from './constants';
2
+ import type { RenderMetadata } from './render-metadata';
3
+ import type { CloudProvider } from './still';
4
+ export declare const getCredentialsFromOutName: <Provider extends CloudProvider<string, Record<string, unknown>>>(name: OutNameInput<Provider> | null) => CustomCredentials<Provider> | null;
5
+ export declare const getExpectedOutName: <Provider extends CloudProvider<string, Record<string, unknown>>>(renderMetadata: RenderMetadata<Provider>, bucketName: string, customCredentials: CustomCredentials<Provider> | null) => OutNameOutput<Provider>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getExpectedOutName = exports.getCredentialsFromOutName = void 0;
4
+ const pure_1 = require("@remotion/renderer/pure");
5
+ const constants_1 = require("./constants");
6
+ const get_custom_out_name_1 = require("./get-custom-out-name");
7
+ const validate_outname_1 = require("./validate-outname");
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)({
29
+ outName: outNameValue,
30
+ codec: renderMetadata.codec,
31
+ audioCodecSetting: renderMetadata.audioCodec,
32
+ separateAudioTo: null,
33
+ });
34
+ return (0, constants_1.customOutName)(renderMetadata.renderId, bucketName, outNameValue);
35
+ }
36
+ if (renderMetadata.type === 'still') {
37
+ return {
38
+ renderBucketName: bucketName,
39
+ key: (0, constants_1.outStillName)(renderMetadata.renderId, renderMetadata.imageFormat),
40
+ customCredentials: null,
41
+ };
42
+ }
43
+ if (renderMetadata.type === 'video') {
44
+ return {
45
+ renderBucketName: bucketName,
46
+ key: (0, constants_1.outName)(renderMetadata.renderId, pure_1.NoReactAPIs.getFileExtensionFromCodec(renderMetadata.codec, renderMetadata.audioCodec)),
47
+ customCredentials: null,
48
+ };
49
+ }
50
+ throw new TypeError('no type passed');
51
+ };
52
+ exports.getExpectedOutName = getExpectedOutName;
@@ -0,0 +1,16 @@
1
+ import type { ChromiumOptions, LogLevel, openBrowser } from '@remotion/renderer';
2
+ import type { Await } from './await';
3
+ import type { ProviderSpecifics } from './provider-implementation';
4
+ import type { CloudProvider } from './still';
5
+ type LaunchedBrowser = {
6
+ instance: Await<ReturnType<typeof openBrowser>>;
7
+ configurationString: string;
8
+ };
9
+ export declare const forgetBrowserEventLoop: (logLevel: LogLevel) => void;
10
+ export declare const getBrowserInstance: <Provider extends CloudProvider<string, Record<string, unknown>>>({ logLevel, indent, chromiumOptions, providerSpecifics, }: {
11
+ logLevel: LogLevel;
12
+ indent: boolean;
13
+ chromiumOptions: ChromiumOptions;
14
+ providerSpecifics: ProviderSpecifics<Provider>;
15
+ }) => Promise<LaunchedBrowser>;
16
+ export {};
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBrowserInstance = exports.forgetBrowserEventLoop = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const version_1 = require("remotion/version");
6
+ const makeConfigurationString = (options, logLevel) => {
7
+ var _a, _b, _c;
8
+ return [
9
+ `web-security-${Boolean(options.disableWebSecurity)}`,
10
+ `multi-process-${Boolean(options.enableMultiProcessOnLinux)}`,
11
+ `ignore-certificate-errors-${Boolean(options.ignoreCertificateErrors)}`,
12
+ `log-level-${logLevel}`,
13
+ `gl-${(_a = options.gl) !== null && _a !== void 0 ? _a : null}`,
14
+ `userAgent-${(_b = options.userAgent) !== null && _b !== void 0 ? _b : null}`,
15
+ `headless-${(_c = options.headless) !== null && _c !== void 0 ? _c : false}`,
16
+ ].join('/');
17
+ };
18
+ let _browserInstance;
19
+ let launching = false;
20
+ const waitForLaunched = () => {
21
+ return new Promise((resolve, reject) => {
22
+ const check = () => setTimeout(() => {
23
+ if (launching) {
24
+ check();
25
+ }
26
+ else {
27
+ resolve();
28
+ }
29
+ }, 16);
30
+ setTimeout(() => reject(new Error('Timeout launching browser')), 5000);
31
+ check();
32
+ });
33
+ };
34
+ const forgetBrowserEventLoop = (logLevel) => {
35
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Keeping browser open for next invocation');
36
+ _browserInstance === null || _browserInstance === void 0 ? void 0 : _browserInstance.instance.forgetEventLoop();
37
+ };
38
+ exports.forgetBrowserEventLoop = forgetBrowserEventLoop;
39
+ const getBrowserInstance = async ({ logLevel, indent, chromiumOptions, providerSpecifics, }) => {
40
+ var _a;
41
+ const actualChromiumOptions = {
42
+ ...chromiumOptions,
43
+ // Override the `null` value, which might come from CLI with swANGLE
44
+ gl: (_a = chromiumOptions.gl) !== null && _a !== void 0 ? _a : 'swangle',
45
+ enableMultiProcessOnLinux: false,
46
+ };
47
+ const configurationString = makeConfigurationString(actualChromiumOptions, logLevel);
48
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, `Rendering with Remotion v${version_1.VERSION}.`);
49
+ if (launching) {
50
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Already waiting for browser launch...');
51
+ await waitForLaunched();
52
+ if (!_browserInstance) {
53
+ throw new Error('expected to launch');
54
+ }
55
+ }
56
+ if (!_browserInstance) {
57
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Cold function, launching new browser instance');
58
+ launching = true;
59
+ const execPath = providerSpecifics.getChromiumPath();
60
+ const instance = await renderer_1.RenderInternals.internalOpenBrowser({
61
+ browser: 'chrome',
62
+ browserExecutable: execPath,
63
+ chromiumOptions: actualChromiumOptions,
64
+ forceDeviceScaleFactor: undefined,
65
+ indent: false,
66
+ viewport: null,
67
+ logLevel,
68
+ onBrowserDownload: () => {
69
+ throw new Error('Should not download a browser in serverless');
70
+ },
71
+ });
72
+ instance.on('disconnected', () => {
73
+ var _a;
74
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Browser disconnected or crashed.');
75
+ (0, exports.forgetBrowserEventLoop)(logLevel);
76
+ (_a = _browserInstance === null || _browserInstance === void 0 ? void 0 : _browserInstance.instance) === null || _a === void 0 ? void 0 : _a.close(true, logLevel, indent).catch((err) => {
77
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Could not close browser instance', err);
78
+ });
79
+ _browserInstance = null;
80
+ });
81
+ _browserInstance = {
82
+ instance,
83
+ configurationString,
84
+ };
85
+ launching = false;
86
+ return _browserInstance;
87
+ }
88
+ if (_browserInstance.configurationString !== configurationString) {
89
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Warm function, but Browser configuration changed. Killing old browser instance.');
90
+ _browserInstance.instance.rememberEventLoop();
91
+ await _browserInstance.instance.close(true, logLevel, indent);
92
+ _browserInstance = null;
93
+ return (0, exports.getBrowserInstance)({
94
+ logLevel,
95
+ indent,
96
+ chromiumOptions,
97
+ providerSpecifics,
98
+ });
99
+ }
100
+ renderer_1.RenderInternals.Log.info({ indent: false, logLevel }, 'Warm function, reusing browser instance');
101
+ _browserInstance.instance.rememberEventLoop();
102
+ return _browserInstance;
103
+ };
104
+ exports.getBrowserInstance = getBrowserInstance;
@@ -0,0 +1,7 @@
1
+ import type { CustomCredentials, OutNameInput } from './constants';
2
+ import type { RenderMetadata } from './render-metadata';
3
+ import type { CloudProvider } from './still';
4
+ export declare const getCustomOutName: <Provider extends CloudProvider<string, Record<string, unknown>>>({ renderMetadata, customCredentials, }: {
5
+ renderMetadata: RenderMetadata<Provider>;
6
+ customCredentials: CustomCredentials<Provider> | null;
7
+ }) => OutNameInput<Provider> | null;
@@ -0,0 +1,32 @@
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 === 'private') {
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
+ region: customCredentials === null || customCredentials === void 0 ? void 0 : customCredentials.region,
24
+ },
25
+ };
26
+ }
27
+ return {
28
+ bucketName: renderMetadata.outName.bucketName,
29
+ key: renderMetadata.outName.key,
30
+ };
31
+ };
32
+ exports.getCustomOutName = getCustomOutName;
@@ -0,0 +1,5 @@
1
+ export type FileNameAndSize = {
2
+ filename: string;
3
+ size: number;
4
+ };
5
+ export type GetFolderFiles = (folder: string) => FileNameAndSize[];
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,20 @@
1
+ import type { CustomCredentials } from './constants';
2
+ import type { ProviderSpecifics } from './provider-implementation';
3
+ import type { CloudProvider } from './still';
4
+ type GetOrCreateBucketInputInner<Provider extends CloudProvider> = {
5
+ region: Provider['region'];
6
+ enableFolderExpiry: boolean | null;
7
+ customCredentials: CustomCredentials<Provider> | null;
8
+ providerSpecifics: ProviderSpecifics<Provider>;
9
+ };
10
+ export type GetOrCreateBucketInput<Provider extends CloudProvider> = {
11
+ region: Provider['region'];
12
+ enableFolderExpiry?: boolean;
13
+ customCredentials?: CustomCredentials<Provider>;
14
+ };
15
+ export type GetOrCreateBucketOutput = {
16
+ bucketName: string;
17
+ alreadyExisted: boolean;
18
+ };
19
+ export declare const internalGetOrCreateBucket: <Provider extends CloudProvider<string, Record<string, unknown>>>(params: GetOrCreateBucketInputInner<Provider>) => Promise<GetOrCreateBucketOutput>;
20
+ export {};
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.internalGetOrCreateBucket = void 0;
4
+ const constants_1 = require("./constants");
5
+ const make_bucket_name_1 = require("./make-bucket-name");
6
+ const internalGetOrCreateBucket = async (params) => {
7
+ const remotionBuckets = await params.providerSpecifics.getBuckets(params.region);
8
+ if (remotionBuckets.length > 1) {
9
+ throw new Error(`You have multiple buckets (${remotionBuckets.map((b) => b.name)}) in your S3 region (${params.region}) starting with "${constants_1.REMOTION_BUCKET_PREFIX}". Please see https://remotion.dev/docs/lambda/multiple-buckets.`);
10
+ }
11
+ const { enableFolderExpiry, region } = params;
12
+ if (remotionBuckets.length === 1) {
13
+ const existingBucketName = remotionBuckets[0].name;
14
+ // apply to existing bucket
15
+ await params.providerSpecifics.applyLifeCycle({
16
+ enableFolderExpiry: enableFolderExpiry !== null && enableFolderExpiry !== void 0 ? enableFolderExpiry : null,
17
+ bucketName: existingBucketName,
18
+ region,
19
+ customCredentials: params.customCredentials,
20
+ });
21
+ return { bucketName: remotionBuckets[0].name, alreadyExisted: true };
22
+ }
23
+ const bucketName = (0, make_bucket_name_1.makeBucketName)(params.region, params.providerSpecifics);
24
+ await params.providerSpecifics.createBucket({
25
+ bucketName,
26
+ region: params.region,
27
+ });
28
+ // apply to newly created bucket
29
+ await params.providerSpecifics.applyLifeCycle({
30
+ enableFolderExpiry: enableFolderExpiry !== null && enableFolderExpiry !== void 0 ? enableFolderExpiry : null,
31
+ bucketName,
32
+ region,
33
+ customCredentials: params.customCredentials,
34
+ });
35
+ return { bucketName, alreadyExisted: false };
36
+ };
37
+ exports.internalGetOrCreateBucket = internalGetOrCreateBucket;
@@ -0,0 +1,15 @@
1
+ export { compositionsHandler } from './compositions';
2
+ export { errorIsOutOfSpaceError, isBrowserCrashedError, isErrInsufficientResourcesErr, } from './error-category';
3
+ export { getCredentialsFromOutName } from './expected-out-name';
4
+ export { forgetBrowserEventLoop, getBrowserInstance, } from './get-browser-instance';
5
+ export { infoHandler } from './info';
6
+ export { MakeArtifactWithDetails, ProviderSpecifics, WriteFileInput, } from './provider-implementation';
7
+ export { deserializeArtifact, serializeArtifact } from './serialize-artifact';
8
+ export { CloudProvider, CostsInfo, ReceivedArtifact, RenderStillLambdaResponsePayload, } from './still';
9
+ export { ResponseStream } from './streaming/response-stream';
10
+ export { ResponseStreamWriter, streamWriter } from './streaming/stream-writer';
11
+ export { type OnMessage, type OnStream, type StreamingMessage, type StreamingPayload, } from './streaming/streaming';
12
+ export { validateComposition } from './validate-composition';
13
+ export { validateOutname } from './validate-outname';
14
+ export { MAX_WEBHOOK_CUSTOM_DATA_SIZE, validateWebhook, } from './validate-webhook';
15
+ export { EnhancedErrorInfo, LambdaErrorInfo, getTmpDirStateIfENoSp, } from './write-lambda-error';
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTmpDirStateIfENoSp = exports.validateWebhook = exports.MAX_WEBHOOK_CUSTOM_DATA_SIZE = exports.validateOutname = exports.validateComposition = exports.streamWriter = exports.ResponseStream = exports.serializeArtifact = exports.deserializeArtifact = exports.infoHandler = exports.getBrowserInstance = exports.forgetBrowserEventLoop = exports.getCredentialsFromOutName = exports.isErrInsufficientResourcesErr = exports.isBrowserCrashedError = exports.errorIsOutOfSpaceError = exports.compositionsHandler = void 0;
4
+ var compositions_1 = require("./compositions");
5
+ Object.defineProperty(exports, "compositionsHandler", { enumerable: true, get: function () { return compositions_1.compositionsHandler; } });
6
+ var error_category_1 = require("./error-category");
7
+ Object.defineProperty(exports, "errorIsOutOfSpaceError", { enumerable: true, get: function () { return error_category_1.errorIsOutOfSpaceError; } });
8
+ Object.defineProperty(exports, "isBrowserCrashedError", { enumerable: true, get: function () { return error_category_1.isBrowserCrashedError; } });
9
+ Object.defineProperty(exports, "isErrInsufficientResourcesErr", { enumerable: true, get: function () { return error_category_1.isErrInsufficientResourcesErr; } });
10
+ var expected_out_name_1 = require("./expected-out-name");
11
+ Object.defineProperty(exports, "getCredentialsFromOutName", { enumerable: true, get: function () { return expected_out_name_1.getCredentialsFromOutName; } });
12
+ var get_browser_instance_1 = require("./get-browser-instance");
13
+ Object.defineProperty(exports, "forgetBrowserEventLoop", { enumerable: true, get: function () { return get_browser_instance_1.forgetBrowserEventLoop; } });
14
+ Object.defineProperty(exports, "getBrowserInstance", { enumerable: true, get: function () { return get_browser_instance_1.getBrowserInstance; } });
15
+ var info_1 = require("./info");
16
+ Object.defineProperty(exports, "infoHandler", { enumerable: true, get: function () { return info_1.infoHandler; } });
17
+ var serialize_artifact_1 = require("./serialize-artifact");
18
+ Object.defineProperty(exports, "deserializeArtifact", { enumerable: true, get: function () { return serialize_artifact_1.deserializeArtifact; } });
19
+ Object.defineProperty(exports, "serializeArtifact", { enumerable: true, get: function () { return serialize_artifact_1.serializeArtifact; } });
20
+ var response_stream_1 = require("./streaming/response-stream");
21
+ Object.defineProperty(exports, "ResponseStream", { enumerable: true, get: function () { return response_stream_1.ResponseStream; } });
22
+ var stream_writer_1 = require("./streaming/stream-writer");
23
+ Object.defineProperty(exports, "streamWriter", { enumerable: true, get: function () { return stream_writer_1.streamWriter; } });
24
+ var validate_composition_1 = require("./validate-composition");
25
+ Object.defineProperty(exports, "validateComposition", { enumerable: true, get: function () { return validate_composition_1.validateComposition; } });
26
+ var validate_outname_1 = require("./validate-outname");
27
+ Object.defineProperty(exports, "validateOutname", { enumerable: true, get: function () { return validate_outname_1.validateOutname; } });
28
+ var validate_webhook_1 = require("./validate-webhook");
29
+ Object.defineProperty(exports, "MAX_WEBHOOK_CUSTOM_DATA_SIZE", { enumerable: true, get: function () { return validate_webhook_1.MAX_WEBHOOK_CUSTOM_DATA_SIZE; } });
30
+ Object.defineProperty(exports, "validateWebhook", { enumerable: true, get: function () { return validate_webhook_1.validateWebhook; } });
31
+ var write_lambda_error_1 = require("./write-lambda-error");
32
+ Object.defineProperty(exports, "getTmpDirStateIfENoSp", { enumerable: true, get: function () { return write_lambda_error_1.getTmpDirStateIfENoSp; } });
package/dist/info.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { ServerlessPayload } from './constants';
2
+ import type { CloudProvider } from './still';
3
+ export declare const infoHandler: <Provider extends CloudProvider<string, Record<string, unknown>>>(serverlessParams: ServerlessPayload<Provider>) => Promise<{
4
+ version: string;
5
+ type: "success";
6
+ }>;
package/dist/info.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.infoHandler = void 0;
4
+ const version_1 = require("remotion/version");
5
+ const constants_1 = require("./constants");
6
+ const infoHandler = (serverlessParams) => {
7
+ if (serverlessParams.type !== constants_1.ServerlessRoutines.info) {
8
+ throw new TypeError('Expected info type');
9
+ }
10
+ const returnValue = {
11
+ version: version_1.VERSION,
12
+ type: 'success',
13
+ };
14
+ return Promise.resolve(returnValue);
15
+ };
16
+ exports.infoHandler = infoHandler;
@@ -0,0 +1,2 @@
1
+ export declare const inputPropsKey: (hash: string) => string;
2
+ export declare const resolvedPropsKey: (hash: string) => string;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvedPropsKey = exports.inputPropsKey = void 0;
4
+ const inputPropsKey = (hash) => {
5
+ return `input-props/${hash}.json`;
6
+ };
7
+ exports.inputPropsKey = inputPropsKey;
8
+ const resolvedPropsKey = (hash) => {
9
+ return `resolved-props/${hash}.json`;
10
+ };
11
+ exports.resolvedPropsKey = resolvedPropsKey;
@@ -0,0 +1,3 @@
1
+ import type { ProviderSpecifics } from './provider-implementation';
2
+ import type { CloudProvider } from './still';
3
+ export declare const makeBucketName: <Provider extends CloudProvider<string, Record<string, unknown>>>(region: Provider["region"], providerSpecifics: ProviderSpecifics<Provider>) => string;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeBucketName = void 0;
4
+ const constants_1 = require("./constants");
5
+ const makeBucketName = (region, providerSpecifics) => {
6
+ return `${constants_1.REMOTION_BUCKET_PREFIX}${region.replace(/-/g, '')}-${providerSpecifics.randomHash()}`;
7
+ };
8
+ exports.makeBucketName = makeBucketName;
@@ -0,0 +1,105 @@
1
+ /// <reference types="node" />
2
+ import type { EmittedArtifact } from '@remotion/renderer';
3
+ import type { Readable } from 'stream';
4
+ import type { CustomCredentials, DownloadBehavior, Privacy } from './constants';
5
+ import type { GetFolderFiles } from './get-files-in-folder';
6
+ import type { CloudProvider, ReceivedArtifact } from './still';
7
+ export type BucketWithLocation<Provider extends CloudProvider> = {
8
+ name: string;
9
+ creationDate: number;
10
+ region: Provider['region'];
11
+ };
12
+ type GetBuckets<Provider extends CloudProvider> = (region: Provider['region'], forceBucketName?: string) => Promise<BucketWithLocation<Provider>[]>;
13
+ type CreateBucket<Provider extends CloudProvider> = (params: {
14
+ region: Provider['region'];
15
+ bucketName: string;
16
+ }) => Promise<void>;
17
+ type ApplyLifeCycle<Provider extends CloudProvider> = (params: {
18
+ enableFolderExpiry: boolean | null;
19
+ bucketName: string;
20
+ region: Provider['region'];
21
+ customCredentials: CustomCredentials<Provider> | null;
22
+ }) => Promise<void>;
23
+ type BucketObject = {
24
+ Key: string;
25
+ LastModified: Date;
26
+ ETag: string;
27
+ Size: number;
28
+ };
29
+ type ListObjects<Provider extends CloudProvider> = (params: {
30
+ bucketName: string;
31
+ prefix: string;
32
+ region: Provider['region'];
33
+ expectedBucketOwner: string | null;
34
+ continuationToken?: string;
35
+ }) => Promise<BucketObject[]>;
36
+ type DeleteFile<Provider extends CloudProvider> = (params: {
37
+ bucketName: string;
38
+ key: string;
39
+ region: Provider['region'];
40
+ customCredentials: CustomCredentials<Provider> | null;
41
+ }) => Promise<void>;
42
+ type BucketExists<Provider extends CloudProvider> = (params: {
43
+ bucketName: string;
44
+ region: Provider['region'];
45
+ expectedBucketOwner: string | null;
46
+ }) => Promise<boolean>;
47
+ type ReadFile<Provider extends CloudProvider> = (params: {
48
+ bucketName: string;
49
+ key: string;
50
+ region: Provider['region'];
51
+ expectedBucketOwner: string;
52
+ }) => Promise<Readable>;
53
+ export type WriteFileInput<Provider extends CloudProvider> = {
54
+ bucketName: string;
55
+ key: string;
56
+ body: Readable | string | Uint8Array;
57
+ region: Provider['region'];
58
+ privacy: Privacy;
59
+ expectedBucketOwner: string | null;
60
+ downloadBehavior: DownloadBehavior | null;
61
+ customCredentials: CustomCredentials<Provider> | null;
62
+ };
63
+ type WriteFile<Provider extends CloudProvider> = (params: WriteFileInput<Provider>) => Promise<void>;
64
+ type HeadFileInput<Provider extends CloudProvider> = {
65
+ bucketName: string;
66
+ key: string;
67
+ region: Provider['region'];
68
+ customCredentials: CustomCredentials<Provider> | null;
69
+ };
70
+ type HeadFileOutput = {
71
+ LastModified?: Date | undefined;
72
+ ContentLength?: number | undefined;
73
+ };
74
+ type HeadFile<Provider extends CloudProvider> = (params: HeadFileInput<Provider>) => Promise<HeadFileOutput>;
75
+ type RandomHash = () => string;
76
+ type ConvertToServeUrl<Provider extends CloudProvider> = (params: {
77
+ urlOrId: string;
78
+ region: Provider['region'];
79
+ bucketName: string;
80
+ }) => string;
81
+ export type MakeArtifactWithDetails<Provider extends CloudProvider> = (params: {
82
+ region: Provider['region'];
83
+ renderBucketName: string;
84
+ storageKey: string;
85
+ artifact: EmittedArtifact;
86
+ }) => ReceivedArtifact<Provider>;
87
+ export type ProviderSpecifics<Provider extends CloudProvider> = {
88
+ getChromiumPath: () => string | null;
89
+ getCurrentRegionInFunction: () => Provider['region'];
90
+ getBuckets: GetBuckets<Provider>;
91
+ createBucket: CreateBucket<Provider>;
92
+ applyLifeCycle: ApplyLifeCycle<Provider>;
93
+ listObjects: ListObjects<Provider>;
94
+ deleteFile: DeleteFile<Provider>;
95
+ bucketExists: BucketExists<Provider>;
96
+ randomHash: RandomHash;
97
+ readFile: ReadFile<Provider>;
98
+ writeFile: WriteFile<Provider>;
99
+ headFile: HeadFile<Provider>;
100
+ convertToServeUrl: ConvertToServeUrl<Provider>;
101
+ printLoggingHelper: boolean;
102
+ getFolderFiles: GetFolderFiles;
103
+ makeArtifactWithDetails: MakeArtifactWithDetails<Provider>;
104
+ };
105
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export declare const randomHash: (_options?: {
2
+ randomInTests: boolean;
3
+ }) => string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.randomHash = void 0;
4
+ const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
5
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
+ const randomHash = (_options) => {
7
+ return new Array(10)
8
+ .fill(1)
9
+ .map(() => {
10
+ return alphabet[Math.floor(Math.random() * alphabet.length)];
11
+ })
12
+ .join('');
13
+ };
14
+ exports.randomHash = randomHash;
@@ -0,0 +1,3 @@
1
+ export declare const DEFAULT_AWS_REGIONS: readonly ["eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "eu-north-1", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "ap-south-1", "ap-southeast-1", "ap-southeast-2", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ca-central-1", "sa-east-1"];
2
+ export declare const AWS_REGIONS: readonly ["eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "eu-south-1", "eu-north-1", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-south-1", "ap-east-1", "ap-southeast-1", "ap-southeast-2", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ca-central-1", "me-south-1", "sa-east-1"];
3
+ export type AwsRegion = (typeof AWS_REGIONS)[number];