@remotion/renderer 4.0.211 → 4.0.213

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.
@@ -16,7 +16,6 @@
16
16
  import type { LogLevel } from '../log-level';
17
17
  import type { Page } from './BrowserPage';
18
18
  import type { CDPSession } from './Connection';
19
- import type { Frame as TFrame } from './devtools-types';
20
19
  import { DOMWorld } from './DOMWorld';
21
20
  import type { EvaluateFn, EvaluateFnReturnType, EvaluateHandleFn, SerializableOrJSHandle, UnwrapPromiseLike } from './EvalTypes';
22
21
  import { EventEmitter } from './EventEmitter';
@@ -25,6 +24,7 @@ import type { HTTPResponse } from './HTTPResponse';
25
24
  import type { JSHandle } from './JSHandle';
26
25
  import type { PuppeteerLifeCycleEvent } from './LifecycleWatcher';
27
26
  import { NetworkManager } from './NetworkManager';
27
+ import type { Frame as TFrame } from './devtools-types';
28
28
  export declare const FrameManagerEmittedEvents: {
29
29
  FrameNavigated: symbol;
30
30
  FrameDetached: symbol;
@@ -28,14 +28,14 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
28
28
  var _FrameManager_instances, _FrameManager_page, _FrameManager_networkManager, _FrameManager_frames, _FrameManager_contextIdToContext, _FrameManager_isolatedWorlds, _FrameManager_mainFrame, _FrameManager_client, _FrameManager_onAttachedToTarget, _FrameManager_onDetachedFromTarget, _FrameManager_onLifecycleEvent, _FrameManager_onFrameStartedLoading, _FrameManager_onFrameStoppedLoading, _FrameManager_handleFrameTree, _FrameManager_onFrameAttached, _FrameManager_onFrameNavigated, _FrameManager_onFrameNavigatedWithinDocument, _FrameManager_onFrameDetached, _FrameManager_onExecutionContextCreated, _FrameManager_onExecutionContextDestroyed, _FrameManager_onExecutionContextsCleared, _FrameManager_removeFramesRecursively, _Frame_parentFrame, _Frame_url, _Frame_client;
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.Frame = exports.FrameManager = exports.FrameManagerEmittedEvents = void 0;
31
- const assert_1 = require("./assert");
32
31
  const Connection_1 = require("./Connection");
33
32
  const DOMWorld_1 = require("./DOMWorld");
34
33
  const EventEmitter_1 = require("./EventEmitter");
35
34
  const ExecutionContext_1 = require("./ExecutionContext");
36
- const is_target_closed_err_1 = require("./is-target-closed-err");
37
35
  const LifecycleWatcher_1 = require("./LifecycleWatcher");
38
36
  const NetworkManager_1 = require("./NetworkManager");
37
+ const assert_1 = require("./assert");
38
+ const flaky_errors_1 = require("./flaky-errors");
39
39
  const util_1 = require("./util");
40
40
  const UTILITY_WORLD_NAME = '__puppeteer_utility_world__';
41
41
  exports.FrameManagerEmittedEvents = {
@@ -131,7 +131,7 @@ class FrameManager extends EventEmitter_1.EventEmitter {
131
131
  }
132
132
  catch (error) {
133
133
  // The target might have been closed before the initialization finished.
134
- if ((0, util_1.isErrorLike)(error) && (0, is_target_closed_err_1.isTargetClosedErr)(error)) {
134
+ if ((0, util_1.isErrorLike)(error) && (0, flaky_errors_1.isTargetClosedErr)(error)) {
135
135
  return;
136
136
  }
137
137
  throw error;
@@ -14,11 +14,12 @@ type RedirectInfo = {
14
14
  export declare class NetworkEventManager {
15
15
  #private;
16
16
  forget(networkRequestId: NetworkRequestId): void;
17
- responseExtraInfo(networkRequestId: NetworkRequestId): ResponseReceivedExtraInfoEvent[];
17
+ queueFailedLoadInfo(networkRequestId: NetworkRequestId, event: LoadingFailedEvent): void;
18
+ getFailedLoadInfo(networkRequestId: NetworkRequestId): LoadingFailedEvent | undefined;
19
+ getResponseExtraInfo(networkRequestId: NetworkRequestId): ResponseReceivedExtraInfoEvent[];
18
20
  private queuedRedirectInfo;
19
21
  queueRedirectInfo(fetchRequestId: FetchRequestId, redirectInfo: RedirectInfo): void;
20
22
  takeQueuedRedirectInfo(fetchRequestId: FetchRequestId): RedirectInfo | undefined;
21
- numRequestsInProgress(): number;
22
23
  storeRequestWillBeSent(networkRequestId: NetworkRequestId, event: RequestWillBeSentEvent): void;
23
24
  getRequestWillBeSent(networkRequestId: NetworkRequestId): RequestWillBeSentEvent | undefined;
24
25
  forgetRequestWillBeSent(networkRequestId: NetworkRequestId): void;
@@ -4,7 +4,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
4
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
5
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
6
  };
7
- var _NetworkEventManager_requestWillBeSentMap, _NetworkEventManager_requestPausedMap, _NetworkEventManager_httpRequestsMap, _NetworkEventManager_responseReceivedExtraInfoMap, _NetworkEventManager_queuedRedirectInfoMap, _NetworkEventManager_queuedEventGroupMap;
7
+ var _NetworkEventManager_requestWillBeSentMap, _NetworkEventManager_requestPausedMap, _NetworkEventManager_httpRequestsMap, _NetworkEventManager_responseReceivedExtraInfoMap, _NetworkEventManager_queuedRedirectInfoMap, _NetworkEventManager_queuedEventGroupMap, _NetworkEventManager_failedLoadInfoMap;
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.NetworkEventManager = void 0;
10
10
  class NetworkEventManager {
@@ -15,6 +15,7 @@ class NetworkEventManager {
15
15
  _NetworkEventManager_responseReceivedExtraInfoMap.set(this, new Map());
16
16
  _NetworkEventManager_queuedRedirectInfoMap.set(this, new Map());
17
17
  _NetworkEventManager_queuedEventGroupMap.set(this, new Map());
18
+ _NetworkEventManager_failedLoadInfoMap.set(this, new Map());
18
19
  }
19
20
  forget(networkRequestId) {
20
21
  __classPrivateFieldGet(this, _NetworkEventManager_requestWillBeSentMap, "f").delete(networkRequestId);
@@ -22,8 +23,16 @@ class NetworkEventManager {
22
23
  __classPrivateFieldGet(this, _NetworkEventManager_queuedEventGroupMap, "f").delete(networkRequestId);
23
24
  __classPrivateFieldGet(this, _NetworkEventManager_queuedRedirectInfoMap, "f").delete(networkRequestId);
24
25
  __classPrivateFieldGet(this, _NetworkEventManager_responseReceivedExtraInfoMap, "f").delete(networkRequestId);
26
+ __classPrivateFieldGet(this, _NetworkEventManager_failedLoadInfoMap, "f").delete(networkRequestId);
25
27
  }
26
- responseExtraInfo(networkRequestId) {
28
+ queueFailedLoadInfo(networkRequestId, event) {
29
+ __classPrivateFieldGet(this, _NetworkEventManager_failedLoadInfoMap, "f").set(networkRequestId, { event });
30
+ }
31
+ getFailedLoadInfo(networkRequestId) {
32
+ var _a;
33
+ return (_a = __classPrivateFieldGet(this, _NetworkEventManager_failedLoadInfoMap, "f").get(networkRequestId)) === null || _a === void 0 ? void 0 : _a.event;
34
+ }
35
+ getResponseExtraInfo(networkRequestId) {
27
36
  if (!__classPrivateFieldGet(this, _NetworkEventManager_responseReceivedExtraInfoMap, "f").has(networkRequestId)) {
28
37
  __classPrivateFieldGet(this, _NetworkEventManager_responseReceivedExtraInfoMap, "f").set(networkRequestId, []);
29
38
  }
@@ -41,11 +50,6 @@ class NetworkEventManager {
41
50
  takeQueuedRedirectInfo(fetchRequestId) {
42
51
  return this.queuedRedirectInfo(fetchRequestId).shift();
43
52
  }
44
- numRequestsInProgress() {
45
- return [...__classPrivateFieldGet(this, _NetworkEventManager_httpRequestsMap, "f")].filter(([, request]) => {
46
- return !request.response();
47
- }).length;
48
- }
49
53
  storeRequestWillBeSent(networkRequestId, event) {
50
54
  __classPrivateFieldGet(this, _NetworkEventManager_requestWillBeSentMap, "f").set(networkRequestId, event);
51
55
  }
@@ -78,4 +82,4 @@ class NetworkEventManager {
78
82
  }
79
83
  }
80
84
  exports.NetworkEventManager = NetworkEventManager;
81
- _NetworkEventManager_requestWillBeSentMap = new WeakMap(), _NetworkEventManager_requestPausedMap = new WeakMap(), _NetworkEventManager_httpRequestsMap = new WeakMap(), _NetworkEventManager_responseReceivedExtraInfoMap = new WeakMap(), _NetworkEventManager_queuedRedirectInfoMap = new WeakMap(), _NetworkEventManager_queuedEventGroupMap = new WeakMap();
85
+ _NetworkEventManager_requestWillBeSentMap = new WeakMap(), _NetworkEventManager_requestPausedMap = new WeakMap(), _NetworkEventManager_httpRequestsMap = new WeakMap(), _NetworkEventManager_responseReceivedExtraInfoMap = new WeakMap(), _NetworkEventManager_queuedRedirectInfoMap = new WeakMap(), _NetworkEventManager_queuedEventGroupMap = new WeakMap(), _NetworkEventManager_failedLoadInfoMap = new WeakMap();
@@ -33,6 +33,5 @@ export declare class NetworkManager extends EventEmitter {
33
33
  #private;
34
34
  constructor(client: CDPSession, frameManager: FrameManager, indent: boolean, logLevel: LogLevel);
35
35
  initialize(): Promise<void>;
36
- numRequestsInProgress(): number;
37
36
  }
38
37
  export {};
@@ -28,8 +28,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
28
28
  var _NetworkManager_instances, _NetworkManager_client, _NetworkManager_frameManager, _NetworkManager_networkEventManager, _NetworkManager_indent, _NetworkManager_logLevel, _NetworkManager_onRequestWillBeSent, _NetworkManager_onRequestPaused, _NetworkManager_patchRequestEventHeaders, _NetworkManager_onRequest, _NetworkManager_onRequestServedFromCache, _NetworkManager_handleRequestRedirect, _NetworkManager_emitResponseEvent, _NetworkManager_onResponseReceived, _NetworkManager_onResponseReceivedExtraInfo, _NetworkManager_forgetRequest, _NetworkManager_onLoadingFinished, _NetworkManager_emitLoadingFinished, _NetworkManager_onLoadingFailed, _NetworkManager_emitLoadingFailed;
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.NetworkManager = exports.NetworkManagerEmittedEvents = void 0;
31
- const logger_1 = require("../logger");
32
31
  const EventEmitter_1 = require("./EventEmitter");
32
+ const handle_failed_resource_1 = require("./handle-failed-resource");
33
33
  const HTTPRequest_1 = require("./HTTPRequest");
34
34
  const HTTPResponse_1 = require("./HTTPResponse");
35
35
  const NetworkEventManager_1 = require("./NetworkEventManager");
@@ -60,9 +60,6 @@ class NetworkManager extends EventEmitter_1.EventEmitter {
60
60
  async initialize() {
61
61
  await __classPrivateFieldGet(this, _NetworkManager_client, "f").send('Network.enable');
62
62
  }
63
- numRequestsInProgress() {
64
- return __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").numRequestsInProgress();
65
- }
66
63
  }
67
64
  exports.NetworkManager = NetworkManager;
68
65
  _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakMap(), _NetworkManager_networkEventManager = new WeakMap(), _NetworkManager_indent = new WeakMap(), _NetworkManager_logLevel = new WeakMap(), _NetworkManager_instances = new WeakSet(), _NetworkManager_onRequestWillBeSent = function _NetworkManager_onRequestWillBeSent(event) {
@@ -108,7 +105,7 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
108
105
  let redirectResponseExtraInfo = null;
109
106
  if (event.redirectHasExtraInfo) {
110
107
  redirectResponseExtraInfo = __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f")
111
- .responseExtraInfo(event.requestId)
108
+ .getResponseExtraInfo(event.requestId)
112
109
  .shift();
113
110
  if (!redirectResponseExtraInfo) {
114
111
  __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").queueRedirectInfo(event.requestId, {
@@ -146,7 +143,6 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
146
143
  if (!request) {
147
144
  return;
148
145
  }
149
- __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").responseExtraInfo(responseReceived.requestId);
150
146
  const response = new HTTPResponse_1.HTTPResponse(responseReceived.response, extraInfo);
151
147
  request._response = response;
152
148
  }, _NetworkManager_onResponseReceived = function _NetworkManager_onResponseReceived(event) {
@@ -154,7 +150,7 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
154
150
  let extraInfo = null;
155
151
  if (request && !request._fromMemoryCache && event.hasExtraInfo) {
156
152
  extraInfo = __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f")
157
- .responseExtraInfo(event.requestId)
153
+ .getResponseExtraInfo(event.requestId)
158
154
  .shift();
159
155
  if (!extraInfo) {
160
156
  // Wait until we get the corresponding ExtraInfo event.
@@ -171,7 +167,9 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
171
167
  // request.
172
168
  const redirectInfo = __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").takeQueuedRedirectInfo(event.requestId);
173
169
  if (redirectInfo) {
174
- __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").responseExtraInfo(event.requestId).push(event);
170
+ __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f")
171
+ .getResponseExtraInfo(event.requestId)
172
+ .push(event);
175
173
  __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_onRequest).call(this, redirectInfo.event, redirectInfo.fetchRequestId);
176
174
  return;
177
175
  }
@@ -190,7 +188,7 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
190
188
  return;
191
189
  }
192
190
  // Wait until we get another event that can use this ExtraInfo event.
193
- __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").responseExtraInfo(event.requestId).push(event);
191
+ __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").getResponseExtraInfo(event.requestId).push(event);
194
192
  }, _NetworkManager_forgetRequest = function _NetworkManager_forgetRequest(request, events) {
195
193
  const requestId = request._requestId;
196
194
  __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").forgetRequest(requestId);
@@ -226,22 +224,23 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
226
224
  __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_emitLoadingFailed).call(this, event);
227
225
  }
228
226
  }, _NetworkManager_emitLoadingFailed = function _NetworkManager_emitLoadingFailed(event) {
229
- var _a;
230
227
  const request = __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").getRequest(event.requestId);
231
228
  // For certain requestIds we never receive requestWillBeSent event.
232
229
  // @see https://crbug.com/750469
233
230
  if (!request) {
234
231
  return;
235
232
  }
236
- if (!event.canceled) {
237
- logger_1.Log.warn({ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"), logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f") }, `Browser failed to load ${request._url} (${event.type}): ${event.errorText}`);
238
- if (event.errorText === 'net::ERR_FAILED' &&
239
- event.type === 'Fetch' &&
240
- ((_a = request._url) === null || _a === void 0 ? void 0 : _a.includes('/proxy'))) {
241
- logger_1.Log.warn({ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"), logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f") }, 'This could be caused by Chrome rejecting the request because the disk space is low.');
242
- logger_1.Log.warn({ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"), logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f") }, 'This could be caused by Chrome rejecting the request because the disk space is low.');
243
- logger_1.Log.warn({ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"), logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f") }, 'Consider increasing the disk size of your Lambda function.');
244
- }
233
+ if (event.canceled) {
234
+ __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_forgetRequest).call(this, request, true);
235
+ return;
245
236
  }
237
+ const extraInfo = __classPrivateFieldGet(this, _NetworkManager_networkEventManager, "f").getResponseExtraInfo(event.requestId);
238
+ (0, handle_failed_resource_1.handleFailedResource)({
239
+ extraInfo,
240
+ event,
241
+ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"),
242
+ logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f"),
243
+ request,
244
+ });
246
245
  __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_forgetRequest).call(this, request, true);
247
246
  };
@@ -0,0 +1,2 @@
1
+ export declare const isTargetClosedErr: (error: Error | undefined) => boolean | undefined;
2
+ export declare const isFlakyNetworkError: (error: Error | undefined) => boolean | undefined;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isFlakyNetworkError = exports.isTargetClosedErr = void 0;
4
+ const isTargetClosedErr = (error) => {
5
+ var _a, _b;
6
+ return (((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.includes('Target closed')) ||
7
+ ((_b = error === null || error === void 0 ? void 0 : error.message) === null || _b === void 0 ? void 0 : _b.includes('Session closed')));
8
+ };
9
+ exports.isTargetClosedErr = isTargetClosedErr;
10
+ const isFlakyNetworkError = (error) => {
11
+ var _a, _b, _c, _d, _e, _f, _g;
12
+ return (((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.includes('ERR_CONNECTION_REFUSED')) ||
13
+ ((_b = error === null || error === void 0 ? void 0 : error.message) === null || _b === void 0 ? void 0 : _b.includes('ERR_CONNECTION_RESET')) ||
14
+ ((_c = error === null || error === void 0 ? void 0 : error.message) === null || _c === void 0 ? void 0 : _c.includes('ERR_CONNECTION_TIMED_OUT')) ||
15
+ ((_d = error === null || error === void 0 ? void 0 : error.message) === null || _d === void 0 ? void 0 : _d.includes('ERR_INTERNET_DISCONNECTED')) ||
16
+ ((_e = error === null || error === void 0 ? void 0 : error.message) === null || _e === void 0 ? void 0 : _e.includes('ERR_NAME_RESOLUTION_FAILED')) ||
17
+ ((_f = error === null || error === void 0 ? void 0 : error.message) === null || _f === void 0 ? void 0 : _f.includes('ERR_ADDRESS_UNREACHABLE')) ||
18
+ ((_g = error === null || error === void 0 ? void 0 : error.message) === null || _g === void 0 ? void 0 : _g.includes('ERR_NETWORK_CHANGED')));
19
+ };
20
+ exports.isFlakyNetworkError = isFlakyNetworkError;
@@ -0,0 +1,10 @@
1
+ import type { LogLevel } from '../log-level';
2
+ import type { HTTPRequest } from './HTTPRequest';
3
+ import type { LoadingFailedEvent, ResponseReceivedExtraInfoEvent } from './devtools-types';
4
+ export declare const handleFailedResource: ({ extraInfo, logLevel, indent, request, event, }: {
5
+ extraInfo: ResponseReceivedExtraInfoEvent[];
6
+ logLevel: LogLevel;
7
+ indent: boolean;
8
+ request: HTTPRequest;
9
+ event: LoadingFailedEvent;
10
+ }) => void;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleFailedResource = void 0;
4
+ const logger_1 = require("../logger");
5
+ const handleFailedResource = ({ extraInfo, logLevel, indent, request, event, }) => {
6
+ var _a, _b;
7
+ const firstExtraInfo = (_a = extraInfo[0]) !== null && _a !== void 0 ? _a : null;
8
+ logger_1.Log.warn({ indent, logLevel }, `Browser failed to load ${request._url} (${event.type}): ${event.errorText}`);
9
+ if (firstExtraInfo) {
10
+ logger_1.Log.warn({ indent, logLevel }, `HTTP status code: ${firstExtraInfo.statusCode}, headers:`);
11
+ logger_1.Log.warn({ indent, logLevel }, JSON.stringify(firstExtraInfo.headers, null, 2));
12
+ }
13
+ if (event.errorText === 'net::ERR_FAILED' &&
14
+ event.type === 'Fetch' &&
15
+ ((_b = request._url) === null || _b === void 0 ? void 0 : _b.includes('/proxy'))) {
16
+ logger_1.Log.warn({ indent, logLevel }, 'This could be caused by Chrome rejecting the request because the disk space is low.');
17
+ logger_1.Log.warn({ indent, logLevel }, 'This could be caused by Chrome rejecting the request because the disk space is low.');
18
+ logger_1.Log.warn({ indent, logLevel }, 'Consider increasing the disk size of your Lambda function.');
19
+ }
20
+ };
21
+ exports.handleFailedResource = handleFailedResource;
@@ -13,7 +13,8 @@ exports.mutedOption = {
13
13
  docLink: 'https://www.remotion.dev/docs/using-audio/#muted-property',
14
14
  type: false,
15
15
  getValue: ({ commandLine }) => {
16
- if (commandLine[cliFlag] !== undefined) {
16
+ // we set in minimist `muted` default as null
17
+ if (commandLine[cliFlag] !== null) {
17
18
  return {
18
19
  source: 'cli',
19
20
  value: commandLine[cliFlag],
@@ -12,7 +12,7 @@ const download_and_map_assets_to_file_1 = require("./assets/download-and-map-ass
12
12
  const browser_1 = require("./browser");
13
13
  const TimeoutSettings_1 = require("./browser/TimeoutSettings");
14
14
  const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar");
15
- const is_target_closed_err_1 = require("./browser/is-target-closed-err");
15
+ const flaky_errors_1 = require("./browser/flaky-errors");
16
16
  const compress_assets_1 = require("./compress-assets");
17
17
  const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
18
18
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
@@ -310,12 +310,13 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
310
310
  ]);
311
311
  }
312
312
  catch (err) {
313
- const isTargetClosedError = (0, is_target_closed_err_1.isTargetClosedErr)(err);
313
+ const isTargetClosedError = (0, flaky_errors_1.isTargetClosedErr)(err);
314
314
  const shouldRetryError = (_a = err.stack) === null || _a === void 0 ? void 0 : _a.includes(no_react_1.NoReactInternals.DELAY_RENDER_RETRY_TOKEN);
315
+ const flakyNetworkError = (0, flaky_errors_1.isFlakyNetworkError)(err);
315
316
  if ((0, make_cancel_signal_1.isUserCancelledRender)(err) && !shouldRetryError) {
316
317
  throw err;
317
318
  }
318
- if (!isTargetClosedError && !shouldRetryError) {
319
+ if (!isTargetClosedError && !shouldRetryError && !flakyNetworkError) {
319
320
  throw err;
320
321
  }
321
322
  if (stopped) {
@@ -527,7 +528,7 @@ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOpti
527
528
  // If new browser was opened, then closing the browser as a cleanup.
528
529
  if (puppeteerInstance) {
529
530
  Promise.all(openedPages.map((p) => p.close())).catch((err) => {
530
- if ((0, is_target_closed_err_1.isTargetClosedErr)(err)) {
531
+ if ((0, flaky_errors_1.isTargetClosedErr)(err)) {
531
532
  return;
532
533
  }
533
534
  logger_1.Log.error({ indent, logLevel }, 'Unable to close browser tab', err);
@@ -42,7 +42,9 @@ const screenshotTask = async ({ format, height, omitBackground, page, width, pat
42
42
  // To be determined: Is this a problem with Lambda, or the Chrome version
43
43
  // we are using on Lambda?
44
44
  // We already found out that the problem is not a general Linux problem.
45
- const fromSurface = !process.env.DISABLE_FROM_SURFACE;
45
+ // However, if `fromSurface` is false, the screenshot is limited to 8192x8192 pixels.
46
+ // If the image is larger, always use `fromSurface: true`.
47
+ const fromSurface = !process.env.DISABLE_FROM_SURFACE || height > 8192 || width > 8192;
46
48
  const scaleFactor = fromSurface ? 1 : scale;
47
49
  const { value } = await client.send('Page.captureScreenshot', {
48
50
  format,
@@ -201,6 +201,7 @@ const serveHandler = async (request, response, config) => {
201
201
  `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;
202
202
  headers['Content-Length'] = String(streamOpts.end - streamOpts.start + 1);
203
203
  }
204
+ headers['Cache-Control'] = 'no-cache, no-store, must-revalidate';
204
205
  response.writeHead(response.statusCode || 200, headers);
205
206
  stream.pipe(response);
206
207
  };
@@ -0,0 +1,11 @@
1
+ export declare const streamingKey = "remotion_buffer:";
2
+ export declare const makeStreamer: (onMessage: (statusType: 'success' | 'error', nonce: string, data: Uint8Array) => void) => {
3
+ onData: (data: Uint8Array) => void;
4
+ getOutputBuffer: () => Uint8Array;
5
+ clear: () => void;
6
+ };
7
+ export declare const makeStreamPayloadMessage: ({ status, body, nonce, }: {
8
+ nonce: string;
9
+ status: 0 | 1;
10
+ body: Uint8Array;
11
+ }) => Uint8Array;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeStreamPayloadMessage = exports.makeStreamer = exports.streamingKey = void 0;
4
+ exports.streamingKey = 'remotion_buffer:';
5
+ const magicWordStr = 'remotion_buffer:';
6
+ const makeStreamer = (onMessage) => {
7
+ const separator = new Uint8Array(magicWordStr.length);
8
+ for (let i = 0; i < magicWordStr.length; i++) {
9
+ separator[i] = magicWordStr.charCodeAt(i);
10
+ }
11
+ let unprocessedBuffers = [];
12
+ let outputBuffer = new Uint8Array(0);
13
+ let missingData = null;
14
+ const processInput = () => {
15
+ let separatorIndex = outputBuffer.indexOf(separator[0]); // Start checking for the first byte of the separator
16
+ if (separatorIndex === -1 ||
17
+ outputBuffer
18
+ .subarray(separatorIndex, separatorIndex + separator.length)
19
+ .toString() !== separator.toString()) {
20
+ return;
21
+ }
22
+ separatorIndex += separator.length;
23
+ let nonceString = '';
24
+ let lengthString = '';
25
+ let statusString = '';
26
+ // eslint-disable-next-line no-constant-condition
27
+ while (true) {
28
+ if (separatorIndex > outputBuffer.length - 1) {
29
+ return;
30
+ }
31
+ const nextDigit = outputBuffer[separatorIndex];
32
+ separatorIndex++;
33
+ if (nextDigit === 0x3a) {
34
+ break;
35
+ }
36
+ nonceString += String.fromCharCode(nextDigit);
37
+ }
38
+ // eslint-disable-next-line no-constant-condition
39
+ while (true) {
40
+ if (separatorIndex > outputBuffer.length - 1) {
41
+ return;
42
+ }
43
+ const nextDigit = outputBuffer[separatorIndex];
44
+ separatorIndex++;
45
+ if (nextDigit === 0x3a) {
46
+ break;
47
+ }
48
+ lengthString += String.fromCharCode(nextDigit);
49
+ }
50
+ // eslint-disable-next-line no-constant-condition
51
+ while (true) {
52
+ if (separatorIndex > outputBuffer.length - 1) {
53
+ return;
54
+ }
55
+ const nextDigit = outputBuffer[separatorIndex];
56
+ if (nextDigit === 0x3a) {
57
+ break;
58
+ }
59
+ separatorIndex++;
60
+ statusString += String.fromCharCode(nextDigit);
61
+ }
62
+ const length = Number(lengthString);
63
+ const status = Number(statusString);
64
+ const dataLength = outputBuffer.length - separatorIndex - 1;
65
+ if (dataLength < length) {
66
+ missingData = {
67
+ dataMissing: length - dataLength,
68
+ };
69
+ return;
70
+ }
71
+ const data = outputBuffer.subarray(separatorIndex + 1, separatorIndex + 1 + Number(lengthString));
72
+ onMessage(status === 1 ? 'error' : 'success', nonceString, data);
73
+ missingData = null;
74
+ outputBuffer = outputBuffer.subarray(separatorIndex + Number(lengthString) + 1);
75
+ processInput();
76
+ };
77
+ const onData = (data) => {
78
+ unprocessedBuffers.push(data);
79
+ const separatorIndex = data.indexOf(separator[0]);
80
+ if (separatorIndex === -1) {
81
+ if (missingData) {
82
+ missingData.dataMissing -= data.length;
83
+ }
84
+ if (!missingData || missingData.dataMissing > 0) {
85
+ return;
86
+ }
87
+ }
88
+ unprocessedBuffers.unshift(outputBuffer);
89
+ outputBuffer = new Uint8Array(unprocessedBuffers.reduce((acc, val) => acc + val.length, 0));
90
+ let offset = 0;
91
+ for (const buf of unprocessedBuffers) {
92
+ outputBuffer.set(buf, offset);
93
+ offset += buf.length;
94
+ }
95
+ unprocessedBuffers = [];
96
+ processInput();
97
+ };
98
+ return {
99
+ onData,
100
+ getOutputBuffer: () => outputBuffer,
101
+ clear: () => {
102
+ unprocessedBuffers = [];
103
+ outputBuffer = new Uint8Array(0);
104
+ },
105
+ };
106
+ };
107
+ exports.makeStreamer = makeStreamer;
108
+ const makeStreamPayloadMessage = ({ status, body, nonce, }) => {
109
+ const nonceArr = new TextEncoder().encode(nonce);
110
+ const magicWordArr = new TextEncoder().encode(magicWordStr);
111
+ const separatorArr = new TextEncoder().encode(':');
112
+ const bodyLengthArr = new TextEncoder().encode(body.length.toString());
113
+ const statusArr = new TextEncoder().encode(String(status));
114
+ // Calculate total length of new Uint8Array
115
+ const totalLength = nonceArr.length +
116
+ magicWordArr.length +
117
+ separatorArr.length * 3 +
118
+ bodyLengthArr.length +
119
+ statusArr.length +
120
+ body.length;
121
+ // Create a new Uint8Array to hold all combined parts
122
+ const concat = new Uint8Array(totalLength);
123
+ let offset = 0;
124
+ // Function to append data to concat
125
+ const appendToConcat = (data) => {
126
+ concat.set(data, offset);
127
+ offset += data.length;
128
+ };
129
+ // Building the final Uint8Array
130
+ appendToConcat(magicWordArr);
131
+ appendToConcat(nonceArr);
132
+ appendToConcat(separatorArr);
133
+ appendToConcat(bodyLengthArr);
134
+ appendToConcat(separatorArr);
135
+ appendToConcat(statusArr);
136
+ appendToConcat(separatorArr);
137
+ appendToConcat(body);
138
+ return concat;
139
+ };
140
+ exports.makeStreamPayloadMessage = makeStreamPayloadMessage;