@remotion/renderer 3.0.31 → 3.1.2
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.
- package/dist/assets/calculate-asset-positions.d.ts.map +1 -0
- package/dist/assets/calculate-asset-positions.js.map +1 -0
- package/dist/assets/calculate-atempo.d.ts.map +1 -0
- package/dist/assets/calculate-atempo.js.map +1 -0
- package/dist/assets/convert-assets-to-file-urls.d.ts.map +1 -0
- package/dist/assets/convert-assets-to-file-urls.js.map +1 -0
- package/dist/assets/download-and-map-assets-to-file.d.ts.map +1 -0
- package/dist/assets/download-and-map-assets-to-file.js.map +1 -0
- package/dist/assets/download-file.d.ts.map +1 -0
- package/dist/assets/download-file.js.map +1 -0
- package/dist/assets/ffmpeg-volume-expression.d.ts.map +1 -0
- package/dist/assets/ffmpeg-volume-expression.js.map +1 -0
- package/dist/assets/flatten-volume-array.d.ts.map +1 -0
- package/dist/assets/flatten-volume-array.js.map +1 -0
- package/dist/assets/get-audio-channels.d.ts.map +1 -0
- package/dist/assets/get-audio-channels.js.map +1 -0
- package/dist/assets/read-file.d.ts.map +1 -0
- package/dist/assets/read-file.js.map +1 -0
- package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +1 -0
- package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +1 -0
- package/dist/assets/sanitize-filename.d.ts.map +1 -0
- package/dist/assets/sanitize-filename.js.map +1 -0
- package/dist/assets/sanitize-filepath.d.ts.map +1 -0
- package/dist/assets/sanitize-filepath.js.map +1 -0
- package/dist/assets/truncate-utf8-bytes.d.ts.map +1 -0
- package/dist/assets/truncate-utf8-bytes.js.map +1 -0
- package/dist/assets/types.d.ts.map +1 -0
- package/dist/assets/types.js.map +1 -0
- package/dist/browser/Accessibility.d.ts +175 -0
- package/dist/browser/Accessibility.js +423 -0
- package/dist/browser/AriaQueryHandler.d.ts +20 -0
- package/dist/browser/AriaQueryHandler.js +108 -0
- package/dist/browser/Coverage.d.ts +180 -0
- package/dist/browser/Coverage.js +371 -0
- package/dist/browser/Debug.d.ts +19 -0
- package/dist/browser/Debug.js +42 -0
- package/dist/browser/DeviceDescriptors.d.ts +40 -0
- package/dist/browser/DeviceDescriptors.js +1407 -0
- package/dist/browser/FileChooser.d.ts +56 -0
- package/dist/browser/FileChooser.js +86 -0
- package/dist/browser/Input.d.ts +355 -0
- package/dist/browser/Input.js +592 -0
- package/dist/browser/NetworkConditions.d.ts +26 -0
- package/dist/browser/NetworkConditions.js +33 -0
- package/dist/browser/NetworkManager.js +1 -5
- package/dist/browser/PDFOptions.d.ts +165 -0
- package/dist/browser/PDFOptions.js +34 -0
- package/dist/browser/PipeTransport.d.ts +10 -0
- package/dist/browser/PipeTransport.js +86 -0
- package/dist/browser/Puppeteer.d.ts +35 -0
- package/dist/browser/Puppeteer.js +17 -0
- package/dist/browser/QueryHandler.d.ts +64 -0
- package/dist/browser/QueryHandler.js +183 -0
- package/dist/browser/SecurityDetails.d.ts +55 -0
- package/dist/browser/SecurityDetails.js +95 -0
- package/dist/browser/Tracing.d.ts +45 -0
- package/dist/browser/Tracing.js +136 -0
- package/dist/browser/USKeyboardLayout.d.ts +39 -0
- package/dist/browser/USKeyboardLayout.js +406 -0
- package/dist/browser/WebWorker.d.ts +96 -0
- package/dist/browser/WebWorker.js +122 -0
- package/dist/browser/dialog.d.ts +70 -0
- package/dist/browser/dialog.js +114 -0
- package/dist/browser/fetch.d.ts +16 -0
- package/dist/browser/fetch.js +46 -0
- package/dist/browser/find-up.d.ts +4 -0
- package/dist/browser/find-up.js +85 -0
- package/dist/browser/{Page.d.ts → page.d.ts} +0 -0
- package/dist/browser/{Page.js → page.js} +0 -0
- package/dist/browser/pkg-dir.d.ts +3 -0
- package/dist/browser/pkg-dir.js +13 -0
- package/dist/browser-log.d.ts.map +1 -0
- package/dist/browser-log.js.map +1 -0
- package/dist/calculate-ffmpeg-filters.d.ts.map +1 -0
- package/dist/calculate-ffmpeg-filters.js.map +1 -0
- package/dist/can-use-parallel-encoding.d.ts.map +1 -0
- package/dist/can-use-parallel-encoding.js.map +1 -0
- package/dist/chunk.d.ts.map +1 -0
- package/dist/chunk.js.map +1 -0
- package/dist/combine-videos.d.ts +2 -1
- package/dist/combine-videos.d.ts.map +1 -0
- package/dist/combine-videos.js +8 -2
- package/dist/combine-videos.js.map +1 -0
- package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +1 -0
- package/dist/convert-number-of-gif-loops-to-ffmpeg.js +17 -0
- package/dist/convert-to-pcm.d.ts.map +1 -0
- package/dist/convert-to-pcm.js.map +1 -0
- package/dist/create-ffmpeg-complex-filter.d.ts +4 -1
- package/dist/create-ffmpeg-complex-filter.d.ts.map +1 -0
- package/dist/create-ffmpeg-complex-filter.js.map +1 -0
- package/dist/create-ffmpeg-merge-filter.d.ts.map +1 -0
- package/dist/create-ffmpeg-merge-filter.js.map +1 -0
- package/dist/create-silent-audio.d.ts.map +1 -0
- package/dist/create-silent-audio.js.map +1 -0
- package/dist/cycle-browser-tabs.d.ts.map +1 -0
- package/dist/cycle-browser-tabs.js.map +1 -0
- package/dist/delay-render-embedded-stack.d.ts.map +1 -0
- package/dist/delay-render-embedded-stack.js.map +1 -0
- package/dist/delete-directory.d.ts.map +1 -0
- package/dist/delete-directory.js.map +1 -0
- package/dist/ensure-frames-in-order.d.ts +1 -1
- package/dist/ensure-frames-in-order.d.ts.map +1 -0
- package/dist/ensure-frames-in-order.js +3 -2
- package/dist/ensure-frames-in-order.js.map +1 -0
- package/dist/ensure-output-directory.d.ts.map +1 -0
- package/dist/ensure-output-directory.js.map +1 -0
- package/dist/ensure-presentation-timestamp.d.ts +1 -1
- package/dist/ensure-presentation-timestamp.js +9 -10
- package/dist/error-handling/handle-javascript-exception.d.ts.map +1 -0
- package/dist/error-handling/handle-javascript-exception.js.map +1 -0
- package/dist/error-handling/symbolicate-error.d.ts.map +1 -0
- package/dist/error-handling/symbolicate-error.js.map +1 -0
- package/dist/error-handling/symbolicateable-error.d.ts.map +1 -0
- package/dist/error-handling/symbolicateable-error.js.map +1 -0
- package/dist/extract-frame-from-video.d.ts +0 -1
- package/dist/extract-frame-from-video.js +4 -2
- package/dist/ffmpeg-filter-file.d.ts.map +1 -0
- package/dist/ffmpeg-filter-file.js.map +1 -0
- package/dist/ffmpeg-flags.d.ts.map +1 -0
- package/dist/ffmpeg-flags.js.map +1 -0
- package/dist/get-audio-codec-name.d.ts.map +1 -0
- package/dist/get-audio-codec-name.js.map +1 -0
- package/dist/get-browser-instance.d.ts.map +1 -0
- package/dist/get-browser-instance.js.map +1 -0
- package/dist/get-codec-name.d.ts.map +1 -0
- package/dist/get-codec-name.js +3 -0
- package/dist/get-codec-name.js.map +1 -0
- package/dist/get-compositions.d.ts.map +1 -0
- package/dist/get-compositions.js.map +1 -0
- package/dist/get-concurrency.d.ts.map +1 -0
- package/dist/get-concurrency.js.map +1 -0
- package/dist/get-duration-from-frame-range.d.ts +1 -2
- package/dist/get-duration-from-frame-range.d.ts.map +1 -0
- package/dist/get-duration-from-frame-range.js +13 -9
- package/dist/get-duration-from-frame-range.js.map +1 -0
- package/dist/get-extension-from-codec.d.ts +1 -1
- package/dist/get-extension-from-codec.d.ts.map +1 -0
- package/dist/get-extension-from-codec.js +5 -0
- package/dist/get-extension-from-codec.js.map +1 -0
- package/dist/get-format-for-codec.d.ts +2 -0
- package/dist/get-format-for-codec.js +34 -0
- package/dist/get-frame-padded-index.d.ts +14 -0
- package/dist/get-frame-padded-index.js +33 -0
- package/dist/get-frame-to-render.d.ts.map +1 -0
- package/dist/get-frame-to-render.js.map +1 -0
- package/dist/get-local-browser-executable.d.ts.map +1 -0
- package/dist/get-local-browser-executable.js.map +1 -0
- package/dist/get-port.d.ts.map +1 -0
- package/dist/get-port.js.map +1 -0
- package/dist/get-prores-profile-name.d.ts.map +1 -0
- package/dist/get-prores-profile-name.js.map +1 -0
- package/dist/guess-extension-for-media.d.ts +1 -1
- package/dist/image-format.d.ts.map +1 -0
- package/dist/image-format.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -0
- package/dist/is-serve-url.d.ts.map +1 -0
- package/dist/is-serve-url.js.map +1 -0
- package/dist/last-frame-from-video-cache.d.ts +0 -1
- package/dist/legacy-webpack-config.d.ts.map +1 -0
- package/dist/legacy-webpack-config.js.map +1 -0
- package/dist/make-assets-download-dir.d.ts.map +1 -0
- package/dist/make-assets-download-dir.js.map +1 -0
- package/dist/merge-audio-track.d.ts.map +1 -0
- package/dist/merge-audio-track.js.map +1 -0
- package/dist/mime-types.d.ts +1 -1
- package/dist/mime-types.js +2 -2
- package/dist/normalize-serve-url.d.ts.map +1 -0
- package/dist/normalize-serve-url.js.map +1 -0
- package/dist/open-browser.d.ts.map +1 -0
- package/dist/open-browser.js.map +1 -0
- package/dist/p-limit.d.ts.map +1 -0
- package/dist/p-limit.js.map +1 -0
- package/dist/parse-browser-error-stack.d.ts.map +1 -0
- package/dist/parse-browser-error-stack.js.map +1 -0
- package/dist/parse-ffmpeg-progress.d.ts.map +1 -0
- package/dist/parse-ffmpeg-progress.js.map +1 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/pool.js.map +1 -0
- package/dist/prepare-server.d.ts.map +1 -0
- package/dist/prepare-server.js.map +1 -0
- package/dist/preprocess-audio-track.d.ts.map +1 -0
- package/dist/preprocess-audio-track.js.map +1 -0
- package/dist/prespawn-ffmpeg.d.ts.map +1 -0
- package/dist/prespawn-ffmpeg.js +2 -2
- package/dist/prespawn-ffmpeg.js.map +1 -0
- package/dist/provide-screenshot.d.ts +0 -1
- package/dist/provide-screenshot.d.ts.map +1 -0
- package/dist/provide-screenshot.js.map +1 -0
- package/dist/puppeteer-evaluate.d.ts.map +1 -0
- package/dist/puppeteer-evaluate.js.map +1 -0
- package/dist/puppeteer-screenshot.d.ts +0 -1
- package/dist/puppeteer-screenshot.d.ts.map +1 -0
- package/dist/puppeteer-screenshot.js.map +1 -0
- package/dist/render-frames.d.ts +1 -0
- package/dist/render-frames.d.ts.map +1 -0
- package/dist/render-frames.js +29 -25
- package/dist/render-frames.js.map +1 -0
- package/dist/render-media.d.ts +2 -1
- package/dist/render-media.d.ts.map +1 -0
- package/dist/render-media.js +11 -4
- package/dist/render-media.js.map +1 -0
- package/dist/render-still.d.ts.map +1 -0
- package/dist/render-still.js +1 -1
- package/dist/render-still.js.map +1 -0
- package/dist/resolve-asset-src.d.ts.map +1 -0
- package/dist/resolve-asset-src.js.map +1 -0
- package/dist/sample-rate.d.ts.map +1 -0
- package/dist/sample-rate.js.map +1 -0
- package/dist/screenshot-dom-element.d.ts +0 -1
- package/dist/screenshot-dom-element.d.ts.map +1 -0
- package/dist/screenshot-dom-element.js.map +1 -0
- package/dist/screenshot-task.d.ts +0 -1
- package/dist/screenshot-task.d.ts.map +1 -0
- package/dist/screenshot-task.js.map +1 -0
- package/dist/seek-to-frame.d.ts.map +1 -0
- package/dist/seek-to-frame.js.map +1 -0
- package/dist/serve-static.d.ts.map +1 -0
- package/dist/serve-static.js.map +1 -0
- package/dist/set-props-and-env.d.ts.map +1 -0
- package/dist/set-props-and-env.js.map +1 -0
- package/dist/stitch-frames-to-video.d.ts +1 -0
- package/dist/stitch-frames-to-video.d.ts.map +1 -0
- package/dist/stitch-frames-to-video.js +32 -22
- package/dist/stitch-frames-to-video.js.map +1 -0
- package/dist/stringify-ffmpeg-filter.d.ts.map +1 -0
- package/dist/stringify-ffmpeg-filter.js.map +1 -0
- package/dist/symbolicate-stacktrace.d.ts.map +1 -0
- package/dist/symbolicate-stacktrace.js.map +1 -0
- package/dist/tmp-dir.d.ts.map +1 -0
- package/dist/tmp-dir.js.map +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js.map +1 -0
- package/dist/validate-even-dimensions-with-codec.d.ts.map +1 -0
- package/dist/validate-even-dimensions-with-codec.js.map +1 -0
- package/dist/validate-ffmpeg.d.ts.map +1 -0
- package/dist/validate-ffmpeg.js.map +1 -0
- package/dist/validate-output-filename.js +5 -0
- package/dist/validate-puppeteer-timeout.d.ts.map +1 -0
- package/dist/validate-puppeteer-timeout.js.map +1 -0
- package/dist/validate-scale.d.ts.map +1 -0
- package/dist/validate-scale.js.map +1 -0
- package/package.json +8 -10
- package/tsconfig.json +2 -1
- package/vitest.config.ts +8 -0
- package/dist/abort.d.ts +0 -7
- package/dist/abort.js +0 -20
- package/dist/browser/ws.d.ts +0 -287
- package/dist/browser/ws.js +0 -21
- package/dist/cancel.d.ts +0 -7
- package/dist/cancel.js +0 -25
- package/dist/ensure-faststart.d.ts +0 -1
- package/dist/ensure-faststart.js +0 -14
- package/dist/faststart/atom.d.ts +0 -35
- package/dist/faststart/atom.js +0 -138
- package/dist/faststart/index.d.ts +0 -0
- package/dist/faststart/index.js +0 -1
- package/dist/faststart/options.d.ts +0 -6
- package/dist/faststart/options.js +0 -2
- package/dist/faststart/qt-faststart.d.ts +0 -18
- package/dist/faststart/qt-faststart.js +0 -66
- package/dist/faststart/update-chunk-offsets.d.ts +0 -10
- package/dist/faststart/update-chunk-offsets.js +0 -114
- package/dist/faststart/util.d.ts +0 -9
- package/dist/faststart/util.js +0 -34
- package/dist/offthread/index.d.ts +0 -0
- package/dist/offthread/index.js +0 -1
- package/dist/render-gif.d.ts +0 -2
- package/dist/render-gif.js +0 -242
- package/dist/should-use-vp9-decoder.d.ts +0 -0
- package/dist/should-use-vp9-decoder.js +0 -1
- package/dist/stitch-frames-to-gif.d.ts +0 -8
- package/dist/stitch-frames-to-gif.js +0 -128
- package/dist/validate-offthreadvideo-image-format.d.ts +0 -1
- package/dist/validate-offthreadvideo-image-format.js +0 -15
- package/dist/ws/buffer-util.d.ts +0 -10
- package/dist/ws/buffer-util.js +0 -123
- package/dist/ws/constants.d.ts +0 -10
- package/dist/ws/constants.js +0 -13
- package/dist/ws/event-target.d.ts +0 -155
- package/dist/ws/event-target.js +0 -203
- package/dist/ws/extension.d.ts +0 -16
- package/dist/ws/extension.js +0 -232
- package/dist/ws/limiter.d.ts +0 -34
- package/dist/ws/limiter.js +0 -41
- package/dist/ws/permessage_deflate.d.ts +0 -152
- package/dist/ws/permessage_deflate.js +0 -409
|
@@ -1,409 +0,0 @@
|
|
|
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.PerMessageDeflate = void 0;
|
|
7
|
-
const zlib_1 = __importDefault(require("zlib"));
|
|
8
|
-
const constants_1 = require("./constants");
|
|
9
|
-
const limiter_1 = require("./limiter");
|
|
10
|
-
const buffer_util_1 = require("./buffer-util");
|
|
11
|
-
const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
|
|
12
|
-
const kPerMessageDeflate = Symbol('permessage-deflate');
|
|
13
|
-
const kTotalLength = Symbol('total-length');
|
|
14
|
-
const kCallback = Symbol('callback');
|
|
15
|
-
const kBuffers = Symbol('buffers');
|
|
16
|
-
const kError = Symbol('error');
|
|
17
|
-
//
|
|
18
|
-
// We limit zlib concurrency, which prevents severe memory fragmentation
|
|
19
|
-
// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
|
|
20
|
-
// and https://github.com/websockets/ws/issues/1202
|
|
21
|
-
//
|
|
22
|
-
// Intentionally global; it's the global thread pool that's an issue.
|
|
23
|
-
//
|
|
24
|
-
let zlibLimiter;
|
|
25
|
-
/**
|
|
26
|
-
* permessage-deflate implementation.
|
|
27
|
-
*/
|
|
28
|
-
class PerMessageDeflate {
|
|
29
|
-
constructor(options, isServer, maxPayload) {
|
|
30
|
-
// eslint-disable-next-line no-bitwise
|
|
31
|
-
this._maxPayload = maxPayload | 0;
|
|
32
|
-
this._options = options || {};
|
|
33
|
-
this._threshold =
|
|
34
|
-
// eslint-disable-next-line no-negated-condition
|
|
35
|
-
this._options.threshold !== undefined ? this._options.threshold : 1024;
|
|
36
|
-
this._isServer = Boolean(isServer);
|
|
37
|
-
this._deflate = null;
|
|
38
|
-
this._inflate = null;
|
|
39
|
-
this.params = null;
|
|
40
|
-
if (!zlibLimiter) {
|
|
41
|
-
const concurrency =
|
|
42
|
-
// eslint-disable-next-line no-negated-condition
|
|
43
|
-
this._options.concurrencyLimit !== undefined
|
|
44
|
-
? this._options.concurrencyLimit
|
|
45
|
-
: 10;
|
|
46
|
-
zlibLimiter = new limiter_1.Limiter(concurrency);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* @type {String}
|
|
51
|
-
*/
|
|
52
|
-
static get extensionName() {
|
|
53
|
-
return 'permessage-deflate';
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Create an extension negotiation offer.
|
|
57
|
-
*
|
|
58
|
-
* @return {Object} Extension parameters
|
|
59
|
-
* @public
|
|
60
|
-
*/
|
|
61
|
-
offer() {
|
|
62
|
-
const params = {};
|
|
63
|
-
if (this._options.serverNoContextTakeover) {
|
|
64
|
-
params.server_no_context_takeover = true;
|
|
65
|
-
}
|
|
66
|
-
if (this._options.clientNoContextTakeover) {
|
|
67
|
-
params.client_no_context_takeover = true;
|
|
68
|
-
}
|
|
69
|
-
if (this._options.serverMaxWindowBits) {
|
|
70
|
-
params.server_max_window_bits = this._options.serverMaxWindowBits;
|
|
71
|
-
}
|
|
72
|
-
if (this._options.clientMaxWindowBits) {
|
|
73
|
-
params.client_max_window_bits = this._options.clientMaxWindowBits;
|
|
74
|
-
// eslint-disable-next-line no-eq-null, eqeqeq
|
|
75
|
-
}
|
|
76
|
-
else if (this._options.clientMaxWindowBits == null) {
|
|
77
|
-
params.client_max_window_bits = true;
|
|
78
|
-
}
|
|
79
|
-
return params;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Accept an extension negotiation offer/response.
|
|
83
|
-
*
|
|
84
|
-
* @param {Array} configurations The extension negotiation offers/reponse
|
|
85
|
-
* @return {Object} Accepted configuration
|
|
86
|
-
* @public
|
|
87
|
-
*/
|
|
88
|
-
accept(configurations) {
|
|
89
|
-
configurations = this.normalizeParams(configurations);
|
|
90
|
-
this.params = this._isServer
|
|
91
|
-
? this.acceptAsServer(configurations)
|
|
92
|
-
: this.acceptAsClient(configurations);
|
|
93
|
-
return this.params;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Releases all resources used by the extension.
|
|
97
|
-
*
|
|
98
|
-
* @public
|
|
99
|
-
*/
|
|
100
|
-
cleanup() {
|
|
101
|
-
if (this._inflate) {
|
|
102
|
-
this._inflate.close();
|
|
103
|
-
this._inflate = null;
|
|
104
|
-
}
|
|
105
|
-
if (this._deflate) {
|
|
106
|
-
const callback = this._deflate[kCallback];
|
|
107
|
-
this._deflate.close();
|
|
108
|
-
this._deflate = null;
|
|
109
|
-
if (callback) {
|
|
110
|
-
callback(new Error('The deflate stream was closed while data was being processed'));
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Accept an extension negotiation offer.
|
|
116
|
-
*
|
|
117
|
-
* @param {Array} offers The extension negotiation offers
|
|
118
|
-
* @return {Object} Accepted configuration
|
|
119
|
-
* @private
|
|
120
|
-
*/
|
|
121
|
-
acceptAsServer(offers) {
|
|
122
|
-
const opts = this._options;
|
|
123
|
-
const accepted = offers.find((params) => {
|
|
124
|
-
if ((opts.serverNoContextTakeover === false &&
|
|
125
|
-
params.server_no_context_takeover) ||
|
|
126
|
-
(params.server_max_window_bits &&
|
|
127
|
-
(opts.serverMaxWindowBits === false ||
|
|
128
|
-
(typeof opts.serverMaxWindowBits === 'number' &&
|
|
129
|
-
opts.serverMaxWindowBits > params.server_max_window_bits))) ||
|
|
130
|
-
(typeof opts.clientMaxWindowBits === 'number' &&
|
|
131
|
-
!params.client_max_window_bits)) {
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
return true;
|
|
135
|
-
});
|
|
136
|
-
if (!accepted) {
|
|
137
|
-
throw new Error('None of the extension offers can be accepted');
|
|
138
|
-
}
|
|
139
|
-
if (opts.serverNoContextTakeover) {
|
|
140
|
-
accepted.server_no_context_takeover = true;
|
|
141
|
-
}
|
|
142
|
-
if (opts.clientNoContextTakeover) {
|
|
143
|
-
accepted.client_no_context_takeover = true;
|
|
144
|
-
}
|
|
145
|
-
if (typeof opts.serverMaxWindowBits === 'number') {
|
|
146
|
-
accepted.server_max_window_bits = opts.serverMaxWindowBits;
|
|
147
|
-
}
|
|
148
|
-
if (typeof opts.clientMaxWindowBits === 'number') {
|
|
149
|
-
accepted.client_max_window_bits = opts.clientMaxWindowBits;
|
|
150
|
-
}
|
|
151
|
-
else if (accepted.client_max_window_bits === true ||
|
|
152
|
-
opts.clientMaxWindowBits === false) {
|
|
153
|
-
delete accepted.client_max_window_bits;
|
|
154
|
-
}
|
|
155
|
-
return accepted;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Accept the extension negotiation response.
|
|
159
|
-
*
|
|
160
|
-
* @param {Array} response The extension negotiation response
|
|
161
|
-
* @return {Object} Accepted configuration
|
|
162
|
-
* @private
|
|
163
|
-
*/
|
|
164
|
-
acceptAsClient(response) {
|
|
165
|
-
const params = response[0];
|
|
166
|
-
if (this._options.clientNoContextTakeover === false &&
|
|
167
|
-
params.client_no_context_takeover) {
|
|
168
|
-
throw new Error('Unexpected parameter "client_no_context_takeover"');
|
|
169
|
-
}
|
|
170
|
-
if (!params.client_max_window_bits) {
|
|
171
|
-
if (typeof this._options.clientMaxWindowBits === 'number') {
|
|
172
|
-
params.client_max_window_bits = this._options.clientMaxWindowBits;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
else if (this._options.clientMaxWindowBits === false ||
|
|
176
|
-
(typeof this._options.clientMaxWindowBits === 'number' &&
|
|
177
|
-
params.client_max_window_bits > this._options.clientMaxWindowBits)) {
|
|
178
|
-
throw new Error('Unexpected or invalid parameter "client_max_window_bits"');
|
|
179
|
-
}
|
|
180
|
-
return params;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Normalize parameters.
|
|
184
|
-
*
|
|
185
|
-
* @param {Array} configurations The extension negotiation offers/reponse
|
|
186
|
-
* @return {Array} The offers/response with normalized parameters
|
|
187
|
-
* @private
|
|
188
|
-
*/
|
|
189
|
-
normalizeParams(configurations) {
|
|
190
|
-
configurations.forEach((params) => {
|
|
191
|
-
Object.keys(params).forEach((key) => {
|
|
192
|
-
let value = params[key];
|
|
193
|
-
if (value.length > 1) {
|
|
194
|
-
throw new Error(`Parameter "${key}" must have only a single value`);
|
|
195
|
-
}
|
|
196
|
-
value = value[0];
|
|
197
|
-
if (key === 'client_max_window_bits') {
|
|
198
|
-
if (value !== true) {
|
|
199
|
-
const num = Number(value);
|
|
200
|
-
if (!Number.isInteger(num) || num < 8 || num > 15) {
|
|
201
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
202
|
-
}
|
|
203
|
-
value = num;
|
|
204
|
-
}
|
|
205
|
-
else if (!this._isServer) {
|
|
206
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else if (key === 'server_max_window_bits') {
|
|
210
|
-
const num = Number(value);
|
|
211
|
-
if (!Number.isInteger(num) || num < 8 || num > 15) {
|
|
212
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
213
|
-
}
|
|
214
|
-
value = num;
|
|
215
|
-
}
|
|
216
|
-
else if (key === 'client_no_context_takeover' ||
|
|
217
|
-
key === 'server_no_context_takeover') {
|
|
218
|
-
if (value !== true) {
|
|
219
|
-
throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
throw new Error(`Unknown parameter "${key}"`);
|
|
224
|
-
}
|
|
225
|
-
params[key] = value;
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
return configurations;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Decompress data. Concurrency limited.
|
|
232
|
-
*
|
|
233
|
-
* @param {Buffer} data Compressed data
|
|
234
|
-
* @param {Boolean} fin Specifies whether or not this is the last fragment
|
|
235
|
-
* @param {Function} callback Callback
|
|
236
|
-
* @public
|
|
237
|
-
*/
|
|
238
|
-
decompress(data, fin, callback) {
|
|
239
|
-
zlibLimiter.add((done) => {
|
|
240
|
-
this._decompress(data, fin, (err, result) => {
|
|
241
|
-
done();
|
|
242
|
-
callback(err, result);
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Compress data. Concurrency limited.
|
|
248
|
-
*
|
|
249
|
-
* @param {(Buffer|String)} data Data to compress
|
|
250
|
-
* @param {Boolean} fin Specifies whether or not this is the last fragment
|
|
251
|
-
* @param {Function} callback Callback
|
|
252
|
-
* @public
|
|
253
|
-
*/
|
|
254
|
-
compress(data, fin, callback) {
|
|
255
|
-
zlibLimiter.add((done) => {
|
|
256
|
-
this._compress(data, fin, (err, result) => {
|
|
257
|
-
done();
|
|
258
|
-
callback(err, result);
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Decompress data.
|
|
264
|
-
*
|
|
265
|
-
* @param {Buffer} data Compressed data
|
|
266
|
-
* @param {Boolean} fin Specifies whether or not this is the last fragment
|
|
267
|
-
* @param {Function} callback Callback
|
|
268
|
-
* @private
|
|
269
|
-
*/
|
|
270
|
-
_decompress(data, fin, callback) {
|
|
271
|
-
const endpoint = this._isServer ? 'client' : 'server';
|
|
272
|
-
if (!this._inflate) {
|
|
273
|
-
const key = `${endpoint}_max_window_bits`;
|
|
274
|
-
const windowBits =
|
|
275
|
-
// eslint-disable-next-line no-negated-condition
|
|
276
|
-
typeof this.params[key] !== 'number'
|
|
277
|
-
? zlib_1.default.Z_DEFAULT_WINDOWBITS
|
|
278
|
-
: this.params[key];
|
|
279
|
-
this._inflate = zlib_1.default.createInflateRaw({
|
|
280
|
-
...this._options.zlibInflateOptions,
|
|
281
|
-
windowBits,
|
|
282
|
-
});
|
|
283
|
-
this._inflate[kPerMessageDeflate] = this;
|
|
284
|
-
this._inflate[kTotalLength] = 0;
|
|
285
|
-
this._inflate[kBuffers] = [];
|
|
286
|
-
this._inflate.on('error', inflateOnError);
|
|
287
|
-
this._inflate.on('data', inflateOnData);
|
|
288
|
-
}
|
|
289
|
-
this._inflate[kCallback] = callback;
|
|
290
|
-
this._inflate.write(data);
|
|
291
|
-
if (fin)
|
|
292
|
-
this._inflate.write(TRAILER);
|
|
293
|
-
this._inflate.flush(() => {
|
|
294
|
-
const err = this._inflate[kError];
|
|
295
|
-
if (err) {
|
|
296
|
-
this._inflate.close();
|
|
297
|
-
this._inflate = null;
|
|
298
|
-
callback(err);
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
const data = (0, buffer_util_1.concat)(this._inflate[kBuffers], this._inflate[kTotalLength]);
|
|
302
|
-
if (this._inflate._readableState.endEmitted) {
|
|
303
|
-
this._inflate.close();
|
|
304
|
-
this._inflate = null;
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
this._inflate[kTotalLength] = 0;
|
|
308
|
-
this._inflate[kBuffers] = [];
|
|
309
|
-
if (fin && this.params[`${endpoint}_no_context_takeover`]) {
|
|
310
|
-
this._inflate.reset();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
callback(null, data);
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Compress data.
|
|
318
|
-
*
|
|
319
|
-
* @param {(Buffer|String)} data Data to compress
|
|
320
|
-
* @param {Boolean} fin Specifies whether or not this is the last fragment
|
|
321
|
-
* @param {Function} callback Callback
|
|
322
|
-
* @private
|
|
323
|
-
*/
|
|
324
|
-
_compress(data, fin, callback) {
|
|
325
|
-
const endpoint = this._isServer ? 'server' : 'client';
|
|
326
|
-
if (!this._deflate) {
|
|
327
|
-
const key = `${endpoint}_max_window_bits`;
|
|
328
|
-
const windowBits = typeof this.params[key] !== 'number'
|
|
329
|
-
? zlib_1.default.Z_DEFAULT_WINDOWBITS
|
|
330
|
-
: this.params[key];
|
|
331
|
-
this._deflate = zlib_1.default.createDeflateRaw({
|
|
332
|
-
...this._options.zlibDeflateOptions,
|
|
333
|
-
windowBits,
|
|
334
|
-
});
|
|
335
|
-
this._deflate[kTotalLength] = 0;
|
|
336
|
-
this._deflate[kBuffers] = [];
|
|
337
|
-
this._deflate.on('data', deflateOnData);
|
|
338
|
-
}
|
|
339
|
-
this._deflate[kCallback] = callback;
|
|
340
|
-
this._deflate.write(data);
|
|
341
|
-
this._deflate.flush(zlib_1.default.Z_SYNC_FLUSH, () => {
|
|
342
|
-
if (!this._deflate) {
|
|
343
|
-
//
|
|
344
|
-
// The deflate stream was closed while data was being processed.
|
|
345
|
-
//
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
let _data = (0, buffer_util_1.concat)(this._deflate[kBuffers], this._deflate[kTotalLength]);
|
|
349
|
-
if (fin)
|
|
350
|
-
_data = _data.slice(0, _data.length - 4);
|
|
351
|
-
//
|
|
352
|
-
// Ensure that the callback will not be called again in
|
|
353
|
-
// `PerMessageDeflate#cleanup()`.
|
|
354
|
-
//
|
|
355
|
-
this._deflate[kCallback] = null;
|
|
356
|
-
this._deflate[kTotalLength] = 0;
|
|
357
|
-
this._deflate[kBuffers] = [];
|
|
358
|
-
if (fin && this.params[`${endpoint}_no_context_takeover`]) {
|
|
359
|
-
this._deflate.reset();
|
|
360
|
-
}
|
|
361
|
-
callback(null, _data);
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
exports.PerMessageDeflate = PerMessageDeflate;
|
|
366
|
-
/**
|
|
367
|
-
* The listener of the `zlib.DeflateRaw` stream `'data'` event.
|
|
368
|
-
*
|
|
369
|
-
* @param {Buffer} chunk A chunk of data
|
|
370
|
-
* @private
|
|
371
|
-
*/
|
|
372
|
-
function deflateOnData(chunk) {
|
|
373
|
-
this[kBuffers].push(chunk);
|
|
374
|
-
this[kTotalLength] += chunk.length;
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* The listener of the `zlib.InflateRaw` stream `'data'` event.
|
|
378
|
-
*
|
|
379
|
-
* @param {Buffer} chunk A chunk of data
|
|
380
|
-
* @private
|
|
381
|
-
*/
|
|
382
|
-
function inflateOnData(chunk) {
|
|
383
|
-
this[kTotalLength] += chunk.length;
|
|
384
|
-
if (this[kPerMessageDeflate]._maxPayload < 1 ||
|
|
385
|
-
this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload) {
|
|
386
|
-
this[kBuffers].push(chunk);
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
this[kError] = new RangeError('Max payload size exceeded');
|
|
390
|
-
this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';
|
|
391
|
-
this[kError][constants_1.constants.kStatusCode] = 1009;
|
|
392
|
-
this.removeListener('data', inflateOnData);
|
|
393
|
-
this.reset();
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* The listener of the `zlib.InflateRaw` stream `'error'` event.
|
|
397
|
-
*
|
|
398
|
-
* @param {Error} err The emitted error
|
|
399
|
-
* @private
|
|
400
|
-
*/
|
|
401
|
-
function inflateOnError(err) {
|
|
402
|
-
//
|
|
403
|
-
// There is no need to call `Zlib#close()` as the handle is automatically
|
|
404
|
-
// closed when an error is emitted.
|
|
405
|
-
//
|
|
406
|
-
this[kPerMessageDeflate]._inflate = null;
|
|
407
|
-
err[constants_1.constants.kStatusCode] = 1007;
|
|
408
|
-
this[kCallback](err);
|
|
409
|
-
}
|