@remotion/serverless-client 4.0.363 → 4.0.365

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/dist/esm/index.mjs +4 -4
  2. package/package.json +5 -5
  3. package/.turbo/turbo-formatting.log +0 -4
  4. package/.turbo/turbo-lint.log +0 -15
  5. package/.turbo/turbo-make.log +0 -3
  6. package/bundle.ts +0 -15
  7. package/dist/test/best-frames.test.d.ts +0 -1
  8. package/dist/test/best-frames.test.js +0 -16
  9. package/dist/test/dont-contain-forbidden.test.d.ts +0 -1
  10. package/dist/test/dont-contain-forbidden.test.js +0 -18
  11. package/dist/test/expected-out-name.test.d.ts +0 -1
  12. package/dist/test/expected-out-name.test.js +0 -168
  13. package/dist/test/min-max.test.d.ts +0 -1
  14. package/dist/test/min-max.test.js +0 -24
  15. package/dist/test/most-expensive-chunks.test.d.ts +0 -1
  16. package/dist/test/most-expensive-chunks.test.js +0 -163
  17. package/eslint.config.mjs +0 -5
  18. package/src/await.ts +0 -1
  19. package/src/best-frames-per-function-param.ts +0 -18
  20. package/src/calculate-chunk-times.ts +0 -42
  21. package/src/compress-props.ts +0 -179
  22. package/src/constants.ts +0 -408
  23. package/src/docs-url.ts +0 -1
  24. package/src/error-category.ts +0 -14
  25. package/src/estimate-price-from-bucket.ts +0 -59
  26. package/src/expected-out-name.ts +0 -83
  27. package/src/format-costs-info.ts +0 -24
  28. package/src/get-custom-out-name.ts +0 -44
  29. package/src/get-files-in-folder.ts +0 -6
  30. package/src/get-or-create-bucket.ts +0 -85
  31. package/src/get-overall-progress-from-storage.ts +0 -47
  32. package/src/get-overall-progress.ts +0 -42
  33. package/src/index.ts +0 -125
  34. package/src/input-props-keys.ts +0 -7
  35. package/src/inspect-error.ts +0 -63
  36. package/src/make-bucket-name.ts +0 -9
  37. package/src/make-timeout-error.ts +0 -51
  38. package/src/make-timeout-message.ts +0 -118
  39. package/src/min-max.ts +0 -34
  40. package/src/most-expensive-chunks.ts +0 -46
  41. package/src/overall-render-progress.ts +0 -30
  42. package/src/progress.ts +0 -330
  43. package/src/provider-implementation.ts +0 -268
  44. package/src/render-has-audio-video.ts +0 -28
  45. package/src/render-metadata.ts +0 -61
  46. package/src/render-progress.ts +0 -58
  47. package/src/return-values.ts +0 -45
  48. package/src/serialize-artifact.ts +0 -66
  49. package/src/stream-to-string.ts +0 -14
  50. package/src/streaming/streaming.ts +0 -148
  51. package/src/test/best-frames.test.ts +0 -15
  52. package/src/test/dont-contain-forbidden.test.ts +0 -14
  53. package/src/test/expected-out-name.test.ts +0 -200
  54. package/src/test/min-max.test.ts +0 -25
  55. package/src/test/most-expensive-chunks.test.ts +0 -167
  56. package/src/truthy.ts +0 -5
  57. package/src/types.ts +0 -82
  58. package/src/validate-bucket-name.ts +0 -34
  59. package/src/validate-download-behavior.ts +0 -26
  60. package/src/validate-frames-per-function.ts +0 -125
  61. package/src/validate-outname.ts +0 -63
  62. package/src/validate-privacy.ts +0 -20
  63. package/src/validate-webhook.ts +0 -18
  64. package/src/webhook-types.ts +0 -36
  65. package/src/write-error-to-storage.ts +0 -23
  66. package/tsconfig.json +0 -18
  67. package/tsconfig.tsbuildinfo +0 -1
@@ -1,83 +0,0 @@
1
- import type {Codec} from '@remotion/renderer';
2
- import {NoReactAPIs} from '@remotion/renderer/pure';
3
- import {
4
- customOutName,
5
- outName,
6
- outStillName,
7
- type CustomCredentials,
8
- type OutNameInput,
9
- type OutNameOutput,
10
- } from './constants';
11
- import {getCustomOutName} from './get-custom-out-name';
12
- import type {RenderMetadata} from './render-metadata';
13
- import type {CloudProvider} from './types';
14
- import {validateOutname} from './validate-outname';
15
-
16
- export const getCredentialsFromOutName = <Provider extends CloudProvider>(
17
- name: OutNameInput<Provider> | null,
18
- ): CustomCredentials<Provider> | null => {
19
- if (typeof name === 'string') {
20
- return null;
21
- }
22
-
23
- if (name === null) {
24
- return null;
25
- }
26
-
27
- if (typeof name === 'undefined') {
28
- return null;
29
- }
30
-
31
- return name.s3OutputProvider ?? null;
32
- };
33
-
34
- export const getExpectedOutName = <Provider extends CloudProvider>({
35
- renderMetadata,
36
- bucketName,
37
- customCredentials,
38
- bucketNamePrefix,
39
- }: {
40
- renderMetadata: RenderMetadata<Provider>;
41
- bucketName: string;
42
- customCredentials: CustomCredentials<Provider> | null;
43
- bucketNamePrefix: string;
44
- }): OutNameOutput<Provider> => {
45
- const outNameValue = getCustomOutName({
46
- customCredentials,
47
- renderMetadata,
48
- });
49
- if (outNameValue) {
50
- validateOutname({
51
- outName: outNameValue,
52
- codec: renderMetadata.codec,
53
- audioCodecSetting: renderMetadata.audioCodec,
54
- separateAudioTo: null,
55
- bucketNamePrefix,
56
- });
57
- return customOutName(renderMetadata.renderId, bucketName, outNameValue);
58
- }
59
-
60
- if (renderMetadata.type === 'still') {
61
- return {
62
- renderBucketName: bucketName,
63
- key: outStillName(renderMetadata.renderId, renderMetadata.imageFormat),
64
- customCredentials: null,
65
- };
66
- }
67
-
68
- if (renderMetadata.type === 'video') {
69
- return {
70
- renderBucketName: bucketName,
71
- key: outName(
72
- renderMetadata.renderId,
73
- NoReactAPIs.getFileExtensionFromCodec(
74
- renderMetadata.codec as Codec,
75
- renderMetadata.audioCodec,
76
- ),
77
- ),
78
- customCredentials: null,
79
- };
80
- }
81
-
82
- throw new TypeError('no type passed');
83
- };
@@ -1,24 +0,0 @@
1
- import type {CostsInfo} from './types';
2
-
3
- const display = (accrued: number) => {
4
- if (accrued < 0.001) {
5
- return '<$0.001';
6
- }
7
-
8
- return new Intl.NumberFormat('en-US', {
9
- currency: 'USD',
10
- style: 'currency',
11
- currencyDisplay: 'narrowSymbol',
12
- minimumFractionDigits: 3,
13
- }).format(accrued);
14
- };
15
-
16
- export const formatCostsInfo = (accrued: number): CostsInfo => {
17
- return {
18
- accruedSoFar: accrued,
19
- displayCost: display(accrued),
20
- currency: 'USD',
21
- disclaimer:
22
- 'Estimated cost only. Does not include charges for other AWS services.',
23
- };
24
- };
@@ -1,44 +0,0 @@
1
- import type {CustomCredentials, OutNameInput} from './constants';
2
- import type {RenderMetadata} from './render-metadata';
3
- import type {CloudProvider} from './types';
4
-
5
- export const getCustomOutName = <Provider extends CloudProvider>({
6
- renderMetadata,
7
- customCredentials,
8
- }: {
9
- renderMetadata: RenderMetadata<Provider>;
10
- customCredentials: CustomCredentials<Provider> | null;
11
- }): OutNameInput<Provider> | null => {
12
- if (!renderMetadata.outName) {
13
- return null;
14
- }
15
-
16
- if (typeof renderMetadata.outName === 'string') {
17
- return renderMetadata.outName;
18
- }
19
-
20
- if (renderMetadata.outName.s3OutputProvider) {
21
- if (!customCredentials && renderMetadata.privacy === 'private') {
22
- throw new TypeError(
23
- `The file was rendered with a custom S3 implementation and is not public, but no custom credentials were passed to downloadMedia().`,
24
- );
25
- }
26
-
27
- return {
28
- bucketName: renderMetadata.outName.bucketName,
29
- key: renderMetadata.outName.key,
30
- s3OutputProvider: {
31
- endpoint: renderMetadata.outName.s3OutputProvider.endpoint,
32
- accessKeyId: customCredentials?.accessKeyId ?? null,
33
- secretAccessKey: customCredentials?.secretAccessKey ?? null,
34
- region: customCredentials?.region,
35
- forcePathStyle: customCredentials?.forcePathStyle ?? false,
36
- },
37
- };
38
- }
39
-
40
- return {
41
- bucketName: renderMetadata.outName.bucketName,
42
- key: renderMetadata.outName.key,
43
- };
44
- };
@@ -1,6 +0,0 @@
1
- export type FileNameAndSize = {
2
- filename: string;
3
- size: number;
4
- };
5
-
6
- export type GetFolderFiles = (folder: string) => FileNameAndSize[];
@@ -1,85 +0,0 @@
1
- import type {CustomCredentials} from './constants';
2
- import {makeBucketName} from './make-bucket-name';
3
- import type {ProviderSpecifics} from './provider-implementation';
4
- import type {CloudProvider} from './types';
5
-
6
- type GetOrCreateBucketInputInner<Provider extends CloudProvider> = {
7
- region: Provider['region'];
8
- enableFolderExpiry: boolean | null;
9
- customCredentials: CustomCredentials<Provider> | null;
10
- providerSpecifics: ProviderSpecifics<Provider>;
11
- forcePathStyle: boolean;
12
- skipPutAcl: boolean;
13
- requestHandler: Provider['requestHandler'] | null;
14
- };
15
-
16
- export type GetOrCreateBucketInput<Provider extends CloudProvider> = {
17
- region: Provider['region'];
18
- enableFolderExpiry?: boolean;
19
- customCredentials?: CustomCredentials<Provider>;
20
- forcePathStyle?: boolean;
21
- requestHandler?: Provider['requestHandler'];
22
- };
23
-
24
- export type GetOrCreateBucketOutput = {
25
- bucketName: string;
26
- alreadyExisted: boolean;
27
- };
28
-
29
- export const internalGetOrCreateBucket = async <Provider extends CloudProvider>(
30
- params: GetOrCreateBucketInputInner<Provider>,
31
- ): Promise<GetOrCreateBucketOutput> => {
32
- const remotionBuckets = await params.providerSpecifics.getBuckets({
33
- region: params.region,
34
- forceBucketName: null,
35
- forcePathStyle: params.forcePathStyle,
36
- requestHandler: params.requestHandler,
37
- });
38
- if (remotionBuckets.length > 1) {
39
- throw new Error(
40
- `You have multiple buckets (${remotionBuckets.map(
41
- (b) => b.name,
42
- )}) in your S3 region (${
43
- params.region
44
- }) starting with "${params.providerSpecifics.getBucketPrefix()}". Please see https://remotion.dev/docs/lambda/multiple-buckets.`,
45
- );
46
- }
47
-
48
- const {enableFolderExpiry, region} = params;
49
- if (remotionBuckets.length === 1) {
50
- const existingBucketName = remotionBuckets[0].name;
51
- // apply to existing bucket
52
- await params.providerSpecifics.applyLifeCycle({
53
- enableFolderExpiry: enableFolderExpiry ?? null,
54
- bucketName: existingBucketName,
55
- region,
56
- customCredentials: params.customCredentials,
57
- forcePathStyle: params.forcePathStyle,
58
- requestHandler: params.requestHandler,
59
- });
60
-
61
- return {bucketName: remotionBuckets[0].name, alreadyExisted: true};
62
- }
63
-
64
- const bucketName = makeBucketName(params.region, params.providerSpecifics);
65
-
66
- await params.providerSpecifics.createBucket({
67
- bucketName,
68
- region: params.region,
69
- forcePathStyle: params.forcePathStyle,
70
- skipPutAcl: params.skipPutAcl,
71
- requestHandler: params.requestHandler,
72
- });
73
-
74
- // apply to newly created bucket
75
- await params.providerSpecifics.applyLifeCycle({
76
- enableFolderExpiry: enableFolderExpiry ?? null,
77
- bucketName,
78
- region,
79
- customCredentials: params.customCredentials,
80
- forcePathStyle: params.forcePathStyle,
81
- requestHandler: params.requestHandler,
82
- });
83
-
84
- return {bucketName, alreadyExisted: false};
85
- };
@@ -1,47 +0,0 @@
1
- import {overallProgressKey} from './constants';
2
- import type {OverallRenderProgress} from './overall-render-progress';
3
- import type {ProviderSpecifics} from './provider-implementation';
4
- import {streamToString} from './stream-to-string';
5
- import type {CloudProvider} from './types';
6
-
7
- export const getOverallProgressFromStorage = async <
8
- Provider extends CloudProvider,
9
- >({
10
- renderId,
11
- bucketName,
12
- expectedBucketOwner,
13
- region,
14
- providerSpecifics,
15
- forcePathStyle,
16
- requestHandler,
17
- }: {
18
- renderId: string;
19
- expectedBucketOwner: string | null;
20
- bucketName: string;
21
- region: Provider['region'];
22
- providerSpecifics: ProviderSpecifics<Provider>;
23
- forcePathStyle: boolean;
24
- requestHandler: Provider['requestHandler'] | null;
25
- }) => {
26
- try {
27
- const Body = await providerSpecifics.readFile({
28
- bucketName,
29
- key: overallProgressKey(renderId),
30
- expectedBucketOwner,
31
- region,
32
- forcePathStyle,
33
- requestHandler,
34
- });
35
-
36
- const str = await streamToString(Body);
37
- return JSON.parse(str) as OverallRenderProgress<Provider>;
38
- } catch (err) {
39
- if ((err as Error).name === 'NotFound') {
40
- throw new TypeError(
41
- `No render with ID "${renderId}" found in bucket ${bucketName} and region ${region}`,
42
- );
43
- }
44
-
45
- throw err;
46
- }
47
- };
@@ -1,42 +0,0 @@
1
- type Factors = 'invoking' | 'frames' | 'encoding' | 'evaluating' | 'combining';
2
-
3
- const weights: {[key in Factors]: number} = {
4
- evaluating: 0.1,
5
- encoding: 0.1,
6
- frames: 0.6,
7
- invoking: 0.1,
8
- combining: 0.1,
9
- };
10
-
11
- export const getOverallProgress = ({
12
- encoding,
13
- invoking,
14
- frames,
15
- invokedLambda,
16
- visitedServeUrl,
17
- gotComposition,
18
- combining,
19
- }: {
20
- invokedLambda: number;
21
- visitedServeUrl: number | null;
22
- gotComposition: number | null;
23
- encoding: number;
24
- invoking: number;
25
- frames: number;
26
- combining: number;
27
- }) => {
28
- const evaluationProgress =
29
- [
30
- Boolean(invokedLambda),
31
- Boolean(visitedServeUrl),
32
- Boolean(gotComposition),
33
- ].reduce((a, b) => Number(a) + Number(b), 0) / 3;
34
-
35
- return (
36
- evaluationProgress * weights.evaluating +
37
- encoding * weights.encoding +
38
- invoking * weights.invoking +
39
- frames * weights.frames +
40
- combining * weights.combining
41
- );
42
- };
package/src/index.ts DELETED
@@ -1,125 +0,0 @@
1
- import {interpolate, NoReactInternals, random} from 'remotion/no-react';
2
- export * from './constants';
3
- export {
4
- artifactName,
5
- customOutName,
6
- expiryDays,
7
- MINIMUM_FRAMES_PER_FUNCTION,
8
- outName,
9
- outStillName,
10
- overallProgressKey,
11
- rendersPrefix,
12
- ServerlessCodec,
13
- serverlessCodecs,
14
- ServerlessPayload,
15
- ServerlessPayloads,
16
- ServerlessRoutines,
17
- ServerlessStartPayload,
18
- ServerlessStatusPayload,
19
- type CustomCredentials,
20
- type CustomCredentialsWithoutSensitiveData,
21
- type DeleteAfter,
22
- type OutNameInput,
23
- type OutNameInputWithoutCredentials,
24
- type OutNameOutput,
25
- type Privacy,
26
- type SerializedInputProps,
27
- type WebhookOption,
28
- } from './constants';
29
- export {GenericRenderProgress} from './render-progress';
30
- export {
31
- deserializeArtifact,
32
- serializeArtifact,
33
- SerializedArtifact,
34
- } from './serialize-artifact';
35
-
36
- export {validateDownloadBehavior} from './validate-download-behavior';
37
- export {validateFramesPerFunction} from './validate-frames-per-function';
38
-
39
- export type {
40
- AudioCodec,
41
- ChromiumOptions,
42
- ColorSpace,
43
- FrameRange,
44
- LogLevel,
45
- PixelFormat,
46
- ProResProfile,
47
- StillImageFormat,
48
- ToOptions,
49
- VideoImageFormat,
50
- X264Preset,
51
- } from '@remotion/renderer';
52
- export type {BrowserSafeApis} from '@remotion/renderer/client';
53
- export {wrapWithErrorHandling} from '@remotion/renderer/error-handling';
54
- export {makeStreamer, makeStreamPayloadMessage} from '@remotion/streaming';
55
- export type {DownloadBehavior, VideoConfig} from 'remotion/no-react';
56
- export {VERSION} from 'remotion/version';
57
- export {Await} from './await';
58
- export {calculateChunkTimes} from './calculate-chunk-times';
59
- export {
60
- compressInputProps,
61
- decompressInputProps,
62
- getNeedsToUpload,
63
- serializeOrThrow,
64
- } from './compress-props';
65
- export {MAX_FUNCTIONS_PER_RENDER} from './constants';
66
- export {DOCS_URL} from './docs-url';
67
- export {
68
- errorIsOutOfSpaceError,
69
- isBrowserCrashedError,
70
- isErrInsufficientResourcesErr,
71
- } from './error-category';
72
- export {estimatePriceFromMetadata} from './estimate-price-from-bucket';
73
- export {
74
- getCredentialsFromOutName,
75
- getExpectedOutName,
76
- } from './expected-out-name';
77
- export {formatCostsInfo} from './format-costs-info';
78
- export {FileNameAndSize, GetFolderFiles} from './get-files-in-folder';
79
- export {
80
- GetOrCreateBucketInput,
81
- GetOrCreateBucketOutput,
82
- internalGetOrCreateBucket,
83
- } from './get-or-create-bucket';
84
- export {getOverallProgressFromStorage} from './get-overall-progress-from-storage';
85
- export {inputPropsKey, resolvedPropsKey} from './input-props-keys';
86
- export {inspectErrors} from './inspect-error';
87
- export {makeBucketName} from './make-bucket-name';
88
- export {
89
- getMostExpensiveChunks,
90
- OVERHEAD_TIME_PER_LAMBDA,
91
- } from './most-expensive-chunks';
92
- export {OverallRenderProgress} from './overall-render-progress';
93
- export {getProgress} from './progress';
94
- export * from './provider-implementation';
95
- export {RenderMetadata} from './render-metadata';
96
- export {OrError, ServerlessReturnValues} from './return-values';
97
- export {streamToString} from './stream-to-string';
98
- export {
99
- formatMap,
100
- makeStreamPayload,
101
- MessageTypeId,
102
- messageTypeIdToMessageType,
103
- OnMessage,
104
- OnStream,
105
- StreamingMessage,
106
- StreamingPayload,
107
- } from './streaming/streaming';
108
- export {truthy} from './truthy';
109
- export * from './types';
110
- export {validateBucketName} from './validate-bucket-name';
111
- export {validateOutname} from './validate-outname';
112
- export {validatePrivacy} from './validate-privacy';
113
- export {validateWebhook} from './validate-webhook';
114
- export * from './webhook-types';
115
- export {EnhancedErrorInfo, FunctionErrorInfo} from './write-error-to-storage';
116
- export {interpolate, random};
117
-
118
- export const {
119
- ENABLE_V5_BREAKING_CHANGES,
120
- serializeJSONWithSpecialTypes,
121
- validateFps,
122
- validateDimension,
123
- validateDurationInFrames,
124
- validateCodec,
125
- } = NoReactInternals;
@@ -1,7 +0,0 @@
1
- export const inputPropsKey = (hash: string) => {
2
- return `input-props/${hash}.json`;
3
- };
4
-
5
- export const resolvedPropsKey = (hash: string) => {
6
- return `resolved-props/${hash}.json`;
7
- };
@@ -1,63 +0,0 @@
1
- import {DOCS_URL} from './docs-url';
2
- import {
3
- errorIsOutOfSpaceError,
4
- isBrowserCrashedError,
5
- isErrInsufficientResourcesErr,
6
- } from './error-category';
7
- import type {
8
- EnhancedErrorInfo,
9
- FunctionErrorInfo,
10
- } from './write-error-to-storage';
11
-
12
- const FAILED_TO_LAUNCH_TOKEN = 'Failed to launch browser.';
13
-
14
- const getExplanation = (stack: string) => {
15
- if (stack.includes('FATAL:zygote_communication_linux.cc')) {
16
- return (
17
- FAILED_TO_LAUNCH_TOKEN +
18
- ' Will be retried - you can probably ignore this error.'
19
- );
20
- }
21
-
22
- if (stack.includes('error while loading shared libraries: libnss3.so')) {
23
- return (
24
- FAILED_TO_LAUNCH_TOKEN +
25
- ' Will be retried - you can probably ignore this error.'
26
- );
27
- }
28
-
29
- if (
30
- stack.includes('TooManyRequestsException') ||
31
- stack.includes('ConcurrentInvocationLimitExceeded')
32
- ) {
33
- return `AWS returned an "TooManyRequestsException" error message which could mean you reached the concurrency limit of AWS Lambda. You can increase the limit - read this troubleshooting page: ${DOCS_URL}/docs/lambda/troubleshooting/rate-limit`;
34
- }
35
-
36
- if (errorIsOutOfSpaceError(stack)) {
37
- return `Your lambda function reached the storage limit. Reduce the amount of space needed per lambda function or increase the storage limit: ${DOCS_URL}/docs/lambda/disk-size.`;
38
- }
39
-
40
- if (isErrInsufficientResourcesErr(stack)) {
41
- return 'The lambda ran out of memory. Deploy a new function with more memory.';
42
- }
43
-
44
- if (isBrowserCrashedError(stack)) {
45
- return 'The browser crashed while rendering the video. Deploy a new function with memory to give the browser more resources.';
46
- }
47
-
48
- return null;
49
- };
50
-
51
- export const inspectErrors = ({
52
- errors,
53
- }: {
54
- errors: FunctionErrorInfo[];
55
- }): EnhancedErrorInfo[] => {
56
- return errors.map((e): EnhancedErrorInfo => {
57
- return {
58
- ...e,
59
- explanation: getExplanation(e.stack),
60
- s3Location: '',
61
- };
62
- });
63
- };
@@ -1,9 +0,0 @@
1
- import type {ProviderSpecifics} from './provider-implementation';
2
- import type {CloudProvider} from './types';
3
-
4
- export const makeBucketName = <Provider extends CloudProvider>(
5
- region: Provider['region'],
6
- providerSpecifics: ProviderSpecifics<Provider>,
7
- ) => {
8
- return `${providerSpecifics.getBucketPrefix()}${region.replace(/-/g, '')}-${providerSpecifics.randomHash()}`;
9
- };
@@ -1,51 +0,0 @@
1
- import {makeTimeoutMessage} from './make-timeout-message';
2
- import type {ProviderSpecifics} from './provider-implementation';
3
- import type {RenderMetadata} from './render-metadata';
4
- import type {CloudProvider} from './types';
5
- import type {EnhancedErrorInfo} from './write-error-to-storage';
6
-
7
- export const makeTimeoutError = <Provider extends CloudProvider>({
8
- timeoutInMilliseconds,
9
- missingChunks,
10
- renderMetadata,
11
- renderId,
12
- functionName,
13
- region,
14
- providerSpecifics,
15
- }: {
16
- timeoutInMilliseconds: number;
17
- renderMetadata: RenderMetadata<Provider>;
18
- renderId: string;
19
- missingChunks: number[];
20
- functionName: string;
21
- region: Provider['region'];
22
- providerSpecifics: ProviderSpecifics<Provider>;
23
- }): EnhancedErrorInfo => {
24
- const message = makeTimeoutMessage({
25
- missingChunks,
26
- renderMetadata,
27
- timeoutInMilliseconds,
28
- renderId,
29
- functionName,
30
- region,
31
- providerSpecifics,
32
- });
33
-
34
- const error = new Error(message);
35
-
36
- return {
37
- attempt: 1,
38
- chunk: null,
39
- explanation: null,
40
- frame: null,
41
- isFatal: true,
42
- s3Location: '',
43
- stack: error.stack as string,
44
- tmpDir: null,
45
- totalAttempts: 1,
46
- type: 'stitcher',
47
- willRetry: false,
48
- message,
49
- name: 'TimeoutError',
50
- };
51
- };